جدول المحتويات:

محطة الطقس المحلية: 8 خطوات (بالصور)
محطة الطقس المحلية: 8 خطوات (بالصور)

فيديو: محطة الطقس المحلية: 8 خطوات (بالصور)

فيديو: محطة الطقس المحلية: 8 خطوات (بالصور)
فيديو: شاهد ماذا حدث عندما قام رائد فضاء بفرك منشفته ف الفضاء #shorts 2024, شهر نوفمبر
Anonim
محطة الطقس المحلية
محطة الطقس المحلية

نظرًا لأنني كنت أبحث عن مشروع رائع لأقوم به لمشروع مدرسي في السنة الأولى ، كان لدي العديد من الأفكار حول ما يجب أن أقوم به ولكن لم أجد أيًا منها يمثل تحديًا.

لاحقًا ، فكرت في إنشاء محطة طقس لها شيء خاص بها. أردت أن أكون قادرًا على تخزين جميع بياناتي واستخدامها لاحقًا للإحصاءات. سيتم تصميم هذا المشروع خصيصًا للأشخاص الذين لديهم اهتمام بالأرصاد الجوية ويريدون إنشاء محطة طقس في المنزل لا تكلف الكثير من تلك المتوفرة في السوق. تم تصميم المشروع أيضًا للحفاظ على القدرة على إضافة أو إزالة أجهزة الاستشعار في أي وقت.

كنت سعيدًا حقًا عندما رأيت نتيجتي النهائية التي جاءت أفضل من المتوقع.

وهي مصنوعة من نظام التشغيل Linux Raspberry Pi 4.

  • موقع Apache (html css js)
  • Eventlet (موقع خادم الواجهة الخلفية)
  • MariaDB (خادم قاعدة البيانات)

اللوازم

  • Raspberry Pi 4:

    بطاقة sd (بحد أدنى 16 جيجابايت)

  • المستشعرات:

    1. مستشعر سرعة الرياح QS-FS
    2. مستشعر الرياح لإخراج إشارة الحديقة من سبائك الألومنيوم مستشعر اتجاه الرياح أداة قياس سرعة الريح https://www.banggood.com/Wind-Sensor-Garden-Signal-Output-Aluminum-Alloy-Wind-Direction-Sensor-Wind-Vane-Speed -Measuring-Instrument-p-1624988.html؟ rmmds = myorder & cur_warehouse = CN
    3. DHT22 (الرطوبة)
    4. BMP280 (ضغط الهواء)
    5. DS18B20 (درجة الحرارة)
  • مزود الطاقة

    • مصدر طاقة 5 فولت (RPi)
    • مصدر طاقة 9 فولت (على مصدر طاقة خارجي للوح توصيل)
  • اللوح (x2)

    T-cobbler plus لـ RPi 4

  • أسلاك العبور
  • IC

    • MCP3008
    • PCF8574AN
  • شاشة عرض ال سي دي 16x2
  • LED (أحمر
  • غلاف (اختياري)

    • صناديق النبيذ
    • عمود خشبي (2 م)
    • لوح خشبي (1 م)

الخطوة الأولى: تجهيز الأشياء

من الأهمية بمكان دائمًا الحصول على جميع العناصر التي تحتاجها قبل البدء في العمل على خطوة. سيوفر لك هذا الكثير من الوقت أثناء العمل من خلاله.

لذلك أولا،

ماذا تحتاج:

  • Raspberry Pi 4:

    بطاقة sd (بحد أدنى 16 جيجابايت)

  • المستشعرات:

    1. مستشعر سرعة الرياح QS-FS
    2. مستشعر الرياح ، خرج إشارة الحديقة ، سبائك الألومنيوم ، مستشعر اتجاه الرياح ، أداة قياس سرعة دوارة الرياح
    3. DHT22 (الرطوبة)
    4. BMP280 (ضغط الهواء)
    5. DS18B20 (درجة الحرارة)
  • مزود الطاقة

    • مصدر طاقة 5 فولت (RPi)
    • مصدر طاقة 9 فولت (على مصدر طاقة خارجي للوح توصيل)
  • اللوح (x2)
  • T-cobbler plus لـ RPi 4
  • أسلاك العبور
  • IC

    • MCP3008
    • PCF8574AN
  • شاشة عرض ال سي دي 16x2
  • LED (أحمر)
  • غلاف (اختياري)

    • صناديق النبيذ خشبية
    • لوح خشبي (1 م)
    • القطب (2 م)

يمكنك العثور على جميع الروابط التي اشتريت منها هذه في قسم المستلزمات أسفل المقدمة.

الخطوة 2: إعداد ملف RPi

إعداد RPi
إعداد RPi

بالنسبة لمشروعنا ، نحتاج إلى RPi مع تثبيت البرنامج المحدد.

  • موقع Apache (html css js)
  • Flask Socket-IO (موقع خادم الواجهة الخلفية)
  • MariaDB (خادم قاعدة البيانات)

قبل تثبيته يكون مفيدًا دائمًا للتأكد من تثبيت أحدث البرامج على RPi. للقيام بذلك ، ما عليك سوى تنفيذ الأمر التالي:

sudo apt التحديث

اباتشي:

أولا دعنا نتحدث عن اباتشي. Apache هو خادم ويب يستخدم في جميع أنحاء العالم. يدير موقع الويب الخاص بك بشكل لا تشوبه شائبة. الشيء الوحيد الذي عليك القيام به هو تثبيته ووضع موقع الويب الخاص بك في المجلد الصحيح وهناك.

sudo apt تثبيت apache2 -y

هذا كل شيء!

للتأكد من تثبيت كل شيء بشكل صحيح ، تصفح إلى عنوان raspberry pi Ip في متصفحك ومعرفة ما إذا كنت تحصل على موقع الويب الافتراضي. إذا كان لديك أي مشاكل بخصوص هذه الخطوة ، يمكنك التحقق من موقع RPi هنا.

حدث:

لنقم الآن بتثبيت Eventlet. سيتم تشغيل الخادم الخلفي الخاص بنا وسيجري الاتصال من أجهزة الاستشعار الخاصة بنا إلى موقعنا على الويب. لذلك نحن بحاجة إلى بضع حزم.

مقبس قارورة

pip3 تثبيت flask-socketio

حدث:

تثبيت pip3 الحدث

جيفينت:

تثبيت pip3 gevent

ماريادب:

Mariadb هي قاعدة بيانات MySQL تقوم بإنشاء قواعد بيانات علائقية. غالبًا ما يتم استخدامه على RPi وبالتالي هناك الكثير من المساعدة التي يمكنك العثور عليها على الإنترنت. لمزيد من المعلومات يمكنك الذهاب إلى هذا الرابط.

مناسب لتثبيت خادم ماريادب

الخطوة الثالثة: توصيل المستشعرات وإضافة كود

ربط المستشعرات وإضافة كود
ربط المستشعرات وإضافة كود
ربط أجهزة الاستشعار وإضافة كود
ربط أجهزة الاستشعار وإضافة كود
ربط أجهزة الاستشعار وإضافة كود
ربط أجهزة الاستشعار وإضافة كود

لتوصيل المستشعرات بـ RPi الخاص بنا ، يمكننا استخدام T-Cobbler plus. هذه أداة صغيرة سهلة الاستخدام تجعل من الممكن استخدام جميع دبابيسك على RPi على لوح التجارب.

في مشروعي لدي 5 أجهزة استشعار:

  1. مستشعر سرعة الرياح QS-FS
  2. مستشعر الرياح ، خرج إشارة الحديقة ، سبائك الألومنيوم ، مستشعر اتجاه الرياح ، أداة قياس سرعة دوارة الرياح
  3. DHT22 (الرطوبة)
  4. BMP280 (ضغط الهواء)
  5. DS18B20 (درجة الحرارة)

مستشعر سرعة الرياح:

بادئ ذي بدء ، كل ما بدأت به مع مستشعر سرعة الرياح لأنني كنت متحمسًا في الغالب لهذا المستشعر. إنه مستشعر بإشارة تناظرية من خرج 0-5 فولت ويحتاج إلى جهد لا يقل عن 7 فولت للعمل. اخترت لمحول 9 فولت لتشغيله.

للقراءة في هذا المستشعر ، استخدمت MCP3008 وهو عبارة عن دائرة متكاملة للقراءة في الإشارات التناظرية. يمكن أن يعمل IC على 3.3 فولت أو 5 فولت لكنني اخترت 3.3 فولت لجعله متوافقًا مع RPi. هذا يعني أنني بحاجة إلى تغيير جهد الخرج من 5 فولت إلى 3.3 فولت ، لقد قمت بذلك عن طريق إضافة مقسم جهد تم إنشاؤه بواسطة مقاومين (2 كيلو أوم 1 كيلو أوم).

مستشعر اتجاه الرياح:

اتجاه الرياح لا يقل أهمية عن سرعة الرياح لذلك سأقوم بتوصيل هذا بعد ذلك.

هذا المستشعر له نفس مواصفات مستشعر سرعة الرياح. ستعمل أيضًا على 9 فولت وبجهد خرج 5 فولت. هذا المستشعر أيضًا سنقوم بتوصيله بـ MCP3008 عبر مقسم جهد.

DHT22 (الرطوبة):

يقرأ DHT22 الرطوبة. يمنحك قيمة بالنسبة المئوية ويمكن قراءة قيمتها باستخدام بروتوكول I2C على RPi. لذلك يجب عليك تمكين منافذ I2C في Raspi-config. مزيد من المعلومات هنا.

BMP280 (ضغط الهواء):

يستخدم BMP280 لقراءة ضغط الهواء. تتم قراءة قيمته عبر ناقل SPI الموجود على RPi. يحتاج هذا البروتوكول أيضًا إلى التمكين في Raspi-config. بالنسبة إلى الكود الخاص بي ، استخدمت مكتبة Adafruit.

DS18B20 (درجة الحرارة):

آخر جهاز استشعار يقيس درجة الحرارة. هذا المستشعر من دالاس ، وإذا كان لديك القليل من الخبرة مع دالاس ، فمن المحتمل أن تعلم بالفعل أنهم يستخدمون 1Wire-bus. لا تتفاجأ إذا قلت أن هذا البروتوكول يحتاج أيضًا إلى التمكين في Raspi-config.

كيف قمت بتوصيل المستشعرات:

كملف pdf ، قمت بتحميل مخطط كهربائي ولوح التجارب لتسهيل الأمر قليلاً.

بعد التمكن من توصيل المستشعرات بنجاح وإضافة الرمز المطلوب لقراءة جميع المستشعرات ، يمكنك المضي قدمًا والانتقال إلى الخطوة التالية. إذا كنت ترغب في ترك جهاز استشعار خلفك أو ترغب في إضافة المزيد ، يمكنك القيام بذلك.

الخطوة 4: تصميم واجهة مستخدم ويب

تصميم واجهة مستخدم الويب
تصميم واجهة مستخدم الويب
تصميم واجهة مستخدم الويب
تصميم واجهة مستخدم الويب
تصميم واجهة مستخدم الويب
تصميم واجهة مستخدم الويب

الآن قمنا بتوصيل المستشعرات نحتاج إلى تصميم لموقعنا على الإنترنت.

نريد أن يُنشئ موقع الويب مظهرًا سهلًا أثناء عرض جميع بيانات المستشعرات في الوقت الفعلي.

نريد أيضًا أن نكون قادرين على رؤية تاريخ هذه القيم المقاسة في كل فترة زمنية.

لذلك بدأت أولاً في البحث على الويب للحصول على بعض الإلهام. الأهم من ذلك كله هو مجرد مواقع معلومات الويب دون التصميم الذي كنت أبحث عنه حقًا. من المرجح أن يكون لمحطات الطقس التي كانت موجودة بالفعل في السوق شاشة عرض. ومن هذا العرض جاء إلهامي. تحتوي معظم شاشات العرض على تصميم بمظهر شبكي. أعطاني هذا فكرة إنشاء الصفحة الرئيسية حيث سيتم عرض جميع أجهزة الاستشعار.

لكنني قلت أيضًا أنني أردت إنشاء صفحة يمكنك من خلالها رؤية تاريخ كل مستشعر قيمه.

لهذا السبب ، قمت أيضًا بإنشاء صفحة ثانية في تصميمي تحتوي على هذا. في هذه الصفحة ، يمكنني رؤية بعض المعلومات الإضافية حول المستشعر الخاص بي والتي لن تظهر على صفحتي الأولى وخارج جزء السجل بالطبع.

بعد بضع ساعات ، تم تصميم تصميمي بالكامل!

تم التصميم باستخدام Adobe XD.

الخطوة 5: إنشاء قاعدة البيانات

إنشاء قاعدة بيانات
إنشاء قاعدة بيانات

للحصول على استراحة من جزء التصميم ، بدأت في قاعدة البيانات الخاصة بي.

ستحتوي قاعدة البيانات هذه على جميع أجهزة الاستشعار (5) وجميع المشغلات (2) والقيم التي تمتلكها تلك المستشعرات.

قاعدة البيانات سهلة للغاية ولها علاقات قليلة.

يمكنك رؤية نموذج قاعدة البيانات في الصورة.

الخطوة 6: تشفير موقع الويب: الواجهة الأمامية (html Css)

العودة إلى الموقع!

الآن لدي تصميم يمكنني البدء في ترميزه كـ html css لاستخدامه حقًا.

في الصفحة الرئيسية:

لقد بدأت من خلال النظر في كل جهاز استشعار كعنصر على موقع الويب الخاص بي. حتى أتمكن لاحقًا من ترك هذا الجزء يتم إنشاؤه بواسطة كود Javascript الخاص بي.

قمت أيضًا بإدراج فئات حامل JS العشوائية في العناصر. هذه ستجعل من الممكن تغيير محتوى هذا العنصر

استغرق هذا مني الكثير من الوقت لأنني لست جيدًا في هذه اللغة بالذات.

بعد الانتهاء من الصفحة الرئيسية ، حان الوقت للبدء في صفحة السجل.

في صفحة التاريخ:

كانت هذه الصفحة أسهل قليلاً في إعادة إنشائها. في هذه الصفحة ، كان هناك أيضًا حاملو js للحصول على معلومات حول المستشعر وفتحة قيمة في الوقت الفعلي ولعرض الجدول مع جميع القيم المقاسة.

لإنشاء خيار علامة تبويب على موقع الويب الخاص بي للاختيار بين جدول أو مخطط ، كان عليّ إضافة القليل من جافا سكريبت لجعل العناصر لا تُعرض أو لا تُعرض.

الآن لدينا موقع ويب مذهل ولكن لا يمكننا عرض أي شيء عليه؟ دعونا نصلح ذلك.

يمكنك العثور على الكود الخاص بي في مستودع جيثب الخاص بي:

الخطوة 7: ترميز موقع الويب: Backend (eventlet) + Coding Frontend (javascript)

الخلفية:

أثناء تثبيت خادم الواجهة الخلفية بالفعل ، ما زلنا بحاجة إلى تنفيذ ذلك في مشروعنا. نحتاج أولاً إلى إضافة بعض الواردات لجعل كل شيء يعمل بشكل صحيح.

من flask import Flask ، request ، jsonify from flask_socketio import SocketIO من flask_cors import CORS

لبدء تشغيل الخادم ، نحتاج إلى إضافة ما يلي:

socketio.run (التطبيق ، التصحيح = خطأ ، المضيف = '0.0.0.0')

الخادم متصل الآن ولكنه لن يكون قادرًا على التحدث مع الواجهة الأمامية.

لا تتلقى أو تعيد أي شيء. دعونا نغير ذلك.

للمطالبة بجميع المستشعرات في قاعدة البيانات ، سنضيف مسارًا:

@ app.route (endpoint + '/ sensors'، features = ['GET']) def get_sensors (): if request.method == 'GET': s = DataRepository.get_sensors () إرجاع jsonify (المستشعرات = s) ، 200

يستخدم هذا الرمز فئة تسمى DataRepository ويتحدث إلى قاعدة البيانات. هنا يعيدنا المستشعرات التي طلبناها.

نحتاج أيضًا إلى طريق نسأل المعلومات حول مستشعر معين واحد وآخر لقيم مستشعر معين.

هذه كلها طرق ولكن لجعل البيانات في الوقت الفعلي ممكنة. نحتاج إلى إرسال البيانات التي قرأتها أجهزة الاستشعار للتو في كل فترة. للقيام بذلك ، نستخدم اتصال Socket-IO. إنه اتصال يتم إنشاؤه من اللحظة التي يقوم فيها شخص ما بتحميل موقع الويب باستخدام JS ويبقي هذا الاتصال مفتوحًا. هذا اتصال ثنائي الاتجاه مما يعني أنه اتصال يعمل بطريقتين (إرسال واستلام) في نفس الوقت. لاستخدام هذا ، نحتاج إلى إضافة الكود التالي.

@ socketio.on ('connect') def initial_connection (): print ('A new client connect') socketio.send ("U bent geconnecteerd") # # أرسل إلى العميل!

يتم تشغيل سلام الكود هذا عندما يتصل العميل.

للحصول على أي رسالة من الواجهة الأمامية ، يمكنك استخدام هذا الرمز.

@ socketio.on ('message') def message_recieved (): تمرير

يمكنك أيضًا إرسال الرسائل. يتم ذلك من خلال ما يلي.

socketio.emit ('Update_RTD' ، dict_results ، البث = صحيح)

يمكن أن تكون الحجة الأولى المعطاة هي أي شيء تريده ولكنها تتوافق مع ما تضعه في JS الخاص بك ويمكنك إرسال كائنات معها أيضًا. هذا اختياري.

جافا سكريبت:

من المهم إضافة القليل من JS لتوصيل الخادم بخادم الواجهة الخلفية لتتمكن من عرض البيانات الحالية والحصول على معلومات من قاعدة البيانات.

سنقوم باستدعاء وظائف socketIO التي قمنا بها لتلقي البيانات وإرسالها.

عندما نتلقى البيانات ككائن Json Object ، سنقوم بتفكيكها للحصول على المعلومات التي نريدها ثم نضعها في حاملي JS الذين وضعناهم في موقعنا على الويب.

يمكنك العثور على الكود الخاص بي في مستودع جيثب الخاص بي:

الخطوة 8: صنع غلاف

صنع غلاف
صنع غلاف
صنع غلاف
صنع غلاف
صنع غلاف
صنع غلاف
صنع غلاف
صنع غلاف

استغرق الغلاف الكثير من العمل ويمكن القيام به بأي طريقة تريدها. هذه هي الطريقة التي فعلت بها ذلك.

أخذت بعض صناديق النبيذ.

استخدم أحدها كصندوق لاحتواء RPi ومعظم أجهزة الاستشعار الخاصة بي.

لم يتم وضع مستشعر سرعة الرياح ومستشعر اتجاه الرياح بالطبع في الداخل ولكن فوق العارضة الموضوعة على عمود. على هذا العمود ، علقت صندوق النبيذ حيث صنعت بابًا له أيضًا.

يمكنك أن ترى كيف أنهيت مشروعي من خلال النظر إلى الصور.

هذا بالطبع مثال على كيفية القيام بذلك. يمكنك أن تفعل بها ما تريد.

موصى به: