- Súčasti sú povinné
- Senzor Nova PM SDS011 na meranie PM2,5 a PM10
- Základy 0,96 'OLED zobrazovacieho modulu
- Príprava senzora MQ-7 na meranie oxidu uhoľnatého (CO)
- Výpočet indexu kvality ovzdušia
- Schéma zapojenia
- Budovanie obvodu systému monitorovania kvality ovzdušia na doske Perf
- Nastavenie služby Adafruit IO
- Vysvetlenie kódu pre
- 3D tlačené puzdro pre monitorovací systém AQI
- Testovanie monitorovacieho systému AQI
Keď nastáva zima, vzduch, ktorý visí nad nami, sa zahusťuje dymom a plynnými emisiami z horiacich polí, priemyselných tovární a automobilovej dopravy, čo blokuje slnko a sťažuje dýchanie. Odborníci tvrdia, že vysoká úroveň znečistenia ovzdušia a pandémia COVID-19 môžu byť nebezpečnou zmesou, ktorá môže mať vážne následky. Nevyhnutnosť monitorovania kvality ovzdušia v reálnom čase je veľmi zrejmá.
V tomto projekte teda postavíme systém monitorovania kvality vzduchu ESP32 pomocou snímača Nova PM SDS011, snímača MQ-7 a snímača DHT11. Budeme tiež používať modul OLED Display na zobrazovanie hodnôt kvality ovzdušia. Index kvality ovzdušia (AQI) v Indii je založený na osem znečisťujúcich látok, PM10, PM2,5, SO2 a NO2, CO, ozón, NH3 a Pb. Nie je však potrebné merať všetky znečisťujúce látky. Budeme teda merať koncentráciu PM2,5, PM10 a oxidu uhoľnatého na výpočet indexu kvality ovzdušia. Hodnoty AQI budú zverejnené na serveri Adafruit IO, aby sme ich mohli sledovať odkiaľkoľvek. Predtým sme tiež merali koncentráciu LPG, dymu a amoniaku pomocou Arduina.
Súčasti sú povinné
- ESP32
- Senzor Nova PM SDS011
- 0,96 'SPI OLED displejový modul
- Senzor DHT11
- Senzor MQ-7
- Prepojovacie drôty
Senzor Nova PM SDS011 na meranie PM2,5 a PM10
Senzor SDS011 je najnovší senzor kvality vzduchu vyvinutý spoločnosťou Nova Fitness. Funguje na princípe laserového rozptylu a vo vzduchu dokáže dostať koncentráciu častíc medzi 0,3 až 10 μm. Tento snímač pozostáva z malého ventilátora, prívodu vzduchu, laserovej diódy a fotodiódy. Vzduch vstupuje cez prívod vzduchu, kde svetelný zdroj (Laser) osvetľuje častice a rozptýlené svetlo sa transformuje na signál fotodetektorom. Tieto signály sa potom zosilnia a spracujú, aby sa získala koncentrácia častíc PM2,5 a PM10. Predtým sme na výpočet koncentrácie PM10 a PM2,5 použili senzor Nova PM s Arduinom.
Špecifikácie snímača SDS011:
- Výstup: PM2,5, PM10
- Rozsah merania: 0,0-999,9 μg / m3
- Vstupné napätie: 4,7 V až 5,3 V.
- Maximálny prúd: 100 mA
- Spánkový prúd: 2 mA
- Čas odozvy: 1 sekunda
- Sériová výstupná frekvencia dát: 1 krát za sekundu
- Rozlíšenie priemeru častíc: ≤0,3 μm
- Relatívna chyba: 10%
- Teplotný rozsah: -20 ~ 50 ° C
Základy 0,96 'OLED zobrazovacieho modulu
OLED (Organic Light Emitting Diode) je druh svetlo emitujúcej diódy, ktorá sa vyrába pomocou organických zlúčenín, ktoré excitujú, keď nimi preteká elektrický prúd. Tieto organické zlúčeniny majú svoje vlastné svetlo, a preto nevyžadujú žiadne obvody podsvietenia ako bežné LCD. Z tohto dôvodu je technológia OLED displeja energeticky efektívna a široko používaná v televízoroch a iných zobrazovacích produktoch.
Na trhu sú k dispozícii rôzne typy OLED podľa farby displeja, počtu pinov, veľkosti a radiča IC. V tomto výučbe budeme používať 7-pinový OLED modul Monochrome Blue 7-pin SSD1306 0,96 ”, ktorý je široký 128 pixelov a dlhý 64 pixelov. Tento 7-pinový OLED podporuje protokol SPI a radič IC SSD1306, ktorý pomáha OLED zobraziť prijaté znaky. Viac informácií o OLED a jeho prepojení s rôznymi mikrokontrolérmi sa dozviete po kliknutí na tento odkaz.
Príprava senzora MQ-7 na meranie oxidu uhoľnatého (CO)
Modul snímača oxidu uhoľnatého MQ-7 CO detekuje koncentrácie CO vo vzduchu. Senzor dokáže merať koncentrácie od 10 do 10 000 ppm. Senzor MQ-7 je možné zakúpiť buď ako modul, alebo ako samotný senzor. Predtým sme na detekciu a meranie rôznych plynov používali rôzne typy plynových senzorov. Ak máte záujem, môžete si ich tiež skontrolovať. V tomto projekte používame modul senzora MQ-7 na meranie koncentrácie oxidu uhoľnatého v PPM. Schéma zapojenia dosky MQ-7 je uvedená nižšie:
Zaťažovací rezistor RL hrá veľmi dôležitú úlohu pri fungovaní snímača. Tento rezistor mení svoju hodnotu odporu podľa koncentrácie plynu. Doska senzora MQ-7 sa dodáva s odporom záťaže 1 KΩ, ktorý je zbytočný a ovplyvňuje hodnoty snímača. Aby ste teda mohli zmerať príslušné hodnoty koncentrácie CO, musíte vymeniť rezistor 1KΩ za rezistor 10KΩ.
Výpočet indexu kvality ovzdušia
Hodnota AQI v Indii sa počíta na základe priemernej koncentrácie konkrétnej znečisťujúcej látky nameranej v štandardnom časovom intervale (24 hodín pre väčšinu znečisťujúcich látok, 8 hodín pre oxid uhoľnatý a ozón). Napríklad AQI pre PM2,5 a PM10 je založená na 24-hodinovej priemernej koncentrácii a AQI pre oxid uhoľnatý je založená na 8-hodinovej priemernej koncentrácii). Výpočty AQI zahŕňajú osem znečisťujúcich látok, ktorými sú PM10, PM2,5, oxid dusičitý (NO 2), oxid sírový (SO 2), oxid uhoľnatý (CO), prízemný ozón (O 3), amoniak (NH 3), a olovo (Pb). Všetky znečisťujúce látky sa však nemerajú na každom mieste.
Na základe nameraných 24-hodinových koncentrácií znečisťujúcej látky v prostredí sa vypočíta subindex, ktorý je lineárnou funkciou koncentrácie (napr. Subindex pre PM2,5 bude 51 pri koncentrácii 31 µg / m3, 100 pri koncentrácii 60 µg / m3 a 75 pri koncentrácii 45 µg / m3). Najhorší subindex (alebo maximum zo všetkých parametrov) určuje celkovú AQI.
Schéma zapojenia
Schéma zapojenia monitorovacieho systému kvality ovzdušia na základe internetu vecí je veľmi jednoduchá a je uvedená nižšie:
Senzory SDS011, DHT11 a MQ-7 sú napájané + 5 V, zatiaľ čo modul OLED Display je napájaný 3,3 V. Kolíky vysielača a prijímača SDS011 sú pripojené k GPIO16 a 17 na ESP32. Pin Analog Out senzora MQ-7 je pripojený k GPIO 25 a dátový pin senzora DHT11 je pripojený k senzoru GPIO27. Pretože modul OLED Display využíva komunikáciu SPI, nadviazali sme komunikáciu SPI medzi modulom OLED a ESP32. Pripojenia sú zobrazené v nasledujúcej tabuľke:
S.No |
Pin modulu OLED |
ESP32 Pin |
1 |
GND |
Uzemnenie |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
OZE |
2 |
6 |
DC |
4 |
7 |
CS |
5 |
S.No |
SDS011 Pin |
ESP32 Pin |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
S.No |
PIN DHT |
ESP32 Pin |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Údaje |
27 |
S.No |
Pin MQ-7 |
ESP32 Pin |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Budovanie obvodu systému monitorovania kvality ovzdušia na doske Perf
Ako vidíte na hlavnom obrázku, myšlienkou bolo použiť tento obvod vo vnútri 3D tlačeného puzdra. Celý obvod zobrazený vyššie je teda pripájaný na dosku perf. Nezabudnite použiť vodiče na ponechanie dostatočnej vzdialenosti na namontovanie OLED a senzorov. Moja doska perf je spájkovaná s OLED a modul snímača je zobrazený nižšie.
Nastavenie služby Adafruit IO
Adafruit IO je otvorená dátová platforma, ktorá vám umožňuje agregovať, vizualizovať a analyzovať živé údaje v cloude. Pomocou Adafruit IO môžete nahrávať, zobrazovať a monitorovať svoje údaje cez internet a aktivovať IoT svojho projektu. Pomocou Adafruit IO môžete ovládať motory, čítať údaje zo senzorov a vytvárať vynikajúce aplikácie internetu vecí cez internet.
Ak chcete používať Adafruit IO, najskôr si vytvorte účet na Adafruit IO. Ak to chcete urobiť, prejdite na webovú stránku Adafruit IO a v pravom hornom rohu obrazovky kliknite na položku „Začíname zadarmo“.
Po dokončení procesu vytvárania účtu sa prihláste do účtu a kliknite na 'Zobraziť kľúč AIO' v pravom hornom rohu. Získate tak používateľské meno účtu a kľúč AIO.
Po kliknutí na „Kľúč AIO“ sa zobrazí okno s kľúčom AIO Adafruit IO a používateľským menom. Skopírujte tento kľúč a užívateľské meno, použije sa v kóde.
Teraz po získaní klávesov AIO vytvorte informačný kanál na ukladanie údajov senzora DHT. Ak chcete vytvoriť informačný kanál, kliknite na položku Informačný kanál. Potom kliknite na „Akcie“ a potom z dostupných možností vyberte možnosť „Vytvoriť nový informačný kanál“.
Potom sa otvorí nové okno, kde musíte zadať názov a popis informačného kanála. Písanie popisu je voliteľné.
Potom kliknite na „Vytvoriť“; budete presmerovaní na novovytvorený informačný kanál.
Pre tento projekt sme vytvorili celkom šesť informačných kanálov pre hodnoty PM10, PM2,5, CO, teploty, vlhkosti a AQI. Rovnakým postupom ako je uvedené vyššie, vytvorte zvyšok krmiva.
Po vytvorení informačných kanálov teraz vytvoríme funkciu dashboardu Adafruit IO na vizualizáciu údajov senzorov na jednej stránke. Najprv preto vytvorte informačný panel a potom na tento informačný panel pridajte všetky tieto informačné kanály.
Ak chcete vytvoriť informačný panel, kliknite na možnosť Dashboard a potom na 'Akcia'. Potom kliknite na 'Vytvoriť nový informačný panel'.
V ďalšom okne zadajte názov informačného panela a kliknite na „Vytvoriť“.
Po vytvorení informačného panela teraz na vizualizáciu údajov použijeme bloky Adafruit IO ako Gauge a Slider. Ak chcete pridať blok, kliknite na znamienko „+“ v pravom hornom rohu.
Potom vyberte blok „Meradlo“.
V ďalšom okne vyberte údaje informačného kanála, ktoré chcete zobraziť.
V poslednom kroku zmeňte nastavenie bloku a prispôsobte ho.
Teraz podľa rovnakého postupu ako je uvedené vyššie, pridajte bloky vizualizácie pre zvyšok informačných kanálov. Môj informačný panel IO Adafruit vyzeral takto:
Vysvetlenie kódu pre
Celý kód tohto projektu je uvedený na konci dokumentu. Tu vysvetľujeme niektoré dôležité časti kódu.
Kód používa SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, a DHT.h knižnice. Knižnice SDS011, Adafruit_GFX a Adafruit_SSD1306 si môžete stiahnuť z aplikácie Library Manager v Arduino IDE a odtiaľ ich nainštalovať. Za týmto účelom otvorte Arduino IDE a choďte na Skica <Zahrnúť knižnicu <Spravovať knižnice . Teraz vyhľadajte SDS011 a nainštalujte si knižnicu SDS Sensor od R. Zschiegnera.
Podobne nainštalujte knižnice Adafruit GFX a Adafruit SSD1306 od spoločnosti Adafruit. Adafruit_MQTT.h a DHT11.h je možné stiahnuť z uvedených odkazov.
Po inštalácii knižníc do Arduino IDE spustite kód zahrnutím potrebných súborov knižníc.
#include
V ďalších riadkoch definujte šírku a výšku OLED displeja. V tomto projekte som použil 128 × 64 SPI OLED displej. Premenné SCREEN_WIDTH a SCREEN_HEIGHT môžete zmeniť podľa svojho zobrazenia.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Potom definujte komunikačné piny SPI, kde je pripojený OLED displej.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Potom vytvorte inštanciu pre displej Adafruit so šírkou a výškou a komunikačným protokolom SPI, ktorý je definovaný skôr.
Displej Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Potom zahrňte poverenia WiFi a Adafruit IO, ktoré ste skopírovali zo servera Adafruit IO. Patria medzi ne server MQTT, číslo portu, meno používateľa a kľúč AIO.
const char * ssid = "Galaxy-M20"; const char * pass = "ac312124"; #define MQTT_SERV "io.adafruit.com" #define MQTT_PORT 1883 #define MQTT_NAME "choudharyas" #define MQTT_PASS "988c4e045ef64c1b9bc8b5bb7ef5f2d9"
Potom nastavte kanály Adafruit IO na ukladanie údajov zo senzorov. V mojom prípade som definoval šesť informačných kanálov na ukladanie rôznych údajov senzorov, konkrétne: AirQuality, Temperature, Humidity, PM10, PM25 a CO.
Adafruit_MQTT_Client mqtt (& client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS); Adafruit_MQTT_Publish AirQuality = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / AirQuality"); Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Temperature"); Vlhkosť Adafruit_MQTT_Publish = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Humidity"); Adafruit_MQTT_Publish PM10 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM10"); Adafruit_MQTT_Publish PM25 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM25"); Adafruit_MQTT_Publish CO = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / CO");
Teraz vo vnútri funkcie setup () inicializujte Serial Monitor s prenosovou rýchlosťou 9600 na účely ladenia. Inicializujte tiež OLED displej, snímač DHT a snímač SDS011 pomocou funkcie start () .
void setup () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
Pre slučku vnútri nastavenie funkcie sa používa pre zber hodnôt až do definovaného počtu a nastaviť čítača na nulu.
pre (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }
Čítanie hodnôt snímača:
Teraz vo vnútri funkcie slučky použite metódu millis () na načítanie hodnôt senzora za každú hodinu. Každý zo senzorov plynu vydáva analógovú hodnotu od 0 do 4095. Na prevod tejto hodnoty na napätie použite nasledujúcu rovnicu: RvRo = MQ7Raw * (3,3 / 4095); kde MQ7Raw je analógová hodnota z analógového kolíka snímača. Prečítajte si tiež hodnoty PM2,5 a PM10 zo snímača SDS011.
if ((bez znamenia long) (currentMillis - previousMillis)> = interval) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3,3 / 4095); MQ7ppm = 3,027 * exp (1,0698 * (RvRo)); Serial.println (MQ7ppm); error = my_sds.read (& p25, & p10); if (! error) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + reťazec (p10)); }}
Prevod hodnôt:
Hodnoty PM2,5 a PM10 sú už v µg / m 3, ale musíme previesť hodnoty oxidu uhoľnatého z PPM na mg / m 3. Prevodný vzorec je uvedený nižšie:
Koncentrácia (mg / m 3) = koncentrácia (PPM) × (molekulová hmotnosť (g / mol) / molárny objem (L))
Kde: Molekulová hmotnosť CO je 28,06 g / mol a molárny objem je 24,45 L pri 25 ° C
Koncentrácia INmgm3 = MQ7ppm * (28,06 / 24,45); Serial.println (KoncentráciaINmgm3);
Výpočet priemeru za 24 hodín:
Potom v ďalších riadkoch vypočítajte 24-hodinový priemer pre odpočty PM10, PM2,5 a 8-hodinový priemer pre odpočty oxidu uhoľnatého. V prvom riadku kódu vezmite aktuálny súčet a odčítajte prvý prvok v poli, teraz ho uložte ako nový súčet. Spočiatku to bude Zero. Potom získajte hodnoty snímača a pridajte súčet aktuálnych hodnôt k súčtu a zvýšte index čísel. Ak je hodnota indexu rovná alebo väčšia ako numReadings, potom index nastavte späť na nulu.
totalPM10 = totalPM10 - namerané hodnoty PM10; hodnoty PM10 = p10; totalPM10 = totalPM10 + namerané hodnoty PM10; readIndexPM10 = readIndexPM10 + 1; if (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Potom konečne zverejnite tieto hodnoty na Adafruit IO.
if (! Temperature.publish (temperature)) {delay (30000); } if (! Humidity.publish (vlhkost)) {oneskorenie (30000); ………………………………………………………. ……………………………………………………….
3D tlačené puzdro pre monitorovací systém AQI
Ďalej som pomocou vernieru zmeral rozmery nastavenia a taktiež som zmeral rozmery senzorov a OLED, aby som navrhol puzdro. Môj návrh vyzeral nižšie asi takto, akonáhle bol hotový.
Potom, čo som bol s dizajnom spokojný, som ho exportoval ako súbor STL, rozrezal na základe nastavení tlačiarne a nakoniec vytlačil. Súbor STL je opäť k dispozícii na stiahnutie od spoločnosti Thingiverse a môžete si pomocou neho vytlačiť obal.
Po dokončení tlače som pokračoval v zostavení projektu vytvoreného v trvalom kryte, aby som ho nainštaloval do zariadenia. Po vytvorení kompletného spojenia som zapojil obvod do môjho krytu a všetko sa mi pekne hodilo, ako vidíte tu.
Testovanie monitorovacieho systému AQI
Keď sú hardvér a kód pripravené, je čas zariadenie otestovať. Na napájanie zariadenia sme použili externý adaptér 12V 1A. Ako vidíte, zariadenie bude na OLED displeji zobrazovať koncentráciu PM10, PM2,5 a oxidu uhoľnatého. Koncentrácia PM2,5 a PM10 sú v ug / m 3, pričom koncentrácia oxidu uhoľnatého v mg / m 3.
Tieto údaje budú zverejnené aj na informačnom paneli Adafruit IO. Maximum všetkých parametrov (PM10, PM2,5 a CO) bude AQI.
Hodnoty AQI za posledných 30 dní sa zobrazia ako graf.
Takto môžete pomocou senzorov SDS011 a MQ-7 vypočítať index kvality vzduchu. Kompletné fungovanie projektu nájdete tiež vo videu, na ktoré odkazujete nižšie. Dúfam, že sa vám projekt páčil a bolo pre vás zaujímavé vytvoriť si vlastný. Ak máte nejaké otázky, nechajte ich prosím v sekcii komentárov nižšie.