- Komponente potrebne
- Nova PM senzor SDS011 za mjerenje PM2,5 i PM10
- Osnove 0,96 'OLED modula zaslona
- Priprema senzora MQ-7 za mjerenje ugljičnog monoksida (CO)
- Izračun indeksa kvalitete zraka
- Kružni dijagram
- Izgradnja kruga sustava za nadzor kvalitete zraka na Perf Boardu
- Postavljanje Adafruit IO-a
- Objašnjenje koda za
- 3D tiskano kućište za sustav praćenja AQI
- Testiranje sustava praćenja AQI
Kako zima zalazi, zrak koji visi nad nama zgušnjava se dimom i plinovitim emisijama iz zapaljenih polja, industrijskih tvornica i automobilskog prometa, blokirajući sunce i otežavajući disanje. Stručnjaci kažu da visoka razina zagađenja zraka i pandemija COVID-19 mogu biti opasna mješavina koja može imati ozbiljne posljedice. Potreba za praćenjem kvalitete zraka u stvarnom vremenu vrlo je očita.
Dakle, u ovom ćemo projektu izgraditi ESP32 sustav praćenja kakvoće zraka pomoću Nova PM SDS011 senzora, MQ-7 senzora i DHT11 senzora. Također ćemo koristiti OLED zaslon za prikaz vrijednosti zraka. Indeks kakvoće zraka (AQI) u Indiji temelji se na osam onečišćujućih tvari PM10, PM2.5, SO2 i NO2, CO, ozon, NH3 i Pb. Međutim, nije potrebno mjeriti sve onečišćujuće tvari. Tako ćemo izmjeriti koncentraciju PM2,5, PM10 i ugljičnog monoksida kako bismo izračunali indeks kvalitete zraka. Vrijednosti AQI bit će objavljene na Adafruit IO kako bismo ih mogli pratiti s bilo kojeg mjesta. Prethodno smo također mjerili koncentraciju UNP-a, dima i plina Amonijak koristeći Arduino.
Komponente potrebne
- ESP32
- Nova PM senzor SDS011
- 0,96 'SPI OLED modul zaslona
- DHT11 senzor
- MQ-7 senzor
- Jumper žice
Nova PM senzor SDS011 za mjerenje PM2,5 i PM10
 
Senzor SDS011 najnoviji je senzor za kvalitetu zraka koji je razvio Nova Fitness. Djeluje na principu laserskog raspršenja i može postići koncentraciju čestica između 0,3 i 10 μm u zraku. Ovaj se senzor sastoji od malog ventilatora, usisnog ventila, laserske diode i fotodiode. Zrak ulazi kroz ulaz za zrak gdje izvor svjetlosti (laser) osvjetljava čestice, a raspršena svjetlost fotodetektorom se pretvara u signal. Ti se signali zatim pojačavaju i obrađuju da bi se dobila koncentracija čestica PM2,5 i PM10. Prije smo koristili Nova PM senzor s Arduinom za izračunavanje koncentracije PM10 i PM2,5.
Specifikacije senzora SDS011:
- Izlaz: PM2,5, PM10
- Područje mjerenja: 0,0-999,9μg / m3
- Ulazni napon: 4,7 V do 5,3 V
- Maksimalna struja: 100mA
- Struja mirovanja: 2mA
- Vrijeme odziva: 1 sekunda
- Frekvencija izlaza serijskih podataka: 1 put / sekundu
- Rezolucija promjera čestica: ≤0,3μm
- Relativna pogreška: 10%
- Raspon temperatura: -20 ~ 50 ° C
Osnove 0,96 'OLED modula zaslona
OLED (organska dioda koja emitira svjetlost) je vrsta diode koja emitira svjetlost i koja se izrađuje pomoću organskih spojeva koji pobuđuju kad se kroz njih dozvoli da prolazi električna struja. Ovi organski spojevi imaju vlastitu svjetlost, stoga im nisu potrebni nikakvi krugovi s pozadinskim osvjetljenjem poput uobičajenih LCD-a. Iz tog razloga, OLED tehnologija zaslona učinkovita je u energiji i široko se koristi u televizorima i ostalim zaslonima.

Na tržištu su dostupne razne vrste OLED-a na temelju boje zaslona, broja pinova, veličine i IC kontrolera. U ovom uputstvu koristit ćemo monokromno plavi 7-pinski SSD1306 0.96 ”OLED modul koji je širok 128 piksela i dugačak 64 piksela. Ovaj 7-pinski OLED podržava SPI protokol, a kontroler IC SSD1306 pomaže OLED-u da prikaže primljene znakove. Slijedeći vezu saznajte više o OLED-u i njegovom povezivanju s različitim mikrokontrolerima.
Priprema senzora MQ-7 za mjerenje ugljičnog monoksida (CO)
MQ-7 CO Senzorski modul za ugljični monoksid otkriva koncentracije CO u zraku. Senzor može izmjeriti koncentracije od 10 do 10 000 ppm. MQ-7 senzor možete kupiti ili kao modul ili samo kao senzor sam. Prije smo koristili mnogo različitih vrsta plinskih senzora za otkrivanje i mjerenje raznih plinova, a možete ih provjeriti i ako ste zainteresirani. U ovom projektu koristimo senzorski modul MQ-7 za mjerenje koncentracije ugljičnog monoksida u PPM. Shema sklopa za ploču MQ-7 dana je u nastavku:

Otpor opterećenja RL igra vrlo važnu ulogu u radu senzora. Ovaj otpor mijenja vrijednost otpora prema koncentraciji plina. Ploča senzora MQ-7 dolazi s otporom opterećenja od 1KΩ koji je beskoristan i utječe na očitanja senzora. Dakle, da biste izmjerili odgovarajuće vrijednosti koncentracije CO, morate zamijeniti otpor 1KΩ otpornikom 10KΩ.

Izračun indeksa kvalitete zraka
AQI u Indiji izračunava se na temelju prosječne koncentracije određene onečišćujuće tvari izmjerene u standardnom vremenskom intervalu (24 sata za većinu onečišćujućih tvari, 8 sati za ugljični monoksid i ozon). Na primjer, AQI za PM2,5 i PM10 temelji se na 24-satnoj prosječnoj koncentraciji, a AQI za ugljikov monoksid na 8-satnoj prosječnoj koncentraciji). Izračuni AQI uključuju osam onečišćujućih tvari koje su PM10, PM2,5, Dušikov dioksid (NO 2), Sumpor-dioksid (SO 2), Ugljični monoksid (CO), prizemni ozon (O 3), Amonijak (NH 3), i olovo (Pb). Međutim, sve se onečišćujuće tvari ne mjere na svakom mjestu.
Na temelju izmjerenih 24-satnih koncentracija onečišćivača u okolišu izračunava se podindeks, koji je linearna funkcija koncentracije (npr. Podindeks za PM2,5 bit će 51 pri koncentraciji 31 µg / m3, 100 pri koncentraciji 60 µg / m3 i 75 u koncentraciji od 45 µg / m3). Najgori podindeks (ili maksimum svih parametara) određuje ukupni AQI.
Kružni dijagram
Shema sklopa za IoT sustav praćenja kvalitete zraka vrlo je jednostavna i dana je u nastavku:

Senzor SDS011, DHT11 i MQ-7 napajaju se s + 5V, dok se OLED modul zaslona napaja s 3,3V. Igle odašiljača i prijamnika SDS011 spojene su na GPIO16 i 17 ESP32. Priključak analognog izlaza MQ-7 senzora povezan je s GPIO 25, a podatkovni zatik DHT11 osjetnika spojen je na GPIO27 osjetnik. Budući da OLED modul zaslona koristi SPI komunikaciju, uspostavili smo SPI komunikaciju između OLED modula i ESP32. Veze su prikazane u donjoj tablici:
| S.Br | Pribadača OLED modula | ESP32 pribadača | 
| 1 | GND | Prizemlje | 
| 2 | VCC | 5V | 
| 3 | D0 | 18 | 
| 4 | D1 | 23 | 
| 5 | OIE | 2 | 
| 6 | DC | 4 | 
| 7 | CS | 5 | 
| S.Br | SDS011 Pin | ESP32 pribadača | 
| 1 | 5V | 5V | 
| 2 | GND | GND | 
| 3 | RX | 17 | 
| 4 | TX | 16 | 
| S.Br | DHT pin | ESP32 pribadača | 
| 1 | Vcc | 5V | 
| 2 | GND | GND | 
| 3 | Podaci | 27 | 
| S.Br | MQ-7 Pin | ESP32 pribadača | 
| 1 | Vcc | 5V | 
| 2 | GND | GND | 
| 3 | A0 | 25 | 
Izgradnja kruga sustava za nadzor kvalitete zraka na Perf Boardu
Kao što vidite iz glavne slike, ideja je bila koristiti ovaj sklop unutar 3D tiskanog kućišta. Dakle, cijeli prikazani krug je zalemljen na perf ploču. Obavezno koristite žice kako biste ostavili dovoljno udaljenosti za postavljanje OLED-a i senzora. Moja perf ploča je zalemljena na OLED i senzorski modul je prikazan u nastavku.

Postavljanje Adafruit IO-a
Adafruit IO je otvorena podatkovna platforma koja vam omogućuje prikupljanje, vizualizaciju i analizu podataka uživo u oblaku. Korištenjem Adafruit IO možete prenositi, prikazivati i nadzirati svoje podatke putem Interneta i omogućiti svoj IoT projekt. Pomoću Adafruit IO možete upravljati motorima, čitati podatke senzora i izrađivati sjajne IoT aplikacije putem Interneta.
Da biste koristili Adafruit IO, prvo otvorite račun na Adafruit IO. Da biste to učinili, idite na web mjesto Adafruit IO i kliknite "Započnite besplatno" u gornjem desnom dijelu zaslona.

Nakon završetka postupka stvaranja računa, prijavite se na račun i kliknite "Prikaži AIO ključ" u gornjem desnom kutu da biste dobili korisničko ime računa i AIO ključ.

Kada kliknete na "AIO ključ", pojavit će se prozor s Adafruit IO AIO ključem i korisničkim imenom. Kopirajte ovaj ključ i korisničko ime, koristit će se u kodu.

Sada, nakon dobivanja AIO tipki, stvorite feed za pohranu podataka DHT senzora. Da biste stvorili feed, kliknite "Feed". Zatim kliknite "Akcije", a zatim odaberite "Stvori novi feed" iz dostupnih opcija.

Nakon toga otvorit će se novi prozor u koji trebate unijeti naziv i opis feeda. Pisanje opisa nije obavezno.

Nakon toga kliknite na 'Stvori'; bit ćete preusmjereni na novostvoreni feed.
Za ovaj smo projekt stvorili ukupno šest feedova za vrijednosti PM10, PM2,5, CO, temperaturu, vlažnost i AQI. Slijedite isti postupak kao gore za stvaranje ostatka feedova.

Nakon stvaranja feedova, sada ćemo stvoriti značajku nadzorne ploče Adafruit IO za vizualizaciju podataka senzora na jednoj stranici. Za to prvo izradite nadzornu ploču, a zatim dodajte sve te feedove na tu nadzornu ploču.
Da biste stvorili nadzornu ploču, kliknite opciju Nadzorna ploča, a zatim kliknite "Akcija", a nakon toga kliknite "Izradi novu nadzornu ploču".
U sljedeći prozor unesite naziv nadzorne ploče i kliknite "Stvori".

Kako se stvara nadzorna ploča, sada ćemo za vizualizaciju podataka koristiti blokove Adafruit IO poput Gauge i Slider. Da biste dodali blok, kliknite na '+' u gornjem desnom kutu.

Zatim odaberite blok "Mjerač".

U sljedećem prozoru odaberite podatke feeda koje želite vizualizirati.

U posljednjem koraku promijenite postavke bloka kako biste ga prilagodili.

Sada slijedite isti postupak kao gore za dodavanje blokova vizualizacije za ostatak feedova. Moja nadzorna ploča Adafruit IO izgledala je ovako:

Objašnjenje koda za
Kompletni kod za ovaj projekt dan je na kraju dokumenta. Ovdje objašnjavamo neke važne dijelove koda.
Šifra koristi SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, a DHT.h knjižnice. Biblioteke SDS011, Adafruit_GFX i Adafruit_SSD1306 mogu se preuzeti iz Upravitelja knjižnica u Arduino IDE-u i tamo instalirati. Za to otvorite Arduino IDE i idite na Sketch <Include Library <Manage Libraries . Sada potražite SDS011 i instalirajte knjižnicu SDS senzora R. Zschiegnera.
 
Slično tome, instalirajte Adafruit knjižnice Adafruit GFX i Adafruit SSD1306. Adafruit_MQTT.h i DHT11.h mogu se preuzeti s danih poveznica.
Nakon instalacije knjižnica u Arduino IDE, pokrenite kôd tako što ćete uključiti potrebne datoteke knjižnica.
#include
U sljedećim redovima definirajte širinu i visinu zaslona OLED. U ovom projektu koristio sam 128 × 64 SPI OLED zaslon. Možete promijeniti SCREEN_WIDTH i SCREEN_HEIGHT varijable prema vašem zaslonu.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Zatim definirajte SPI komunikacijske igle gdje je povezan OLED zaslon.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Zatim stvorite instancu za zaslon Adafruit s širinom i visinom i SPI komunikacijskim protokolom koji je definiran ranije.
Zaslon Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Zatim uključite vjerodajnice za WiFi i Adafruit IO koje ste kopirali s poslužitelja Adafruit IO. To će uključivati MQTT poslužitelj, broj porta, korisničko ime i AIO ključ.
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"
Zatim postavite Adafruit IO feedove za pohranu podataka senzora. U mom sam slučaju definirao šest feedova za pohranu različitih podataka senzora, i to: AirQuality, Temperature, Vlažnost, PM10, PM25 i CO.
Adafruit_MQTT_Client mqtt (& klijent, 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"); Adafruit_MQTT_Publish Vlažnost = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Vlažnost"); 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");
Sada unutar funkcije setup () , inicijalizirajte serijski monitor brzinom prijenosa od 9600 u svrhu otklanjanja pogrešaka. Također inicijalizirajte OLED zaslon, DHT senzor i SDS011 senzor funkcijom start () .
void setup () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
Za petlju unutar podešavanje funkcija koristi za prikupljanje vrijednosti do definirani broj, a zatim postaviti na nulu brojača.
za (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }
Očitavanje vrijednosti senzora:
Sada unutar funkcije petlje, koristite milis () metodu za čitanje vrijednosti senzora svakih sat vremena. Svaki od plinskih senzora daje analognu vrijednost od 0 do 4095. Da biste pretvorili tu vrijednost u napon, upotrijebite sljedeću jednadžbu: RvRo = MQ7Raw * (3.3 / 4095); gdje je MQ7Raw analogna vrijednost s analognog pina senzora. Također, očitajte očitanja PM2,5 i PM10 sa senzora SDS011.
if ((nepotpisano dugo) (currentMillis - previousMillis)> = interval) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3,3 / 4095); MQ7ppm = 3.027 * exp (1.0698 * (RvRo)); Serial.println (MQ7ppm); pogreška = my_sds.read (& p25, & p10); if (! pogreška) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + Niz (p10)); }}
Pretvaranje vrijednosti:
Vrijednosti PM2,5 i PM10 već su u µg / m 3, ali moramo pretvoriti vrijednosti ugljičnog monoksida iz PPM u mg / m 3. Formula za pretvorbu dana je u nastavku:
Koncentracija (mg / m 3) = Koncentracija (PPM) × (Molekularna masa (g / mol) / molarni volumen (L))
Gdje: Molekulska masa je CO 28.06 g / mol, a volumen je Molarni 24.45L pri 25 0 ° C
KoncentracijaINmgm3 = MQ7ppm * (28.06 / 24.45); Serial.println (KoncentracijaINmgm3);
Izračunavanje 24-satnog prosjeka:
Zatim u sljedećim retcima izračunajte 24-satni prosjek za očitavanje PM10, PM2,5 i 8-satni prosjek za očitanja ugljičnog monoksida. U prvom retku koda uzmite trenutni zbroj i oduzmite prvi element u polju, a sada to spremite kao novi zbroj. U početku će to biti Nula. Zatim uzmite vrijednosti senzora i dodajte trenutni prikaz ukupnom iznosu i povećajte indeks broja. Ako je vrijednost indeksa jednaka ili veća od numReadings, vratite indeks na nulu.
totalPM10 = totalPM10 - očitanjaPM10; očitanjaPM10 = p10; totalPM10 = totalPM10 + očitanjaPM10; readIndexPM10 = readIndexPM10 + 1; if (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Zatim napokon objavite ove vrijednosti na Adafruit IO.
if (! Temperature.publish (temperature)) {delay (30000); } if (! Vlažnost.objava (vlaga)) {kašnjenje (30000); ………………………………………………………. ……………………………………………………….
3D tiskano kućište za sustav praćenja AQI
Dalje, izmjerio sam dimenzije postava pomoću svog nonijera, a također sam izmjerio dimenzije senzora i OLED-a za dizajn kućišta. Moj dizajn izgledao je otprilike ovako u nastavku, nakon što je bio gotov.

Nakon što sam bio zadovoljan dizajnom, izvezao sam ga kao STL datoteku, izrezao na temelju postavki pisača i na kraju ispisao. STL datoteka je također dostupna za preuzimanje s Thingiverse i pomoću nje možete ispisati kućište.
Nakon što je otisak završen, nastavio sam sa sastavljanjem projekta postavljenog u trajni ograđeni prostor kako bih ga instalirao u objekt. S kompletnom uspostavljenom vezom spojio sam sklop u svoje kućište i sve je lijepo pristajalo, kao što možete vidjeti ovdje.

Testiranje sustava praćenja AQI
Kad su hardver i kod spremni, vrijeme je da testirate uređaj. Za napajanje uređaja koristili smo vanjski adapter od 12 V 1A. Kao što vidite, uređaj će na OLED zaslonu prikazati koncentraciju PM10, PM2,5 i ugljičnog monoksida. Koncentracija PM2,5 i PM10 su u µg / m 3, dok je koncentracija ugljičnog monoksida u mg / m 3.


Ta će očitavanja biti objavljena i na nadzornoj ploči Adafruit IO. Maksimum svih parametara (PM10, PM2,5 i CO) bit će AQI.

Vrijednosti AQI zadnjih 30 dana bit će prikazane u obliku grafikona.

Na ovaj način možete koristiti senzore SDS011 i MQ-7 za izračun indeksa kvalitete zraka. Kompletni rad projekta također se može naći u videu dolje povezanom. Nadam se da vam se svidio projekt i bilo vam je zanimljivo izraditi vlastiti. Ako imate pitanja, ostavite ih u odjeljku za komentare u nastavku.

