محطة الأرصاد الجوية (Arduino pro mini، BME280، LCD1602)

مقدمة

ما الذي يمكن عرضه على شاشة من سطرين باستثناء "Hello world!"؟ لماذا لا تعرض رطوبة وضغط درجة الحرارة؟

تُظهر المستشعرات المُقدمة كمساعد تدريب لاردوينو (DHT11 ، DHT22) درجة الحرارة والرطوبة. للأغراض التعليمية (بالنسبة للجامعة) كان من الضروري مراقبة الضغط بنفس الطريقة. وبطبيعة الحال ، يحتوي القسم على مقياس ضغط ، ولكن لماذا لا تجمع مقياسك الخاص؟ بالإضافة إلى ذلك ، يمكنك أيضًا تجميع القراءات في الوضع التلقائي ، وهذه تجربة جيدة في تعلم اردوينو.

بطريقة أو بأخرى ، تم طلب المكونات من الصين وتم تجميع هذا الجهاز.

المكونات الضرورية

اردوينو برو ميني
I2C لشاشات الكريستال السائل (كان من الممكن طلب تجميعها على الفور ، ولكن تبين أنها أرخص قليلاً)
شاشات الكريستال السائل 1602
BME280

تم استخدام USB-UART لإرسال الرسم إلى اردوينو. كان من الممكن أيضًا استخدام Raspberry Pi أو جهاز كمبيوتر بمنفذ COM.

مخطط اتصال للبرنامج الثابت ورمز البرنامج

من الصين ، جاء USB-UART بمجموعة من الأسلاك:

الصورة

كانت كافية. تركت الطائر عند 3.3 فولت ، على الرغم من حقيقة أن نسختي من arduino تعمل بـ 5 فولت.

UART - Arduino
5 فولت - VCC
TXD - RXD
RXD - TXD
GND - GND
CTS - DTR (اختياري ، لم يعمل معي ، ربما لأن جهد الإشارة ظل 3.3V)

إذا لم تقم بتوصيل DTR ، فبعد إرسال برنامج Arduino الثابت ، ستحتاج إلى إعادة التشغيل باستخدام الزر المدمج ، سيبدأ تبادل البيانات النشط على كلا الجانبين (كما هو موضح من خلال مصابيح USB-UART LED) ، بعد تنزيل البرنامج الثابت بنجاح ، سيتم إعادة تشغيل نفسه.

مكتبات الجهات الخارجية الضرورية:

SparkFunBME280
LiquidCrystal I2C

الكود مباشرة ، مع التعليقات من الأمثلة (في حالة احتياج شخص ما لتغيير شيء ما).

كود
#include <stdint.h> #include "SparkFunBME280.h" #include "Wire.h" #include "SPI.h" #include <LiquidCrystal_I2C.h> //Global sensor object BME280 mySensor; LiquidCrystal_I2C lcd(0x3F,16,2); // ,    0x3F void setup() { lcd.init(); lcd.backlight(); //***Driver settings********************************// //commInterface can be I2C_MODE or SPI_MODE //specify chipSelectPin using arduino pin names //specify I2C address. Can be 0x77(default) or 0x76 //For I2C, enable the following and disable the SPI section mySensor.settings.commInterface = I2C_MODE; mySensor.settings.I2CAddress = 0x76; // ,      //For SPI enable the following and dissable the I2C section //mySensor.settings.commInterface = SPI_MODE; //mySensor.settings.chipSelectPin = 10; //***Operation settings*****************************// //renMode can be: // 0, Sleep mode // 1 or 2, Forced mode // 3, Normal mode mySensor.settings.runMode = 3; //    Forced mode,        Normal mode //tStandby can be: // 0, 0.5ms // 1, 62.5ms // 2, 125ms // 3, 250ms // 4, 500ms // 5, 1000ms // 6, 10ms // 7, 20ms mySensor.settings.tStandby = 5; //    //filter can be off or number of FIR coefficients to use: // 0, filter off // 1, coefficients = 2 // 2, coefficients = 4 // 3, coefficients = 8 // 4, coefficients = 16 mySensor.settings.filter = 0; //tempOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.tempOverSample = 1; //pressOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.pressOverSample = 1; //humidOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.humidOverSample = 1; //Calling .begin() causes the settings to be loaded mySensor.begin(); } void loop() { //    ,    ,          . lcd.setCursor(0,0); lcd.print("H="); lcd.print((uint8_t)mySensor.readFloatHumidity()); lcd.print("%"); lcd.print(" T="); lcd.print(mySensor.readTempC()); lcd.setCursor(13,0); lcd.print(" P:"); lcd.setCursor(0,1); int mmH=mySensor.readFloatPressure()/133; lcd.print(mmH); lcd.print("mmH "); lcd.print(mySensor.readFloatPressure()); lcd.setCursor(14,1); lcd.print("Pa"); delay(1000); } 


يمكن تخمين عنوان المستشعر ، يوجد اثنان فقط.

كيفية معرفة عنوان شاشتك ، يمكنك أن ترى هنا . اعتمادًا على الشريحة ، هناك لوحان.

في هذه الحالة:

الصورة

وسيكون العنوان 0x3F منذ ذلك الحين A0 - A2 مفتوح:

الصورة

من الأفضل أن يتبخر الصمام الذي يدور في شكل بيضاوي.

مخطط الأسلاك

تم اختيار المقاوم على أنه نصف مقاومة المستشعر (بين VVC و GND) ، بحيث كان انخفاض الجهد عليه 1.7 فولت. أيضا ، يمكن تشغيل الدائرة من مدخلات RAW ، الجهد الآخر (على سبيل المثال من التاج).

الصورة

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

الصورة

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

الملخص

في مكان العمل ظهر 1602 مثبتًا على الطاولة ، مما يدل على الضغط والرطوبة ودرجة الحرارة. يمكن إعادة طلاء Arduino دون إزالته ( قد يصبح خطًا زاحفًا ).

صور
الصورة

مكان العمل ، منظر عام.

الصورة

منظر أمامي.

الصورة

المنظر الخلفي.

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


All Articles