- Požadované komponenty
- Senzor Nova PM SDS011 pro měření PM2,5 a PM10
- Základy 0,96 'OLED zobrazovacího modulu
- Příprava senzoru MQ-7 na měření oxidu uhelnatého (CO)
- Výpočet indexu kvality ovzduší
- Kruhový diagram
- Vytvoření obvodu systému monitorování kvality ovzduší na desce Perf
- Nastavení Adafruit IO
- Vysvětlení kódu pro
- 3D tištěný obal pro monitorovací systém AQI
- Testování monitorovacího systému AQI
Jak nastává zima, vzduch visící nad námi zahušťuje kouřem a plynnými emisemi z hořících polí, průmyslových továren a automobilové dopravy, blokuje slunce a ztěžuje dýchání. Odborníci tvrdí, že vysoká úroveň znečištění ovzduší a pandemie COVID-19 mohou být nebezpečnou směsí, která může mít vážné následky. Nutnost monitorování kvality ovzduší v reálném čase je velmi do očí bijící.
V tomto projektu tedy budeme stavět monitorovací systém kvality vzduchu ESP32 pomocí senzoru Nova PM SDS011, senzoru MQ-7 a senzoru DHT11. K zobrazování hodnot kvality ovzduší budeme také používat modul OLED Display. Index kvality ovzduší (AQI) v Indii je založen na osm znečišťujících látek, PM10, PM2,5, SO2 a NO2, CO, ozón, NH3 a Pb. Není však nutné měřit všechny znečišťující látky. Budeme tedy měřit koncentraci PM2,5, PM10 a oxidu uhelnatého k výpočtu indexu kvality ovzduší. Hodnoty AQI budou zveřejněny na Adafruit IO, abychom je mohli sledovat odkudkoli. Dříve jsme pomocí Arduina měřili také koncentraci LPG, kouře a amoniaku.
Požadované komponenty
- ESP32
- Senzor Nova PM SDS011
- 0,96 'SPI OLED displejový modul
- Senzor DHT11
- Senzor MQ-7
- Propojovací dráty
Senzor Nova PM SDS011 pro měření PM2,5 a PM10
Senzor SDS011 je nejnovější snímač kvality vzduchu vyvinutý společností Nova Fitness. Funguje na principu laserového rozptylu a ve vzduchu dokáže získat koncentraci částic mezi 0,3 až 10 μm. Tento senzor se skládá z malého ventilátoru, sacího ventilu, laserové diody a fotodiody. Vzduch vstupuje vstupem vzduchu, kde světelný zdroj (Laser) osvětluje částice a rozptýlené světlo je transformováno na signál fotodetektorem. Tyto signály jsou poté zesíleny a zpracovány, aby se získala koncentrace částic PM2,5 a PM10. Dříve jsme k výpočtu koncentrace PM10 a PM2,5 použili snímač Nova PM se společností Arduino.
Specifikace snímače SDS011:
- Výstup: PM2,5, PM10
- Rozsah měření: 0,0-999,9 μg / m3
- Vstupní napětí: 4,7 V až 5,3 V.
- Maximální proud: 100 mA
- Spánkový proud: 2 mA
- Doba odezvy: 1 sekunda
- Frekvence sériového výstupu dat: 1krát / s
- Rozlišení průměru částic: ≤0,3 μm
- Relativní chyba: 10%
- Teplotní rozsah: -20 ~ 50 ° C
Základy 0,96 'OLED zobrazovacího modulu
OLED (Organic Light Emitting Diode) je druh diody emitující světlo, která se vyrábí pomocí organických sloučenin, které vzrušují, když jimi může protékat elektrický proud. Tyto organické sloučeniny mají své vlastní světlo, a proto nevyžadují žádné obvody podsvícení jako běžné LCD. Z tohoto důvodu je technologie displeje OLED energeticky efektivní a široce používaná v televizorech a dalších zobrazovacích produktech.
Na trhu jsou k dispozici různé typy OLED podle barvy displeje, počtu pinů, velikosti a řadiče IC. V tomto tutoriálu použijeme 7-pinový OLED modul Monochrome Blue 7-pin SSD1306 0,96 ”, který je 128 pixelů široký a 64 pixelů dlouhý. Tento 7kolíkový OLED podporuje protokol SPI a řadič IC SSD1306 pomáhá OLED zobrazovat přijaté znaky. Další informace o OLED a jeho propojení s různými mikrokontroléry získáte kliknutím na odkaz.
Příprava senzoru MQ-7 na měření oxidu uhelnatého (CO)
Modul senzoru oxidu uhelnatého MQ-7 CO detekuje koncentrace CO ve vzduchu. Senzor může měřit koncentrace od 10 do 10 000 ppm. Senzor MQ-7 lze zakoupit buď jako modul, nebo jako samotný senzor. Dříve jsme k detekci a měření různých plynů používali mnoho různých typů plynových senzorů. Pokud máte zájem, můžete si je také prohlédnout. V tomto projektu používáme modul senzoru MQ-7 k měření koncentrace oxidu uhelnatého v PPM. Schéma zapojení desky MQ-7 je uvedeno níže:
Zátěžový rezistor RL hraje velmi důležitou roli při fungování snímače. Tento rezistor mění svoji hodnotu odporu podle koncentrace plynu. Deska senzoru MQ-7 je dodávána se zátěžovým odporem 1 KΩ, což je zbytečné a ovlivňuje odečty senzorů. Chcete-li tedy změřit příslušné hodnoty koncentrace CO, musíte vyměnit rezistor 1KΩ za rezistor 10KΩ.
Výpočet indexu kvality ovzduší
Hodnota AQI v Indii se počítá na základě průměrné koncentrace konkrétní znečišťující látky měřené ve standardním časovém intervalu (24 hodin pro většinu znečišťujících látek, 8 hodin pro oxid uhelnatý a ozon). Například AQI pro PM2,5 a PM10 je založeno na 24hodinové průměrné koncentraci a AQI pro oxid uhelnatý je založeno na 8hodinové průměrné koncentraci). Výpočty AQI zahrnují osm znečišťujících látek, kterými jsou PM10, PM2,5, oxid dusičitý (NO 2), oxid sírový (SO 2), oxid uhelnatý (CO), přízemní ozon (O 3), amoniak (NH 3), a olovo (Pb). Všechny znečišťující látky však nejsou měřeny na každém místě.
Na základě naměřených 24hodinových koncentrací znečišťující látky v okolí se vypočítá subindex, který je lineární funkcí koncentrace (např. Subindex pro PM2,5 bude 51 při koncentraci 31 µg / m3, 100 při koncentraci 60 µg / m3 a 75 při koncentraci 45 µg / m3). Nejhorší subindex (nebo maximum ze všech parametrů) určuje celkovou AQI.
Kruhový diagram
Schéma zapojení monitorovacího systému kvality ovzduší založené na IoT je velmi jednoduché a je uvedeno níže:
Senzory SDS011, DHT11 a MQ-7 jsou napájeny + 5 V, zatímco modul OLED Display je napájen 3,3 V. Piny vysílače a přijímače SDS011 jsou připojeny k GPIO16 a 17 ESP32. Pin Analog Out senzoru MQ-7 je připojen k GPIO 25 a datový pin senzoru DHT11 je připojen k senzoru GPIO27. Protože modul OLED Display využívá komunikaci SPI, navázali jsme komunikaci SPI mezi modulem OLED a ESP32. Připojení jsou uvedena v následující tabulce:
S.No |
Pin modulu OLED |
ESP32 Pin |
1 |
GND |
Přízemní |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
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 |
Data |
27 |
S.No |
Pin MQ-7 |
ESP32 Pin |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Vytvoření obvodu systému monitorování kvality ovzduší na desce Perf
Jak vidíte na hlavním obrázku, myšlenkou bylo použít tento obvod uvnitř 3D tištěného pouzdra. Celý obvod zobrazený výše je tedy připájen na desku perf. Ujistěte se, že používáte vodiče k ponechání dostatečné vzdálenosti pro připojení OLED a senzorů. Moje deska pro dokonalé pájení na OLED a modul snímače jsou zobrazeny níže.
Nastavení Adafruit IO
Adafruit IO je otevřená datová platforma, která vám umožňuje agregovat, vizualizovat a analyzovat živá data v cloudu. Pomocí Adafruit IO můžete nahrávat, zobrazovat a sledovat data přes internet a aktivovat IoT projektu. Pomocí Adafruit IO můžete ovládat motory, číst data ze senzorů a vytvářet skvělé aplikace IoT přes internet.
Chcete-li použít Adafruit IO, nejprve si vytvořte účet na Adafruit IO. Chcete-li to provést, přejděte na web Adafruit IO a v pravém horním rohu obrazovky klikněte na „Začínáme zdarma“.
Po dokončení procesu vytváření účtu se přihlaste k účtu a v pravém horním rohu klikněte na „Zobrazit klíč AIO“. Získáte uživatelské jméno účtu a klíč AIO.
Po kliknutí na „Klíč AIO“ se otevře okno s klíčem AIO Adafruit IO a uživatelským jménem. Zkopírujte tento klíč a uživatelské jméno, použije se v kódu.
Nyní, po získání kláves AIO, vytvořte zdroj pro uložení dat senzoru DHT. Chcete-li vytvořit zdroj, klikněte na „Zdroj“. Poté klikněte na „Akce“ a potom z dostupných možností vyberte „Vytvořit nový zdroj“.
Poté se otevře nové okno, kde musíte zadat název a popis zdroje. Psaní popisu je volitelné.
Poté klikněte na „Vytvořit“; budete přesměrováni na nově vytvořený zdroj.
Pro tento projekt jsme vytvořili celkem šest zdrojů pro hodnoty PM10, PM2,5, CO, teploty, vlhkosti a AQI. Stejným postupem jako výše vytvořte zbytek zdrojů.
Po vytvoření informačních kanálů nyní vytvoříme funkci řídicího panelu Adafruit IO pro vizualizaci dat senzoru na jedné stránce. K tomu nejprve vytvořte řídicí panel a poté přidejte všechny tyto kanály na tento řídicí panel.
Chcete-li vytvořit řídicí panel, klikněte na možnost Dashboard a poté klikněte na „Akce“ a poté klikněte na „Vytvořit nový panel“.
V dalším okně zadejte název řídicího panelu a klikněte na „Vytvořit“.
Při vytváření řídicího panelu nyní k vizualizaci dat použijeme bloky Adafruit IO jako Gauge a Slider. Chcete-li přidat blok, klikněte na znaménko „+“ v pravém horním rohu.
Poté vyberte blok „Gauge“.
V dalším okně vyberte data zdroje, která chcete vizualizovat.
V posledním kroku změňte nastavení bloku a přizpůsobte jej.
Nyní postupujte stejným způsobem jako výše a přidejte vizualizační bloky pro ostatní kanály. Můj řídicí panel Adafruit IO vypadal takto:
Vysvětlení kódu pro
Celý kód tohoto projektu je uveden na konci dokumentu. Zde vysvětlujeme některé důležité části kódu.
Kód používá SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, a DHT.h knihovny. Knihovny SDS011, Adafruit_GFX a Adafruit_SSD1306 lze stáhnout ze správce knihoven v IDE Arduino a odtud je nainstalovat. Za tímto účelem otevřete Arduino IDE a přejděte na Sketch <Zahrnout knihovnu <Spravovat knihovny . Nyní vyhledejte SDS011 a nainstalujte knihovnu SDS Sensor od R. Zschiegnera.
Podobně nainstalujte knihovny Adafruit GFX a Adafruit SSD1306 od společnosti Adafruit. Adafruit_MQTT.h a DHT11.h lze stáhnout z uvedených odkazů.
Po instalaci knihoven do Arduino IDE spusťte kód zahrnutím potřebných souborů knihoven.
#zahrnout
V následujících řádcích definujte šířku a výšku OLED displeje. V tomto projektu jsem použil 128 × 64 SPI OLED displej. Proměnné SCREEN_WIDTH a SCREEN_HEIGHT můžete změnit podle svého zobrazení.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Poté definujte komunikační piny SPI, kde je připojen OLED displej.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Poté vytvořte instanci pro displej Adafruit s šířkou a výškou a komunikačním protokolem SPI, který je definován dříve.
Adafruit_SSD1306 display (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Poté zahrňte pověření WiFi a Adafruit IO, která jste zkopírovali ze serveru Adafruit IO. Patří mezi ně server MQTT, číslo portu, uživatelské jméno a klíč 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"
Poté nastavte kanály Adafruit IO pro ukládání dat senzoru. V mém případě jsem definoval šest kanálů pro ukládání různých dat ze senzorů, a to: AirQuality, Teplota, Vlhkost, 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"); Vlhkost 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");
Nyní uvnitř funkce setup () inicializujte Serial Monitor s přenosovou rychlostí 9600 pro účely ladění. Inicializujte také OLED displej, snímač DHT a snímač SDS011 pomocí funkce start () .
void setup () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
Pro smyčku uvnitř nastavení funkce se používá pro sběr hodnot až do definovaného počtu a nastavit čítače na nulu.
for (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }
Čtení hodnot senzorů:
Nyní uvnitř funkce smyčky použijte metodu millis () ke čtení hodnot senzoru každou hodinu. Každý z plynových senzorů vydává analogovou hodnotu od 0 do 4095. Chcete-li tuto hodnotu převést na napětí, použijte následující rovnici: RvRo = MQ7Raw * (3,3 / 4095); kde MQ7Raw je analogová hodnota z analogového pinu snímače. Přečtěte si také hodnoty PM2,5 a PM10 ze snímače SDS011.
if ((unsigned 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:" + řetězec (p10)); }}
Převod hodnot:
Hodnoty PM2,5 a PM10 jsou již v µg / m 3, ale musíme převést hodnoty oxidu uhelnatého z PPM na mg / m 3. Vzorec převodu je uveden níže:
Koncentrace (mg / m 3) = koncentrace (PPM) × (molekulová hmotnost (g / mol) / molární objem (L))
Kde: molekulová hmotnost CO je 28,06 g / mol a molární objem je 24.45L při 25 0 C
Koncentrace INmgm3 = MQ7ppm * (28.06 / 24.45); Serial.println (ConcentrationINmgm3);
Výpočet průměru za 24 hodin:
Poté v dalších řádcích vypočítejte 24hodinový průměr pro hodnoty PM10, PM2,5 a 8hodinový průměr pro hodnoty oxidu uhelnatého. V prvním řádku kódu vezměte aktuální součet a odečtěte první prvek v poli, nyní jej uložte jako nový součet. Zpočátku to bude nula. Poté získejte hodnoty snímače a přidejte aktuální odečet k součtu a zvyšte index čísel. Pokud je hodnota indexu rovna nebo větší než numReadings, nastavte index zpět na nulu.
totalPM10 = totalPM10 - odečty PM10; hodnoty PM10 = p10; totalPM10 = totalPM10 + readingPM10; readIndexPM10 = readIndexPM10 + 1; if (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Nakonec tyto hodnoty zveřejněte na Adafruit IO.
if (! Temperature.publish (temperature)) {delay (30000); } if (! Humidity.publish (vlhkost)) {delay (30000); ………………………………………………………. ……………………………………………………….
3D tištěný obal pro monitorovací systém AQI
Dále jsem změřil rozměry instalace pomocí mého nonia a také změřil rozměry senzorů a OLED, abych navrhl pouzdro. Můj návrh vypadal níže asi takhle, až bude hotový.
Poté, co jsem byl s designem spokojen, jsem jej exportoval jako soubor STL, nařezal na základě nastavení tiskárny a nakonec vytiskl. Soubor STL je opět k dispozici ke stažení od společnosti Thingiverse a můžete si pomocí něj vytisknout obal.
Po dokončení tisku jsem pokračoval v sestavení projektu nastaveného do trvalé skříně a jeho instalace do zařízení. Po dokončení celého připojení jsem sestavil obvod do svého pouzdra a všechno se dobře hodilo, jak vidíte zde.
Testování monitorovacího systému AQI
Jakmile je hardware a kód připraven, je čas zařízení otestovat. K napájení zařízení jsme použili externí 12V 1A adaptér. Jak vidíte, zařízení bude na OLED displeji zobrazovat koncentraci PM10, PM2,5 a oxidu uhelnatého. Koncentrace PM2,5 a PM10 jsou v µg / m 3, zatímco koncentrace oxidu uhelnatého je v mg / m 3.
Tyto hodnoty budou rovněž zveřejněny na panelu Adafruit IO. Maximum všech parametrů (PM10, PM2,5 a CO) bude AQI.
Hodnoty AQI za posledních 30 dní se zobrazí jako graf.
Takto můžete k výpočtu indexu kvality vzduchu použít senzory SDS011 a MQ-7. Kompletní fungování projektu najdete také ve videu, na které odkazujete níže. Doufám, že se vám projekt líbil a bylo pro vás zajímavé vytvořit si vlastní. Máte-li jakékoli dotazy, nechte je prosím v sekci komentářů níže.