Агуулгын хүснэгт:
- Алхам 1: Монголбанк - Билл материал
- Алхам 2: Аналог хэт ягаан туяаны мэдрэгч
- Алхам 3: Дэлгэц суурилуулах: OLED
- Алхам 4: Орон нутгийн хэт ягаан туяаны тоолуур
- Алхам 5: Агаарын температур ба чийгшлийг хэмжих DHT22 суурилуулах
- Алхам 6: ThingSpeak.com руу өгөгдөл илгээх
- Алхам 7: Дүгнэлт
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-02-01 14:41
Энэхүү гарын авлагад бид хэт ягаан туяа (хэт ягаан туяа), агаарын температур, чийгшил гэх мэт алсын мэдээллийг авах болно. Эдгээр өгөгдөл нь маш чухал бөгөөд ирээдүйд цаг уурын станцад ашиглагдах болно.
Диаграм блок нь эцэст нь юу авахыг харуулдаг.
Алхам 1: Монголбанк - Билл материал
NodeMCU (ESP8266-12E) - 9.00 доллар
Чийглэг ба температур мэдрэгч (DHT22) - USD10.00
Хэт ягаан туяаны мэдрэгч - 4.00 ам
OLED ам.доллар 12.00
Талхны самбар - USD1.00
Алхам 2: Аналог хэт ягаан туяаны мэдрэгч
Энэхүү хэт ягаан туяаны мэдрэгч нь гэрлийг мэдрэх спектрээс олж авсан хэт ягаан туяаны пропорциональ гаралтыг бий болгодог. Энэ нь хэт ягаан туяаны фотодиод (галлий нитрид дээр суурилсан) ашигладаг бөгөөд энэ нь 240-370нм гэрлийн долгионыг (UVB болон UVA спектрийн ихэнх хэсгийг хамардаг) илрүүлдэг. Фотодиодоос гарах дохионы түвшин маш бага, нано-ампер түвшинд байдаг тул модуль нь дохиог илүү уншигдах вольтын түвшинд (0-ээс 1В хүртэл) өсгөхийн тулд үйлдлийн өсгөгч суурилуулсан болно.
Мэдрэгч ба оп-өсгөгчийг VCC-ийг 3.3VDC (эсвэл 5VDC), GND-ийг тэжээлийн газардуулгад холбох замаар тэжээх боломжтой. Аналог дохиог OUT pin -ээс авах боломжтой.
Түүний гаралт нь милливольт байх бөгөөд манай NodeMCU -ийн аналог оролтоор унших болно. Уншсаны дараа утгыг кодоор илүү сайн зохицуулахын тулд бид үүнийг "хөрвүүлэх" (эсвэл "газрын зураг") хийх ёстой. Бид үүнийг readSensorUV () функцээр хийж болно:
/ * Хэт ягаан туяаны мэдрэгчийг mV -ээр уншиж, хэт ягаан туяаны индексийн тооцооллыг дуудах */
хүчингүй readSensorUV () {байт numOfReadings = 5; dataSensorUV = 0; for (int i = 0; i <numOfReadings; i ++) {dataSensorUV+= analogRead (sensorUVPin); саатал (200); } dataSensorUV /= numOfReadings; dataSensorUV = (dataSensorUV * (3.3 / 1023.0)) * 1000; Serial.println (dataSensorUV); indexCalculate (); }
Хэт ягаан туяаны өгөгдөлтэй болсны дараа бид дээрх хүснэгтэд заасан хэт ягаан туяаны индексийг хялбархан тооцоолж чадна. IndexCalculate () функц нь бидний хувьд үүнийг хийх болно.
/ * Хэт ягаан туяаны индексийн тооцоо */
void indexCalculate () {if (dataSensorUV <227) indexUV = 0; өөр бол (227 <= dataSensorUV && dataSensorUV <318) indexUV = 1; өөр бол (318 <= dataSensorUV && dataSensorUV <408) indexUV = 2; өөр бол (408 <= dataSensorUV && dataSensorUV <503) indexUV = 3; өөр бол (503 <= dataSensorUV && dataSensorUV <606) indexUV = 4; өөр бол (606 <= dataSensorUV && dataSensorUV <696) indexUV = 5; өөр бол (696 <= dataSensorUV && dataSensorUV <795) indexUV = 6; өөр бол (795 <= dataSensorUV && dataSensorUV <881) indexUV = 7; өөр бол (881 <= dataSensorUV && dataSensorUV <976) indexUV = 8; өөр бол (976 <= dataSensorUV && dataSensorUV <1079) indexUV = 9; өөр бол (1079 <= dataSensorUV && dataSensorUV <1170) indexUV = 10; өөр indexUV = 11; }
Алхам 3: Дэлгэц суурилуулах: OLED
Туршилтын зорилгоор бид хэт ягаан туяаны тоолууртаа OLED -ийг оруулах болно (Энэ алхам нь бүрэн сонголт биш юм).
Туршилтын явцад Цуваа мониторыг ашиглах нь зөв, гэхдээ та прототипээ PC-ээс хол байрлуулах горимд ашиглахад юу болж байна вэ? Үүний тулд үндсэн шинж чанарууд болох OLED дэлгэц болох SSD1306 -ийг суулгацгаая.
- Дэлгэцийн хэмжээ: 0.96"
- I2C IIC SPI цуврал
- 128X64
- Цагаан OLED LCD LED
Цахилгааны диаграмыг дагаж манай OLED -ийн 4 зүүг холбоно уу.
- VCC нь 3.3V хүртэл ажилладаг
- GND газар унав
- SCL нь NodeMCU (GPIO 2) ==> D4 руу ордог
- SDA нь NodeMCU (GPIO 0) ==> D3 руу ордог
Дэлгэцийг холбосны дараа түүний номын санг Arduino IDE дээрээ татаж аваад суулгацгаая: Daniel Eichhorn -ийн боловсруулсан "SSD1306 дэлгэцийн ESP8266 OLED драйвер" (Та 3.0.0 буюу түүнээс дээш хувилбарыг ашиглаж байгаа эсэхээ шалгаарай!).
Номын санг SSD1306Wire.h дээрээс олж болох Arduino IDE дээрээ суулгаарай
IDE -ийг дахин эхлүүлсний дараа номын санг аль хэдийн суулгасан байх ёстой.
Номын сан нь W2.h номын санг ашиглан OLED дэлгэц рүү нэвтрэх I2C протоколыг дэмждэг.
/ * OLED */
#include "SSD1306Wire.h" #include "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306 Утасны дэлгэц (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN);
OLED дэлгэцтэй хамт ашиглах зарим чухал API -г жагсаая. Бүрэн жагсаалтыг дээрх GITHub дээрээс олж болно.
A. Дэлгэцийн хяналт:
хүчингүй init (); // Дэлгэцийг эхлүүлэх
void displayOn (хүчингүй); // Void displayOff (void) дээр дэлгэцийг асаах; // Дэлгэцийг идэвхгүй болгох (хоосон); // Орон нутгийн пикселийн буферийг хүчингүй болгох flipScreenVertically (); // Дэлгэцийг дээш нь эргүүл
B. Текстийн үйлдлүүд:
void drawString (int16_t x, int16_t y, String текст); // (xpos, ypos, "Текст")
хүчингүй setFont (const char* fontData); // Одоогийн фонтыг тохируулна.
Боломжтой үндсэн фонтууд:
- ArialMT_Plain_10,
-
ArialMT_Plain_16,
- ArialMT_Plain_24
OLED өөрөө болон түүний номын санг хоёуланг нь суулгасны дараа үүнийг шалгах энгийн програм бичье. IDE дээрээ доорх кодыг оруулна уу, үр дүн нь дээрх зурагт үзүүлсэн шиг харагдах болно.
* OLED */
#include "SSD1306Wire.h" #include "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306 Утасны дэлгэц (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN); void setup () {Serial.begin (115200); displaySetup (); } void loop () {} / * OLED дээр тохиргооны өгөгдлийг эхлүүлэх * / void displaySetup () {display.init (); // дэлгэцийн дэлгэцийг эхлүүлэх.clear (); // Дэлгэцийн дэлгэцийг цэвэрлэ.flipScreenVertically (); // Дэлгэцийг дээрээс нь доош харуул дэлгэц.display (); // Өгөгдлийг дэлгэц дээр тавих Serial.println ("Дэлгэцийн тестийг эхлүүлэх"); display.setFont (ArialMT_Plain_24); display.drawString (30, 0, "OLED"); // (xpos, ypos, "Текст") display.setFont (ArialMT_Plain_16); display.drawString (18, 29, "Туршилтыг эхлүүлсэн"); display.setFont (ArialMT_Plain_10); display.drawString (10, 52, "Serial BaudRate:"); display.drawString (90, 52, String (11500)); display.display (); // Дэлгэцийн саатал дээр өгөгдөл оруулах (3000); }
Дээрх програмыг миний GitHub дээрээс татаж авах боломжтой.
NodeMCU_OLED_Test
Алхам 4: Орон нутгийн хэт ягаан туяаны тоолуур
Одоо OLED дэлгэц суурилуулснаар бид зайгаа холбож, хэт ягаан туяаны тоолуур ашиглан алсын зайнаас туршилт хийх боломжтой боллоо.
#тодорхойлох SW_VERSION "UV_Sensor_V.1"
/ * Хэт ягаан туяаны мэдрэгч */ #тодорхойлох мэдрэгчUVPin A0 int dataSensorUV = 0; int indexUV = 0; / * OLED */ #include "SSD1306Wire.h" #include "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306 Утасны дэлгэц (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN); void setup () {Serial.begin (115200); displaySetup (); } void loop () {readSensorUV (); дэлгэцUV (); саатал (1000); } / * OLED дээр тохиргооны өгөгдлийг эхлүүлж харуулах * / void displaySetup () {display.init (); // display display.clear (); // Дэлгэцийн дэлгэцийг цэвэрлэ.flipScreenVertically (); // Дэлгэцийг дээрээс нь доош харуул дэлгэц.display (); // Өгөгдлийг дэлгэц дээр тавих Serial.println ("Хэт ягаан туяаны мэдрэгчийн туршилтыг эхлүүлэх"); display.setFont (ArialMT_Plain_24); display.drawString (10, 0, "MJRoBot"); display.setFont (ArialMT_Plain_16); display.drawString (0, 29, "Хэт ягаан туяаны мэдрэгчийн тест"); display.setFont (ArialMT_Plain_10); display.drawString (0, 52, "SW Ver.:"); display.drawString (45, 52, SW_VERSION); display.display (); саатал (3000); } / * Хэт ягаан туяаны мэдрэгчийг mV -ээр уншиж, хэт ягаан туяаны индексийн тооцооллыг дууд * / void readSensorUV () {byte numOfReadings = 5; dataSensorUV = 0; for (int i = 0; i <numOfReadings; i ++) {dataSensorUV+= analogRead (sensorUVPin); саатал (200); } dataSensorUV /= numOfReadings; dataSensorUV = (dataSensorUV * (3.3 / 1023.0)) * 1000; Serial.println (dataSensorUV); indexCalculate (); } / * Хэт ягаан туяаны индексийн тооцоолол * / void indexCalculate () {if (dataSensorUV <227) indexUV = 0; өөр бол (227 <= dataSensorUV && dataSensorUV <318) indexUV = 1; өөр бол (318 <= dataSensorUV && dataSensorUV <408) indexUV = 2; өөр бол (408 <= dataSensorUV && dataSensorUV <503) indexUV = 3; өөр бол (503 <= dataSensorUV && dataSensorUV <606) indexUV = 4; өөр бол (606 <= dataSensorUV && dataSensorUV <696) indexUV = 5; өөр бол (696 <= dataSensorUV && dataSensorUV <795) indexUV = 6; өөр бол (795 <= dataSensorUV && dataSensorUV <881) indexUV = 7; өөр бол (881 <= dataSensorUV && dataSensorUV <976) indexUV = 8; өөр бол (976 <= dataSensorUV && dataSensorUV <1079) indexUV = 9; өөр бол (1079 <= dataSensorUV && dataSensorUV <1170) indexUV = 10; өөр indexUV = 11; } /* Хэт ягаан туяаны утгыг локал OLED дээр харуулах* / void displayUV () {display.clear (); display.setFont (ArialMT_Plain_16); display.drawString (20, 0, "Хэт ягаан туяаны мэдрэгч"); display.drawString (0, 23, "UV (mV):"); display.drawString (80, 23, String (dataSensorUV)); display.drawString (0, 48, "Хэт ягаан туяаны индекс:"); display.setFont (ArialMT_Plain_24); display.drawString (82, 42, String (indexUV)); display.display (); }
Дээрх кодыг миний GitHun -аас татаж авах боломжтой: NodeMCU_UV_Sensor_OLED.ino
Алхам 5: Агаарын температур ба чийгшлийг хэмжих DHT22 суурилуулах
Цаг агаарын мэдээллийг авахад хамгийн их ашиглагддаг мэдрэгчийн нэг бол харьцангуй чийгшил, температурын дижитал DHT22 (эсвэл ах нь DHT11) юм. Энэ нь багтаамжийн чийгшил мэдрэгч ба термистор ашиглан хүрээлэн буй орчны агаарыг хэмжиж өгөгдлийн зүү дээр дижитал дохио цацдаг (аналог оролтын зүү шаардлагагүй).
Мэдрэгч нь 3.3V-аас 5V хүртэлх хүчдэлтэй байх ёстой бөгөөд -40oC-аас +80oC хүртэл температурт +/- 0.5oC нарийвчлалтай, харьцангуй чийгшилт +/- 2% хүртэл ажиллах ёстой. Мэдрэх хугацаа нь дунджаар 2 секунд (унших хоорондох хамгийн бага хугацаа) гэдгийг санах нь зүйтэй. Adafruit сайт нь DHT22 болон түүний дүү DHT11 -ийн талаар маш их мэдээлэл өгдөг. Дэлгэрэнгүй мэдээллийг DHT22/11 заавар хуудаснаас авна уу.
DHT22 нь 4 тээглүүртэй (мэдрэгч рүү харсан, 1 -р зүү хамгийн зүүн талд байна):
- VCC (бид NodeMCU -ээс 3.3V -тэй холбогдох болно);
- Өгөгдөл гарах;
- Холбогдоогүй ба
- Газар.
Мэдрэгчийг ихэвчлэн 20м -ээс бага зайд ашиглахад Data ба VCC тээглүүр хооронд 10К эсэргүүцэл холбох шаардлагатай. Гаралтын зүү нь NodeMCU зүү D3 -тэй холбогдоно (дээрх диаграмыг үзнэ үү). Мэдрэгчийг манай модульд суулгасны дараа DHT номын санг Adafruit GitHub репозитороос татаж аваад Arduino -ийн номын сангийн файлд суулгаарай. Arduino IDE -ийг дахин ачаалсны дараа "DHT мэдрэгчийн номын сан" суулгасан байх ёстой.
Кодын эхэнд бид дараах мөрүүдийг оруулах ёстой.
/* DHT22*/
#"DHT.h" оруулах #DHTPIN D2 тодорхойлох #DHTTYPE DHT22 DHT dht (DHTPIN, DHTTYPE) тодорхойлох; float hum = 0; хөвөх температур = 0;
Мэдрэгчийг унших шинэ функц бий болно.
/ * DHT дата авах */
void getDhtData (void) {float tempIni = temp; float humIni = хум; temp = dht.readTemperature (); hum = dht.readHumidity (); if (isnan (hum) || isnan (temp)) // Уншиж чадаагүй эсэхийг шалгаад эрт гарч (дахин оролдоно уу). {Serial.println ("DHT мэдрэгчээс уншиж чадсангүй!"); temp = tempIni; hum = humIni; буцах; }}
Хэт ягаан туяа ба DHT мэдрэгчийг агуулсан бүрэн кодыг миний GitHub дээрээс татаж авах боломжтой: NodeMCU_UV_DHT_Sensor_OLED
Алхам 6: ThingSpeak.com руу өгөгдөл илгээх
Одоогийн байдлаар бид NodeMCU ESP12-E-ийг Arduino-ийн ердийн болон энгийн самбар болгон ашиглаж байна. Мэдээжийн хэрэг, бид энэхүү гайхамшигтай бяцхан чипийн бодит боломжийг зөвхөн "маажсан" бөгөөд одоо диваажинд хөөрөх цаг болжээ! Эсвэл одод илүү дээр! Өө … үүл рүү!;-)
Эхлээд үзье!
- Нэгдүгээрт, та ThinkSpeak.com дээр данстай байх ёстой
- Суваг үүсгэх зааврыг дагаж сувгийнхаа ID болон API түлхүүрийг бичээрэй
- Доорх кодыг WiFi сүлжээ болон Thinkspeak итгэмжлэлийн мэдээллээр шинэчилнэ үү
- IDE дээр програмыг ажиллуулна уу
Кодыг хамгийн чухал хэсгүүдэд тайлбарлая.
Нэгдүгээрт, ESP8266 номын сан руу залгаж, WiFi клиентийг тодорхойлж, өөрийн чиглүүлэгч болон Thinkspeak итгэмжлэлийг тодорхойлъё.
/* ESP12-E & Thinkspeak*/
#WiFiClient үйлчлүүлэгчийг оруулах; const char* MY_SSID = "Таны SSD ID энд байна"; const char* MY_PWD = "Таны нууц үг эндээс"; const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY = "ТАНЫ СУВАГ API ТҮЛХҮҮР БИЧИХ";
Хоёрдугаарт, IoT төслүүдийн хувьд маш чухал номын санг оруулъя: SimpleTimer.h:
/ * TIMER */
#SimpleTimer таймер оруулах;
Гуравдугаарт, setup () хийх явцад бид цуваа холболтыг эхлүүлж, connectWiFi () функцийг дуудаж, таймеруудыг тодорхойлно. Кодын мөр: timer.setInterval (60000L, sendDataTS); ThinkSpeak суваг руу мэдээлэл оруулахын тулд 60 секунд тутамд sendDataTS () функцийг дуудах болно.
хүчингүй тохиргоо ()
{… Serial.begin (115200); саатал (10); … ConnectWifi (); timer.setInterval (60000L, sendDataTS); …}
Эцэст нь хэлэхэд, () давталтын үед таймерыг эхлүүлэх цорын ганц тушаал л шаардлагатай болно.
хоосон давталт ()
{… Timer.run (); // SimpleTimer -ийг эхлүүлнэ}
Доороос та Thinkspeak холбоог зохицуулахад ашигладаг хоёр чухал үүргийг харж болно.
Таны WiFi сүлжээнд ESP12-E холболт:
/***************************************************
*WiFi холболт ********************************************* ***/ void connectWifi () {Serial.print ("Холбогдож байна"+*MY_SSID); WiFi.begin (MY_SSID, MY_PWD); while (WiFi.status ()! = WL_CONNECTED) {саатал (1000); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi холбогдсон"); Serial.println (""); }
ESP12-E нь ThinkSpeak руу өгөгдөл илгээх:
/***************************************************
*Thinkspeak суваг руу мэдээлэл илгээх **************************************** ******/ void sendDataTS (void) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr += "& field1 ="; postStr += String (dataSensorUV); postStr += "& field2 ="; postStr += String (indexUV); postStr += "& field3 ="; postStr += String (temp); postStr += "& field4 ="; postStr += String (хум); postStr += "\ r / n / r / n"; client.print ("POST /update HTTP /1.1 / n"); client.print ("Хост: api.thingspeak.com / n"); client.print ("Холболт: хаах / n"); client.print ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n"); client.print ("Агуулгын төрөл: application/x-www-form-urlencoded / n"); client.print ("Агуулга-Урт:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); саатал (1000); } илгээсэн ++; client.stop (); }
Бүрэн кодыг миний GitHub дээрээс олж болно: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT
Та кодоо NodeMCU -д байршуулсны дараа. Гадны батерейг холбоод нарны доор хэмжилт хийцгээе. Би алсын станцыг дээвэр дээр тавиад дээрх зургуудад үзүүлсэн шиг ThingSpeak.com дээр мэдээлэл авч эхлэв.
Алхам 7: Дүгнэлт
Урьдын адил энэ төсөл нь бусад хүмүүст электроникийн ертөнцөд аялахад нь тусална гэж найдаж байна!
Дэлгэрэнгүй мэдээлэл, эцсийн кодыг авахын тулд миний GitHub хадгаламж руу зочилно уу: RPi-NodeMCU-Weather-Station
Бусад төслүүдийн талаар MJRoBot.org миний блогоос үзнэ үү
Хүлээж байгаарай! Дараагийн заавар нь бид Raspberry Pi вэб сервер дээр суурилсан алсын цаг уурын станцаас өгөгдлийг төв рүү дамжуулах болно.
Дэлхийн өмнөд хэсгээс мэндчилгээ дэвшүүлье!
Дараагийн зааварчилгаагаараа уулзацгаая!
Баярлалаа, Марсело
Зөвлөмж болгож буй:
Хамгийн дэвшилтэт гар чийдэн - COB LED, хэт ягаан туяа, дотор лазер: 5 алхам (зурагтай)
Хамгийн дэвшилтэт гар чийдэн - COB LED, хэт ягаан туяаны LED, доторхи лазер: Зах зээл дээр ижил хэрэглээтэй, гэрэлтүүлгийн хувьд ялгаатай олон гар чийдэн байдаг, гэхдээ би нэгээс олон төрлийн гэрэлтэй гар чийдэн харж байгаагүй. Энэ төсөлд би нэг гар чийдэн дээр 3 төрлийн гэрлийг цуглуулсан
(IOT төсөл) ESP8266 болон Openweather API ашиглан цаг агаарын мэдээллийг авах: 5 алхам
(IOT төсөл) ESP8266 болон Openweather API ашиглан цаг агаарын мэдээг авах: Энэхүү зааварчилгаанд бид хотынхаа цаг агаарын мэдээг openweather.com/api -аас татаж авах, боловсруулах програм хангамж ашиглан харуулах энгийн IOT төслийг бүтээх гэж байна
Arduino нано ба хэт ягаан туяа бүхий CoronaVirus алуурчин: 5 алхам
Ардуино нано ба хэт ягаан туяа бүхий CoronaVirus алуурчин: Эрүүл мэндийн үндэсний комиссоос гаргасан шинэ коронавирусын оношлогоо, эмчилгээний талаархи хамгийн сүүлийн удирдамжийн дагуу вирус нь хэт ягаан туяа, халуунд мэдрэмтгий байдаг тул хэт ягаан туяа нь вирусыг үр дүнтэй устгадаг
Хуучин сканнерыг дахин боловсруулах замаар ПХБ -ийн хэт ягаан туяа: 6 алхам (зурагтай)
Хуучин сканнерыг дахин боловсруулах замаар ПХБ -ийн хэт ягаан туяа: Сайн байна уу, би хуучин сканнераа дахин боловсруулж ПХБ -ийн хэт ягаан туяаны цацрагийг ингэж хийсэн
Adafruit SI1145 хэт ягаан туяа/харагдахуйц гэрэл/хэт улаан туяаны мэдрэгч - Arduino ба LCD: 4 алхам
Adafruit SI1145 хэт ягаан туяа/харагдахуйц гэрэл/хэт улаан туяаны мэдрэгч - Arduino ба LCD: Энэхүү төсөл нь хэт ягаан туяаны одоогийн хэмжээг тооцоолохын тулд Adafruit SI1145 хэт ягаан туяа/харагдахуйц гэрэл/хэт улаан туяаны мэдрэгчийг ашигладаг. Хэт ягаан туяа шууд мэдрэгддэггүй. Үүний оронд энэ нь харагдахуйц гэрэл ба хэт улаан туяаны заалтын функц гэж тооцогддог. Би үүнийг гадаа туршиж үзэхэд энэ нь