- Nepieciešamās sastāvdaļas
- Nova PM sensors SDS011 PM2,5 un PM10 mērīšanai
- 0.96 'OLED displeja moduļa pamati
- MQ-7 sensora sagatavošana oglekļa oksīda (CO) mērīšanai
- Gaisa kvalitātes indeksa aprēķins
- Ķēdes shēma
- Gaisa kvalitātes uzraudzības sistēmas ķēdes izbūve uz Perf Board
- Adafruit IO iestatīšana
- Koda skaidrojums
- 3D drukāts korpuss AQI uzraudzības sistēmai
- AQI uzraudzības sistēmas testēšana
Iestājoties ziemai, virs mums karājošais gaiss sabiezē ar dūmiem un gāzveida emisijām no degošiem laukiem, rūpniecības rūpnīcām un transportlīdzekļu satiksmes, aizsprostojot sauli un apgrūtinot elpošanu. Eksperti saka, ka augsts gaisa piesārņojuma līmenis un COVID-19 pandēmija var būt bīstams maisījums, kam var būt nopietnas sekas. Nepieciešamība reāllaikā kontrolēt gaisa kvalitāti ir ļoti acīmredzama.
Tāpēc šajā projektā mēs izveidosim ESP32 gaisa kvalitātes uzraudzības sistēmu, izmantojot Nova PM SDS011 sensoru, MQ-7 sensoru un DHT11 sensoru. Mēs arī izmantosim OLED displeja moduli, lai parādītu gaisa kvalitātes vērtības. Gaisa kvalitātes indekss (GKI) Indijā ir balstīta uz astoņiem piesārņotājiem, PM10, PM2,5, SO2 un NO2, CO, ozons, NH3 un Pb. Tomēr nav nepieciešams izmērīt visus piesārņotājus. Tātad, lai aprēķinātu gaisa kvalitātes indeksu, mēs izmērīsim PM2,5, PM10 un oglekļa monoksīda koncentrāciju. AQI vērtības tiks publicētas Adafruit IO, lai mēs varētu to uzraudzīt no jebkuras vietas. Iepriekš mēs arī izmērījām LPG, dūmu un amonjaka gāzes koncentrāciju, izmantojot Arduino.
Nepieciešamās sastāvdaļas
- ESP32
- Nova PM sensors SDS011
- 0,96 'SPI OLED displeja modulis
- DHT11 sensors
- MQ-7 sensors
- Džemperu vadi
Nova PM sensors SDS011 PM2,5 un PM10 mērīšanai
SDS011 sensors ir pavisam nesen Nova Fitness izstrādāts gaisa kvalitātes sensors. Tas darbojas pēc lāzera izkliedes principa un var iegūt daļiņu koncentrāciju gaisā no 0,3 līdz 10 μm. Šis sensors sastāv no neliela ventilatora, gaisa ieplūdes vārsta, lāzera diodes un fotodiodes. Gaiss iekļūst caur gaisa ieplūdi, kur gaismas avots (lāzers) apgaismo daļiņas, un izkliedētā gaisma ar fotodetektoru tiek pārveidota par signālu. Šie signāli tiek pastiprināti un apstrādāti, lai iegūtu PM2,5 un PM10 daļiņu koncentrāciju. Iepriekš mēs izmantojām Nova PM sensoru ar Arduino, lai aprēķinātu PM10 un PM2,5 koncentrāciju.
SDS011 sensora specifikācijas:
- Izeja: PM2,5, PM10
- Mērīšanas diapazons: 0,0-999,9 μg / m3
- Ieejas spriegums: no 4,7 V līdz 5,3 V
- Maksimālā strāva: 100mA
- Miega strāva: 2mA
- Atbildes laiks: 1 sekunde
- Seriālo datu izvades biežums: 1 reizi sekundē
- Daļiņu diametra izšķirtspēja: ≤0,3 μm
- Relatīvā kļūda: 10%
- Temperatūras diapazons: -20 ~ 50 ° C
0.96 'OLED displeja moduļa pamati
OLED (Organic Light Emitting Diode) ir sava veida gaismu izstarojošā diode, kas tiek izgatavota, izmantojot organiskos savienojumus, kas uzbudina, kad elektriskajai strāvai ir atļauts plūst caur tiem. Šiem organiskajiem savienojumiem ir sava gaisma, tāpēc tiem nav vajadzīgas apgaismojuma shēmas, piemēram, parastajiem LCD. Šī iemesla dēļ OLED displeja tehnoloģija ir energoefektīva un plaši izmantota televizoros un citos displeja produktos.
Tirgū ir pieejami dažāda veida OLED, pamatojoties uz displeja krāsu, tapu skaitu, izmēru un kontroliera IC. Šajā apmācībā mēs izmantosim melnbalto zilo 7 kontaktu SSD1306 0,96 ”OLED moduli, kura platums ir 128 pikseļi un 64 pikseļi. Šis 7 kontaktu OLED atbalsta SPI protokolu, un kontrolieris IC SSD1306 palīdz OLED parādīt saņemtās rakstzīmes. Uzziniet vairāk par OLED un tā saskarni ar dažādiem mikrokontrolleriem, sekojot saitei.
MQ-7 sensora sagatavošana oglekļa oksīda (CO) mērīšanai
MQ-7 CO oglekļa monoksīda gāzes sensora modulis nosaka CO koncentrāciju gaisā. Sensors var izmērīt koncentrāciju no 10 līdz 10 000 ppm. MQ-7 sensoru var iegādāties gan kā moduli, gan tikai kā sensoru atsevišķi. Iepriekš mēs izmantojām daudz dažādu veidu gāzes sensorus, lai noteiktu un izmērītu dažādu gāzi. Jūs tos varat arī pārbaudīt, ja jūs interesē. Šajā projektā mēs izmantojam sensora moduli MQ-7, lai izmērītu oglekļa monoksīda koncentrāciju PPM. MQ-7 plates shēmas shēma ir sniegta zemāk:
Slodzes rezistoram RL ir ļoti liela nozīme sensora darbībā. Šis rezistors maina pretestības vērtību atbilstoši gāzes koncentrācijai. MQ-7 sensoru dēlim ir 1KΩ slodzes pretestība, kas ir bezjēdzīga un ietekmē sensora rādījumus. Tātad, lai izmērītu atbilstošās CO koncentrācijas vērtības, jums jāmaina 1KΩ rezistors ar 10KΩ rezistoru.
Gaisa kvalitātes indeksa aprēķins
Indijā AQI aprēķina, pamatojoties uz konkrēta piesārņotāja vidējo koncentrāciju, kas mērīta standarta laika intervālā (24 stundas lielākajai daļai piesārņotāju, 8 stundas oglekļa monoksīdam un ozonam). Piemēram, PM2,5 un PM10 AQI ir balstīta uz 24 stundu vidējo koncentrāciju, bet oglekļa monoksīda AQI - uz 8 stundu vidējo koncentrāciju. AQI aprēķinos iekļauti astoņi piesārņotāji, kas ir PM10, PM2,5, slāpekļa dioksīds (NO 2), sēra dioksīds (SO 2), oglekļa monoksīds (CO), zemes līmeņa ozons (O 3), amonjaks (NH 3), un svins (Pb). Tomēr visi piesārņotāji netiek mērīti katrā vietā.
Pamatojoties uz 24 stundu laikā izmērītajām piesārņojošās vielas koncentrācijām apkārtējā vidē, tiek aprēķināts apakšindekss, kas ir lineāra koncentrācijas funkcija (piemēram, PM2,5 apakšindekss būs 51 pie koncentrācijas 31 µg / m3, 100 pie koncentrācijas 60 µg / m3 un 75 koncentrācijā 45 µg / m3). Sliktākais apakšindekss (vai visu parametru maksimums) nosaka kopējo AQI.
Ķēdes shēma
IoT balstītas gaisa kvalitātes uzraudzības sistēmas shēma ir ļoti vienkārša un sniegta zemāk:
Sensors SDS011, DHT11 un MQ-7 tiek darbināts ar + 5 V, bet OLED displeja modulis - ar 3,3 V. SDS011 raidītāja un uztvērēja tapas ir savienotas ar ESP32 GPIO16 un 17. MQ-7 sensora analogā izejas tapa ir pievienota GPIO 25, bet DHT11 sensora datu tapa ir savienota ar GPIO27 sensoru. Tā kā OLED displeja modulis izmanto SPI komunikāciju, mēs esam izveidojuši SPI komunikāciju starp OLED moduli un ESP32. Savienojumi ir parādīti zemāk esošajā tabulā:
S.No |
OLED moduļa tapa |
ESP32 tapa |
1 |
GND |
Zeme |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
DC |
4 |
7 |
CS |
5 |
S.No |
SDS011 tapa |
ESP32 tapa |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
S.No |
DHT tapa |
ESP32 tapa |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Dati |
27 |
S.No |
MQ-7 tapa |
ESP32 tapa |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Gaisa kvalitātes uzraudzības sistēmas ķēdes izbūve uz Perf Board
Kā redzat no galvenā attēla, ideja bija izmantot šo shēmu 3D drukātā korpusā. Tātad visa iepriekš redzamā shēma ir pielodēta uz perf plāksnes. Pārliecinieties, ka izmantojat vadus, lai atstātu pietiekamu attālumu OLED un sensoru uzstādīšanai. Mana perf plāksne ir pielodēta OLED, un sensora modulis ir parādīts zemāk.
Adafruit IO iestatīšana
Adafruit IO ir atvērta datu platforma, kas ļauj apkopot, vizualizēt un analizēt tiešraides datus mākonī. Izmantojot Adafruit IO, jūs varat augšupielādēt, parādīt un uzraudzīt savus datus internetā un iespējot projekta IoT. Izmantojot Adafruit IO, jūs varat kontrolēt motorus, lasīt sensoru datus un veidot foršas IoT lietojumprogrammas internetā.
Lai izmantotu Adafruit IO, vispirms izveidojiet kontu Adafruit IO. Lai to izdarītu, dodieties uz Adafruit IO vietni un ekrāna augšējā labajā stūrī noklikšķiniet uz Sākt bez maksas.
Pēc konta izveides procesa pabeigšanas piesakieties kontā un augšējā labajā stūrī noklikšķiniet uz 'Skatīt AIO atslēgu', lai iegūtu konta lietotājvārdu un AIO atslēgu.
Noklikšķinot uz AIO atslēga, tiks parādīts logs ar Adafruit IO AIO atslēgu un lietotājvārdu. Kopējiet šo atslēgu un lietotājvārdu, tas tiks izmantots kodā.
Pēc AIO atslēgu iegūšanas izveidojiet plūsmu DHT sensora datu glabāšanai. Lai izveidotu plūsmu, noklikšķiniet uz “Plūsma”. Pēc tam noklikšķiniet uz 'Darbības' un pēc tam no pieejamajām opcijām atlasiet 'Izveidot jaunu plūsmu'.
Pēc tam tiks atvērts jauns logs, kurā jāievada plūsmas nosaukums un apraksts. Apraksta rakstīšana nav obligāta.
Pēc tam noklikšķiniet uz Izveidot; jūs tiksiet novirzīts uz jaunizveidoto plūsmu.
Šim projektam mēs kopumā izveidojām sešas plūsmas PM10, PM2,5, CO, temperatūras, mitruma un AQI vērtībām. Lai izveidotu pārējās plūsmas, rīkojieties tāpat kā iepriekš.
Pēc plūsmu izveidošanas tagad mēs izveidosim Adafruit IO informācijas paneļa funkciju, lai vizualizētu sensoru datus vienā lapā. Lai to izdarītu, vispirms izveidojiet informācijas paneli un pēc tam pievienojiet visas šīs plūsmas attiecīgajā informācijas panelī.
Lai izveidotu informācijas paneli, noklikšķiniet uz opcijas Informācijas panelis un pēc tam noklikšķiniet uz 'Darbība' un pēc tam noklikšķiniet uz 'Izveidot jaunu informācijas paneli'.
Nākamajā logā ievadiet informācijas paneļa nosaukumu un noklikšķiniet uz “Izveidot”.
Kad informācijas panelis ir izveidots, tagad datu vizualizēšanai izmantosim tādus Adafruit IO blokus kā Gauge un Slider. Lai pievienotu bloku, augšējā labajā stūrī noklikšķiniet uz “+”.
Pēc tam atlasiet bloku “Gauge”.
Nākamajā logā atlasiet plūsmas datus, kurus vēlaties vizualizēt.
Pēdējā solī mainiet bloka iestatījumus, lai to pielāgotu.
Tagad pievienojiet to pašu procedūru kā iepriekš, lai pievienotu vizualizācijas blokus pārējām plūsmām. Mans Adafruit IO informācijas panelis izskatījās šādi:
Koda skaidrojums
Pilns šī projekta kods ir norādīts dokumenta beigās. Šeit mēs izskaidrojam dažas svarīgas koda daļas.
Kods izmanto SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, un DHT.h bibliotēkas. SDS011, Adafruit_GFX un Adafruit_SSD1306 bibliotēkas var lejupielādēt no bibliotēku pārvaldnieka Arduino IDE un instalēt no turienes. Lai to izdarītu, atveriet Arduino IDE un dodieties uz Skice <Iekļaut bibliotēku <Pārvaldīt bibliotēkas . Tagad meklējiet SDS011 un instalējiet R. Zschiegner SDS Sensor bibliotēku.
Līdzīgi instalējiet Adafruit GFX un Adafruit SSD1306 bibliotēkas. Adafruit_MQTT.h un DHT11.h var lejupielādēt no norādītajām saitēm.
Pēc bibliotēku instalēšanas Arduino IDE sāciet kodu, iekļaujot nepieciešamos bibliotēku failus.
# iekļaut
Nākamajās rindās definējiet OLED displeja platumu un augstumu. Šajā projektā esmu izmantojis 128 × 64 SPI OLED displeju. Mainītājus SCREEN_WIDTH un SCREEN_HEIGHT varat mainīt atbilstoši savam displejam.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Pēc tam definējiet SPI sakaru tapas, kur ir pievienots OLED displejs.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Pēc tam izveidojiet Adafruit displeja gadījumu ar iepriekš definētu komunikācijas protokola platumu un augstumu un SPI protokolu.
Adafruit_SSD1306 displejs (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Pēc tam iekļaujiet WiFi un Adafruit IO akreditācijas datus, kurus nokopējāt no Adafruit IO servera. Tie ietvers MQTT serveri, porta numuru, lietotāja vārdu un AIO atslēgu.
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"
Pēc tam sensora datu glabāšanai iestatiet Adafruit IO plūsmas. Manā gadījumā esmu definējis sešas plūsmas dažādu sensoru datu glabāšanai, proti: gaisa kvalitāte, temperatūra, mitrums, PM10, PM25 un CO.
Adafruit_MQTT_Client mqtt (& klients, 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 / Temperatūra"); Adafruit_MQTT_Publish Humidity = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / mitrums"); 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");
Tagad iestatīšanas () funkcijas iekšpusē inicializējiet sērijas monitoru ar 9600 datu pārraides ātrumu atkļūdošanas vajadzībām. Inicializējiet arī OLED displeju, DHT sensoru un SDS011 sensoru ar sākuma () funkciju.
void setup () {my_sds.begin (16,17); Sērijas sākums (9600); dht.sākt (); display.begin (SSD1306_SWITCHCAPVCC);
Cilpa iekšpusē uzstādīšanas funkcija tiek izmantota, lai apkopotu vērtības līdz noteiktam skaitam, un pēc tam iestatiet skaitītāju uz nulli.
for (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {lasījumiPM10 = 0; }
Sensora vērtību nolasīšana:
Tagad cilpa funkcijas iekšpusē izmantojiet metodi milis (), lai sensoru vērtības nolasītu ik pēc stundas. Katrs no gāzes sensoriem izvada analogo vērtību no 0 līdz 4095. Lai šo vērtību pārvērstu spriegumā, izmantojiet šādu vienādojumu: RvRo = MQ7Raw * (3,3 / 4095); kur MQ7Raw ir analogā vērtība no sensora analogās tapas. Izlasiet arī PM2,5 un PM10 rādījumus no sensora SDS011.
if ((neparakstīts garš) (currentMillis - previousMillis)> = intervāls) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3,3 / 4095); MQ7ppm = 3,027 * eksp. (1,0698 * (RvRo)); Serial.println (MQ7ppm); kļūda = my_sds.read (& p25, & p10); if (! kļūda) {Serial.println ("P2.5:" + virkne (25. lpp.)); Serial.println ("P10:" + virkne (p10)); }}
Vērtību konvertēšana:
PM2,5 un PM10 vērtības jau ir µg / m 3, bet mums oglekļa monoksīda vērtības jāpārvērš no PPM uz mg / m 3. Konversijas formula ir sniegta zemāk:
Koncentrācija (mg / m 3) = Koncentrācija (PPM) × (Molekulmasa (g / mol) / Molārais tilpums (L))
Kur: CO molekulmasa ir 28,06 g / mol un molārais tilpums ir 24,45 L 25 ° C temperatūrā
Koncentrācija INmgm3 = MQ7ppm * (28,06 / 24,45); Serial.println (koncentrācijaINmgm3);
24 stundu vidējā aprēķināšana:
Pēc tam nākamajās rindās aprēķiniet 24 stundu vidējo līmeni PM10, PM2,5 lasījumam un 8 stundu vidējo rādītāju oglekļa monoksīda rādījumiem. Pirmajā koda rindiņā paņemiet pašreizējo kopsummu un atņemiet pirmo masīva elementu, tagad saglabājiet to kā jauno kopējo. Sākotnēji tas būs Nulle. Pēc tam iegūstiet sensora vērtības un pievienojiet pašreizējo rādījumu kopējam skaitlim un palieliniet skaitļa indeksu. Ja indeksa vērtība ir vienāda vai lielāka par numReadings, iestatiet indeksu atpakaļ uz nulli.
totalPM10 = totalPM10 - rādījumiPM10; rādījumiPM10 = p10; totalPM10 = totalPM10 + rādījumiPM10; readIndexPM10 = readIndexPM10 + 1; ja (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Tad beidzot publicējiet šīs vērtības vietnē Adafruit IO.
ja (! Temperatūra.publicēt (temperatūra)) {aizkave (30000); } if (! Mitrums.publicēt (mitrums)) {aizkave (30000); ………………………………………………………. ……………………………………………………….
3D drukāts korpuss AQI uzraudzības sistēmai
Pēc tam es izmērīju iestatīšanas izmērus, izmantojot savu vernier, kā arī izmērīju sensoru un OLED izmērus, lai izveidotu korpusu. Mans dizains izskatījās apmēram šādi zemāk, kad tas tika izdarīts.
Pēc tam, kad es biju apmierināts ar dizainu, es to eksportēju kā STL failu, sagriezu šķēlēs, pamatojoties uz printera iestatījumiem, un beidzot to izdrukāju. Arī STL fails ir pieejams lejupielādei no Thingiverse, un jūs varat to izdrukāt, izmantojot to.
Pēc drukas pabeigšanas es turpināju samontēt projektu, kas izveidots pastāvīgā korpusā, lai to uzstādītu objektā. Ar visu izveidoto savienojumu es samontēju ķēdi savā korpusā, un viss bija lieliski piemērots, kā jūs varat redzēt šeit.
AQI uzraudzības sistēmas testēšana
Kad aparatūra un kods ir gatavi, ir pienācis laiks pārbaudīt ierīci. Ierīces darbināšanai izmantojām ārēju 12V 1A adapteri. Kā redzat, ierīce OLED displejā parādīs PM10, PM2.5 un oglekļa monoksīda koncentrāciju. PM2,5 un PM10 koncentrācija ir µg / m 3, bet oglekļa monoksīda koncentrācija ir mg / m 3.
Šie lasījumi tiks publicēti arī Adafruit IO informācijas panelī. Visu parametru maksimums (PM10, PM2.5 un CO) būs AQI.
Pēdējo 30 dienu AQI vērtības tiks rādītas kā diagramma.
Šādi jūs varat izmantot sensorus SDS011 un MQ-7, lai aprēķinātu gaisa kvalitātes indeksu. Pilnīga projekta darbība ir atrodama arī zemāk esošajā videoklipā. Ceru, ka jums patika projekts un jums šķita interesanti izveidot savu. Ja jums ir kādi jautājumi, lūdzu, atstājiet tos komentāru sadaļā zemāk.