- Tarvittavat komponentit
- Nova PM -anturi SDS011 PM2,5: n ja PM10: n mittaamiseen
- Perustiedot 0,96 tuuman OLED-näyttömoduulista
- MQ-7-anturin valmistelu hiilimonoksidin (CO) mittaamiseksi
- Ilmanlaatuindeksin laskeminen
- Piirikaavio
- Ilmanlaadunvalvontajärjestelmän piirin rakentaminen Perf Boardille
- Adafruit IO -asetus
- Koodin selitys
- 3D-tulostettu kotelo AQI-valvontajärjestelmälle
- AQI-valvontajärjestelmän testaaminen
Talven tullessa yläpuolelle roikkuva ilma sakeutuu savusta ja kaasupäästöistä polttavilta kentiltä, teollisuustehtailta ja ajoneuvoliikenteeltä, mikä estää auringon ja vaikeuttaa hengittämistä. Asiantuntijoiden mukaan korkea ilmansaaste ja COVID-19-pandemia voivat olla vaarallinen sekoitus, jolla voi olla vakavia seurauksia. Ilman laadun reaaliaikaisen seurannan tarve on erittäin räikeä.
Joten tässä projektissa aiomme rakentaa ESP32-ilmanlaadunvalvontajärjestelmän käyttämällä Nova PM SDS011 -anturia, MQ-7-anturia ja DHT11-anturia. Käytämme myös OLED-näyttömoduulia ilmanlaadun arvojen näyttämiseen. Ilmanlaatupäivien (AQI) Intiassa perustuu kahdeksaan epäpuhtauksia, PM10, PM2.5, SO2 ja NO2, CO, otsoni, NH3, ja Pb. Kaikkia epäpuhtauksia ei kuitenkaan tarvitse mitata. Joten aiomme mitata PM2,5: n, PM10: n ja hiilimonoksidin pitoisuuden laskea ilmanlaatuindeksi. AQI-arvot julkaistaan Adafruit IO: ssa, jotta voimme seurata sitä mistä tahansa. Aikaisemmin olemme myös mitanneet nestekaasun, savun ja ammoniakin pitoisuudet Arduinolla.
Tarvittavat komponentit
- ESP32
- Nova PM -anturi SDS011
- 0,96 tuuman SPI OLED -näyttömoduuli
- DHT11-anturi
- MQ-7-anturi
- Neulalangat
Nova PM -anturi SDS011 PM2,5: n ja PM10: n mittaamiseen
SDS011-anturi on hyvin uusi ilmanlaadun anturi, jonka on kehittänyt Nova Fitness. Se toimii lasersironnan periaatteella ja voi saada hiukkaspitoisuuden välillä 0,3-10 μm ilmassa. Tämä anturi koostuu pienestä tuulettimesta, ilmanottoventtiilistä, laserdiodista ja valodiodista. Ilma pääsee ilman sisääntulon kautta, jossa valonlähde (Laser) valaisee hiukkaset ja sironnut valo muuttuu signaaliksi valodetektorilla. Nämä signaalit vahvistetaan ja prosessoidaan sitten hiukkaspitoisuuden PM2,5 ja PM10 saamiseksi. Aikaisemmin käytimme Nova PM Sensoria Arduinon kanssa laskemaan PM10- ja PM2,5-pitoisuudet.
SDS011-anturin tekniset tiedot:
- Lähtö: PM2,5, PM10
- Mittausalue: 0,0-999,9 μg / m3
- Tulojännite: 4,7 V - 5,3 V
- Suurin virta: 100mA
- Lepovirta: 2mA
- Vasteaika: 1 sekunti
- Sarjatietojen lähtötaajuus: 1 aika / sekunti
- Hiukkasten halkaisijan tarkkuus: ≤0,3 μm
- Suhteellinen virhe: 10%
- Lämpötila-alue: -20 ~ 50 ° C
Perustiedot 0,96 tuuman OLED-näyttömoduulista
OLED (Orgaaninen valoa emittoiva diodi) on eräänlainen valoa emittoiva diodi, joka valmistetaan käyttämällä orgaanisia yhdisteitä, jotka innostavat, kun sähkövirran annetaan kulkea niiden läpi. Näillä orgaanisilla yhdisteillä on oma valonsa, joten ne eivät vaadi taustavalopiirejä, kuten tavalliset LCD-näytöt. Tästä syystä OLED-näyttötekniikka on energiatehokas ja sitä käytetään laajalti televisioissa ja muissa näyttötuotteissa.
Markkinoilla on saatavilla erityyppisiä OLED-malleja näytön värin, nastojen lukumäärän, koon ja ohjaimen mikropiirin perusteella. Tässä opetusohjelmassa käytämme yksiväristä sinistä 7-nastaista SSD1306 0,96 tuuman OLED-moduulia, joka on 128 pikseliä ja 64 pikseliä pitkä. Tämä 7-nastainen OLED tukee SPI-protokollaa ja ohjaimen IC SSD1306 auttaa OLED: tä näyttämään vastaanotetut merkit. Lue lisää OLED: stä ja sen liitännöistä eri mikro-ohjaimiin linkkiä seuraamalla.
MQ-7-anturin valmistelu hiilimonoksidin (CO) mittaamiseksi
MQ-7 CO -hiilimonoksidikaasuanturimoduuli havaitsee CO: n pitoisuudet ilmassa. Anturi voi mitata pitoisuuksia 10-10 000 ppm. MQ-7-anturi voidaan ostaa joko moduulina tai pelkästään anturina. Aiemmin olemme käyttäneet monia erityyppisiä kaasuantureita erilaisten kaasujen havaitsemiseen ja mittaamiseen. Voit myös tarkistaa ne, jos olet kiinnostunut. Tässä projektissa mitataan hiilimonoksidipitoisuutta PPM: ssä MQ-7-anturimoduulilla. MQ-7-piirilevyn kytkentäkaavio on annettu alla:
Kuormitusvastuksella RL on erittäin tärkeä rooli anturin toiminnassa. Tämä vastus muuttaa vastusarvoa kaasupitoisuuden mukaan. MQ-7-anturikortin kuormitusvastus on 1KΩ, joka on hyödytön ja vaikuttaa anturin lukemiin. Joten mittaamaan sopivat CO-pitoisuusarvot, sinun on korvattava 1KΩ -vastus 10KΩ -vastuksella.
Ilmanlaatuindeksin laskeminen
Intian AQI lasketaan tietyn epäpuhtauden keskimääräisen pitoisuuden perusteella mitattuna tavallisella aikavälillä (24 tuntia useimmille epäpuhtauksille, 8 tuntia hiilimonoksidille ja otsonille). Esimerkiksi PM2,5: n ja PM10: n AQI perustuu 24 tunnin keskimääräiseen pitoisuuteen ja hiilimonoksidin AQI perustuu 8 tunnin keskimääräiseen pitoisuuteen). AQI-laskelmat sisältävät kahdeksan epäpuhtautta, jotka ovat PM10, PM2,5, typpidioksidi (NO 2), rikkidioksidi (SO 2), hiilimonoksidi (CO), maanpinnan otsoni (O 3), ammoniakki (NH 3), ja lyijy (Pb). Kaikkia epäpuhtauksia ei kuitenkaan mitata kaikissa paikoissa.
Mitatun epäpuhtauden ympärivuorokautisten mitattujen pitoisuuksien perusteella lasketaan alaindeksi, joka on lineaarinen pitoisuusfunktio (esim. PM2,5: n alaindeksi on 51 pitoisuudessa 31 µg / m3, 100 pitoisuudessa 60 ug / m3 ja 75 konsentraatiolla 45 ug / m3). Pahin alaindeksi (tai kaikkien parametrien enimmäismäärä) määrää kokonais-AQI: n.
Piirikaavio
IoT-pohjaisen ilmanlaadunvalvontajärjestelmän piirikaavio on hyvin yksinkertainen ja esitetty alla:
SDS011-anturi, DHT11 ja MQ-7-anturi saavat virtaa + 5 V: lla ja OLED-näyttömoduuli 3,3 V: lla. SDS011: n lähettimen ja vastaanottimen nastat on kytketty ESP32: n GPIO16: een ja 17: een. MQ-7-anturin analoginen ulostulo on kytketty GPIO 25: een ja DHT11-anturin datanapa GPIO27-anturiin. Koska OLED-näyttömoduuli käyttää SPI-viestintää, olemme perustaneet SPI-tiedonsiirron OLED-moduulin ja ESP32: n välille. Liitännät on esitetty alla olevassa taulukossa:
S. ei |
OLED-moduulin tappi |
ESP32-tappi |
1 |
GND |
Maa |
2 |
VCC |
5 V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
DC |
4 |
7 |
CS |
5 |
S. ei |
SDS011 tappi |
ESP32-tappi |
1 |
5 V |
5 V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
S. ei |
DHT-tappi |
ESP32-tappi |
1 |
Vcc |
5 V |
2 |
GND |
GND |
3 |
Tiedot |
27 |
S. ei |
MQ-7-tappi |
ESP32-tappi |
1 |
Vcc |
5 V |
2 |
GND |
GND |
3 |
A0 |
25 |
Ilmanlaadunvalvontajärjestelmän piirin rakentaminen Perf Boardille
Kuten pääkuvasta näkyy, ajatuksena oli käyttää tätä virtapiiriä 3D-tulostetun kotelon sisällä. Joten koko yllä oleva piiri on juotettu perf-levylle. Varmista, että käytät johtoja riittävän etäisyyden asentamiseksi OLED: iin ja antureihin. Perf-korttini juotettu OLED: ään ja anturimoduuli on esitetty alla.
Adafruit IO -asetus
Adafruit IO on avoin tietoalusta, jonka avulla voit koota, visualisoida ja analysoida reaaliaikaisia tietoja pilvessä. Adafruit IO: n avulla voit ladata, näyttää ja seurata tietojasi Internetissä ja ottaa projektisi IoT käyttöön. Voit hallita moottoreita, lukea anturitietoja ja tehdä hienoja IoT-sovelluksia Internetissä Adafruit IO: n avulla.
Jos haluat käyttää Adafruit IO: ta, luo ensin tili Adafruit IO: lle. Voit tehdä tämän siirtymällä Adafruit IO: n verkkosivustoon ja napsauttamalla näytön alareunan oikeassa yläkulmassa olevaa Aloita ilmaiseksi.
Kun olet luonut tilin luomisprosessin, kirjaudu tilille ja napsauta 'Näytä AIO-avain' oikeassa yläkulmassa saadaksesi tilin käyttäjänimen ja AIO-avaimen.
Kun napsautat AIO-avain, ikkuna avautuu Adafruit IO AIO -avaimen ja käyttäjänimen kanssa. Kopioi tämä avain ja käyttäjänimi, sitä käytetään koodissa.
Kun olet saanut AIO-avaimet, luo syöte DHT-anturitietojen tallentamiseen. Luo syöte napsauttamalla Syöttö. Napsauta sitten 'Toiminnot' ja valitse sitten 'Luo uusi syöte' käytettävissä olevista vaihtoehdoista.
Tämän jälkeen avautuu uusi ikkuna, johon sinun on syötettävä syötteen nimi ja kuvaus. Kuvaus on valinnainen.
Napsauta sitten Luo, tämän jälkeen; sinut ohjataan äskettäin luotuun syötteeseen.
Tätä projektia varten luotiin yhteensä kuusi syötettä PM10-, PM2,5-, CO-, lämpötila-, kosteus- ja AQI-arvoille. Luo loput syötteet noudattamalla samaa menettelytapaa kuin yllä.
Syötteiden luomisen jälkeen luomme nyt Adafruit IO -hallintapaneeliominaisuuden, jonka avulla sensoritiedot voidaan visualisoida yhdellä sivulla. Luo sitä varten ensin koontinäyttö ja lisää sitten kaikki nämä syötteet koontinäyttöön.
Luo koontinäyttö napsauttamalla Koontinäyttö-vaihtoehtoa ja napsauttamalla sitten Toiminto ja sen jälkeen napsauttamalla Luo uusi hallintapaneeli.
Kirjoita seuraavaan ikkunaan kojelaudan nimi ja napsauta Luo.
Kun koontinäyttö on luotu, käytämme nyt Adafruit IO -lohkoja, kuten mittari ja liukusäädin, tietojen visualisointiin. Lisää lohko napsauttamalla oikeassa yläkulmassa olevaa + -merkkiä.
Valitse sitten 'Mittari' -lohko.
Valitse seuraavassa ikkunassa syötetiedot, jotka haluat visualisoida.
Muuta viimeisessä vaiheessa lohkoasetuksia mukauttamaan sitä.
Noudata nyt samaa menettelytapaa kuin edellinen lisätäksesi visualisointilohkot muille syötteille. Adafruit IO Dashboard näytti tältä:
Koodin selitys
Tämän projektin täydellinen koodi on asiakirjan lopussa. Tässä selitämme joitain tärkeitä koodin osia.
Koodi käyttää SDS011-, Adafruit_GFX-, Adafruit_SSD1306-, Adafruit_MQTT- ja DHT.h- kirjastoja. SDS011-, Adafruit_GFX- ja Adafruit_SSD1306-kirjastot voidaan ladata Arduino IDE: n kirjastonhallinnasta ja asentaa sieltä. Tätä varten avaa Arduino IDE ja siirry kohtaan Luonnos <Sisällytä kirjasto <Hallitse kirjastoja . Etsi nyt SDS011 ja asenna R. Zschiegnerin SDS Sensor -kirjasto.
Asenna vastaavasti Adafruit GFX- ja Adafruit SSD1306 -kirjastot. Adafruit_MQTT.h ja DHT11.h voidaan ladata annetuista linkeistä.
Kun olet asentanut kirjastot Arduino IDE -ohjelmaan, käynnistä koodi sisällyttämällä tarvittavat kirjastotiedostot.
#sisältää
Määritä seuraavilla riveillä OLED-näytön leveys ja korkeus. Tässä projektissa olen käyttänyt 128 × 64 SPI OLED -näyttöä. Voit muuttaa muuttujia SCREEN_WIDTH ja SCREEN_HEIGHT näytön mukaan.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Määritä sitten SPI-tiedonsiirtonastat, joihin OLED-näyttö on kytketty.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Luo sitten Adafruit-näytölle ilmentymä, jolla on aiemmin määritelty leveys ja korkeus ja SPI-yhteyskäytäntö.
Adafruit_SSD1306-näyttö (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Liitä sitten WiFi ja Adafruit IO -tunnistetiedot, jotka kopioit Adafruit IO -palvelimelta. Näihin kuuluvat MQTT-palvelin, porttinumero, käyttäjänimi ja AIO-avain.
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"
Määritä sitten Adafruit IO -syötteet anturitietojen tallentamista varten. Minun tapauksessani olen määrittänyt kuusi syötettä erilaisten anturitietojen tallentamiseksi, nimittäin: Ilmanlaatu, Lämpötila, Kosteus, PM10, PM25 ja CO.
Adafruit_MQTT_Client mqtt (& asiakas, 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 / lämpötila"); Adafruit_MQTT_Publish Kosteus = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Kosteus"); 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");
Aloita nyt setup () -toiminnon sisällä Serial Monitor 9600 -siirtonopeudella virheenkorjausta varten. Alusta myös OLED-näyttö, DHT-anturi ja SDS011-anturi Aloita () -toiminnolla.
void setup () {my_sds.begin (16,17); Sarjan alku (9600); dht. alku (); display.begin (SSD1306_SWITCHCAPVCC);
Silmukan sisällä asetukset toimintoa käytetään keräämään arvot jopa määritelty useita ja sitten asettaa nollaksi.
for (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {lukematPM10 = 0; }
Anturiarvojen lukeminen:
Käytä nyt loop-toiminnon sisällä millis () -menetelmää lukeaksesi anturin arvot tunnin välein. Kukin kaasuantureista antaa analogisen arvon välillä 0 - 4095. Muunna tämä arvo jännitteeksi käyttämällä seuraavaa yhtälöä: RvRo = MQ7Raw * (3,3 / 4095); missä MQ7Raw on analoginen arvo anturin analogisesta tapista. Lue myös PM2.5- ja PM10-lukemat SDS011-anturista.
if ((allekirjoittamaton pitkä) (currentMillis - edellinenMillis)> = intervalli) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3,3 / 4095); MQ7ppm = 3,027 * exp (1,0698 * (RvRo)); Serial.println (MQ7ppm); virhe = my_sds.read (& p25, & p10); if (! error) {Serial.println ("P2.5:" + Merkkijono (s25)); Serial.println ("P10:" + merkkijono (p10)); }}
Arvojen muuntaminen:
PM2,5- ja PM10-arvot ovat jo yksikköinä µg / m 3, mutta hiilimonoksidiarvot on muunnettava PPM: stä mg / m 3: ksi. Muunnoskaava on annettu alla:
Pitoisuus (mg / m 3) = Pitoisuus (PPM) × (Molekyylipaino (g / mol) / Moolitilavuus (L))
Jossa: Moolimassa CO on 28,06 g / mol ja molaarinen määrä on 24.45L 25 0 C: ssa
Pitoisuus INmgm3 = MQ7ppm * (28,06 / 24,45); Serial.println (pitoisuusINmgm3);
Lasketaan 24 tunnin keskiarvo:
Laske sitten seuraavilla riveillä 24 tunnin keskiarvo PM10-, PM2,5-lukemille ja 8 tunnin keskiarvo hiilimonoksidilukemille. Ota koodin ensimmäiseltä riviltä nykyinen summa ja vähennä matriisin ensimmäinen elementti, tallenna nyt uusi summa. Aluksi se on Zero. Hanki sitten anturin arvot ja lisää nykyinen lukema kokonaismäärään ja lisää numeroindeksiä. Jos indeksin arvo on yhtä suuri tai suurempi kuin numReadings, aseta hakemisto takaisin nollaan.
totalPM10 = totalPM10 - lukematPP10; lukemat PM10 = p10; totalPM10 = yhteensäPP10 + lukematPP10; readIndexPM10 = readIndexPM10 + 1; if (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Sitten vihdoin julkaise nämä arvot Adafruit IO: ssa.
if (! Lämpötila.julkaisu (lämpötila)) {delay (30000); } if (! Kosteus.julkaisu (kosteus)) {delay (30000); ………………………………………………………. ……………………………………………………….
3D-tulostettu kotelo AQI-valvontajärjestelmälle
Seuraavaksi mitasin kokoonpanon mitat vernierilläni ja mitasin myös antureiden ja OLED: n mitat kotelon suunnittelemiseksi. Suunnitteluni näytti tältä alla, kun se oli tehty.
Kun olin tyytyväinen suunnitteluun, vietin sen STL-tiedostona, leikattiin sen tulostimen asetusten perusteella ja lopulta tulostin. STL-tiedosto on jälleen ladattavissa myös Thingiversestä, ja voit tulostaa kotelosi sitä käyttämällä.
Kun tulostus oli valmis, jatkoin projektin kokoamista pysyvään koteloon sen asentamiseksi tilaan. Kokonaisliitännän jälkeen kootin piirin kotelooni ja kaikki sopivat mukavasti, kuten näette täällä.
AQI-valvontajärjestelmän testaaminen
Kun laitteisto ja koodi ovat valmiit, on aika testata laite. Laitteen virtalähteenä käytimme ulkoista 12 V: n 1 A-sovitinta. Kuten näette, laite näyttää PM10: n, PM2,5: n ja hiilimonoksidin pitoisuuden OLED-näytössä. Pitoisuus PM2.5 ja PM10 ovat ug / m 3, kun taas hiilimonoksidin on mg / m 3.
Nämä lukemat julkaistaan myös Adafruit IO Dashboardissa. Kaikkien parametrien (PM10, PM2.5 & CO) enimmäismäärä on AQI.
Viimeisten 30 päivän AQI-arvot näytetään kaaviona.
Näin voit käyttää SDS011- ja MQ-7-antureita ilmanlaatuindeksin laskemiseen. Projektin täydellinen toiminta löytyy myös alla olevasta videosta. Toivottavasti pidit projektista ja pidit mielenkiintoisena rakentaa oma. Jos sinulla on kysyttävää, jätä ne alla olevaan kommenttiosioon.