- Componente necesare
- Senzor Nova PM SDS011 pentru măsurarea PM2.5 și PM10
- Noțiuni de bază ale modulului de afișaj OLED de 0,96 '
- Pregătirea senzorului MQ-7 pentru măsurarea monoxidului de carbon (CO)
- Calculul indicelui calității aerului
- Diagrama circuitului
- Construirea circuitului sistemului de monitorizare a calității aerului pe placa de perfecționare
- Configurare Adafruit IO
- Cod Explicație pentru
- Carcasă imprimată 3D pentru sistemul de monitorizare AQI
- Testarea sistemului de monitorizare AQI
Pe măsură ce se instalează iarna, aerul care atârnă deasupra noastră se îngroașă cu fum și emisiile gazoase provenite de la câmpurile arzătoare, fabricile industriale și traficul vehiculelor, blocând soarele și îngreunând respirația. Experții spun că nivelurile ridicate de poluare a aerului și pandemia COVID-19 pot fi un amestec periculos care poate avea consecințe grave. Necesitatea monitorizării în timp real a calității aerului este foarte evidentă.
Deci, în acest proiect, vom construi un sistem de monitorizare a calității aerului ESP32 folosind senzorul Nova PM SDS011, senzorul MQ-7 și senzorul DHT11. De asemenea, vom folosi un modul de afișare OLED pentru a afișa valorile calității aerului. Calitatea aerului Index (AQI) în India se bazează pe opt poluanți, PM10, PM2.5, SO2 și NO2, CO, ozon, NH3, și Pb. Cu toate acestea, nu este necesar să se măsoare toți poluanții. Deci, vom măsura concentrația de PM2,5, PM10 și monoxid de carbon pentru a calcula indicele calității aerului. Valorile AQI vor fi publicate pe Adafruit IO, astfel încât să o putem monitoriza de oriunde. Anterior, am măsurat, de asemenea, concentrația de GPL, fum și gaz de amoniac folosind Arduino.
Componente necesare
- ESP32
- Senzor Nova PM SDS011
- Modul de afișaj SPI OLED de 0,96 '
- Senzor DHT11
- Senzor MQ-7
- Sârme jumper
Senzor Nova PM SDS011 pentru măsurarea PM2.5 și PM10
Senzorul SDS011 este un senzor de calitate a aerului foarte recent dezvoltat de Nova Fitness. Funcționează pe principiul împrăștierii cu laser și poate obține concentrația particulelor între 0,3 și 10 μm în aer. Acest senzor este format dintr-un ventilator mic, supapă de admisie a aerului, diodă laser și fotodiodă. Aerul intră prin orificiul de admisie a aerului unde o sursă de lumină (Laser) luminează particulele, iar lumina împrăștiată este transformată într-un semnal de către un fotodetector. Aceste semnale sunt apoi amplificate și procesate pentru a obține concentrația de particule de PM2.5 și PM10. Am folosit anterior senzorul Nova PM cu Arduino pentru a calcula concentrația de PM10 și PM2.5.
Specificații senzor SDS011:
- Ieșire: PM2.5, PM10
- Domeniu de măsurare: 0,0-999,9 μg / m3
- Tensiunea de intrare: 4.7V la 5.3V
- Curent maxim: 100mA
- Curent de somn: 2mA
- Timp de răspuns: 1 secundă
- Frecvența de ieșire a datelor seriale: 1 dată / secundă
- Rezoluția diametrului particulelor: ≤0,3μm
- Eroare relativă: 10%
- Gama de temperatură: -20 ~ 50 ° C
Noțiuni de bază ale modulului de afișaj OLED de 0,96 '
OLED (Organic Light Emitting Diode) este un fel de diodă emițătoare de lumină care este realizată folosind compuși organici care excită atunci când curentul electric este permis să curgă prin ei. Acești compuși organici au propria lor lumină, prin urmare nu necesită circuite de iluminare de fundal ca LCD-urile normale. Din acest motiv, tehnologia de afișare OLED este eficientă din punct de vedere energetic și este utilizată pe scară largă în televizoare și alte produse de afișare.
Diverse tipuri de OLED sunt disponibile pe piață pe baza culorii afișajului, a numărului de pini, a dimensiunii și a IC-ului controlerului. În acest tutorial, vom folosi modulul OLED SSD1306 0.96 ”Monochrome Blue cu 7 pini, care are o lățime de 128 de pixeli și o lungime de 64 de pixeli. Acest OLED cu 7 pini acceptă protocolul SPI, iar controlerul IC SSD1306 îl ajută pe OLED să afișeze caracterele primite. Aflați mai multe despre OLED și interfața acestuia cu diferite microcontrolere, urmând linkul.
Pregătirea senzorului MQ-7 pentru măsurarea monoxidului de carbon (CO)
Modulul senzorului de gaz monoxid de carbon MQ-7 CO detectează concentrațiile de CO din aer. Senzorul poate măsura concentrații de la 10 la 10.000 ppm. Senzorul MQ-7 poate fi achiziționat fie ca modul, fie doar ca senzor singur. Anterior am folosit mai multe tipuri diferite de senzori de gaz pentru a detecta și măsura diferite gaze, le puteți verifica și dacă sunteți interesat. În acest proiect, folosim modulul senzor MQ-7 pentru a măsura concentrația de monoxid de carbon în PPM. Schema circuitului pentru placa MQ-7 este prezentată mai jos:
Rezistorul de sarcină RL joacă un rol foarte important în funcționarea senzorului. Acest rezistor își schimbă valoarea rezistenței în funcție de concentrația de gaz. Placa senzorului MQ-7 vine cu o rezistență la încărcare de 1KΩ, care este inutilă și afectează citirile senzorului. Deci, pentru a măsura valorile corespunzătoare ale concentrației de CO, trebuie să înlocuiți rezistorul de 1KΩ cu un rezistor de 10KΩ.
Calculul indicelui calității aerului
AQI în India se calculează pe baza concentrației medii a unui anumit poluant măsurată pe un interval de timp standard (24 de ore pentru majoritatea poluanților, 8 ore pentru monoxidul de carbon și ozon). De exemplu, AQI pentru PM2.5 și PM10 se bazează pe concentrația medie pe 24 de ore, iar AQI pentru monoxidul de carbon se bazează pe concentrația medie pe 8 ore). Calculele AQI includ cei opt poluanți care sunt PM10, PM2.5, dioxid de azot (NO 2), dioxid de sulf (SO 2), monoxid de carbon (CO), ozon la nivelul solului (O 3), amoniac (NH 3), și plumb (Pb). Cu toate acestea, toți poluanții nu sunt măsurați în fiecare locație.
Pe baza concentrațiilor ambientale măsurate de 24 de ore ale unui poluant, se calculează un subindice, care este o funcție liniară a concentrației (de exemplu, subindexul pentru PM2,5 va fi 51 la concentrația 31 µg / m3, 100 la concentrație 60 ug / m3 și 75 la o concentrație de 45 ug / m3). Cel mai prost subindex (sau maxim dintre toți parametrii) determină AQI global.
Diagrama circuitului
Diagrama circuitului pentru sistemul de monitorizare a calității aerului bazat pe IoT este foarte simplă și este prezentată mai jos:
Senzorul SDS011, senzorul DHT11 și MQ-7 sunt alimentați cu + 5V, în timp ce modulul OLED Display este alimentat cu 3,3V. Pinii emițătorului și receptorului SDS011 sunt conectați la GPIO16 și 17 din ESP32. Pinul Out analogic al senzorului MQ-7 este conectat la GPIO 25, iar pinul de date al senzorului DHT11 este conectat la senzorul GPIO27. Deoarece modulul OLED Display utilizează comunicarea SPI, am stabilit o comunicare SPI între modulul OLED și ESP32. Conexiunile sunt prezentate în tabelul de mai jos:
S. Nu |
Pin modul OLED |
ESP32 Pin |
1 |
GND |
Sol |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
DC |
4 |
7 |
CS |
5 |
S. Nu |
SDS011 Pin |
ESP32 Pin |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
S. Nu |
PIN DHT |
ESP32 Pin |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Date |
27 |
S. Nu |
MQ-7 Pin |
ESP32 Pin |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Construirea circuitului sistemului de monitorizare a calității aerului pe placa de perfecționare
După cum puteți vedea din imaginea principală, ideea a fost să folosiți acest circuit într-o carcasă imprimată 3D. Deci, circuitul complet prezentat mai sus este lipit pe o placă de perfecționare. Asigurați-vă că utilizați fire pentru a lăsa suficientă distanță pentru a monta OLED și senzori. Placa mea de perfecționare lipită pe OLED și modulul senzorului sunt prezentate mai jos.
Configurare Adafruit IO
Adafruit IO este o platformă de date deschise care vă permite să agregați, să vizualizați și să analizați date live pe cloud. Folosind Adafruit IO, puteți să încărcați, să afișați și să vă monitorizați datele pe internet și să vă activați proiectul IoT. Puteți controla motoarele, citi datele senzorilor și crea aplicații IoT interesante pe internet folosind Adafruit IO.
Pentru a utiliza Adafruit IO, creați mai întâi un cont pe Adafruit IO. Pentru a face acest lucru, accesați site-ul web Adafruit IO și faceți clic pe „Începeți gratuit” în partea dreaptă sus a ecranului.
După ce ați terminat procesul de creare a contului, conectați-vă la cont și faceți clic pe „Vizualizați cheia AIO” din colțul din dreapta sus pentru a obține numele de utilizator al contului și cheia AIO.
Când faceți clic pe „Cheie AIO”, va apărea o fereastră cu cheia AIO Adafruit IO și numele de utilizator. Copiați această cheie și numele de utilizator, vor fi utilizate în cod.
Acum, după obținerea tastelor AIO, creați un flux pentru a stoca datele senzorului DHT. Pentru a crea un feed, faceți clic pe „Feed”. Apoi faceți clic pe „Acțiuni”, apoi selectați „Creați un nou flux” din opțiunile disponibile.
După aceasta, se va deschide o nouă fereastră în care trebuie să introduceți numele și descrierea fluxului. Scrierea unei descrieri este opțională.
Faceți clic pe „Creați”, după aceasta; veți fi redirecționat către fluxul nou creat.
Pentru acest proiect, am creat un total de șase fluxuri pentru valorile PM10, PM2.5, CO, Temperatură, Umiditate și AQI. Urmați aceeași procedură ca mai sus pentru a crea restul fluxurilor.
După crearea fluxurilor, acum vom crea o caracteristică a tabloului de bord Adafruit IO pentru a vizualiza datele senzorului pe o singură pagină. Pentru aceasta, mai întâi, creați un tablou de bord și apoi adăugați toate aceste fluxuri în acel tablou de bord.
Pentru a crea un tablou de bord, faceți clic pe opțiunea Tablou de bord, apoi faceți clic pe „Acțiune”, iar apoi, faceți clic pe „Creați un tablou de bord nou”.
În fereastra următoare, introduceți numele tabloului de bord și faceți clic pe „Creați”.
Pe măsură ce tabloul de bord este creat, acum vom folosi blocurile IO Adafruit precum Gauge și Slider pentru a vizualiza datele. Pentru a adăuga un bloc, faceți clic pe „+” în colțul din dreapta sus.
Apoi selectați blocul „Calibru”.
În fereastra următoare, selectați datele de alimentare pe care doriți să le vizualizați.
În pasul final, modificați setările blocului pentru a le personaliza.
Acum urmați aceeași procedură ca mai sus pentru a adăuga blocuri de vizualizare pentru restul fluxurilor. Tabloul meu de bord Adafruit IO arăta astfel:
Cod Explicație pentru
Codul complet pentru acest proiect este dat la sfârșitul documentului. Aici explicăm câteva părți importante ale codului.
Codul utilizează SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, și DHT.h biblioteci. Bibliotecile SDS011, Adafruit_GFX și Adafruit_SSD1306 pot fi descărcate din Managerul de biblioteci din IDE-ul Arduino și pot fi instalate de acolo. Pentru aceasta, deschideți IDE-ul Arduino și accesați Sketch <Include Library <Manage Libraries . Acum căutați SDS011 și instalați biblioteca SDS Sensor de R. Zschiegner.
În mod similar, instalați bibliotecile Adafruit GFX și Adafruit SSD1306 de la Adafruit. Adafruit_MQTT.h și DHT11.h pot fi descărcate de pe linkurile date.
După instalarea bibliotecilor pe Arduino IDE, porniți codul incluzând fișierele bibliotecilor necesare.
#include
În rândurile următoare, definiți lățimea și înălțimea afișajului OLED. În acest proiect, am folosit un ecran OLED 128 × 64 SPI. Puteți schimba SCREEN_WIDTH și SCREEN_HEIGHT variabile în funcție de ecran.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Apoi definiți pinii de comunicație SPI unde este conectat ecranul OLED.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Apoi, creați o instanță pentru afișajul Adafruit cu lățimea și înălțimea și protocolul de comunicare SPI care este definit mai devreme.
Afișaj Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Apoi includeți acreditările WiFi și Adafruit IO pe care le-ați copiat de pe serverul Adafruit IO. Acestea vor include serverul MQTT, nr. Port, nume utilizator și cheie 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"
Apoi configurați fluxurile Adafruit IO pentru stocarea datelor senzorului. În cazul meu, am definit șase fluxuri pentru a stoca diferite date ale senzorilor și anume: Calitatea aerului, Temperatura, Umiditatea, PM10, PM25 și 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"); Adafruit_MQTT_Publish Umiditate = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Umiditate"); 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");
Acum, în interiorul funcției setup () , inițializați Serial Monitor la o rată de transmisie de 9600 în scopuri de depanare. De asemenea, inițializați afișajul OLED, senzorul DHT și senzorul SDS011 cu funcția begin () .
void setup () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
Pentru bucla interiorul configurare funcție este utilizată pentru a colecta valorile de până la un număr definit și apoi setați contorul la zero.
for (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {lecturesPM10 = 0; }
Citirea valorilor senzorului:
Acum, în funcția de buclă, utilizați metoda millis () pentru a citi valorile senzorului în fiecare oră. Fiecare dintre senzorii de gaz produce o valoare analogică de la 0 la 4095. Pentru a converti această valoare în tensiune, utilizați următoarea ecuație: RvRo = MQ7Raw * (3.3 / 4095); unde MQ7Raw este valoarea analogică de la pinul analogic al senzorului. De asemenea, citiți citirile PM2.5 și PM10 de la senzorul SDS011.
if ((nesemnat lung) (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:" + Șir (p25)); Serial.println ("P10:" + Șir (p10)); }}
Conversia valorilor:
Valorile PM2.5 și PM10 sunt deja în µg / m 3, dar trebuie să convertim valorile monoxidului de carbon din PPM în mg / m 3. Formula de conversie este dată mai jos:
Concentrația (mg / m 3) = Concentrația (PPM) × (Masa moleculară (g / mol) / Volumul molar (L))
Unde: Masa moleculară a CO este de 28,06 g / mol, iar volumul molar este de 24,45 L la 25 0 C
Concentrație INmgm3 = MQ7ppm * (28,06 / 24,45); Serial.println (ConcentrationINmgm3);
Calculul mediu pe 24 de ore:
Apoi, în rândurile următoare, calculați media de 24 de ore pentru citirea PM10, PM2,5 și media de 8 ore pentru citirile de monoxid de carbon. În prima linie de cod, luați totalul curent și scădeți primul element din matrice, acum salvați acest lucru ca noul total. Inițial, va fi Zero. Apoi obțineți valorile senzorului și adăugați valoarea curentă la total și creșteți indicele numeric. Dacă valoarea indexului este egală sau mai mare decât numReadings, atunci setați indexul la zero.
totalPM10 = totalPM10 - citiriPM10; lecturiPM10 = p10; totalPM10 = totalPM10 + citiriPM10; readIndexPM10 = readIndexPM10 + 1; if (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Apoi, în cele din urmă, publicați aceste valori pe Adafruit IO.
if (! Temperature.publish (temperature)) {întârziere (30000); } if (! Umiditate.publica (umiditate)) {întârziere (30000); ………………………………………………………. ……………………………………………………….
Carcasă imprimată 3D pentru sistemul de monitorizare AQI
Apoi, am măsurat dimensiunile configurării folosind vernierul meu și am măsurat și dimensiunile senzorilor și ale OLED pentru a proiecta o carcasă. Designul meu arăta cam așa mai jos, odată ce a fost finalizat.
După ce am fost mulțumit de design, l-am exportat ca fișier STL, l-am feliat pe baza setărilor imprimantei și, în cele din urmă, l-am tipărit. Din nou, fișierul STL este, de asemenea, disponibil pentru descărcare de la Thingiverse și vă puteți imprima carcasa folosindu-l.
După ce s-a făcut tipărirea, am procedat la asamblarea proiectului instalat într-o incintă permanentă pentru a-l instala într-o instalație. Odată realizată conexiunea completă, am asamblat circuitul în carcasă și totul s-a potrivit frumos, după cum puteți vedea aici.
Testarea sistemului de monitorizare AQI
Odată ce hardware-ul și codul sunt gata, este timpul să testați dispozitivul. Am folosit un adaptor extern de 12V 1A pentru a alimenta dispozitivul. După cum puteți vedea, dispozitivul va afișa Concentrația PM10, PM2.5 și monoxid de carbon pe afișajul OLED. Concentrația de PM2,5 și PM10 este în µg / m 3 în timp ce concentrația de monoxid de carbon este în mg / m 3.
Aceste lecturi vor fi publicate și pe tabloul de bord Adafruit IO. Maximul tuturor parametrilor (PM10, PM2.5 și CO) va fi AQI.
Valorile AQI din ultimele 30 de zile vor fi afișate sub formă de grafic.
Acesta este modul în care puteți utiliza senzorii SDS011 și MQ-7 pentru a calcula indicele calității aerului. Funcționarea completă a proiectului poate fi găsită și în videoclipul legat mai jos. Sper că ți-a plăcut proiectul și ți s-a părut interesant să-ți construiești propriul. Dacă aveți întrebări, vă rugăm să le lăsați în secțiunea de comentarii de mai jos.