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

محطة الطقس الشخصية باستخدام Raspberry Pi مع BME280 في Java: 6 خطوات
محطة الطقس الشخصية باستخدام Raspberry Pi مع BME280 في Java: 6 خطوات

فيديو: محطة الطقس الشخصية باستخدام Raspberry Pi مع BME280 في Java: 6 خطوات

فيديو: محطة الطقس الشخصية باستخدام Raspberry Pi مع BME280 في Java: 6 خطوات
فيديو: Raspberry Pi Pico W - BME280 Weather Station Dashboard 2024, يوليو
Anonim
Image
Image
فاتورة المعدات الأساسية
فاتورة المعدات الأساسية

يبدو الطقس السيئ دائمًا أسوأ من خلال النافذة

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

الخطوة 1: فاتورة المعدات الأساسية

فاتورة المعدات الأساسية
فاتورة المعدات الأساسية
فاتورة المعدات الأساسية
فاتورة المعدات الأساسية
فاتورة المعدات الأساسية
فاتورة المعدات الأساسية

1. A Raspberry Pi

الخطوة الأولى هي وضع يديك على لوحة Raspberry Pi. Raspberry Pi هو كمبيوتر لوحي واحد يعمل بنظام Linux. هدفها هو تحسين مهارات البرمجة وفهم الأجهزة. تم اعتماده بسرعة من قبل الهواة وعشاق الإلكترونيات لمشاريع مبتكرة.

2. I²C Shield لـ Raspberry Pi

يوفر INPI2 (محول I2C) منفذ Raspberry Pi 2/3 an I²C للاستخدام مع العديد من أجهزة I²C. إنه متاح في Dcube Store

3. حساس رقمي للرطوبة والضغط ودرجة الحرارة BME280

BME280 عبارة عن مستشعر للرطوبة والضغط ودرجة الحرارة يتمتع بوقت استجابة سريع ودقة إجمالية عالية. اشترينا هذا المستشعر من Dcube Store

4. كابل توصيل I²C

كان لدينا كابل توصيل I²C متوفر في Dcube Store

5. كابل USB الصغير

يعد مصدر طاقة كبل USB الصغير خيارًا مثاليًا لتشغيل Raspberry Pi.

6. تفسير الوصول إلى الإنترنت عبر محول EthernetCable / WiFi

من أول الأشياء التي تريد القيام بها هو توصيل Raspberry Pi بالإنترنت. يمكننا الاتصال باستخدام كابل إيثرنت. الاحتمال الآخر هو أنه يمكنك الاتصال بشبكة لاسلكية باستخدام محول USB لاسلكي.

7. كابل HDMI (الشاشة وكابل التوصيل)

يجب أن تعمل أي شاشة HDMI / DVI وأي تلفزيون كشاشة عرض لـ Pi. لكنها اختيارية. لا يمكن استبعاد إمكانية الوصول عن بُعد (مثل SSH) أيضًا. يمكنك أيضًا الوصول باستخدام برنامج PUTTY.

الخطوة 2: اتصالات الأجهزة من أجل الإعداد

اتصالات الأجهزة للإعداد
اتصالات الأجهزة للإعداد
اتصالات الأجهزة للإعداد
اتصالات الأجهزة للإعداد

اجعل الدائرة حسب المخطط الموضح.

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

اتصال Raspberry Pi و I²C Shield

بادئ ذي بدء ، خذ Raspberry Pi وضع I²C Shield (مع منفذ I²C المواجه للداخل) عليه. اضغط على Shield برفق فوق دبابيس GPIO في Pi ، وقد انتهينا من هذه الخطوة بنفس سهولة الفطيرة (انظر الصورة).

اتصال المستشعر و Raspberry Pi

خذ المستشعر وقم بتوصيل كابل I²C به. تأكد من أن I²C Output متصل دائمًا بإدخال I²C. يجب اتباع نفس الشيء بالنسبة لـ Raspberry Pi مع درع I²C المركب فوقه دبابيس GPIO. لدينا I²C Shield وكابلات التوصيل من جانبنا لتوفير راحة كبيرة جدًا وميزة كبيرة جدًا حيث لم يتبق لنا إلا مع التوصيل والتشغيل الخيار. لا مزيد من مشكلة المسامير والأسلاك وبالتالي ، ذهب الارتباك. فقط تخيل نفسك في شبكة الأسلاك والدخول في ذلك. راحة من ذلك. هذا يجعل الأمور غير معقدة.

ملاحظة: يجب أن يتبع السلك البني دائمًا الاتصال الأرضي (GND) بين خرج أحد الأجهزة ومدخل جهاز آخر

الاتصال بالإنترنت حاجة

لديك خيار هنا في الواقع. يمكنك توصيل Raspberry Pi بكابل LAN أو محول Nano USB اللاسلكي لاتصال WIFI. في كلتا الحالتين ، يكون البيان هو الاتصال بالإنترنت وهو ما يتم إنجازه.

تشغيل الدائرة

قم بتوصيل كابل Micro USB بمقبس الطاقة الخاص بـ Raspberry Pi. لكمة وفويلا! كل شيء على ما يرام وسنبدأ على الفور.

الاتصال بالعرض

يمكننا إما توصيل كبل HDMI بجهاز عرض أو تلفزيون. يمكننا الوصول إلى Raspberry Pi دون توصيله بشاشة باستخدام -SSH (الوصول إلى سطر أوامر Pi من كمبيوتر آخر). يمكنك أيضًا استخدام برنامج PUTTY لذلك. هذا الخيار للمستخدمين المتقدمين ، لذلك لن نغطيه بالتفصيل هنا.

لقد سمعت أنه سيكون هناك ركود ، لقد قررت عدم المشاركة

الخطوة 3: برمجة Raspberry Pi في Java

برمجة Raspberry Pi في Java
برمجة Raspberry Pi في Java

كود جافا لجهاز Raspberry Pi ومستشعر BME280. إنه متاح في مستودع جيثب الخاص بنا.

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

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

يمكنك نسخ كود جافا العامل لهذا المستشعر من هنا أيضًا.

// موزعة بترخيص إرادة حرة. // استخدمها بالطريقة التي تريدها ، سواء كانت ربحًا أم مجانيًا ، شريطة أن تتناسب مع تراخيص الأعمال المرتبطة بها. // BME280 // تم تصميم هذا الرمز للعمل مع الوحدة النمطية البسيطة BME280_I2CS I2C المتاحة من ControlEverything.com. //

استيراد com.pi4j.io.i2c. I2CBus ؛

استيراد com.pi4j.io.i2c. I2CDevice ؛ استيراد com.pi4j.io.i2c. I2CFactory ؛ استيراد java.io. IOException ؛

فئة عامة BME280

يطرح {public static void main (String args ) استثناء {// Create I2C bus I2CBus bus = I2CFactory.getInstance (I2CBus. BUS_1)؛ // احصل على جهاز I2C ، عنوان BME280 I2C هو 0x76 (108) I2CDevice device = bus.getDevice (0x76) ؛ // قراءة 24 بايت من البيانات من العنوان 0x88 (136) بايت b1 = بايت جديد [24] ؛ قراءة الجهاز (0x88 ، b1 ، 0 ، 24) ؛ // تحويل البيانات // معاملات درجة الحرارة int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256) ؛ int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256) ؛ إذا (dig_T2> 32767) {dig_T2 - = 65536 ؛ } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256) ؛ إذا (dig_T3> 32767) {dig_T3 - = 65536 ؛ } // معاملات الضغط int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256) ؛ int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256) ؛ إذا (dig_P2> 32767) {dig_P2 - = 65536 ؛ } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256) ؛ إذا (dig_P3> 32767) {dig_P3 - = 65536 ؛ } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256) ؛ إذا (dig_P4> 32767) {dig_P4 - = 65536 ؛ } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256) ؛ إذا (dig_P5> 32767) {dig_P5 - = 65536 ؛ } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256) ؛ إذا (dig_P6> 32767) {dig_P6 - = 65536 ؛ } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256) ؛ إذا (dig_P7> 32767) {dig_P7 - = 65536 ؛ } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256) ؛ إذا (dig_P8> 32767) {dig_P8 - = 65536 ؛ } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256) ؛ إذا (dig_P9> 32767) {dig_P9 - = 65536 ؛ } // قراءة 1 بايت من البيانات من العنوان 0xA1 (161) int dig_H1 = ((بايت) device.read (0xA1) & 0xFF) ؛ // قراءة 7 بايت من البيانات من جهاز العنوان 0xE1 (225). قراءة (0xE1 ، b1 ، 0 ، 7) ؛ // تحويل البيانات // معاملات الرطوبة int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256) ؛ إذا (dig_H2> 32767) {dig_H2 - = 65536 ؛ } int dig_H3 = b1 [2] & 0xFF؛ int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF) ؛ إذا (dig_H4> 32767) {dig_H4 - = 65536 ؛ } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16) ؛ إذا (dig_H5> 32767) {dig_H5 - = 65536 ؛ } int dig_H6 = b1 [6] & 0xFF؛ إذا (dig_H6> 127) {dig_H6 - = 256 ؛ } // حدد سجل التحكم في الرطوبة // الرطوبة على معدل أخذ العينات = 1 device.write (0xF2، (byte) 0x01) ؛ // حدد سجل قياس التحكم // الوضع العادي ودرجة الحرارة والضغط على معدل أخذ العينات = 1 جهاز الكتابة (0xF4 ، (بايت) 0x27) ؛ // حدد سجل التكوين // وقت الاستعداد = 1000 مللي ثانية device.write (0xF5 ، (بايت) 0xA0) ؛ // قراءة 8 بايت من البيانات من العنوان 0xF7 (247) // الضغط msb1 ، الضغط msb ، الضغط lsb ، temp msb1 ، temp msb ، temp lsb ، الرطوبة lsb ، الرطوبة msb بايت البيانات = بايت جديد [8] ؛ قراءة الجهاز (0xF7 ، البيانات ، 0 ، 8) ؛ // تحويل بيانات الضغط ودرجة الحرارة إلى 19 بت طويل adc_p = ((طويلة) (البيانات [0] & 0xFF) * 65536) + ((طويلة) (البيانات [1] & 0xFF) * 256) + (طويلة) (البيانات [2] & 0xF0)) / 16 ؛ long adc_t = ((طويلة) (البيانات [3] & 0xFF) * 65536) + ((طويلة) (البيانات [4] & 0xFF) * 256) + (طويلة) (البيانات [5] & 0xF0)) / 16 ؛ // تحويل بيانات الرطوبة طويلة adc_h = ((طويلة) (البيانات [6] & 0xFF) * 256 + (طويلة) (البيانات [7] & 0xFF)) ؛ // حسابات إزاحة درجة الحرارة مزدوجة var1 = (((مزدوج) adc_t) / 16384.0 - ((مزدوج) dig_T1) / 1024.0) * ((مزدوج) dig_T2) ؛ مزدوج var2 = (((double) adc_t) / 131072.0 - ((double) dig_T1) / 8192.0) * ((double) adc_t) /131072.0 - ((double) dig_T1) /8192.0)) * (double) dig_T3) ؛ مزدوج t_fine = (طويل) (var1 + var2) ؛ cTemp مزدوج = (var1 + var2) / 5120.0 ؛ مزدوج fTemp = cTemp * 1.8 + 32 ؛ // حسابات تعويض الضغط var1 = ((مزدوج) t_fine / 2.0) - 64000.0 ؛ var2 = var1 * var1 * ((مزدوج) dig_P6) / 32768.0 ؛ var2 = var2 + var1 * ((مزدوج) dig_P5) * 2.0 ؛ var2 = (var2 / 4.0) + (((مزدوج) dig_P4) * 65536.0) ؛ var1 = ((مزدوج) dig_P3) * var1 * var1 / 524288.0 + ((مزدوج) dig_P2) * var1) / 524288.0 ؛ var1 = (1.0 + var1 / 32768.0) * ((مزدوج) dig_P1) ؛ مزدوج p = 1048576.0 - (مزدوج) adc_p ؛ p = (p - (var2 / 4096.0)) * 6250.0 / var1 ؛ var1 = ((مزدوج) dig_P9) * p * p / 2147483648.0 ؛ var2 = p * ((مزدوج) dig_P8) / 32768.0 ؛ ضغط مزدوج = (p + (var1 + var2 + ((double) dig_P7)) / 16.0) / 100 ؛ // حسابات تعويض الرطوبة مزدوجة var_H = (((مزدوج) t_fine) - 76800.0) ؛ var_H = (adc_h - (dig_H4 * 64.0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536.0 * (1.0 + dig_H6 / 67108864.0 * var_H * (1.0 + dig_H3 / 67108864.0 * var_H))) ؛ رطوبة مزدوجة = var_H * (1.0 - dig_H1 * var_H / 524288.0) ؛ إذا كانت (الرطوبة> 100.0) {الرطوبة = 100.0 ؛ } وإلا إذا كانت (الرطوبة <0.0) {الرطوبة = 0.0 ؛ } // بيانات الإخراج لشاشة System.out.printf ("درجة الحرارة بالدرجة المئوية:٪.2f C٪ n"، cTemp)؛ System.out.printf ("درجة الحرارة بالفهرنهايت:٪.2f F٪ n"، fTemp)؛ System.out.printf ("الضغط:٪.2f hPa٪ n" ، الضغط) ؛ System.out.printf ("الرطوبة النسبية:٪.2f ٪٪ RH٪ n" ، الرطوبة) ؛ }}

الخطوة 4: الكود العملي

عملية المدونة
عملية المدونة

الآن ، قم بتنزيل (أو git pull) الكود وافتحه في Raspberry Pi.

قم بتشغيل الأوامر الخاصة بـ Compile and Upload Code على الجهاز وشاهد الإخراج على Monitor. بعد لحظات قليلة ، سيتم فحص جميع المعلمات. للتأكد من حصولك على انتقال سلس للشفرة ونتائج هادئة (ish) ، تفكر في المزيد من الأفكار لإجراء مزيد من التعديلات (كل مشروع يبدأ بقصة).

الخطوة 5: الاستخدام في العالم البناء

يحقق BME280 أداءً عاليًا في جميع التطبيقات التي تتطلب قياس الرطوبة والضغط. هذه التطبيقات الناشئة هي الوعي بالسياق ، على سبيل المثال اكتشاف الجلد ، اكتشاف تغير الغرفة ، مراقبة اللياقة البدنية / الرفاهية ، تحذير بشأن الجفاف أو درجات الحرارة المرتفعة ، قياس الحجم وتدفق الهواء ، التحكم في أتمتة المنزل ، التحكم في التدفئة ، التهوية ، تكييف الهواء (HVAC) ، إنترنت الأشياء (IoT) ، تحسين نظام تحديد المواقع العالمي (مثل تحسين الوقت إلى الإصلاح الأول ، والحساب الميت ، واكتشاف المنحدر) ، والملاحة الداخلية (تغيير اكتشاف الأرضية ، واكتشاف المصعد) ، والملاحة الخارجية ، والتطبيقات الترفيهية والرياضية ، وتوقعات الطقس ، ومؤشر السرعة العمودية (الارتفاع / المغسلة) سرعة).

الخطوة السادسة: الخاتمة

كما ترى ، يعد هذا المشروع عرضًا رائعًا لما تستطيعه الأجهزة والبرامج. في فترة زمنية قصيرة ، يمكن للمرء أن يبني مثل هذا المشروع الرائع! بالطبع ، هذه مجرد بداية. يمكن أن يتضمن إنشاء محطة طقس شخصية أكثر تطوراً مثل محطات الطقس الشخصية للمطار الآلي بعض المستشعرات مثل مقياس شدة الرياح (سرعة الرياح) ومقياس الإرسال (الرؤية) ومقياس الحرارة (الإشعاع الشمسي) وما إلى ذلك. لدينا فيديو تعليمي على Youtube به الوظائف الأساسية لـ مستشعر I²C مع Rasp Pi. إنه لأمر مدهش حقًا رؤية نتائج وعمل اتصالات I²C. تحقق من ذلك أيضًا. استمتع بالبناء والتعلم! يرجى إخبارنا برأيك في هذه التعليمات. نود إجراء بعض التحسينات إذا لزم الأمر.

موصى به: