- Komponenter kreves
- Nova PM-sensor SDS011 for måling av PM2.5 og PM10
- Grunnleggende om 0,96 'OLED-skjermmodul
- Klargjøre MQ-7-sensoren for å måle karbonmonoksid (CO)
- Beregning av luftkvalitetsindeks
- Kretsdiagram
- Bygg luftkretsovervåkningssystemkrets på Perf Board
- Adafruit IO-oppsett
- Kode Forklaring for
- 3D-trykt kabinett for AQI overvåkingssystem
- Testing av AQI-overvåkingssystemet
Når vinteren begynner, tykner luften som henger over oss med røyk og gassutslipp fra brennende felt, industrifabrikker og kjøretøystrafikk, som blokkerer solen og gjør det vanskelig å puste. Eksperter sier at de høye nivåene av luftforurensning og COVID-19-pandemi kan være en farlig blanding som kan få alvorlige konsekvenser. Nødvendigheten av sanntidsovervåking av luftkvalitet er veldig skarp.
Så i dette prosjektet skal vi bygge et ESP32 luftkvalitetsovervåkingssystem ved hjelp av Nova PM SDS011-sensor, MQ-7-sensor og DHT11-sensor. Vi vil også bruke en OLED-skjermmodul for å vise verdier for luftkvalitet. Den luftkvalitetsindeks (AQI) i India er basert på åtte forurensninger, PM10, PM2.5, SO2 og NO2, CO, ozon, NH3, og Pb. Det er imidlertid ikke nødvendig å måle alle forurensningene. Så vi skal måle konsentrasjonen av PM2.5, PM10 og karbonmonoksid for å beregne luftkvalitetsindeksen. AQI-verdiene vil bli publisert på Adafruit IO slik at vi kan overvåke det fra hvor som helst. Tidligere har vi også målt konsentrasjonen av LPG, røyk og ammoniakkgass ved hjelp av Arduino.
Komponenter kreves
- ESP32
- Nova PM-sensor SDS011
- 0,96 'SPI OLED-skjermmodul
- DHT11-sensor
- MQ-7-sensor
- Jumper Wires
Nova PM-sensor SDS011 for måling av PM2.5 og PM10
SDS011-sensoren er en veldig nylig luftkvalitetssensor utviklet av Nova Fitness. Det fungerer på prinsippet om laserspredning og kan få partikkelkonsentrasjonen mellom 0,3 og 10μm i luften. Denne sensoren består av en liten vifte, luftinnløpsventil, laserdiode og fotodiode. Luften kommer inn gjennom luftinntaket der en lyskilde (Laser) lyser opp partiklene og det spredte lyset blir transformert til et signal av en fotodetektor. Disse signalene blir deretter forsterket og behandlet for å få partikkelkonsentrasjonen av PM2.5 og PM10. Vi brukte tidligere Nova PM Sensor med Arduino for å beregne konsentrasjonen av PM10 og PM2.5.
SDS011 sensorspesifikasjoner:
- Utgang: PM2.5, PM10
- Måleområde: 0,0-999,9μg / m3
- Inngangsspenning: 4.7V til 5.3V
- Maksimal strøm: 100mA
- Søvnstrøm: 2mA
- Svartid: 1 sekund
- Seriell datautgangsfrekvens: 1 gang / sekund
- Partikkeldiameteroppløsning: ≤0,3μm
- Relativ feil: 10%
- Temperaturområde: -20 ~ 50 ° C
Grunnleggende om 0,96 'OLED-skjermmodul
OLED (Organic Light Emitting Diode) er en slags lysemitterende diode som er laget ved hjelp av organiske forbindelser som stimulerer når den elektriske strømmen får strømme gjennom dem. Disse organiske forbindelsene har sitt eget lys, og de krever derfor ingen bakgrunnsbelysningskretser som vanlige LCD-skjermer. På grunn av dette er OLED-skjermteknologi strømeffektiv og mye brukt i TV-er og andre skjermprodukter.
Ulike typer OLED-er er tilgjengelige i markedet basert på fargen på skjermen, antall pinner, størrelse og kontroller-IC. I denne opplæringen vil vi bruke Monochrome Blue 7-pin SSD1306 0.96 ”OLED-modul som er 128 piksler bred og 64 piksler lang. Denne 7-pinners OLED støtter SPI-protokollen og kontrolleren IC SSD1306 hjelper OLED til å vise de mottatte tegnene. Lær mer om OLED og dets grensesnitt med forskjellige mikrokontrollere ved å følge lenken.
Klargjøre MQ-7-sensoren for å måle karbonmonoksid (CO)
MQ-7 CO gassensormodul for karbonmonoksid oppdager konsentrasjonene av CO i luften. Sensoren kan måle konsentrasjoner på 10 til 10.000 ppm. MQ-7-sensor kan enten kjøpes som en modul eller bare som en sensor alene. Tidligere har vi brukt mange forskjellige typer gassensorer for å oppdage og måle forskjellige gasser, du kan også sjekke dem ut hvis du er interessert. I dette prosjektet bruker vi sensormodulen MQ-7 for å måle karbonmonoksidkonsentrasjon i PPM. Kretsskjemaet for MQ-7-kortet er gitt nedenfor:
Lastmotstanden RL spiller en veldig viktig rolle for å få sensoren til å fungere. Denne motstanden endrer motstandsverdien i henhold til konsentrasjonen av gass. MQ-7 sensorkortet har en belastningsmotstand på 1KΩ som er ubrukelig og påvirker sensoravlesningene. Så for å måle de aktuelle CO-konsentrasjonsverdiene, må du erstatte 1KΩ motstanden med en 10KΩ motstand.
Beregning av luftkvalitetsindeks
AQI i India beregnes ut fra den gjennomsnittlige konsentrasjonen av et bestemt forurensende middel målt over et standard tidsintervall (24 timer for de fleste forurensende stoffer, 8 timer for karbonmonoksid og ozon). For eksempel er AQI for PM2.5 og PM10 basert på 24-timers gjennomsnittlig konsentrasjon og AQI for karbonmonoksid er basert på 8-timers gjennomsnittlig konsentrasjon). AQI-beregningene inkluderer de åtte forurensningene som er PM10, PM2.5, nitrogendioksid (NO 2), svoveldioksid (SO 2), karbonmonoksid (CO), ozon på bakkenivå (O 3), ammoniakk (NH 3), og bly (Pb). Imidlertid måles ikke alle forurensningene på hvert sted.
Basert på de målte 24-timers omgivelseskonsentrasjonene til et forurensende stoff, beregnes en underindeks, som er en lineær funksjon av konsentrasjonen (f.eks. Vil subindeksen for PM2.5 være 51 ved konsentrasjon 31 µg / m3, 100 ved konsentrasjon 60 µg / m3 og 75 ved en konsentrasjon på 45 µg / m3). Den verste underindeksen (eller maksimum av alle parametere) bestemmer den totale AQI.
Kretsdiagram
Kretsskjemaet for IoT-basert luftkvalitetsovervåkingssystem er veldig enkelt og gitt nedenfor:
SDS011-sensor, DHT11 og MQ-7-sensor drives med + 5V mens OLED-skjermmodulen får strøm med 3,3V. Senderen og mottakerpinnene til SDS011 er koblet til GPIO16 & 17 i ESP32. Analog ut-pinnen til MQ-7-sensoren er koblet til GPIO 25, og datapinnen til DHT11-sensoren er koblet til GPIO27-sensoren. Siden OLED Display-modulen bruker SPI-kommunikasjon, har vi etablert en SPI-kommunikasjon mellom OLED-modulen og ESP32. Tilkoblingene er vist i tabellen nedenfor:
S. nr |
OLED-modulstift |
ESP32 Pin |
1 |
GND |
Bakke |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
DC |
4 |
7 |
CS |
5 |
S. nr |
SDS011 Pin |
ESP32 Pin |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
S. nr |
DHT Pin |
ESP32 Pin |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Data |
27 |
S. nr |
MQ-7 Pin |
ESP32 Pin |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Bygg luftkretsovervåkningssystemkrets på Perf Board
Som du kan se fra hovedbildet, var ideen å bruke denne kretsen i et 3D-trykt kabinett. Så den komplette kretsen vist ovenfor er loddet på et perf-kort. Sørg for å bruke ledninger for å gi nok avstand til å montere OLED og sensorer. Perfektkortet mitt loddet til OLED, og sensormodulen er vist nedenfor.
Adafruit IO-oppsett
Adafruit IO er en åpen dataplattform som lar deg samle, visualisere og analysere live data i skyen. Ved hjelp av Adafruit IO kan du laste opp, vise og overvåke dataene dine over internett, og gjøre prosjektet IoT aktivert. Du kan kontrollere motorer, lese sensordata og lage kule IoT-applikasjoner over internett ved hjelp av Adafruit IO.
For å bruke Adafruit IO, må du først opprette en konto på Adafruit IO. For å gjøre dette, gå til Adafruit IO-nettstedet og klikk på "Kom i gang gratis" øverst til høyre på skjermen.
Etter at du har fullført prosessen med å opprette en konto, logger du deg på kontoen og klikker på "Vis AIO-nøkkel" øverst til høyre for å få kontoens brukernavn og AIO-nøkkel.
Når du klikker på 'AIO-nøkkel', vises et vindu med Adafruit IO AIO-nøkkel og brukernavn. Kopier denne nøkkelen og brukernavnet, den blir brukt i kode.
Nå, etter å ha fått AIO-tastene, oppretter du en feed for å lagre DHT-sensordataene. For å opprette en feed, klikk på 'Feed'. Klikk deretter på 'Handlinger', og velg deretter 'Opprett en ny feed' fra de tilgjengelige alternativene.
Etter dette åpnes et nytt vindu der du trenger å legge inn navn og beskrivelse på feeden. Det er valgfritt å skrive en beskrivelse.
Klikk på 'Opprett' etter dette; du blir omdirigert til den nyopprettede feeden.
For dette prosjektet opprettet vi totalt seks strømmer for PM10, PM2.5, CO, temperatur, fuktighet og AQI-verdier. Følg samme fremgangsmåte som ovenfor for å opprette resten av innmatingene.
Etter å ha opprettet feeder, vil vi nå opprette en Adafruit IO dashboardfunksjon for å visualisere sensordataene på en enkelt side. For det oppretter du først et dashbord og legger deretter til alle disse feedene i dashbordet.
For å opprette et dashbord, klikk på Dashboard-alternativet og klikk deretter på "Handling", og deretter klikker du på "Opprett et nytt dashbord."
I neste vindu skriver du inn navnet på dashbordet og klikker på 'Opprett'.
Når dashbordet er opprettet, vil vi nå bruke Adafruit IO-blokker som Gauge og Slider for å visualisere dataene. For å legge til en blokk, klikk på '+' øverst til høyre.
Velg deretter 'Gauge' -blokken.
I neste vindu velger du feeddataene du vil visualisere.
I siste trinn endrer du blokkinnstillingene for å tilpasse det.
Følg nå samme prosedyre som ovenfor for å legge til visualiseringsblokker for resten av feedene. Adafruit IO Dashboard så slik ut:
Kode Forklaring for
Den komplette koden for dette prosjektet er gitt på slutten av dokumentet. Her forklarer vi noen viktige deler av koden.
Koden bruker SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, og DHT.h biblioteker. Biblioteket SDS011, Adafruit_GFX og Adafruit_SSD1306 kan lastes ned fra Library Manager i Arduino IDE og installeres derfra. For det, åpne Arduino IDE og gå til Sketch <Include Library <Manage Libraries . Søk nå etter SDS011 og installer SDS Sensor-biblioteket av R. Zschiegner.
På samme måte installerer du Adafruit GFX og Adafruit SSD1306-bibliotekene av Adafruit. Adafruit_MQTT.h og DHT11.h kan lastes ned fra gitte lenker.
Etter at du har installert bibliotekene til Arduino IDE, starter du koden ved å inkludere de nødvendige biblioteksfilene.
#inkludere
I de neste linjene definerer du OLED-skjermens bredde og høyde. I dette prosjektet har jeg brukt en 128 × 64 SPI OLED-skjerm. Du kan endre variablene SCREEN_WIDTH og SCREEN_HEIGHT i henhold til skjermen.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Definer deretter SPI-kommunikasjonspinnene der OLED Display er koblet til.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Opprett deretter en forekomst for Adafruit-skjermen med bredden og høyden og SPI-kommunikasjonsprotokollen som er definert tidligere.
Adafruit_SSD1306-skjerm (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Deretter inkluderer du WiFi og Adafruit IO-legitimasjonen som du kopierte fra Adafruit IO-serveren. Disse inkluderer MQTT-serveren, portnummer, brukernavn og AIO-nøkkel.
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"
Sett deretter opp Adafruit IO-feeder for lagring av sensordataene. I mitt tilfelle har jeg definert seks strømmer for å lagre forskjellige sensordata, nemlig: AirQuality, Temperature, Humidity, PM10, PM25, and CO.
Adafruit_MQTT_Client mqtt (& klient, 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 Humidity = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Humidity"); 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");
Nå i setup () -funksjonen, initialiser du Serial Monitor med en overføringshastighet på 9600 for feilsøkingsformål. Initialiser også OLED-skjermen, DHT-sensoren og SDS011-sensoren med start () -funksjonen.
ugyldig oppsett () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
For- sløyfen inne i oppsettfunksjonen brukes til å samle verdiene opp til et definert tall og deretter sette telleren til null.
for (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }
Lese sensorverdiene:
Nå inne i sløyfefunksjonen, bruk millis () -metoden til å lese sensorverdiene hver eneste time. Hver av gassensorene sender ut en analog verdi fra 0 til 4095. For å konvertere denne verdien til spenning, bruk følgende ligning: RvRo = MQ7Raw * (3.3 / 4095); der MQ7Raw er den analoge verdien fra sensorens analoge stift. Les også PM2.5- og PM10-målingene fra SDS011-sensoren.
hvis ((usignert lang) (currentMillis - previousMillis)> = intervall) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3,3 / 4095); MQ7ppm = 3,027 * exp (1,0698 * (RvRo)); Serial.println (MQ7ppm); error = my_sds.read (& p25, & p10); hvis (! feil) {Serial.println ("P2.5:" + Streng (p25)); Serial.println ("P10:" + Streng (p10)); }}
Konvertere verdiene:
PM2.5- og PM10-verdiene er allerede i µg / m 3, men vi må konvertere karbonmonoksidverdiene fra PPM til mg / m 3. Konverteringsformelen er gitt nedenfor:
Konsentrasjon (mg / m 3) = Konsentrasjon (PPM) × (Molekylær masse (g / mol) / Molar volum (L))
Hvor: Molekylær masse av CO er 28,06 g / mol og molarvolum er 24,45 liter ved 25 ° C
Konsentrasjon INmgm3 = MQ7ppm * (28.06 / 24.45); Serial.println (ConcentrationINmgm3);
Beregning av 24-timers gjennomsnitt:
Beregn deretter 24-timers gjennomsnittet for PM10, PM2.5-avlesning og 8-timers gjennomsnitt for karbonmonoksid-målinger i de neste linjene. I den første kodelinjen tar du den nåværende totalen og trekker det første elementet i matrisen, og lagre dette som den nye totalen. I utgangspunktet blir det null. Så får du sensorverdiene og legger til den nåværende avlesningen til totalen og øker nummerindeksen. Hvis verdien på indeksen er lik eller større enn numReadings, setter du indeksen tilbake til null.
totalPM10 = totalPM10 - avlesninger PM10; avlesninger PM10 = p10; totalPM10 = totalPM10 + avlesninger PM10; readIndexPM10 = readIndexPM10 + 1; hvis (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Så til slutt, publiser disse verdiene på Adafruit IO.
hvis (! Temperature.publish (temperatur)) {forsinkelse (30000); } hvis (! Humidity.publish (fuktighet)) {forsinkelse (30000); ……………………………………………………………. …………………………………………………………….
3D-trykt kabinett for AQI overvåkingssystem
Deretter målte jeg dimensjonene på oppsettet ved hjelp av vernier og målte også dimensjonene til sensorene og OLED for å designe et deksel. Designet mitt så omtrent slik ut nedenfor, når det først var gjort.
Etter at jeg var fornøyd med designet, eksporterte jeg den som en STL-fil, skiver den ut basert på skriverinnstillinger, og til slutt skrev den ut. Igjen er STL-filen også tilgjengelig for nedlasting fra Thingiverse, og du kan skrive ut kabinettet ditt ved hjelp av det.
Etter at utskriften var ferdig, fortsatte jeg med å montere prosjektet som ble satt opp i et permanent kabinett for å installere det i et anlegg. Med den fullstendige tilkoblingen, monterte jeg kretsen i kabinettet mitt, og alt passet som du kan se her.
Testing av AQI-overvåkingssystemet
Når maskinvaren og koden er klar, er det på tide å teste enheten. Vi brukte en ekstern 12V 1A-adapter for å drive enheten. Som du kan se, vil enheten vise konsentrasjonen av PM10, PM2.5 og karbonmonoksid på OLED-skjermen. Konsentrasjonen av PM2.5 og PM10 er i ug / m 3, mens konsentrasjonen av karbonmonoksyd er i mg / m 3.
Disse målingene vil også bli publisert på Adafruit IO Dashboard. Maksimum for alle parametere (PM10, PM2.5 & CO) vil være AQI.
AQI-verdiene for de siste 30 dagene vises som en graf.
Slik kan du bruke sensorene SDS011 og MQ-7 til å beregne luftkvalitetsindeksen. Fullstendig bearbeiding av prosjektet finner du også i videoen som er lenket nedenfor. Håper du likte prosjektet og syntes det var interessant å bygge ditt eget. Hvis du har spørsmål, kan du legge dem igjen i kommentarfeltet nedenfor.