ایستگاه هواشناسی خانگی با حسگر بی سیم آردوینو. ایستگاه هواشناسی خانگی در آردوینو و ارسال داده ها به "People's Monitoring". حرکت به سمت به روز رسانی

زمانی که در شهر قدم می زدم، یک فروشگاه لوازم الکترونیکی جدید را دیدم که باز شده بود. با رفتن به آن، تعداد زیادی سپر برای آردوینا پیدا کردم. من یک آردوینو Uno در خانه داشتم و یک آردوینو نانو فوراً به این فکر افتادم که با فرستنده‌های سیگنال از راه دور بازی کنم. تصمیم گرفتم ارزان ترین فرستنده و گیرنده 433 مگاهرتز را بخرم:

فرستنده سیگنال.


گیرنده سیگنال

با نوشتن ساده ترین طرح انتقال داده (نمونه ای از اینجا گرفته شده است) ، مشخص شد که دستگاه های انتقال می توانند برای انتقال ساده ترین داده ها مانند دما و رطوبت کاملاً مناسب باشند.

فرستنده دارای مشخصات زیر است:
1. مدل: MX -FS - 03V
2. شعاع عمل (بستگی به وجود اشیاء مانع دارد): 20-200 متر
3. ولتاژ کاری: 3.5 -12 ولت
4. ابعاد ماژول: 19 * 19 میلی متر
5. مدولاسیون سیگنال: AM
6. قدرت فرستنده: 10mW
7. فرکانس: 433 مگاهرتز
8. طول آنتن خارجی مورد نیاز: 25cm
9. اتصال آسان (فقط سه سیم): DATA; VCC; زمین.

ویژگی های ماژول دریافت:
1. ولتاژ کاری: DC 5V
2. جریان: 4 میلی آمپر
3. فرکانس کاری: 433.92 مگاهرتز
4. حساسیت: - 105dB
5. ابعاد ماژول: 30 * 14 * 7 میلی متر
6. آنتن خارجی مورد نیاز: 32 سانتی متر.

در وسعت اینترنت گفته می شود که محدوده انتقال اطلاعات در 2Kb / s می تواند تا 150 متر برسد. من خودم چک نکردم اما در یک آپارتمان دو اتاقه همه جا قبول می کند.

سخت افزار ایستگاه هواشناسی خانگی

پس از چند آزمایش، تصمیم گرفتم یک سنسور دما، رطوبت و یک فرستنده را به آردوینو نانو وصل کنم.


سنسور دمای DS18D20 به صورت زیر به آردوینو متصل می شود:

1) GND به منهای میکروکنترلر.
2) DQ از طریق یک مقاومت کششی به زمین و پین D2 آردوینو
3) Vdd به + 5V.

ماژول فرستنده MX-FS - 03V با ولتاژ 5 ولت تغذیه می شود، خروجی داده (ADATA) به پایه D13 متصل می شود.

به Arduino Uno یک صفحه نمایش LCD و یک فشارسنج BMP085 متصل شد.


نمودار اتصال به arduino uno

گیرنده سیگنال به پایه D10 متصل است.

ماژول BMP085 یک سنسور دیجیتال فشار اتمسفر است. سنسور به شما امکان می دهد دما، فشار و ارتفاع را اندازه گیری کنید. رابط اتصال: I2C. ولتاژ تغذیه سنسور 1.8-3.6 V

ماژول به همان روشی که سایر دستگاه های I2C به آردوینو متصل می شود:

  • VCC - VCC (3.3V);
  • GND - GND;
  • SCL - به پین ​​آنالوگ 5.
  • SDA - به پین ​​آنالوگ 4.
  • هزینه بسیار کم
  • برق و ورودی / خروجی 3-5 ولت
  • تعیین رطوبت 20-80 درصد با دقت 5 درصد
  • تعیین درجه حرارت 0-50 درجه. با دقت 2 درصد
  • نرخ نمونه برداری بیش از 1 هرتز نیست (بیش از یک بار در هر 1 ثانیه).
  • ابعاد 15.5mm x 12mm x 5.5mm
  • 4 پین با فاصله پاها 0.1 اینچ

DHT دارای 4 پین است:

  1. Vcc (منبع تغذیه 3-5 ولت)
  2. خروجی داده - خروجی داده
  3. استفاده نشده
  4. عمومی

به D8 آردوین متصل می شود.

بخش نرم افزاری ایستگاه هواشناسی منزل

ماژول فرستنده هر 10 دقیقه دما را اندازه گیری و انتقال می دهد.

در زیر برنامه آمده است:

/ * طرح نسخه 1.0 ارسال دما هر 10 دقیقه. * / #include #include #include #define ONE_WIRE_BUS 2 // پین برای اتصال سنسور OneWire OneWire دالاس (ONE_WIRE_BUS)؛ سنسورهای دما دالاس (و oneWire)؛ آدرس دستگاه درون دماسنج؛ تنظیم void (void) (//Serial.begin(9600); vw_set_ptt_inverted (درست)؛ // مورد نیاز برای DR3100 vw_setup (2000)؛ // تنظیم نرخ باود (bps) sensors.begin (); if (! sensors .getAddress (درون دماسنج، 0)؛ printAddress (درون دماسنج)؛ sensors.setResolution (درون دماسنج، 9)؛) void printTemperature (DeviceAddress deviceAddress) (float tempC = sensors.getTempC (deviceAddress); //Serial.print("Temp C : " )؛ //Serial.println(tempC)؛ // تشکیل داده برای ارسال عدد int = tempC; نماد کاراکتر = "c "؛ // نماد سرویس برای تعیین اینکه این یک حسگر است String strMsg = " z "; strMsg + = نماد؛ strMsg + = ""؛ strMsg + = شماره؛ strMsg + = ""؛ char msg؛ strMsg.toCharArray (msg, 255)؛ vw_send ((uint8_t *) msg, strlen (msg))؛ vw_wait_tx ()؛ / / ما منتظر هستیم تا انتقال به پایان برسد (200)؛) حلقه خالی (باطل) (برای (int j = 0؛ j<= 6; j++) { sensors.requestTemperatures(); printTemperature(insideThermometer); delay(600000); } } //Определение адреса void printAddress(DeviceAddress deviceAddress) { for (uint8_t i = 0; i < 8; i++) { if (deviceAddress[i] < 16); //Serial.print("0"); //Serial.print(deviceAddress[i], HEX); } }

دستگاه دریافت کننده داده ها را دریافت می کند، فشار و دمای اتاق را اندازه گیری می کند و به نمایشگر ارسال می کند.

#include #include LiquidCrystal lcd (12، 10، 5، 4، 3، 2); #شامل سنسور dht11؛ #define DHT11PIN 8 #include #include BMP085 dps = BMP085 (); درجه حرارت طولانی = 0، فشار = 0، ارتفاع = 0. void setup () (Serial.begin (9600)؛ vw_set_ptt_inverted (true)؛ // مورد نیاز برای DR3100 vw_setup (2000)؛ // تنظیم نرخ دریافت vw_rx_start ()؛ // شروع به نظارت بر پخش lcd.begin (16، 2) Wire.begin ()؛ تاخیر (1000)؛ dps.init ()؛ //lcd.setCursor(14,0)؛ //lcd.write(byte(0))؛ //lcd.home (); ) حلقه خالی () (uint8_t buf; // بافر برای پیام uint8_t buflen = VW_MAX_MESSAGE_LEN؛ // طول بافر اگر (vw_get_message (buf, & buflen)) // اگر پیامی دریافت شد (// شروع تجزیه int i; // اگر پیام خطاب به ما نیست، اگر (buf! = "z") (بازگشت؛) دستور char = buf؛ // فرمان در اندیس 2 است خارج شوید // پارامتر عددی از شاخص 4 شروع می شود i = 4؛ int عدد = 0؛ // از آنجایی که انتقال کاراکتر به کاراکتر است، پس باید مجموعه کاراکتر را به عدد تبدیل کنید while (buf [i]! = "") (عدد * = 10؛ عدد + = buf [i] - "0"؛ i ++;) dps.getPressure (& Pressure)؛ dps.getAltitude (& Altitude)؛ dps.getTemperature (& Temperature)؛ //Serial.print(command); Serial.print (""); Serial.println (شماره); lcd.print ("T ="); lcd.setCursor (2.0); lcd.print (شماره); lcd.setCursor (5.0); lcd.print ("P ="); lcd.print (Pressure / 133.3); lcd.print ("mmH")؛ lcd.setCursor (0،1); lcd.print ("T ="); lcd.print (دما 0.1)؛ lcd.print ("H ="); lcd.print (حسگر. رطوبت); lcd.home (); // تاخیر (2000)؛ int chk = sensor.read (DHT11PIN); سوئیچ (chk) (مورد DHTLIB_OK: //Serial.println("OK")؛ شکست؛ مورد DHTLIB_ERROR_CHECKSUM: //Serial.println("خطای جمع بررسی")؛ شکست؛ مورد DHTLIB_ERROR_TIMEOUT: //Serial.println("Time out خطا ")؛ شکست؛ پیش فرض: //Serial.println("خطای ناشناخته")؛ شکست؛)))

P.S. در آینده قصد دارم موارد زیر را اضافه کنم:
- سنسور رطوبت به فرستنده، الگوریتم انتقال داده را دوباره کار کنید
- سنسور برای اندازه گیری سرعت و جهت باد.
- نمایشگر دیگری را به دستگاه گیرنده اضافه کنید.
- گیرنده و فرستنده را به یک میکروکنترلر جداگانه منتقل کنید.

در زیر عکسی از اتفاق افتاده را پیوست می کنم:

فهرست عناصر رادیویی

تعیین نوعی از فرقه تعداد توجه داشته باشیدخرید کنیددفترچه من
بخش انتقال دهنده
برد آردوینو

آردوینو نانو 3.0

1 داخل دفترچه یادداشت
حسگر دما

DS18B20

1 داخل دفترچه یادداشت
مقاومت

220 اهم

1 داخل دفترچه یادداشت
ماژول فرستندهMX-FS-03V (433 مگاهرتز)1 داخل دفترچه یادداشت
بخش دریافت رادیو
برد آردوینو

آردوینو اونو

1 داخل دفترچه یادداشت
مقاومت تریمر 1 داخل دفترچه یادداشت
مقاومت

اخیرا یکی از همکارانم میزبان یک نمایشگاه علمی کوچک بود.
معلمم از من خواست که یک پروژه الکترونیک را به دانشجویان معرفی کنم. دو روز فرصت داشتم تا به یک چیز جالب و به اندازه کافی ساده برسم.



از آنجایی که شرایط آب و هوایی اینجا کاملاً متغیر است و دما در محدوده 30-40 درجه سانتیگراد در نوسان است، تصمیم گرفتم یک ایستگاه هواشناسی خانگی بسازم.

وظایف ایستگاه هواشناسی خانگی چیست؟
ایستگاه هواشناسی آردوینو با نمایشگر - دستگاهی که با استفاده از حسگرهای مختلف، داده های مربوط به آب و هوا و شرایط محیطی را جمع آوری می کند.

معمولاً اینها سنسورهای زیر هستند:

  • باد
  • رطوبت
  • باران
  • درجه حرارت
  • فشار
  • ارتفاعات

هدف من ساختن یک ایستگاه هواشناسی رومیزی قابل حمل با دستان خودم است.

او باید بتواند پارامترهای زیر را تعیین کند:

  • درجه حرارت
  • رطوبت
  • فشار
  • ارتفاع

مرحله 1: قطعات لازم را بخرید







  • DHT22، سنسور دما و رطوبت.
  • سنسور فشار BMP180
  • لحیم کاری
  • کانکتور 40 طرفه تک ردیف

از تجهیزاتی که نیاز دارید:

  • آهن لحیم کاری
  • پنس پد بینی
  • سیم ها

مرحله 2: سنسور دما و رطوبت DHT22







برای اندازه گیری دما از سنسورهای مختلفی استفاده می شود. DHT22، DHT11، SHT1x محبوب هستند

من توضیح خواهم داد که چگونه آنها با یکدیگر تفاوت دارند و چرا از DHT22 استفاده کردم.

سنسور AM2302 از سیگنال دیجیتال استفاده می کند. این سنسور از یک سیستم کدگذاری منحصر به فرد و فناوری حسگر استفاده می کند، بنابراین داده های آن قابل اعتماد است. عنصر حسگر آن به یک کامپیوتر تک تراشه 8 بیتی متصل است.

هر سنسور این مدل با جبران دما و کالیبراسیون دقیق، ضریب کالیبراسیون در یک حافظه قابل برنامه ریزی یکبار مصرف (حافظه OTP) ذخیره می شود. هنگام خواندن قرائت ها، سنسور ضریب را از حافظه به یاد می آورد.

اندازه کوچک، مصرف انرژی کم، فاصله انتقال طولانی (100 متر) AM2302 را برای تقریباً همه برنامه ها مناسب می کند و 4 خروجی در یک ردیف نصب را بسیار آسان می کند.

بیایید نگاهی به مزایا و معایب سه مدل سنسور بیاندازیم.

DHT11

مزایا: بدون نیاز به لحیم کاری، ارزان ترین مدل از سه مدل، سیگنال پایدار سریع، برد بیش از 20 متر، تداخل قوی.
معایب: کتابخانه! بدون گزینه وضوح، خطای اندازه گیری دما +/- 2 ° C، خطای اندازه گیری سطح رطوبت نسبی +/- 5٪، محدوده نامناسب دماهای اندازه گیری شده (0-50 ° C).
کاربرد: باغبانی، کشاورزی.

DHT22

مزایا: بدون نیاز به لحیم کاری، هزینه کم، منحنی های صاف، خطاهای اندازه گیری کوچک، محدوده اندازه گیری بزرگ، برد بیش از 20 متر، تداخل قوی.
معایب: حساسیت می تواند بیشتر باشد، ردیابی کند تغییرات دما، کتابخانه مورد نیاز است.
کاربرد: مطالعات محیطی.

SHT1x

مزایا: بدون نیاز به لحیم کاری، منحنی های صاف، خطاهای اندازه گیری کوچک، پاسخ سریع، مصرف انرژی کم، خواب خودکار، پایداری بالا و ثبات داده ها.
معایب: دو رابط دیجیتال، خطا در اندازه گیری سطح رطوبت، محدوده دمای اندازه گیری شده 0-50 درجه سانتیگراد است، یک کتابخانه مورد نیاز است.
کاربردها: عملکرد در محیط های سخت و در نصب های طولانی مدت. هر سه سنسور نسبتاً ارزان هستند.

ترکیب

  • Vcc - 5 ولت یا 3.3 ولت
  • گند - با گند
  • داده - به پین ​​دوم آردوینو

مرحله 3: سنسور فشار BMP180



BMP180 یک سنسور فشار هوا با رابط I2C است.
سنسورهای فشار هوا قدر مطلق هوای محیط را اندازه گیری می کنند. این شاخص به شرایط آب و هوایی خاص و ارتفاع بستگی دارد.

ماژول BMP180 یک رگولاتور 3.3 ولت 662 کیلو اهم داشت که من از روی حماقت خودم به طور تصادفی آن را منفجر کردم. من مجبور شدم ردیابی نیرو را مستقیماً روی تراشه انجام دهم.

به دلیل عدم وجود تثبیت کننده، من در انتخاب منبع تغذیه محدود هستم - ولتاژ بالای 3.3 ولت سنسور را از بین می برد.
مدل های دیگر ممکن است تثبیت کننده نداشته باشند، حتما یکی را بررسی کنید.

نمودار اتصال سنسور و گذرگاه I2C با آردوینو (نانو یا uno)

  • SDA - A4
  • SCL - A5
  • VCC - 3.3 ولت
  • GND - GND

بیایید کمی در مورد فشار و رابطه آن با دما و ارتفاع صحبت کنیم.

فشار اتمسفر در هر نقطه ثابت نیست. فعل و انفعال پیچیده بین چرخش زمین، شیب زمین، منجر به ایجاد بسیاری از مناطق با فشار بالا و پایین می شود که به نوبه خود منجر به تغییر روزانه شرایط آب و هوایی می شود. با مشاهده تغییر فشار می توانید پیش بینی کوتاه مدتی از آب و هوا داشته باشید.

به عنوان مثال، افت فشار معمولاً به معنای هوای بارانی یا رعد و برق قریب الوقوع است (نزدیک شدن به یک منطقه کم فشار، یک طوفان). افزایش فشار معمولاً به معنای آب و هوای خشک و صاف است (یک ناحیه با فشار بالا، یک آنتی سیکلون بالای سر شما وجود دارد).

فشار اتمسفر نیز با افزایش ارتفاع تغییر می کند. فشار مطلق در کمپ اصلی در اورست (5400 متر بالاتر از سطح دریا) کمتر از فشار مطلق در دهلی (216 متر بالاتر از سطح دریا) است.

از آنجایی که خوانش فشار مطلق در هر مکان تغییر می کند، به فشار نسبی یا فشار سطح دریا اشاره خواهیم کرد.

اندازه گیری قد

فشار متوسط ​​در سطح دریا 1013.25 GPa (یا میلی بار) است. اگر بالاتر از جو قرار بگیرید، این مقدار به صفر می رسد. منحنی این افت کاملا قابل درک است، بنابراین می توانید ارتفاع را خودتان با استفاده از معادله زیر محاسبه کنید: alti = 44330 *

اگر فشار سطح دریا 1013.25 گیگا پاسکال را p0 در نظر بگیرید، راه حل معادله ارتفاع فعلی شما است.

اقدامات پیشگیرانه

به یاد داشته باشید که سنسور BMP180 برای اینکه بتواند فشار هوا را بخواند نیاز به دسترسی به جو اطراف دارد، سنسور را در محفظه بسته قرار ندهید. یک سوراخ کوچک تهویه باید کافی باشد. اما آن را خیلی باز نگذارید - باد فشار و ارتفاع را پایین می آورد. حفاظت از باد را در نظر بگیرید.

از گرما محافظت کنید. برای اندازه گیری فشار، خوانش دقیق دما مورد نیاز است. سعی کنید سنسور را در برابر دمای شدید محافظت کنید و آن را در نزدیکی منابع دمای بالا قرار ندهید.

از رطوبت محافظت کنید. سنسور BMP180 به سطوح رطوبت حساس است، سعی کنید از ورود آب احتمالی به سنسور جلوگیری کنید.

سنسور را کور نکنید یک شگفتی حساسیت سیلیکون موجود در سنسور به نور بود که می تواند از طریق سوراخ در پوشش تراشه وارد آن شود. برای دقیق ترین اندازه گیری ها، سعی کنید سنسور را از نور محیط محافظت کنید.

مرحله 4: مونتاژ دستگاه







نصب کانکتورهای تک ردیفی برای آردوینو نانو. اصولاً آنها را به اندازه مناسب برش زدیم و کمی سمباده زدیم تا به نظر برسد. سپس آنها را لحیم می کنیم. پس از آن، ما کانکتورهای تک ردیفی را برای سنسور DHT22 نصب می کنیم.

یک مقاومت 10 کیلو اهم از پین داده به زمین (Gnd) نصب کنید. ما همه چیز را لحیم می کنیم.
سپس به همین ترتیب یک کانکتور تک ردیفی برای سنسور BMP180 نصب می کنیم، منبع تغذیه را 3.3 ولت می کنیم. ما همه چیز را به اتوبوس I2C وصل می کنیم.

در نهایت نمایشگر LCD را به همان باس I2C سنسور BMP180 متصل می کنیم.
(من قصد دارم بعداً یک ماژول RTC (ساعت واقعی) را به کانکتور چهارم وصل کنم تا دستگاه هم زمان را نشان دهد).

مرحله 5: رمزگذاری




بارگذاری کتابخانه ها

برای نصب کتابخانه ها در آردوینو، لینک را دنبال کنید

#عبارتند از
#include #include #include "DHT.h" #include

فشار SFE_BMP180;

#define ALTITUDE 20.56 #define I2C_ADDR 0x27 //<<- Add your address here. #define Rs_pin 0 #define Rw_pin 1 #define En_pin 2 #define BACKLIGHT_PIN 3 #define D4_pin 4 #define D5_pin 5 #define D6_pin 6 #define D7_pin 7

#define DHTPIN 2 // به چه پین ​​دیجیتالی وصل شده ایم

// هر نوع را که استفاده می‌کنید لغو نظر کنید! // # define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 DHT dht (DHTPIN, DHTTYPE, Enterprises, 2, LiquidCrystal_DR, LiquidCrystal_Dr Rs_pin، D4_pin، D5_pin، D6_pin، D7_pin؛ float t1، t2.

تنظیم void () (Serial.begin (9600)؛ lcd.begin (16,2)؛ //<<-- our LCD is a 20x4, change for your LCD if needed // LCD Backlight ON lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); lcd.setBacklight(HIGH); lcd.home (); // go home on LCD lcd.print("Weather Station"); delay(5000); dht.begin(); pressure.begin(); } void loop() { char status; double T,P,p0,a; status = pressure.startTemperature(); if (status != 0) { delay(status);

status = press.getTemperature (T); if (وضعیت! = 0) (Serial.print ("1")؛ lcd.clear (); lcd.setCursor (0,0)؛ lcd.print ("Baro Temperature:")؛ lcd.setCursor (0,1 lcd.print (T, 2)؛ lcd.print ("درجه C")؛ t1 = T؛ تاخیر (3000).

status = press.startPressure (3); if (وضعیت! = 0) (// منتظر بمانید تا اندازه گیری کامل شود: تاخیر (وضعیت);

status = press.getPressure (P, T); if (وضعیت! = 0) (lcd.clear (); lcd.print ("mb")؛ تاخیر (3000);

p0 = فشار. sealevel (P، ALTITUDE)؛ // ما در 1655 متر هستیم (بولدر، CO)

a = فشار. ارتفاع (P، p0)؛ lcd.clear (); lcd.setCursor (0,0); lcd.print ("ارتفاع:"); lcd.setCursor (0،1); lcd.print (a, 0); lcd.print ("متر")؛ تاخیر (3000); )))) float h = dht.readHumidity (); // خواندن دما به صورت سلسیوس (پیش فرض) float t = dht.readTemperature (); t2 = t; lcd.clear (); lcd.setCursor (0,0); // به شروع خط 2 lcd.print بروید ("رطوبت:"); lcd.setCursor (0,1)؛ lcd.print (h); lcd.print ("%"); تاخیر (3000); lcd.clear (); lcd.setCursor (0,0); // به شروع خط 2 lcd.print بروید ("DHT Tempurature:"); lcd.setCursor (0،1); lcd.print (t); lcd.print ("درجه C")؛ تاخیر (3000); lcd.clear (); lcd.setCursor (0,0); // رفتن به ابتدای خط 2nd lcd.print ("Mean Tempurature:"); lcd.setCursor (0،1); lcd.print ((t1 + t2) / 2); lcd.print ("درجه C")؛ تاخیر (3000); )

من از ورژن آردوینو 1.6.5 استفاده کردم، کد دقیقا براش مناسبه، برای بعدی ها هم میتونه جا بیفته. اگر کد به دلایلی مناسب نیست، از نسخه 1.6.5 به عنوان پایه استفاده کنید.

تماشای آب و هوا بسیار هیجان انگیز است. تصمیم گرفتم ایستگاه هواشناسی خود را بر اساس محبوبیت بسازم .

نمونه اولیه ایستگاه هواشناسی به شکل زیر است:

عملکرد ایستگاه هواشناسی من:

  • اندازه گیری و نمایش دمای اتاق و بیرون؛
  • نمایش زمان فعلی (ساعت و دقیقه)؛
  • نمایش مراحل فعلی ماه و روز قمری؛
  • انتقال نتایج اندازه گیری به کامپیوتر از طریق اتصال سریال.
  • انتقال نتایج اندازه گیری توسط پروتکل MQTTبا استفاده از یک برنامه کاربردی در رایانه


هگز
-فایل
سیستم عامل برای (نسخه مورخ 9 می 2018) - .
نحوه فلش زدن هگز-فایل به هیئت مدیره آردوینوشرح داده ام.

میکروکنترلر آردوینو نانو 3.0

قلب ایستگاه هواشناسی من یک میکروکنترلر است eBay):

برای کنترل نشان دادن و نظرسنجی سنسورها از تایمر 1 استفاده می کنم آردوینوایجاد وقفه با فرکانس 200 هرتز (دوره - 5 میلی ثانیه).

نشانگر

برای نمایش قرائت های اندازه گیری شده از سنسورها و زمان فعلی، به آردوینونشانگر LED چهار رقمی Foryard FYQ-5643BHبا آندهای مشترک (آندهای همان بخش از تمام تخلیه ها ترکیب می شوند).
این نشانگر شامل چهار رقم هفت بخش و دو نقطه تقسیم کننده (ساعتی) است:

آندهای نشانگر از طریق مقاومت های محدود کننده جریان به پایانه ها متصل می شوند آردوینو:

تخلیه 1 2 3 4
خروجی A3 A2 D3 D9

کاتدهای قطعه ای متصل به پین ​​ها آردوینو:

بخش آ ب ج د ه f g پ
خروجی D7 D12 D4 D5 D6 D11 D8 D13

اگر پتانسیل بالایی در آند تخلیه مربوطه (1) و روی کاتد - کم (0) وجود داشته باشد، بخش نشانگر روشن می شود.

من از یک نشانگر پویا برای نمایش اطلاعات روی نشانگر استفاده می کنم - هر بار فقط یک رقم فعال است. دشارژهای فعال متناوب با فرکانس 200 هرتز (دوره نمایش 5 میلی ثانیه). در عین حال، سوسو زدن بخش ها برای چشم غیرقابل محسوس است.

سنسور دما DS18x20

برای امکان اندازه گیری دما از راه دور، یک سنسور وصل کردم ، که دمای بیرون را در محدوده وسیعی اندازه گیری می کند. سنسور به اتوبوس متصل است 1-سیمو دارای سه خروجی - منبع تغذیه ( VCC)، داده ها ( DAT)، زمین ( GND):

سرب سنسور VCC DAT GND
خروجی آردوینو 5 ولت A1 GND

بین نتیجه گیری VCCو DATمن یک مقاومت کششی 4.7k اضافه کرده ام.

برای تبدیل بین درجه سانتیگراد و فارنهایت می توانید از صفحه زیر استفاده کنید:

من سنسور را در خارج از پنجره خانه در یک جعبه پلاستیکی از یک خودکار قرار دادم:

\

در ایستگاه های هواشناسی حرفه ای، از صفحه نمایش استیونسون برای محافظت از دماسنج در برابر نور مستقیم خورشید و اطمینان از گردش هوا استفاده می شود. صفحه نمایش استیونسون):

سنسور فشار و دما BMP280

فشارسنج های جیوه و فشارسنج های آنروید به طور سنتی برای اندازه گیری فشار اتمسفر استفاده می شوند.

V فشارسنج جیوهفشار اتمسفر با وزن یک ستون جیوه متعادل می شود که از ارتفاع آن برای اندازه گیری فشار استفاده می شود:

V فشارسنج آنرویدفشرده سازی و انبساط جعبه تحت تأثیر فشار اتمسفر استفاده می شود:

برای اندازه گیری فشار اتمسفر و دمای اتاق در ایستگاه هواشناسی خانه، از یک سنسور استفاده می کنم - کم اهمیت SMD- سنسور 2 x 2.5 میلی متر بر اساس فناوری پیزورزیستیو:

روسری حسگر خریداری شده در بازار eBay:

سنسور به اتوبوس متصل است I2C(تماس داده ها - SDA / SDI، پین همگام سازی - SCL / SCK):

سرب سنسور VCC GND SDI SCK
خروجی آردوینو 3V3 GND A4 A5

آدافروت- فایل ها Adafruit_Sensor.h, Adafruit_BMP280.h, Adafruit_BMP280.cpp.

واحدهای فشار اتمسفر

سنسور از طریق عملکرد خواندن فشارمقدار فشار اتمسفر را بر حسب پاسکال نشان می دهد. واحد اصلی اندازه گیری فشار اتمسفر است هکتوپاسکال(hPa) (1 hPa = 100 Pa)، که مشابه واحد خارج از سیستم است. میلی بار"(mbar) (1 mbar = 100Pa = 1hPa). برای تبدیل بین یک واحد فشار غیر سیستمی متداول" میلی متر جیوه"(mmHg) و هکتوپاسکال ها، نسبت های زیر استفاده می شود:
1 hPa = 0.75006 میلی متر جیوه. هنر ≈ 3/4 میلی متر جیوه؛ 1 میلی متر جیوه = 1.3332 hPa ≈ 4/3 hPa.

وابستگی فشار اتمسفر به ارتفاع

فشار اتمسفر را می توان به دو صورت مطلق و نسبی ارائه کرد.
فشار مطلق QFE(انگلیسی فشار مطلق) فشار اتمسفر فعلی است، به استثنای تصحیح بالای سطح دریا.
با افزایش 1 متری ارتفاع، فشار اتمسفر حدود 1 hPa کاهش می یابد:

فرمول بارومتریک به شما امکان می دهد تصحیح خوانش فشارسنج را برای به دست آوردن فشار نسبی (بر حسب میلی متر جیوه) تعیین کنید:
$ \ دلتا P = 760 \ cdot (1 - (1 \ بیش از (10 ^ ((0.0081350 \ cdot H) \ بیش از (T + 0.00178308 \ cdot H))))) $,
که در آن $ T $ میانگین دمای هوا در مقیاس رانکین، درجه است Ra، $ H $ - ارتفاع، پا.
تبدیل درجه سانتیگراد به رانکین:
$ ^ (\ circ) Ra = (^ (\ circ) C \ cdot 1,8) + 491.67 $
فرمول فشارسنجی برای تسطیح بارومتریک - تعیین ارتفاع (با خطای 0.1 - 0.5٪) استفاده می شود. این فرمول رطوبت هوا و تغییر شتاب گرانش با ارتفاع را در نظر نمی گیرد. برای تفاوت های کوچک در ارتفاع، این وابستگی نمایی را می توان با دقت کافی توسط یک وابستگی خطی تقریب زد.
فشار نسبی QNH(انگلیسی فشار نسبی, Q-code ارتفاع دریایی) آیا فشار اتمسفر با در نظر گرفتن تصحیح میانگین سطح دریا (eng. میانگین سطح دریا، MSL) (برای هست یکو دمای 15 درجه سانتیگراد) و در ابتدا با در نظر گرفتن ارتفاعی که ایستگاه هواشناسی در آن قرار دارد تنظیم می شود. می توان آن را از داده های سرویس هواشناسی، خوانش ابزارهای کالیبره شده در مکان های عمومی، فرودگاه (از گزارش ها) پیدا کرد METAR)، از اینترنت.
به عنوان مثال، برای فرودگاه گومل نزدیک ( UMGG) من می توانم خلاصه ای از آب و هوای واقعی را ببینم METARدر ru.allmetsat.com/metar-taf/russia.php?icao=UMGG:
UMGG 191800Z 16003MPS CAVOK M06 / M15 Q1014 R28 / CLRD // NOSIG ,
جایی که Q1014- فشار QNHدر فرودگاه برابر با 1014 hPa است.
خلاصه تاریخچه METARموجود در aviationwxchartsarchive.com/product/metar.
برای فشار نسبی هوای معمولی QNHفشار گرفته شده 760 میلی متر جیوه. هنر یا 1013.25 hPa (در دمای 0 درجه سانتیگراد، در عرض جغرافیایی 45 درجه در نیمکره شمالی یا جنوبی).
من فشار را برای فشارسنج آنروئید تنظیم کردم QNHبا استفاده از پیچ تنظیم حساسیت:

پیش بینی آب و هوا

تجزیه و تحلیل تغییرات فشار به شما امکان می دهد یک پیش بینی آب و هوا بسازید و دقت آن هر چه بیشتر باشد، فشار ناگهانی تر تغییر می کند. به عنوان مثال، قانون سرانگشتی یک دریانورد قدیمی می گوید که افت فشار 10 hPa (7.5 میلی متر جیوه) در یک دوره 8 ساعته نشان دهنده نزدیک شدن باد شدید است.

باد از کجا می آید؟ هوا به سمت مرکز ناحیه کم فشار جریان دارد، باد- حرکت افقی هوا از مناطق پرفشار به مناطق کم فشار (فشار زیاد اتمسفر، توده های هوا را به ناحیه فشار کم اتمسفر فشرده می کند). اگر فشار بسیار کم باشد، باد می تواند به نیرو برسد طوفان ها... علاوه بر این، در منطقه کاهشفشار (افسردگی فشار یا سیکلون)، هوای گرم بالا می‌آید و ابرهایی را تشکیل می‌دهد که اغلب با خود می‌آورند بارانیا برف.

برای جهت باد در هواشناسی، جهتی که باد از آن می وزد گرفته می شود:

این جهت به هشت نقطه کاهش می یابد.

یک الگوریتم اغلب برای پیش بینی آب و هوا بر اساس فشار اتمسفر و جهت باد استفاده می شود زامبرتی.

سنسور رطوبت

برای تعیین رطوبت نسبی هوا از ماژول استفاده می کنم DHT11(در بازار خریداری شده است eBay):

سنسور رطوبت DHT11دارای سه خروجی - قدرت ( + )، داده ها ( بیرون)، زمین ( - ):

سرب سنسور + بیرون -
خروجی آردوینو 5 ولت D10 GND

برای کار با سنسور، از کتابخانه استفاده می کنم آدافروت- فایل ها DHT.h, DHT.cpp.

رطوبت هوا مقدار بخار آب موجود در هوا را مشخص می کند. رطوبت نسبیدرصد رطوبت هوا را نسبت به حداکثر مقدار ممکن در دمای فعلی نشان می دهد. برای اندازه گیری رطوبت نسبی، استفاده کنید :

برای یک فرد، محدوده بهینه رطوبت هوا 40 ... 60٪ است.

ساعت واقعی

به عنوان ساعت واقعی، از ماژول استفاده کردم RTC DS1302(یک روسری با ساعت از بازار خریداری شد eBay):

مدول DS1302به اتوبوس وصل می شود 3-سیم... برای استفاده از این ماژول در ارتباط با آردوینوکتابخانه توسعه یافته است iarduino_RTC (از جانب iarduino.ru).

تخته با ماژول DS1302دارای پنج پایه است که من آنها را به پایه های برد وصل کردم آردوینو نانو:

خروجی RTC VCC GND RST CLK DAT
خروجی آردوینو 5 ولت GND D2 D1 D0

برای حفظ خوانش صحیح ساعت زمانی که برق خاموش است، یک باتری را در شکاف روی برد قرار دادم. CR2032.

دقت ماژول ساعت من خیلی زیاد نیست - ساعت تقریباً یک دقیقه در چهار روز عجله دارد. بنابراین، با نگه داشتن دکمه متصل به پین ​​A0 آردوینو، پس از روشن کردن برق ایستگاه هواشناسی، دقیقه ها را روی صفر و ساعت را به نزدیکترین یک تنظیم می کنم. پس از مقداردهی اولیه، از پین A0 برای انتقال داده ها از طریق اتصال سریال استفاده می شود.

انتقال داده ها به کامپیوتر و کار با استفاده از پروتکل MQTT

برای انتقال داده از طریق اتصال سریال به آردوینومتصل می کند یو اس بی-UARTمبدل:

خروجی آردوینوبرای انتقال داده ها در قالب استفاده می شود 8N1(8 بیت داده، بدون برابری، 1 بیت توقف) در 9600 bps. داده ها در بسته ها منتقل می شوند و طول بسته 4 کاراکتر است. انتقال داده ها در " بیت بنگ"حالت، بدون استفاده از پورت سریال سخت افزاری آردوینو.

فرمت داده های ارسالی:

پارامتر بایت 1 بایت دوم بایت 3 بایت 4
دمای بیرون o فاصله یا منهای ده ها درجه یا یک فاصله واحد درجه
دمای اتاق من فاصله یا منهای ده ها درجه یا یک فاصله واحد درجه
فشار اتمسفر پ صدها میلی متر ص. هنر ده ها میلی متر جیوه واحد میلی متر جیوه با.
رطوبت نسبی ساعت فضا ده ها درصد یا یک فاصله واحد درصد
زمان فعلی ده ها ساعت واحد ساعت ده ها دقیقه واحد دقیقه

MQTT

گولنگبرنامه - مشتری پروتکل MQTTارسال اطلاعات دریافتی از ایستگاه هواشناسی به سرور ( MQTT-دلال) :

سرویس به شما امکان می دهد یک حساب کاربری با یک طرح تعرفه رایگان ایجاد کنید " "(محدودیت: 10 اتصال، 10 کیلوبایت بر ثانیه):

برای نظارت بر قرائت های ایستگاه هواشناسی می توانید استفاده کنید اندروید-کاربرد :

تغذیه

من از شارژر یک تلفن همراه قدیمی برای تغذیه ایستگاه هواشناسی استفاده می کنم. موتورولاولتاژ 5 ولت با جریان حداکثر 0.55 آمپر و متصل به کنتاکت ها 5 ولت(+) و GND (-):

همچنین می توانید از یک باتری 9 ولتی برای منبع تغذیه استفاده کنید که به کنتاکت ها متصل است VIN(+) و GND (-).

بهره برداری از ایستگاه هواشناسی

هنگام راه اندازی، سنسورها مقداردهی اولیه و بررسی می شوند.

در صورت عدم وجود سنسور DS18x20خطای "E1" در صورت عدم وجود سنسور صادر می شود - خطای "E3".

سپس چرخه کاری ایستگاه هواشناسی شروع می شود:

  • اندازه گیری و نمایش دمای بیرون؛
  • اندازه گیری و نمایش دمای اتاق؛
  • اندازه گیری و نمایش فشار اتمسفر و روند آن.
  • اندازه گیری و نمایش رطوبت نسبی هوا؛
  • نمایش زمان فعلی؛
  • نمایش فاز ماه و روز قمری.


ویدئویی از ایستگاه هواشناسی من در دسترس است -کانال: https://youtu.be/vVLbirO-FVU

نمایشگر دما

هنگام اندازه گیری دما، دو رقم از دما و برای دمای منفی علامت منفی (با نماد درجه در رقم سمت راست) نمایش داده می شود.
برای دمای بیرون، علامت درجه در بالا نمایش داده می شود:


برای دمای اتاق - در پایین:

نمایشگر فشار

هنگام اندازه گیری فشار، سه رقم فشار به میلی متر جیوه نمایش داده می شود (با علامت " پ"در سمت راست ترین رقم):

اگر فشار به شدت کاهش یابد، به جای " پ"راست ترین رقم نماد را نشان می دهد" L"اگر به شدت رشد کرده است، پس" اچملاک تیز بودن تغییر 8 میلی متر جیوه در 8 ساعت است:

از آنجایی که ایستگاه هواشناسی من فشار مطلق را نشان می دهد ( QFE)، سپس خوانش ها در مقایسه با اطلاعات خلاصه تا حدودی دست کم گرفته می شوند METAR(که شامل QNH) (14 UTC در 28 مارس 2018):

نسبت فشار (طبق اطلاعات ATIS) $ (1015 \ بیش از 998) = 1.017 دلار بود. ارتفاع فرودگاه گومل (کد ایکائو UMGG) بالاتر از سطح دریا 143.6 متر است. درجه حرارت طبق ATIS 1 درجه بود سی.

قرائت ایستگاه هواشناسی من تقریباً با فشار مطلق همزمان بود QFEبر اساس اطلاعات ATIS!

حداکثر / حداقل فشار ( QFE)، توسط ایستگاه هواشناسی من برای کل زمان مشاهدات ثبت شده است:

نمایش رطوبت نسبی

رطوبت نسبی هوا به صورت درصد نمایش داده می شود (نماد درصد در دو رقم سمت راست نمایش داده می شود):

نمایش زمان فعلی

زمان کنونی با فرمت "HH: MM" روی نشانگر نمایش داده می شود و نقطه جداکننده یک بار در ثانیه چشمک می زند:

نمایش مراحل ماه و روز قمری

دو رقم اول نشانگر فاز فعلی قمری و دو رقم بعدی - روز قمری فعلی را نشان می دهد:

ماه دارای هشت مرحله است (نام انگلیسی و روسی (آبی - نادرست) آورده شده است):

در نشانگر، مراحل با پیکتوگرام نشان داده می شوند:

فاز پیکتوگرام
داس در حال رشد (هلال)
داس در حال زوال (هلال)

انتقال داده ها به کامپیوتر

اگر ایستگاه هواشناسی را با یو اس بی-UARTمبدل (به عنوان مثال، بر اساس یک میکرو مدار CP2102) مرتبط با یو اس بی-پورت کامپیوتر، می توانید از برنامه ترمینال برای مشاهده داده های ارسال شده توسط ایستگاه هواشناسی استفاده کنید:

من در زبان برنامه نویسی توسعه دادم گلنگبرنامه ای که گزارش مشاهدات هواشناسی را نگه می دارد و داده ها را به سرویس ارسال می کند و می توان آنها را مشاهده کرد اندرویدتلفن هوشمند با استفاده از برنامه :

با توجه به گزارش مشاهدات هواشناسی، برای مثال، می توانید نموداری از تغییرات فشار اتمسفر بسازید:
نمونه ای از نمودار با حداقل فشار قابل توجه


نمونه ای از نمودار با افزایش جزئی فشار

بهبودهای برنامه ریزی شده:

  • اضافه کردن سنسورهای جهت و سرعت باد

در ایستگاه های هواشناسی برای اندازه گیری سرعت باد از بادسنج سه فنجانی (1) و برای تعیین جهت باد از صفحه هواشناسی استفاده می شود (2):

همچنین برای اندازه گیری سرعت باد استفاده می شود بادسنج های سیم داغ(انگلیسی بادسنج سیم داغ). به عنوان یک سیم گرم، می توانید از یک رشته تنگستن از یک لامپ با شیشه شکسته استفاده کنید. در بادسنج های سیم داغ موجود در بازار، سنسور معمولاً روی یک لوله تلسکوپی قرار دارد:

اصل کار این دستگاه بدین صورت است که در اثر جابجایی توسط جریان هوا - باد، گرما از المنت گرمایشی خارج می شود. در این حالت مقاومت فیلامنت با دمای فیلامنت تعیین می شود. قانون تغییر مقاومت فیلامنت $ R_T $ در دمای $ T $ به شکل زیر است:
$ R_T = R_0 \ cdot (1 + (\ alpha \ cdot (T - T_0))) $,
که در آن $ R_0 مقاومت نخ در دمای $ T_0 $ است، $ \ آلفا $ ضریب دمای مقاومت است (برای تنگستن $ \ آلفا = 4.5 \ cdot (10 ^ (- 3) (^ (\ circ) (C ^ (-1)))) $).

با تغییر در سرعت جریان هوا، دما با جریان فیلامنت ثابت تغییر می کند ( بادسنج جریان ثابت، eng. CCA). اگر دمای المنت گرمایش ثابت بماند، جریان عبوری از المنت متناسب با سرعت جریان هوا خواهد بود ( بادسنج دمای ثابت). CTA).

ادامه دارد



بنابراین، بیایید فوراً توافق کنیم: قرار نیست برای هالیوود فیلم بسازید. حتی در سرزمین عجایب، بیش از پنج درصد از تمام فیلم‌نامه‌ها تایید نمی‌شوند، و تنها یک درصد آن وارد مرحله تولید می‌شود... بنابراین، به جای همه این‌ها، شما می‌خواهید هالیوود خود را بسازید.»
اد گاسکل "ساخت سینمای دیجیتال یا هالیوود در خانه"

پیشگفتار

چه، یک ایستگاه هواشناسی دیگر در آردوینو؟! بله، یک مورد دیگر و، چیزی به من می گوید، آخرین مورد در اینترنت اشیا نیست.


همانطور که هر برنامه نویسی موظف به نوشتن برنامه "سلام جهان!"
تعداد قابل توجهی از پروژه های قبلا ایجاد شده ایستگاه های هواشناسی در اینترنت شرح داده شده است، خواننده می تواند هر یک از آنها را برای اجرا انتخاب کند. صادقانه بگویم، من حدود دوازده پروژه مشابه و مجموعه ای از پروژه های مرتبط را به دقت مطالعه کرده ام. بنابراین، نمی توان گفت که من همه چیز را از ابتدا خلق کردم، البته "روی شانه های غول ها ایستادم".


فوراً باید بگویم که برنامه های من شامل استفاده از خدمات شخص ثالث برای ذخیره و نمایش داده ها نبود. من می خواستم شخصا احساس کنم و بفهمم که چگونه همه چیز از ابتدا تا انتها، از A تا Z، از درون کار می کند.


بنابراین برای کسانی که می خواهند به سرعت چیزی را از هیچ پرچ کنند، این سری از مقالات احتمالاً کار نخواهد کرد. رفتن و خرید یک کیت آماده با دستورالعمل مونتاژ راحت تر است. متخصصان میکروالکترونیک مطلقاً هیچ کاری در اینجا ندارند، شاید در ابتدای سفر غر بزنند و خودشان را به یاد بیاورند.
اما برای کسانی که واقعاً می خواهند بفهمند، فکر می کنم آن را دوست خواهند داشت. شاید این مطالب به عنوان یک کمک آموزشی مفید باشد.



این پروژه در سال 2016 اجرا شد، اما امیدوارم همچنان مرتبط باشد.

مجموعه فناوری

ما چیزهای ساده و پیچیده را مطالعه و کار خواهیم کرد:

  • سنسورهای دما و رطوبت DHT22, DHT11
  • سنسور فشار هوا نوع BMP180
  • ماژول وای فای ESP8266
  • ماژول رادیویی نوع nRF24 2.4 گیگاهرتز
  • خانواده آردوینو پرو مینی، آردوینو مگا
  • باتری خورشیدی و باتری های قابل شارژ
  • زبان برنامه نویسی C / C ++
  • زبان برنامه نویسی PHP
  • سیستم مدیریت پایگاه داده MySQL
  • زبان برنامه نویسی جاوا و فریم ورک اندروید (ایجاد برنامه ای برای Adnroid برای نمایش داده های آب و هوا در تلفن هوشمند).

برخی از موضوعات ذکر شده در بالا ارزش کمی ندارند و برخی از آنها را می توان برای سالها مطالعه کرد. بنابراین، ما فقط در قسمتی که مستقیماً به این پروژه مربوط می شود، چیزهای پیچیده را لمس خواهیم کرد تا متوجه شوید که چگونه همه کار می کند.


ولی ما از همان ابتدا شروع خواهیم کرددرست. یعنی از توضیحات و طراحی دستگاه آینده "روی کاغذ"به طوری که در پایان هر آجر در جای خود قرار می گیرد.

نمونه سازی

همانطور که ویکی پدیا به درستی به ما می گوید، نمونه سازیپیش نویس اجرای سریع یک سیستم کاری است. که، بله، کاملاً بی‌اثر و با برخی خطاها کار نمی‌کند، اما این ایده را به شما می‌دهد که آیا این هنر باید به یک طرح صنعتی توسعه یابد یا خیر. پروسه نمونه سازی نباید طولانی باشد. مرحله نمونه سازی با تجزیه و تحلیل سیستم و اصلاح آن دنبال می شود.


اما این در صنعتی است که کارگران به صورت تمام وقت مشغول به کار هستند.


هرکسی که شب‌ها پروژه‌های حیوان خانگی خود را برای «اینترنت اشیا» می‌پیچد، باید بداند که در حال ایجاد یک نمونه اولیه، یک محصول نیمه‌تمام است. بسیار دور از سطح یک محصول صنعتی معمولی است. از همین رو صنایع دستی آماتور ما را در زمینه های حیاتی حمایت از زندگی سپردو امیدواریم که ما را ناامید نکنند.


یک محصول صنعتی بر پایه عنصر صنعتی ساخته می‌شود و سپس مراحل بسیار بیشتری از جمله اشکال‌زدایی، آزمایش و نگهداری را پشت سر می‌گذارد، قبل از اینکه به یک محصول فروش تبدیل شود.


بنابراین، به جای این همه بار، ما اسباب بازی خودمان را خواهیم ساخت، اما نه یک اسباب بازی ساده. با عناصر خلاقیت فنی، مبانی برنامه نویسی و شناخت (در فرآیند ایجاد) بسیاری از چیزهای مرتبط دیگر.


البته مهندسان الکترونیک در مرحله برنامه نویسی کار سختی خواهند داشت و برنامه نویسان باید روی مدارها عرق کنند، اما نویسنده سعی می کند همه چیز را تا حد امکان در دسترس قرار دهد و به وضوح توضیح دهد که چرا از راه حل های خاصی استفاده شده است.

الزامات

این مرحله معمولا نادیده گرفته می شود. تصمیم به انجام چنین کاری در حال حاضر، و سپس جزئیات کوچک آشکار می شود که کل پروژه را متوقف می کند یا حتی آن را بیش از حد سنگین می کند. تمام خواسته های ما باید ثبت شود، من برای این کار از درایو گوگل استفاده می کنم، از رایانه شخصی و از دستگاه تلفن همراه قابل دسترسی است.


بنابراین، ایستگاه هواشناسی ما باید:

  • اندازه گیری دما و رطوبت بیرون
  • اندازه گیری دما و رطوبت در خانه
  • اندازه گیری فشار اتمسفر
  • مقادیر مشخص شده را روی صفحه نمایش نشان می دهد
  • داده ها را به یک سرور در اینترنت منتقل کنید، جایی که داده ها در یک پایگاه داده ذخیره می شوند و در یک صفحه وب نمایش داده می شوند یا در یک برنامه تلفن همراه استفاده می شوند.

از ساده ترین و ارزان ترین سنسورها استفاده می شود. به عنوان مثال، با نگاه کردن به آینده، می گویم که DHT22 دما را کاملاً دقیق اندازه گیری می کند، اما با رطوبت کمی نادرست است. اما باز هم تکرار می کنم مهم نیست، زیرا ما یک نمونه اولیه در مقابل خود داریم و پخش شدن در رطوبت 5 درصد روی هیچ چیز مهمی در زندگی ما تأثیر نمی گذارد.


معماری سیستم، سخت افزار و نرم افزار باید سیستم را برای افزودن حسگرهای جدید و قابلیت های جدید گسترش دهند.

اهن. انتخاب جزء

این مهمترین بخش است، نه لحیم کاری یا برنامه نویسی. پس از تعیین الزامات سیستم، باید تصمیم گرفت که دقیقاً چه مواردی اجرا شوند.


این جایی است که یک تفاوت ظریف وجود دارد. برای انتخاب کامپوننت ها باید قابلیت های آنها را به خوبی بشناسید، باید خود فناوری ها را بشناسید. به عبارت دیگر، در اینجا شما باید از یک مهندس الکترونیک و برنامه نویس مبتدی دور باشید. بنابراین باید چند سالی را برای کاوش در طیف کامل دستگاه های ممکن صرف کنید؟


دور باطل؟ اما دایره های باطلی وجود دارند تا آنها را بشکنند.


یک خروجی وجود دارد. شما فقط می توانید پروژه یک نفر را بگیرید و تکرار کنید. پروژه های موجود ایستگاه های هواشناسی را مطالعه کردم و امیدوارم قدمی رو به جلو برداشته باشم.


بنابراین. معماری ایستگاه هواشناسی مبتنی بر آردوینو است. چون آردوینو آستانه ورود کمی دارد و من قبلا به این موضوع پرداخته ام. انتخاب بیشتر آسان تر است.


بلافاصله مشخص شد که ایستگاه هواشناسی شامل یک سنسور از راه دور در خارج از پنجره و یک ماژول مرکزی است.


واحد مرکزی و اصلی در داخل ساختمان قرار خواهد گرفت. مهم است که این را در مرحله اولیه تعیین کنیم، از این ویژگی های مهم مانند رژیم دمای کار و منبع تغذیه "رقص".


سنسور از راه دور (یا سنسورها) بدون "مغز" خواهد بود، وظیفه آن اندازه گیری دوره ای و انتقال داده ها به واحد مرکزی خانه است. واحد مرکزی داده ها را از تمام سنسورها دریافت می کند، آنها را روی صفحه نمایش می دهد و آنها را به اینترنت به پایگاه داده ارسال می کند. خوب، و آنجا خیلی راحت تر است، به محض اینکه داده ها در پایگاه داده هستند، می توانید هر کاری که می خواهید با آن انجام دهید، حتی نمودارها را رسم کنید.


برای ارتباط با دنیای خارج، اینترنت بدون ابهام ماژول WiFi ESP8266 بدون هیچ جایگزینی انتخاب شد (تقریباً شاید اکنون چنین جایگزین هایی ظاهر شده باشند). بردهای توسعه اترنت برای آردوینو موجود است، اما من اصلاً نمی خواستم به کابل وصل شوم.



یک سوال جالب این بود که چگونه می توان بین سنسور خارج از پنجره (یا سنسورها، نیاز به گسترش سیستم را به خاطر دارید؟) و مرکز ارتباط برقرار کرد. بیکن های 433 مگاهرتز قطعا مناسب نیستند (اصلا برای هیچ چیز مناسب نیستند).


آیا دوباره از ESP8266 استفاده می کنید؟


معایب این راه حل:

    به وای فای پایدار در خارج از خانه نیاز دارد

    محدوده ارتباطی طولانی نخواهد بود

    قابلیت اطمینان آسیب خواهد دید، اگر اینترنت قطع شود، ما سنسورهای راه دور خود را نخواهیم دید

    مصرف برق بیشتر

    مصرف برق ESP8266:

    هنگام انتقال 120-170 میلی آمپر

    هنگام دریافت 50-56 میلی آمپر

    در حالت خواب عمیق 10 µA (µA)

    خاموش 5 µA (µA).

در پایان، تراشه nRF24L01 + با فرستنده و گیرنده 2.4 گیگاهرتز در یک بطری برای اتصال سنسورهای راه دور به واحد اصلی خانه، با یک آنتن خارجی اضافی برای "شکستن" دیوارها انتخاب شد.



مصرف برق nRF24L01 + 2.4 گیگاهرتز:

  • هنگام دریافت 11 میلی آمپر
  • هنگام انتقال با سرعت 2 مگابیت در ثانیه - 13 میلی آمپر
  • در حالت آماده به کار - 26 μA (μA)
  • خارج از حالت 900 nA (nA).

هر دو ESP8266 و nRF24L01 + دارای محدوده دمای عملیاتی مناسبی هستند: از -40 ℃ تا + 80 ℃.


شما می توانید nRF24L01 + را با حدود 1 دلار یا بلافاصله با آنتن خارجی با قیمت 3 دلار خریداری کنید. می توانید ESP8266-01 را با حدود 4 دلار خریداری کنید. توضیحات محصول را با دقت بخوانید! در غیر این صورت یک آنتن بخرید.


هسته اصلی سیستم پدیدار شده است. بیایید به سراغ خود سنسورها برویم.


همانطور که می دانید در خیابان، دما می تواند به مقادیر منفی برسد، بنابراین سنسور DHT11 مناسب نیست، اما DHT22 درست است.



مشخصات DHT22 / AM2302:

  • منبع تغذیه 3.3 ولت تا 5 ولت، 5 ولت توصیه می شود
  • حداکثر مصرف 2.5 میلی آمپر، در زمان اندازه گیری و انتقال داده
  • محدوده اندازه گیری رطوبت 0-100٪ با خطای 2-5٪
  • محدوده اندازه گیری دما از -40 تا + 125 درجه سانتی گراد با دقت 0.5 ± درجه سانتی گراد
  • درخواست اندازه گیری بیش از 0.5 هرتز - هر 2 ثانیه یک بار.

در داخل خانه، امیدوارم دمای انجماد وجود نداشته باشد، بنابراین می توانید از DHT11 استفاده کنید، به خصوص که من قبلاً داشتم.


مشخصات DHT11:

  • منبع تغذیه از 3.3 ولت تا 5 ولت
  • حداکثر مصرف 2.5 میلی آمپر، در زمان اندازه گیری و انتقال داده
  • محدوده اندازه گیری رطوبت 20-80% با خطای 5%
  • محدوده اندازه گیری دما از 0 تا + 50 درجه سانتیگراد با خطای 2± درجه سانتیگراد
  • درخواست اندازه گیری بیش از 1 هرتز - یک بار در ثانیه.

می توانید DHT22 را با حدود 3 دلار خریداری کنید. DHT11 قیمت کمتری با 1 دلار دارد، اما دقت کمتری نیز دارد.


حالا بیایید دوباره به آردوینو برگردیم. کدام تابلو را انتخاب کنید؟


من بخش های جداگانه سیستم را روی Arduino UNO تست کردم. آن ها ماژول ESP را به UNO وصل کردم و مطالعه کردم و قطع کردم و سپس nRF24 و غیره را وصل کردم. برای اجرای نهایی حسگر خارج از پنجره، من آردوینو پرو مینی را به عنوان نزدیکترین سنسور به Uno از میان سنسورهای مینیاتوری انتخاب کردم.



از نظر مصرف انرژی، آردوینو پرو مینی نیز خوب به نظر می رسد:

  • هیچ مبدل USB-TTL وجود ندارد، که به خودی خود مقدار زیادی "می خورد"،
  • LED از طریق یک مقاومت 10k متصل می شود.

برای حفظ انرژی پیشرفته، برنامه ریزی شد:

  • ال ای دی را بردارید - نشانگر برق آردوینو پرو مینی (از خراب نشدن برد پشیمان شدم)
  • یا از یک مجموعه "لخت" در ریزپردازنده Atmel ATmega328 استفاده کنید (استفاده نشده)
  • از کتابخانه کم مصرف یا JeeLib استفاده کنید.

از بین کتابخانه هایی که من کتابخانه کم توان را انتخاب کردم، ساده است و فقط شامل مواردی است که شما نیاز دارید.


برای واحد مرکزی، از آنجایی که قرار بود چندین دستگاه جانبی به آن متصل شود، برد آردوینو مگا انتخاب شد. علاوه بر این، کاملاً با UNO سازگار است و حافظه بیشتری دارد. با نگاهی به آینده، می گویم که این انتخاب کاملاً موجه بود.


می توانید آردوینو مگا را با حدود 8 دلار خریداری کنید.

مصرف برق و انرژی

حالا در مورد مصرف برق و انرژی.


آردوینو پرو مینی در دو طعم ارائه می شود:

  • برای ولتاژ تغذیه 5 ولت و فرکانس 16 مگاهرتز
  • برای ولتاژ تغذیه 3.3 ولت و فرکانس 8 مگاهرتز.

از آنجایی که ماژول رادیویی nRF24L01 + برای منبع تغذیه به 3.3 ولت نیاز دارد و سرعت در اینجا مهم نیست، یک آردوینو پرو مینی با فرکانس 8 مگاهرتز و 3.3 ولت خریداری کنید.


در این مورد، محدوده ولتاژ تغذیه آردوینو پرو مینی:

  • 3.35-12 ولت برای مدل 3.3 ولت
  • 5-12 ولت برای مدل 5 ولت.

من قبلا یک آردوینو پرو مینی 5 ولت داشتم، به همین دلیل از آن استفاده کردم. شما می توانید آردوینو پرو مینی را با حدود 4 دلار خریداری کنید.


واحد مرکزی از یک شبکه 220 ولت از طریق یک منبع تغذیه کوچک تغذیه می شود که 12 ولت، 450 میلی آمپر، 5 وات را در خروجی فراهم می کند. مانند آن برای 5 دلار. همچنین یک خروجی جداگانه برای 5 ولت وجود دارد.



و اگر این کافی نیست، می توانید آن را به روشی قدرتمندتر قرار دهید. به عبارت دیگر، صرفه جویی در برق برای واحد مرکزی منطقی نیست. اما برای یک سنسور بی سیم از راه دور، صرفه جویی در انرژی مهمترین بخش است. اما من نمی خواهم عملکرد را از دست بدهم.


بنابراین، آردوینو پرو مینی و ماژول رادیویی nRF24 با بسته‌ای از 4 باتری Ni-Mh تغذیه می‌شوند.


و بخاطر داشته باش حداکثر ظرفیت یک باتری مدرنحدود 2500-2700 میلی آمپر ساعت، همه چیز بیشتر یا ترفندهای بازاریابی (Ansmann 2850) یا فریب (UltraFire 3500) است.


من به چند دلیل از باتری های Li-Ion استفاده نمی کنم:

  • بسیار گران قیمت
  • هنگامی که دمای محیط به زیر 0 درجه سانتیگراد کاهش می یابد، قدرت باتری لیتیوم یونی به 40-50٪ کاهش می یابد.
  • آنهایی که ارزان هستند بدون محافظت تولید می شوند و ناامن هستند (با اتصال کوتاه یا تخلیه، می توانند منفجر شوند و بسوزند، یک سری ویدیو را در YouTube ببینید)
  • آنها پیر می شوند، حتی اگر از آنها استفاده نشود (با این حال، این را می توان در مورد همه عناصر شیمیایی گفت)، پس از 2 سال باتری Li-Ion حدود 20٪ از ظرفیت خود را از دست می دهد.

برای یک نمونه اولیه، می توان با باتری های Ni-MH AA یا AAA با کیفیت بالا کنار آمد. علاوه بر این، ما نیازی به جریان های بزرگ نداریم. تنها عیب باتری های Ni-MH زمان شارژ طولانی آنهاست.

طرح کلی ایستگاه هواشناسی

بیایید خلاصه کنیم. در اینجا یک طرح کلی از نحوه کار آن آورده شده است.



ادامه دارد.

در اوقات فراغت و این بار دستورالعمل ساخت یک ایستگاه هواشناسی کوچک را نوشتم. این ساعت به عنوان ساعت تاریخ عمل می کند و دمای داخل و خارج خانه را نمایش می دهد. ما از Arduino UNO به عنوان کنترل کننده اصلی استفاده خواهیم کرد، اما یک برد دیگر با Atmega328p روی برد این کار را انجام می دهد. برای نمایش از صفحه نمایش گرافیکی WG12864B استفاده می کنیم. ما همچنین دو سنسور دمای ds18b20 را به هم وصل خواهیم کرد. یکی داخل اتاق است، دیگری بیرون آورده شده است. بیا شروع کنیم.

در فرآیند تولید محصولات خانگی به موارد زیر نیاز داریم:

Arduino UNO (یا هر برد سازگار با آردوینو دیگر)
- صفحه نمایش گرافیکی WG12864B
- سنسور دما ds18b20، 2 عدد
- منبع تغذیه 6 - 12 ولت
- مقاومت 4.7 اهم 0.25 وات، 2 عدد.
- مقاومت 100 اهم 0.25 وات
- محفظه باتری برای 4 باتری قلمی "انگشت کوچک".
- جعبه از کارتریج پیشوند SEGA
- نوار عایق
- سیم های اتصال
- تخته مدار
- دکمه ها
- چاقوی لوازم التحریر
- آهن لحیم کاری
- لحیم، رزین
- نوار دو طرفه

مرحله 1 WG12864B3 را آماده کنید.
کسانی که قبلاً با صفحه‌نمایش کار نکرده‌اند، ممکن است از تعداد زیاد تغییراتی که شبیه صفحه‌نمایش به نظر می‌رسند، مرعوب شوند. بگذارید کمی توضیح بدهم. اکثر صفحه نمایش های این نوع بر روی ریز مدارهای ks0107 / ks0108 کار می کنند. تمام صفحه ها را می توان به 4 نوع تقسیم کرد:

گزینه A: HDM64GS12L-4، Crystalfontz CFAG12864B، Sparkfun LCD-00710CM، NKC Electronics LCD-0022، WinStar WG12864B-TML-T

نوع B: HDM64GS12L-5، Lumex LCM-S12864GSF، Futurlec BLUE128X64LCD، نمایشگرهای AZ AGM1264F، Displaytech 64128A BC، Adafruit GLCD، DataVision DG12864 LDG12864-S12864-84G18، Top

گزینه C: Shenzhen Jinghua Displays Co Ltd. JM12864

گزینه D: Wintek- Cascades WD-G1906G، Wintek - GEN / WD-G1906G / KS0108B، Wintek / WD-G1906G / S6B0108A، TECDIS / Y19061 / HD61202، Varitronix / MGLS2 / HD6126

آنها تقریباً یکسان به نظر می رسند. اما پین های اتصال آنها متفاوت است. من WG12864B3 V2.0 را انتخاب کردم، و به شما توصیه می کنم، اما اگر صفحه نمایش متفاوت بود، یا فقط یکی در دست ندارید، می توانید به راحتی با کمک جدول متوجه شوید:

خصوصیات مختصر:

طرح های اتصال مختلف زیادی در اینترنت وجود دارد و به نظر می رسد همه چیز کار می کند. نکته این است که نه تنها صفحه نمایش های مختلف، بلکه دو راه برای اتصال آنها وجود دارد: سریال و موازی. هنگام استفاده از اتصال پورت سریال، تنها به 3 خروجی میکروکنترلر نیاز داریم. با حداقل موازی 13. انتخاب در این مورد واضح است، آردوینو و بنابراین تعداد زیادی پین. برای اتصال موازی، نمودار اتصال به شرح زیر است:

برای اتصال سریالی که استفاده خواهیم کرد، نمودار به شرح زیر است:

WG12864B - آردوینو UNO 1 (GND) - GND 2 (VCC) - + 5V 4 (RS) - 10 5 (R / W) - 11 6 (E) - 13 15 (PSB) - GND 19 (BLA) - از طریق مقاومت 100 اهم - + 5 ولت 20 (BLK) - GND

برای تنظیم کنتراست باید یک پتانسیومتر روی صفحه وجود داشته باشد. صفحه نمایش هایی بدون آن وجود دارد، اما اکنون این یک چیز نادر است:

یک مقاومت 100 اهم مورد نیاز است تا ولتاژ 5 ولت به طور تصادفی دیودهای نور پس زمینه را نسوزد.

مرحله 2 ساخت کیس
برای مورد، بیایید جعبه را از کارتریج پیشوند سگا بگیریم. اگر این جعبه را در دست پیدا نکردید، می توانید از کیس دیگری استفاده کنید. نکته اصلی این است که صفحه نمایش و آردوینو در آن قرار می گیرند.

فیلم شفاف بالای جعبه را جدا کنید تا هیچ تکه ای باقی نماند:

سپس با استفاده از یک چاقوی اداری، یک پنجره 37x69 را برای صفحه نمایش ببرید.

در سمت عقب در امتداد لبه برش نوار دو طرفه ترجیحاً سیاه می چسبانیم:

کاغذ محافظ را از روی نوار جدا می کنیم و صفحه نمایش خود را روی آن می چسبانیم:

از بیرون باید شبیه به این باشد:

در زیر صفحه، همچنین روی نوار دو طرفه، آردوینو را با برش های اولیه برای درگاه USB و سوکت برق وصل می کنیم:

برش هایی برای سوکت های آردوینو باید در دو طرف جعبه ایجاد شود تا بتوان آن را آزادانه بست:

مرحله 3 سنسورهای دما
ما از سنسورهای دمای دیجیتال DS18B20 استفاده خواهیم کرد. با استفاده از آنها، دقت اندازه گیری بالایی را به دست می آوریم، خطای بیش از 0.5 درجه سانتیگراد، در محدوده دمایی -55 ... + 125 درجه سانتیگراد. علاوه بر این، سنسور دیجیتال است و تمام محاسبات را به تنهایی انجام می دهد و آردوینو فقط قرائت های آماده را دریافت می کند. هنگام اتصال این سنسور، به مقاومت 4.7KΩ بین پایه های DQ و VDD توجه کنید. چندین گزینه اتصال نیز امکان پذیر است. با منبع تغذیه خارجی، به نظر من بهترین گزینه، ما از آن استفاده خواهیم کرد:

با هر گزینه منبع تغذیه، سنسورها به صورت موازی متصل می شوند:

سنسور دمای داخلی را روی یک تخته کوچک به همراه دو دکمه قرار می دهیم که از آنها برای تنظیم زمان و تاریخ ساعت استفاده می کنیم:

سیم مشترک را از هر دو دکمه به GND وصل می کنیم، سیم را از دکمه اول به A0 و از دوم به A1 وصل می کنیم.
ما آن را به نوار دو طرفه در کنار آردوینو وصل می کنیم:

سنسوری که قرار است در خارج از اتاق قرار گیرد، بهتر است در یک محفظه فلزی، گرد و غبار و رطوبت انتخاب شود:

سیم طول مورد نیاز را محاسبه کنید تا بتوانید سنسور را بیرون از پنجره آویزان کنید، نکته اصلی این است که بیش از 5 متر نباشد، اگر به طول بیشتری نیاز دارید، باید مقدار کشش را کاهش دهید. مقاومت

سیم را از گذرگاه داده DQ هر دو سنسور به پایه 5 آردوینو وصل کنید.
Vdd - +5 آردوینو.
GND - GND آردوینو.

مرحله 4 تغذیه
برای برق می توانید از منبع تغذیه با ولتاژ 6 تا 12 ولت استفاده کنید. در انتهای سیم فلر برق، باید دوشاخه ای را لحیم کنید که با سوکت برق آردوینو مطابقت داشته باشد:

یا می توانید یک محفظه باتری برای چهار باتری قلمی در کیس قرار دهید. و سیم مثبت را از محفظه به Vin Arduino وصل کنید و منفی را به GND.

مرحله 5 محیط برنامه نویسی را آماده کنید.
ابتدا باید Arduino IDE را از وب سایت رسمی دانلود و نصب کنید

و همچنین به دو کتابخانه مورد نیاز برای طرح اضافه کنید. OneWire - برای برقراری ارتباط با سنسورهای ds18b20 لازم است:

U8glib - برای نمایش اطلاعات روی صفحه استفاده می شود:

دانلود کتابخانه ها سپس بایگانی ها را باز می کنیم و محتویات بایگانی ها را به پوشه "libraries" واقع در پوشه ای که Arduino IDE نصب شده است منتقل می کنیم. همچنین امکان افزودن کتابخانه ها از طریق Arduino IDE وجود دارد. برای انجام این کار، بدون باز کردن آرشیوها، Arduino IDE را راه اندازی کنید، منوی Sketch را انتخاب کنید - کتابخانه را متصل کنید. در بالای لیست کشویی، مورد "Add.Zip Library" را انتخاب کنید. ما محل بایگانی های دانلود شده را نشان می دهیم. پس از انجام تمام مراحل، باید Arduino IDE را مجددا راه اندازی کنید.

مرحله 6 ویرایش طرح.
سنسورهای دما بر اساس پروتکل One Wire کار می کنند و یک آدرس منحصر به فرد برای هر دستگاه دارند - یک کد 64 بیتی. توصیه نمی شود دستوراتی برای یافتن حسگرها به طرح اضافه کنید. برای سکسکه کردن سنسورها نیازی به بارگیری آردوینو نیست. بنابراین، ابتدا، با کنار هم قرار دادن همه چیز، طرح را در آردوینو، واقع در منوی File - Examples - Dallas Temperature - OneWireSearch پر می کنیم. سپس Tools - Port Monitor را راه اندازی می کنیم. آردوینو باید حسگرهای ما را پیدا کند، آدرس‌ها و دما را بنویسد. این آدرس ها باید یادداشت شوند یا به سادگی در جایی کپی شوند. اکنون طرح Ard_Tic_Tak_WG12864B_2_x_Term_Serial را باز کرده و به دنبال خطوط بگردید:

بایت addr1 = (0x28, 0xFF, 0x75, 0x4E, 0x87, 0x16, 0x5, 0x63)؛ // آدرس بایت داخلی addr2 = (0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x14, 0xB4, 0x1, 0x1, 0x1, 0x16, 0x1, 0x16, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1. آدرس سنسور خارجی

ما آدرس های مربوط به محل سنسورها را با آدرس های خود جایگزین می کنیم.
ساعت ما از ماژول RTC (ساعت واقعی) استفاده نمی کند، بنابراین لازم است نرخ ساعت را اصلاح کنیم. برای راحتی، خط را لغو نظر کنید (ثانیه ها روی صفحه ظاهر می شوند):

//u8g.setPrintPos(44, 50); u8g.print (sek); // نمایش ثانیه ها برای کنترل صحت حرکت

زمان صحیح را از طریق مانیتور پورت تنظیم کنید. برای انجام این کار، مانیتور پورت را باز کنید، منتظر پایان اندازه گیری های اولیه دمایی باشید و تاریخ و زمان فعلی را با فرمت "روز، ماه، سال، ساعت، دقیقه، ثانیه" وارد کنید. بدون فاصله، اعداد را با کاما یا نقطه جدا کنید.

اگر ساعت عجله دارد، مقدار را به یک بزرگتر تغییر دهید، توصیه می کنم با یک مرحله 100 واحدی آزمایش کنید. اگر من عقب هستم، باید مقدار را در خط کاهش دهید:

اگر (micro () - prevmicros> 494000) (// برای اصلاح به چیز دیگری تغییر دهید 500000 بود

از نظر تجربی، عددی را که ساعت با دقت کافی اجرا می‌شود، تعیین می‌کنیم. برای تعیین دقت دوره، خروجی ثانیه نیز مورد نیاز است. پس از کالیبراسیون دقیق عدد، می توان ثانیه ها را حاشیه نویسی کرد و بنابراین از صفحه نمایش حذف کرد.
طرح را پر کنید.