محطة الطقس على Arduino من A إلى Z. الجزء 2

يتبع. الجزء السابق .


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



ناعم اختيار المكون



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


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


والحقيقة هي أن ESP8266 ليس مجرد محول WiFi غبي ، بل يحتوي على متحكم دقيق في الطاقة وسعة ذاكرة تفوق Arduino. بشكل افتراضي ، يحتوي ESP8266 على برنامج ثابت على شكل مجموعة من أوامر AT ، وفي هذه الحالة يتم استخدام ESP كمودم بسيط. ولكن هناك المزيد من البرامج الثابتة المتقدمة ، هنا يمكن لـ ESP8266 أن يعمل كخادم ويب ، وبالطبع ، التحكم في أجهزة الاستشعار مثل Arduino.


ومع ذلك ، فإن جميع هذه البرامج الثابتة المتقدمة لها عيوب لم تسمح (إجمالاً مع أسئلة الحديد التي كتبت عنها بالفعل) باستخدام ESP8266 في هذا المشروع:


  • جميع البرامج الثابتة لا تزال خام للغاية (اعتبارًا من عام 2016)
  • البعض جاهز ليس مجاني
  • عتبة الإدخال لتصحيح الأخطاء وإجراء التغييرات أعلى بكثير من اردوينو.

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


في المقابل ، تحتوي البرامج الثابتة القياسية AT أيضًا على عيوب:


  • لا تزال رطبة (اعتبارًا من عام 2016)
  • لم أتمكن من العثور على مكتبة عادية لـ Arduino للتحكم في وحدة ESP8266 باستخدام أوامر AT ، كان علي "المزرعة الجماعية" بنفسي.

من ناحية أخرى ، فإن وحدة الراديو nRF24L01 + بسيطة ومباشرة ، وهناك مكتبة RadioHead فائقة للعمل معها ولا توجد مشاكل في البرمجة. المكتبة موثقة جيدًا ، وهو أمر مهم.


يتيح لك RadioHead نقل هياكل البيانات (وليس فقط الأرقام الفردية) ، التي يتم تنفيذها في هذا المشروع. في المستقبل ، سأقول أن RadioHead يمكنه نقل البيانات بشكل موثوق ، مع التكرار إذا لم تصل إلى المرة الأولى. تهتم المكتبة بكل هذه الأشياء.


لتوفير الطاقة ، أستخدم مكتبة Low Power Library ، وهي بسيطة وتحتوي فقط على ما تحتاجه.


إليك جزء من الكود:


//    2.402 GHz ( 2), 2Mbps, 0dBm rfdata.init(); //     ( ,  ) rfdata.sendtoWait((uint8_t*)&dhtData, sizeof(dhtData), SERVER_ADDRESS); //  LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);` 

هذا كل شيء!


في حالة استخدام ESP8266 في مستشعر مثبت على النافذة ، كنت سأضطر إلى إنشاء نقطة وصول WiFi ونقل البيانات بطريقة أو بأخرى (أين البرامج الثابتة ، وأين هو البرنامج؟). أو اسمح للمستشعر بإرسال البيانات مباشرة إلى خادم الويب ، وتتعلم الوحدة المركزية (التي تتوقف في هذه الحالة عن لعب دور "المركزي") قراءة البيانات من هناك لعرضها على لوحة النتائج.


بعبارة أخرى ، لقد ذهبت إلى طريق الاستقلال الذاتي الأكبر من WiFi WiFi وخادم PHP + MySQL. يمكنك البدء في تثبيت محطة الطقس الآن دون الحاجة إلى الوصول إلى الإنترنت و / أو الاستضافة للخادم ، وفي هذه الحالة لا تحتاج إلى ESP8266 ، فقط قم بإضافتها لاحقًا.


لقراءة البيانات من أجهزة الاستشعار مثل DHT هناك مكتبة Adafruit DHT Sensor Library . العمل معها بسيط ومباشر.


مكتبة Adafruit BMP085 الموحدة ، التي تتطلب مكتبة المستوى المجرد Adafruit Sensor ، مناسبة لمستشعر الضغط.


تحتوي جميع المكتبات على أمثلة للرسومات التخطيطية.


هذا كل شيء ربما مع الجزء النظري. "أهدافنا واضحة ، والمهام محددة. للعمل ، أيها الرفاق! "


الوحدة المركزية. حديد


حسنًا ، أخيرًا ، بعد كل هذه الضجة ، ننتقل إلى الجمعية!


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


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


كما ذكرنا سابقًا ، تستند الوحدة المركزية على Arduino MEGA. سنحتاج أيضًا إلى:


  • استشعار درجة الحرارة والرطوبة DHT11
  • استشعار الضغط الجوي نوع BMP180
  • وحدة WiFi ESP8266
  • وحدة راديو 2.4 جيجا هرتز nRF24
  • شاشة نوع LCD1604 (4 أسطر من 16 حرفًا لكل منها) ، يمكنك شراؤها مقابل 5 دولارات
  • مزود طاقة بمخرج DC 5-12 فولت (استخدمت الشحن من هاتف محمول بمخرج USB ، وهو أمر مناسب)
  • لوحة توصيل للحام أو حديد لحام أو صنوبري أو لحام أو لوحة توصيل أردوينو عادية بدون لحام. أنا شخصياً ملحوم من أجل الموثوقية ، لأنه من الواضح أن المشروع كان طويلاً ولم يرغب في المعاناة بسبب الأسلاك التي تم سحبها عن طريق الخطأ من اللوح.

يمكنك شراء لوحة تطوير لفك اللحام من $ 1. خذ حجمًا أكبر ، يكفي لجميع الاتصالات. ومرة أخرى: قبل الشراء ، اقرأ الوصف ، وليس الصورة.


يمكن شراء رسوم لحام من 2 دولار. خذ حجمًا أكبر ، يكفي لجميع الاتصالات.


توصيل الأسلاك من الأنواع التي نحتاجها:


  • كابل دوبونت "الأب-الأم" (هناك أيضًا "الأب-الأب" ، "الأم-الأم"). هذا هو كابل مصنوع من عدة أسلاك بألوان عزل مختلفة وموصلات لجهات الاتصال الخاصة بـ Arduino. باستخدام هذه الأسلاك ، من السهل توصيل الألواح وأجهزة الاستشعار مباشرة بـ Arduino دون استخدام لوحة توصيل.
  • أسلاك توصيل تقليدية للوحة توصيل بدون لحام لـ Arduino.
  • حفنة من الأسلاك للحام.

كانت الخطوة الأولى هي لحام LCD-1604. أولاً قمت بلحام الدبابيس على اللوحة ، ثم الموصلات إلى اللوح.



نظرة من الأسفل.



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




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



Pinout والاتصال


عرض 16 × 4 LCD1604


لمزيد من المعلومات حول الشاشة والعمل معها ، google "العمل باستخدام شاشات LCD شخصية استنادًا إلى HD44780". لاحظ أنك تحتاج إلى التفكير بعناية في قطبية مصدر الطاقة لمؤشر LCD وأن جهد مصدر الطاقة في النطاق + 4.5 ... 5.5 V. الموقف غير المنتظم لهذا يمكن أن يؤدي إلى فشل المؤشر!


دبوس LCD 1604اردوينو ميجااردوينو أونوالوصف
VssGNDGNDGND
Vdd5 فولت5 فولت4.7 - 5.3 فولت
RS224يعني المستوى العالي أن الإشارة عند مخرجات DB0-DB7 هي بيانات ، المستوى المنخفض يعني أمرًا
روGNDGNDيحدد اتجاه البيانات (قراءة / كتابة). نظرًا لأن تشغيل قراءة البيانات من أحد المؤشرات عادةً لا يتم المطالبة به ، فمن الممكن تعيين مستوى منخفض باستمرار عند هذا الإدخال
هـ235تحدد النبضة التي تبلغ مدتها 500 مللي ثانية على الأقل في هذا الدبوس إشارة قراءة / كتابة البيانات من الدبابيس DB0-DB7 و RS و WR
DB4248البيانات الواردة / الصادرة
DB5259
DB62610
DB72711
LED A ++ 5 فولت أو 220 أوم المقاوم → + 5VLED-A
LED B-GND
V0GND أو 10kΩ الانتهازي

ستبدو تهيئة البرنامج على النحو التالي:


 // Arduino MEGA LiquidCrystal lcd(22, 23, 24, 25, 26, 27); // Arduino UNO LiquidCrystal lcd(4, 5, 8, 9, 10, 11); 

درجة الحرارة والرطوبة DHT11


توصيل جهاز استشعار درجة الحرارة والرطوبة DHT11 (SainSmart). ضع المستشعر لأعلى ، وسيتم وصف الخيوط من اليسار إلى اليمين.


DHT11اردوينو ميجا
البياناتدبوس رقمي 2 (PWM) (انظر DHTPIN أدناه)
VCC3.3-5 فولت (يوصى بـ 5 فولت ؛ طاقة خارجية أفضل)
GNDGND

تهيئة البرنامج


 #define DHTPIN 2 //   Digital pin 2 (PWM) #define DHTTYPE DHT11 // . DHT.h //  DHT dht(DHTPIN, DHTTYPE); 

البارومتر BMP180


توصيل مستشعر الضغط الجوي BMP180 (البارومتر) + درجة الحرارة عبر واجهة I2C / TWI.


BMP180اردوينو ميجا
VCCغير متصل
GNDGND
SCL21 (اتفاقية بازل)
SDA20 (SDA)
3.33.3 فولت

بالنسبة إلى UNO: A4 (SDA) ، A5 (SCL).


 //  Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085); // sensorID 

nRF24L01 +


خصائص موجزة:


  • نطاق التردد 2.401 - 2.4835 جيجا هرتز
  • 126 قناة. تبدأ القناة الصفرية عند 2400 ميجاهرتز ثم بخطوة 1 ميجاهرتز ، على سبيل المثال ، تقع القناة 70 عند 2470 ميجاهرتز ، على التوالي. عند ضبط سرعة الإرسال 2 ميجا بت في الثانية ، يكون عرض القناة 2 ميجا هرتز
  • مصدر الطاقة 1.9 - 3.6 فولت (3.3 فولت موصى به)

هنا هو pinout للوحدة النمطية.


Pinout nRF2401L +


ينصح البعض على الفور بمكثف سيراميك 100nF (ممكن 1µF ، 10µF ممكن) إلى طاقة التردد اللاسلكي لتجنب الضوضاء الكهربائية.


Pinout nRF24L01 + (انظر إلى الجزء العلوي من اللوحة حيث توجد الشريحة ، يجب أن تكون الدبابيس في الأسفل):


دبوس 2 3.3 فولتدبوس 4 CSNدبوس 6 MOSIدبوس 8 IRQ
دبوس 1 GNDدبوس 3 مدبوس 5 SCKدبوس 7 MISO

اتصال لمحطة الطقس:


اردوينو ميجاnRF24L01 +
3.3 فولتدبوس VCC 2 (طاقة خارجية أفضل)
دبوس D8CE CE 3 (تمكين الشريحة)
دبوس SS D53دبوس CSN 4 (تحديد الشريحة)
دبوس SCK D52دبوس SCK 5 (ساعة SPI في)
دبوس MOSI D51طرف SDI 6 (إدخال بيانات SPI)
دبوس MISO D50دبوس SDO 7 (خرج بيانات SPI)
دبوس IRQ 8 (خرج المقاطعة) غير متصل
GNDدبوس GND 1 (مدخل أرضي)

سيتم وصف برمجة وحدة الراديو بالتفصيل في جزء البرنامج.


ESP8266


Pinout ESP8266 (انظر إلى الجزء العلوي من اللوحة حيث يجب أن تكون الرقائق والدبابيس في الأسفل):


GNDGPIO2GPIO0Rx
TXCH_PDإعادةVCC

توصيل ESP8266 لمحطة الطقس:


ESP8266اردوينو ميجا
TX10 سنون (SoftwareSerial RX)
Rx11 دبوس (SoftwareSerial TX)
VCC3.3 فولت
GNDGND
CH_PDعبر المقاوم 10K إلى 3.3V Arduino
GPI0اختياري عبر المقاوم 10K إلى 3.3V Arduino
GPI2اختياري عبر المقاوم 10K إلى 3.3V Arduino

KDPV


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


تجميع الوحدة المركزية


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


مثل كل شيء. لم أنسِ شيئًا.


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


Source: https://habr.com/ru/post/ar425927/


All Articles