- Potrebne komponente
- Nova PM senzor SDS011 za merjenje PM2,5 in PM10
- Osnove 0,96-palčnega zaslona OLED
- Priprava senzorja MQ-7 za merjenje ogljikovega monoksida (CO)
- Izračun indeksa kakovosti zraka
- Shema vezja
- Izdelava vezja sistema za spremljanje kakovosti zraka na Perf Board
- Nastavitev Adafruit IO
- Razlaga kode za
- 3D tiskano ohišje za nadzorni sistem AQI
- Testiranje sistema za nadzor AQI
Ko nastopi zima, se zrak, ki visi nad nami, zgosti z dimom in plinaskimi emisijami iz gorečih polj, industrijskih tovarn in avtomobilskega prometa, ki preprečuje sonce in otežuje dihanje. Strokovnjaki pravijo, da sta visoka stopnja onesnaženosti zraka in pandemija COVID-19 lahko nevarna mešanica, ki ima lahko resne posledice. Potreba po sprotnem spremljanju kakovosti zraka je zelo očitna.
V tem projektu bomo zgradili sistem za spremljanje kakovosti zraka ESP32 z uporabo senzorja Nova PM SDS011, senzorja MQ-7 in senzorja DHT11. Za prikaz vrednosti kakovosti zraka bomo uporabili tudi modul OLED Display. Indeks kakovosti zraka (AQI) v Indiji temelji na osem onesnaževal, PM10, PM2,5, SO2 in NO2, CO, ozon, NH3, in Pb. Vendar ni treba meriti vseh onesnaževal. Tako bomo izmerili koncentracijo PM2,5, PM10 in ogljikovega monoksida za izračun indeksa kakovosti zraka. Vrednosti AQI bodo objavljene na Adafruit IO, da jih bomo lahko spremljali od koder koli. Prej smo z Arduinom merili tudi koncentracijo utekočinjenega naftnega plina, dima in plina amoniaka.
Potrebne komponente
- ESP32
- Nova PM senzor SDS011
- 0,96-palčni zaslon SPI OLED
- DHT11 senzor
- Senzor MQ-7
- Jumper žice
Nova PM senzor SDS011 za merjenje PM2,5 in PM10
Senzor SDS011 je najnovejši senzor kakovosti zraka, ki ga je razvila Nova Fitness. Deluje na principu laserskega razprševanja in lahko doseže koncentracijo delcev med 0,3 in 10 μm v zraku. Ta senzor je sestavljen iz majhnega ventilatorja, vstopnega ventila za zrak, laserske diode in fotodiode. Zrak vstopi skozi dovod zraka, kjer svetlobni vir (laser) osvetli delce, razpršena svetloba pa se s pomočjo fotodetektorja pretvori v signal. Ti signali se nato ojačajo in obdelajo, da dobijo koncentracijo delcev PM2,5 in PM10. Pred tem smo za izračun koncentracije PM10 in PM2,5 uporabili senzor Nova PM z Arduino.
Specifikacije tipala SDS011:
- Izhod: PM2,5, PM10
- Območje merjenja: 0,0-999,9 μg / m3
- Vhodna napetost: 4,7 V do 5,3 V
- Največji tok: 100mA
- Tok spanja: 2mA
- Odzivni čas: 1 sekunda
- Pogostnost serijskih izhodnih podatkov: 1 čas / sekundo
- Ločljivost premera delcev: ≤0,3μm
- Relativna napaka: 10%
- Temperaturno območje: -20 ~ 50 ° C
Osnove 0,96-palčnega zaslona OLED
OLED (Organic Light Emitting Diode) je neke vrste dioda, ki oddaja svetlobo in je narejena iz organskih spojin, ki vzbudijo, ko skozi njih pusti električni tok. Te organske spojine imajo svojo svetlobo, zato ne potrebujejo nobenega vezja za osvetlitev ozadja, kot običajni LCD-ji. Zaradi tega je OLED tehnologija zaslona energetsko učinkovita in se pogosto uporablja v televizorjih in drugih zaslonih.
Na trgu so na voljo različne vrste OLED-ov, ki temeljijo na barvi zaslona, številu nožic, velikosti in IC krmilnika. V tej vadnici bomo uporabili enobarvni modri 7-pinski SSD1306 0,96-palčni OLED modul, ki je širok 128 slikovnih pik in dolg 64 slikovnih pik. Ta 7-nožni OLED podpira protokol SPI, krmilnik IC SSD1306 pa OLED-u pomaga prikazati prejete znake. Na povezavi preberite več o OLED in njegovem povezovanju z različnimi mikrokrmilniki.
Priprava senzorja MQ-7 za merjenje ogljikovega monoksida (CO)
MQ-7 CO Senzorski modul za ogljikov monoksid zazna koncentracijo CO v zraku. Senzor lahko meri koncentracije od 10 do 10.000 ppm. Senzor MQ-7 lahko kupite kot modul ali samo kot senzor sam. Prej smo za zaznavanje in merjenje različnih plinov uporabljali številne različne tipe plinskih senzorjev, če jih zanimate, jih lahko tudi preverite. V tem projektu uporabljamo senzorski modul MQ-7 za merjenje koncentracije ogljikovega monoksida v PPM. Shema vezja za ploščo MQ-7 je podana spodaj:
Upor obremenitve RL ima zelo pomembno vlogo pri delovanju senzorja. Ta upor spremeni svojo vrednost upora glede na koncentracijo plina. Senzorska plošča MQ-7 ima odpornost proti obremenitvi 1KΩ, ki je neuporabna in vpliva na odčitke senzorja. Če želite izmeriti ustrezne vrednosti koncentracije CO, morate 1KΩ upor zamenjati z uporom 10KΩ.
Izračun indeksa kakovosti zraka
AQI v Indiji se izračuna na podlagi povprečne koncentracije določenega onesnaževala, izmerjenega v običajnem časovnem intervalu (24 ur za večino onesnaževal, 8 ur za ogljikov monoksid in ozon). Na primer, AQI za PM2,5 in PM10 temelji na 24-urni povprečni koncentraciji, AQI za ogljikov monoksid pa na 8-urni povprečni koncentraciji). Izračuni AQI vključujejo osem onesnaževal, ki so PM10, PM2,5, dušikov dioksid (NO 2), žveplov dioksid (SO 2), ogljikov monoksid (CO), prizemni ozon (O 3), amoniak (NH 3), in svinec (Pb). Vendar vsa onesnaževala niso izmerjena na vseh lokacijah.
Na podlagi izmerjenih 24-urnih koncentracij onesnaževal v okolju se izračuna podindeks, ki je linearna funkcija koncentracije (npr. Podindeks za PM2,5 bo 51 pri koncentraciji 31 µg / m3, 100 pri koncentraciji 60 µg / m3 in 75 pri koncentraciji 45 µg / m3). Najslabši podindeks (ali največji od vseh parametrov) določa skupni AQI.
Shema vezja
Shema vezja za sistem spremljanja kakovosti zraka na osnovi stvari stvari je zelo preprosta in je podana spodaj:
Senzor SDS011, senzor DHT11 in senzor MQ-7 se napaja z + 5V, modul zaslona OLED pa z napetostjo 3,3V. Zatiči oddajnika in sprejemnika SDS011 so povezani z GPIO16 in 17 ESP32. Zatič za analogni izhod senzorja MQ-7 je povezan z GPIO 25, podatkovni zatič senzorja DHT11 pa s senzorjem GPIO27. Ker modul OLED Display uporablja komunikacijo SPI, smo vzpostavili komunikacijo SPI med modulom OLED in ESP32. Povezave so prikazane v spodnji tabeli:
S. Št |
Zatič modula OLED |
Pin ESP32 |
1. |
GND |
Tla |
2. |
VCC |
5V |
3. |
D0 |
18. |
4. |
D1 |
23. |
5. |
OVE |
2. |
6. |
DC |
4. |
7. |
CS |
5. |
S. Št |
Zatič SDS011 |
Pin ESP32 |
1. |
5V |
5V |
2. |
GND |
GND |
3. |
RX |
17. |
4. |
TX |
16. |
S. Št |
DHT pin |
Pin ESP32 |
1. |
Vcc |
5V |
2. |
GND |
GND |
3. |
Podatki |
27. |
S. Št |
MQ-7 Pin |
Pin ESP32 |
1. |
Vcc |
5V |
2. |
GND |
GND |
3. |
A0 |
25. |
Izdelava vezja sistema za spremljanje kakovosti zraka na Perf Board
Kot lahko vidite iz glavne slike, je bila ideja, da bi to vezje uporabili v 3D tiskanem ohišju. Torej je celotno vezje, prikazano zgoraj, spajkano na ploščo za perf. Uporabite žice, da pustite dovolj razdalje za namestitev OLED in senzorjev. Moja perf plošča je prilepljena na OLED in senzorski modul je prikazan spodaj.
Nastavitev Adafruit IO
Adafruit IO je odprta podatkovna platforma, ki vam omogoča združevanje, vizualizacijo in analizo podatkov v živo v oblaku. Z Adafruit IO lahko svoje podatke naložite, prikažete in spremljate prek interneta ter omogočite IoT za svoj projekt. Z Adafruit IO lahko nadzorujete motorje, berete podatke senzorjev in ustvarjate zanimive IoT aplikacije po internetu.
Če želite uporabiti Adafruit IO, najprej ustvarite račun na Adafruit IO. Če želite to narediti, pojdite na spletno mesto Adafruit IO in v zgornjem desnem kotu zaslona kliknite »Začnite brezplačno«.
Po končanem postopku ustvarjanja računa se prijavite v račun in kliknite »Ogled ključa AIO« v zgornjem desnem kotu, da dobite uporabniško ime računa in ključ AIO.
Ko kliknete na "AIO Key", se odpre okno z Adafruit IO AIO Key in uporabniškim imenom. Kopirajte ta ključ in uporabniško ime, uporabljeno bo v kodi.
Zdaj, ko dobite tipke AIO, ustvarite vir za shranjevanje podatkov senzorja DHT. Če želite ustvariti vir, kliknite »Vir«. Nato kliknite »Dejanja« in nato med razpoložljivimi možnostmi izberite »Ustvari nov vir«.
Po tem se odpre novo okno, kjer morate vnesti ime in opis vira. Pisanje opisa ni obvezno.
Po tem kliknite »Ustvari«; preusmerjeni boste na novo ustvarjeni vir.
Za ta projekt smo ustvarili skupno šest virov za vrednosti PM10, PM2,5, CO, temperature, vlažnosti in AQI. Sledite istemu postopku kot zgoraj, da ustvarite ostale vire.
Po ustvarjanju virov bomo zdaj ustvarili funkcijo nadzorne plošče Adafruit IO za vizualizacijo podatkov senzorja na eni strani. Za to najprej ustvarite nadzorno ploščo in nato nanjo dodajte vse te vire.
Če želite ustvariti nadzorno ploščo, kliknite možnost Nadzorna plošča in nato »Dejanje«, nato pa še »Ustvari novo nadzorno ploščo«.
V naslednje okno vnesite ime armaturne plošče in kliknite »Ustvari«.
Ko je nadzorna plošča ustvarjena, bomo za vizualizacijo podatkov uporabili bloke Adafruit IO, kot sta Gauge in Slider. Če želite dodati blok, kliknite »+« v zgornjem desnem kotu.
Nato izberite blok "Merilnik".
V naslednjem oknu izberite podatke o viru, ki jih želite vizualizirati.
V zadnjem koraku spremenite nastavitve bloka, da jih prilagodite.
Zdaj sledite istemu postopku kot zgoraj, da dodate bloke za ponazoritev za ostale vire. Moja nadzorna plošča Adafruit IO je izgledala takole:
Razlaga kode za
Popolna koda za ta projekt je podana na koncu dokumenta. Tukaj razlagamo nekatere pomembne dele kode.
Koda uporablja SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, in DHT.h knjižnice. Knjižnice SDS011, Adafruit_GFX in Adafruit_SSD1306 lahko prenesete iz upravitelja knjižnic v IDE Arduino in jih namestite od tam. Za to odprite Arduino IDE in pojdite na Sketch <Include Library <Manage Libraries . Zdaj poiščite SDS011 in namestite knjižnico SDS Sensor R. Zschiegnerja.
Podobno namestite knjižnici Adafruit GFX in Adafruit SSD1306 podjetja Adafruit. Adafruit_MQTT.h in DHT11.h lahko prenesete z danih povezav.
Po namestitvi knjižnic v Arduino IDE zaženite kodo tako, da vključite potrebne datoteke knjižnic.
#include
V naslednjih vrsticah določite širino in višino zaslona OLED. V tem projektu sem uporabil 128 × 64 SPI OLED zaslon. Spremenljivki SCREEN_WIDTH in SCREEN_HEIGHT lahko spremenite glede na zaslon.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Nato določite komunikacijske nožice SPI, kamor je povezan OLED zaslon.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Nato ustvarite primerek za zaslon Adafruit s širino in višino ter komunikacijskim protokolom SPI, ki je bil določen prej.
Zaslon Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Nato vključite poverilnice WiFi in Adafruit IO, ki ste jih kopirali s strežnika Adafruit IO. Sem spadajo strežnik MQTT, številka vrat, uporabniško ime in 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"
Nato nastavite vire Adafruit IO za shranjevanje podatkov senzorja. V mojem primeru sem določil šest virov za shranjevanje različnih podatkov senzorjev, in sicer: AirQuality, Temperature, Vlažnost, PM10, PM25 in CO.
Adafruit_MQTT_Client mqtt (& odjemalec, 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");
Zdaj znotraj funkcije setup () inicializirajte serijski monitor s hitrostjo prenosa 9600 za namene odpravljanja napak. S funkcijo start () inicializirajte tudi zaslon OLED, senzor DHT in senzor SDS011.
void setup () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
Za zanko znotraj nastavitev funkcije se uporablja za zbiranje vrednosti do določenega števila, nato pa nastavite števec na nič.
za (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }
Branje vrednosti senzorja:
Zdaj znotraj funkcije zanke uporabite metodo milis () za branje vrednosti senzorja v vsaki eni uri. Vsak od plinskih senzorjev odda analogno vrednost od 0 do 4095. Za pretvorbo te vrednosti v napetost uporabite naslednjo enačbo: RvRo = MQ7Raw * (3.3 / 4095); kjer je MQ7Raw analogna vrednost iz analognega zatiča senzorja. Preberite tudi odčitke PM2,5 in PM10 s senzorja SDS011.
if ((nepodpisano dolgo) (currentMillis - previousMillis)> = interval) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3,3 / 4095); MQ7ppm = 3.027 * exp (1.0698 * (RvRo)); Serial.println (MQ7ppm); napaka = my_sds.read (& p25, & p10); if (! error) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + String (p10)); }}
Pretvorba vrednosti:
Vrednosti PM2,5 in PM10 so že v µg / m 3, vendar moramo vrednosti ogljikovega monoksida pretvoriti iz PPM v mg / m 3. Formula za pretvorbo je podana spodaj:
Koncentracija (mg / m 3) = koncentracija (PPM) × (molekulska masa (g / mol) / molska prostornina (L))
Kje: Molekulska masa CO je 28,06 g / mol in molska prostornina je 24,45 L pri 25 0 C
KoncentracijaINmgm3 = MQ7ppm * (28.06 / 24.45); Serial.println (ConcentrationINmgm3);
Izračun 24-urnega povprečja:
Nato v naslednjih vrsticah izračunajte 24-urno povprečje odčitkov PM10, PM2,5 in 8-urno povprečje odčitkov ogljikovega monoksida. V prvi vrstici kode vzemite trenutno skupno in odštejte prvi element v matriki, zdaj pa to shranite kot novo skupno. Sprva bo Zero. Nato dobite vrednosti senzorja, dodajte trenutni odčitek v skupno vrednost in povečajte indeks števil. Če je vrednost indeksa enaka ali večja od numReadings, indeks nastavite nazaj na nič.
totalPM10 = totalPM10 - odčitkiPM10; odčitki PM10 = p10; totalPM10 = totalPM10 + odčitkiPM10; readIndexPM10 = readIndexPM10 + 1; če (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Nato te vrednosti končno objavite na Adafruit IO.
if (! Temperature.publish (temperature)) {zamuda (30000); } if (! Vlažnost.objavi (vlaga)) {zamuda (30000); ………………………………………………………. ……………………………………………………….
3D tiskano ohišje za nadzorni sistem AQI
Nato sem z uporabo nonierja izmeril dimenzije nastavitve in izmeril dimenzije senzorjev in OLED za oblikovanje ohišja. Moj dizajn je bil spodaj videti nekako takole, ko je bil končan.
Ko sem bil zadovoljen z zasnovo, sem jo izvozil kot datoteko STL, jo razrezal glede na nastavitve tiskalnika in na koncu natisnil. Datoteka STL je tudi na voljo za prenos s strani Thingiverse in z njo lahko ohišje natisnete.
Ko je bil tisk končan, sem nadaljeval s sestavljanjem projekta, ki je bil postavljen v stalno ohišje, da sem ga namestil v objekt. S popolno vzpostavljeno povezavo sem sestavil vezje v ohišje in vse je bilo lepo, kot lahko vidite tukaj.
Testiranje sistema za nadzor AQI
Ko sta strojna oprema in koda pripravljena, je čas, da napravo preizkusite. Za napajanje naprave smo uporabili zunanji 12V 1A adapter. Kot lahko vidite, bo naprava na zaslonu OLED prikazala koncentracijo PM10, PM2,5 in ogljikovega monoksida. Koncentracija PM2,5 in PM10 je v µg / m 3, medtem ko je koncentracija ogljikovega monoksida v mg / m 3.
Ta odčitki bodo objavljeni tudi na nadzorni plošči Adafruit IO. Najvišja vrednost vseh parametrov (PM10, PM2,5 in CO) bo AQI.
Vrednosti AQI v zadnjih 30 dneh bodo prikazane v obliki grafa.
Tako lahko s pomočjo senzorjev SDS011 in MQ-7 izračunate indeks kakovosti zraka. Popolno delovanje projekta lahko najdete tudi v spodnjem videoposnetku. Upam, da ste projekt uživali in se vam je zdelo zanimivo zgraditi svojega. Če imate kakršna koli vprašanja, jih pustite v spodnjem oddelku za komentarje.