- Componenten vereist
- Nova PM-sensor SDS011 voor het meten van PM2,5 en PM10
- Basisprincipes van 0.96 'OLED-displaymodule
- De MQ-7-sensor voorbereiden om koolmonoxide (CO) te meten
- Berekening van de luchtkwaliteitsindex
- Schakelschema
- Bouwen van het circuit voor het bewakingssysteem voor de luchtkwaliteit op basis van printplaten
- Adafruit IO-installatie
- Code Verklaring voor
- 3D-geprinte behuizing voor AQI-bewakingssysteem
- Testen van het AQI-monitoringsysteem
Terwijl de winter aanbreekt, verdikt de lucht die boven ons hangt met rook en gasvormige emissies van brandende velden, industriële fabrieken en autoverkeer, waardoor de zon wordt geblokkeerd en het moeilijk wordt om te ademen. Experts zeggen dat de hoge niveaus van luchtverontreiniging en de COVID-19-pandemie een gevaarlijke combinatie kunnen zijn die ernstige gevolgen kan hebben. De noodzaak voor realtime monitoring van de luchtkwaliteit is zeer in het oog springend.
Dus in dit project gaan we een ESP32-luchtkwaliteitbewakingssysteem bouwen met behulp van de Nova PM SDS011-sensor, MQ-7-sensor en DHT11-sensor. We zullen ook een OLED-displaymodule gebruiken om luchtkwaliteitswaarden weer te geven. De Air Quality Index (AQI) in India is gebaseerd op acht verontreinigende stoffen, PM10, PM2.5, SO2 en NO2, CO, Ozon, NH3 en Pb. Het is echter niet nodig om alle verontreinigende stoffen te meten. Dus gaan we de concentratie van PM2,5, PM10 en koolmonoxide meten om de luchtkwaliteitsindex te berekenen. De AQI-waarden worden op Adafruit IO gepubliceerd, zodat we deze overal kunnen volgen. Eerder hebben we met Arduino ook de concentratie LPG, Rook en Ammoniakgas gemeten.
Componenten vereist
- ESP32
- Nova PM-sensor SDS011
- 0.96 'SPI OLED-weergavemodule
- DHT11-sensor
- MQ-7-sensor
- Doorverbindingsdraden
Nova PM-sensor SDS011 voor het meten van PM2,5 en PM10
De SDS011 Sensor is een zeer recente luchtkwaliteitssensor ontwikkeld door Nova Fitness. Het werkt volgens het principe van laserverstrooiing en kan de deeltjesconcentratie tussen 0,3 en 10 μm in de lucht krijgen. Deze sensor bestaat uit een kleine ventilator, luchtinlaatklep, laserdiode en fotodiode. De lucht komt binnen via de luchtinlaat waar een lichtbron (laser) de deeltjes verlicht en het verstrooide licht wordt door een fotodetector omgezet in een signaal. Deze signalen worden vervolgens versterkt en verwerkt om de deeltjesconcentratie van PM2.5 en PM10 te krijgen. We gebruikten eerder Nova PM Sensor met Arduino om de concentratie van PM10 en PM2.5 te berekenen.
SDS011 Sensor Specificaties:
- Uitgang: PM2.5, PM10
- Meetbereik: 0,0-999,9 μg / m3
- Ingangsspanning: 4.7V tot 5.3V
- Maximale stroom: 100mA
- Slaapstroom: 2mA
- Reactietijd: 1 seconde
- Uitvoerfrequentie seriële gegevens: 1 keer / seconde
- De resolutie van de deeltjesdiameter: ≤ 0,3 μm
- Relatieve fout: 10%
- Temperatuurbereik: -20 ~ 50 ° C
Basisprincipes van 0.96 'OLED-displaymodule
OLED (Organic Light Emitting Diode) is een soort Light Emitting Diode die is gemaakt met organische verbindingen die opwinden wanneer de elektrische stroom erdoorheen kan stromen. Deze organische verbindingen hebben hun eigen licht en daarom hebben ze geen schakelingen voor achtergrondverlichting nodig zoals normale LCD's. Om deze reden is OLED-weergavetechnologie energiezuinig en wordt deze veel gebruikt in televisies en andere weergaveproducten.
Er zijn verschillende soorten OLED's op de markt beschikbaar op basis van de kleur van het display, het aantal pinnen, de grootte en de controller-IC. In deze tutorial gebruiken we de Monochrome Blue 7-pins SSD1306 0.96 ”OLED-module die 128 pixels breed en 64 pixels lang is. Deze 7-pins OLED ondersteunt het SPI-protocol en controller IC SSD1306 helpt de OLED om de ontvangen karakters weer te geven. Lees meer over OLED en de koppeling met verschillende microcontrollers door de link te volgen.
De MQ-7-sensor voorbereiden om koolmonoxide (CO) te meten
MQ-7 CO Koolmonoxidegassensormodule detecteert de concentraties CO in de lucht. De sensor kan concentraties meten van 10 tot 10.000 ppm. De MQ-7-sensor kan als module worden gekocht of alleen als sensor. Voorheen hebben we veel verschillende soorten gassensoren gebruikt om diverse gassen te detecteren en te meten, je kunt ze ook bekijken als je geïnteresseerd bent. In dit project gebruiken we de MQ-7 sensormodule om de koolmonoxideconcentratie in PPM te meten. Het schakelschema voor het MQ-7-bord wordt hieronder weergegeven:
De belastingsweerstand RL speelt een zeer belangrijke rol bij het laten werken van de sensor. Deze weerstand verandert zijn weerstandswaarde volgens de gasconcentratie. De MQ-7-sensorkaart wordt geleverd met een belastingsweerstand van 1KΩ die nutteloos is en de sensormetingen beïnvloedt. Dus om de juiste CO-concentratiewaarden te meten, moet je de 1KΩ-weerstand vervangen door een 10KΩ-weerstand.
Berekening van de luchtkwaliteitsindex
De AQI in India wordt berekend op basis van de gemiddelde concentratie van een bepaalde verontreinigende stof gemeten over een standaard tijdsinterval (24 uur voor de meeste verontreinigende stoffen, 8 uur voor koolmonoxide en ozon). Zo is de AQI voor PM2,5 en PM10 gebaseerd op 24-uurgemiddelde concentratie en AQI voor Koolmonoxide is gebaseerd op 8-uurgemiddelde concentratie). De AQI-berekeningen omvatten de acht verontreinigende stoffen die PM10, PM2.5, stikstofdioxide (NO 2), zwaveldioxide (SO 2), koolmonoxide (CO), ozon op leefniveau (O 3), ammoniak (NH 3), en lood (Pb). Niet alle verontreinigende stoffen worden echter op elke locatie gemeten.
Op basis van de gemeten 24-uurs omgevingsconcentraties van een verontreinigende stof wordt een subindex berekend, die een lineaire functie is van de concentratie (bv. De subindex voor PM2,5 is 51 bij concentratie 31 µg / m3, 100 bij concentratie 60 µg / m3, en 75 bij een concentratie van 45 µg / m3). De slechtste subindex (of het maximum van alle parameters) bepaalt de algehele AQI.
Schakelschema
Het schakelschema voor het op IoT gebaseerde luchtkwaliteitsbewakingssysteem is heel eenvoudig en wordt hieronder weergegeven:
SDS011-sensor, DHT11- en MQ-7-sensor worden gevoed met + 5V, terwijl de OLED-displaymodule wordt gevoed met 3,3V. De zender- en ontvangerpennen van SDS011 zijn verbonden met GPIO16 & 17 van ESP32. De Analog Out-pin van de MQ-7-sensor is verbonden met GPIO 25 en de datapin van de DHT11-sensor is verbonden met de GPIO27-sensor. Omdat de OLED-displaymodule SPI-communicatie gebruikt, hebben we een SPI-communicatie tot stand gebracht tussen de OLED-module en ESP32. De aansluitingen zijn weergegeven in de onderstaande tabel:
S.No |
OLED-modulepen |
ESP32-speld |
1 |
GND |
Grond |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
DC |
4 |
7 |
CS |
5 |
S.No |
SDS011-pen |
ESP32-speld |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
S.No |
DHT-pin |
ESP32-speld |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Gegevens |
27 |
S.No |
MQ-7 speld |
ESP32-speld |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Bouwen van het circuit voor het bewakingssysteem voor de luchtkwaliteit op basis van printplaten
Zoals je op de hoofdafbeelding kunt zien, was het idee om dit circuit te gebruiken in een 3D-geprinte behuizing. Dus het volledige circuit dat hierboven wordt getoond, wordt op een perfboard gesoldeerd. Zorg ervoor dat u draden gebruikt om voldoende afstand over te laten om de OLED en sensoren te monteren. Mijn perf board gesoldeerd aan OLED en de sensormodule wordt hieronder getoond.
Adafruit IO-installatie
Adafruit IO is een open dataplatform waarmee u live gegevens in de cloud kunt aggregeren, visualiseren en analyseren. Met Adafruit IO kunt u uw gegevens uploaden, weergeven en bewaken via internet, en uw project IoT inschakelen. Met Adafruit IO kun je motoren besturen, sensordata uitlezen en coole IoT-toepassingen maken via internet.
Om Adafruit IO te gebruiken, moet u eerst een account aanmaken op Adafruit IO. Ga hiervoor naar de Adafruit IO-website en klik rechtsboven in het scherm op 'Gratis aan de slag'.
Na het voltooien van het aanmaken van een account, logt u in op het account en klikt u op 'View AIO Key' in de rechterbovenhoek om de gebruikersnaam en AIO-sleutel te krijgen.
Wanneer u op 'AIO Key' klikt, verschijnt er een venster met de Adafruit IO AIO Key en gebruikersnaam. Kopieer deze sleutel en gebruikersnaam, deze wordt in de code gebruikt.
Maak nu, nadat u de AIO-sleutels hebt verkregen, een feed om de DHT-sensorgegevens op te slaan. Om een feed te maken, klikt u op 'Feed'. Klik vervolgens op 'Acties' en selecteer vervolgens 'Nieuwe feed maken' uit de beschikbare opties.
Hierna wordt een nieuw venster geopend waarin u de naam en beschrijving van de feed moet invoeren. Het schrijven van een beschrijving is optioneel.
Klik hierna op 'Aanmaken'; u wordt doorgestuurd naar de nieuw gemaakte feed.
Voor dit project hebben we in totaal zes feeds gemaakt voor PM10-, PM2.5-, CO-, temperatuur-, vochtigheids- en AQI-waarden. Volg dezelfde procedure als hierboven om de rest van de feeds te maken.
Nadat we feeds hebben gemaakt, gaan we nu een Adafruit IO-dashboardfunctie maken om de sensorgegevens op één pagina te visualiseren. Maak daarvoor eerst een dashboard en voeg vervolgens al deze feeds toe aan dat dashboard.
Om een dashboard te maken, klikt u op de Dashboard-optie en vervolgens op de 'Actie' en daarna klikt u op 'Een nieuw dashboard maken'.
Voer in het volgende venster de naam van het dashboard in en klik op 'Aanmaken'.
Terwijl het dashboard is gemaakt, zullen we nu de Adafruit IO-blokken zoals Gauge en Slider gebruiken om de gegevens te visualiseren. Om een blok toe te voegen, klikt u op de '+' in de rechterbovenhoek.
Selecteer vervolgens het blok 'Meter'.
Selecteer in het volgende venster de feedgegevens die u wilt visualiseren.
Wijzig in de laatste stap de blokinstellingen om deze aan te passen.
Volg nu dezelfde procedure als hierboven om visualisatieblokken toe te voegen voor de rest van de feeds. Mijn Adafruit IO Dashboard zag er als volgt uit:
Code Verklaring voor
De volledige code voor dit project staat aan het einde van het document. Hier leggen we enkele belangrijke delen van de code uit.
De code maakt gebruik van de SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, en DHT.h bibliotheken. De SDS011-, Adafruit_GFX- en Adafruit_SSD1306-bibliotheken kunnen worden gedownload van de Library Manager in de Arduino IDE en vanaf daar worden geïnstalleerd. Open daarvoor de Arduino IDE en ga naar Sketch <Inclusief bibliotheek <Bibliotheken beheren . Zoek nu naar SDS011 en installeer de SDS-sensorbibliotheek van R. Zschiegner.
Installeer op dezelfde manier de Adafruit GFX- en Adafruit SSD1306-bibliotheken van Adafruit. De Adafruit_MQTT.h en DHT11.h kunnen worden gedownload via de gegeven links.
Na het installeren van de bibliotheken op Arduino IDE, start u de code door de benodigde bibliothekenbestanden op te nemen.
# omvatten
Definieer in de volgende regels de breedte en hoogte van het OLED-scherm. In dit project heb ik een 128 × 64 SPI OLED-scherm gebruikt. U kunt de variabelen SCREEN_WIDTH en SCREEN_HEIGHT aanpassen aan uw weergave.
# definiëren SCREEN_WIDTH 128 # definiëren SCREEN_HEIGHT 64
Definieer vervolgens de SPI-communicatiepinnen waarop het OLED-scherm is aangesloten.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Maak vervolgens een instantie voor het Adafruit-display met de breedte en hoogte en het SPI-communicatieprotocol dat eerder is gedefinieerd.
Adafruit_SSD1306-scherm (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Voeg vervolgens de WiFi- en Adafruit IO-inloggegevens toe die u van de Adafruit IO-server hebt gekopieerd. Deze omvatten de MQTT-server, poortnummer, gebruikersnaam en AIO-sleutel.
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"
Stel vervolgens de Adafruit IO-feeds in voor het opslaan van de sensorgegevens. In mijn geval heb ik zes feeds gedefinieerd om verschillende sensorgegevens op te slaan, namelijk: AirQuality, Temperatuur, Vochtigheid, PM10, PM25 en 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 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");
Initialiseer nu in de functie setup () de seriële monitor met een baudrate van 9600 voor foutopsporingsdoeleinden. Initialiseer ook het OLED-display, de DHT-sensor en de SDS011-sensor met de functie begin () .
leegte setup () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
De for-lus in de setup- functie wordt gebruikt om de waarden tot een bepaald aantal te verzamelen en vervolgens de teller op nul te zetten.
voor (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }
De sensorwaarden aflezen:
Gebruik nu binnen de lusfunctie de millis () -methode om de sensorwaarden in elk uur te lezen. Elk van de gassensoren geeft een analoge waarde van 0 tot 4095 af. Gebruik de volgende vergelijking om deze waarde in spanning om te zetten: RvRo = MQ7Raw * (3.3 / 4095); waarbij MQ7Raw de analoge waarde is van de analoge pin van de sensor. Lees ook de PM2.5- en PM10-metingen van de SDS011-sensor.
if ((unsigned long) (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 (! fout) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + String (p10)); }}
Omzetten van de waarden:
De PM2.5- en PM10-waarden zijn al in µg / m 3 maar we moeten de Koolmonoxide-waarden omrekenen van PPM naar mg / m 3. De conversieformule wordt hieronder gegeven:
Concentratie (mg / m 3) = concentratie (PPM) × (molecuulmassa (g / mol) / molair volume (l))
Waar: molecuulmassa van CO is 28,06 g / mol en molair volume is 24,45 l bij 25 ° C
Concentratie INmgm3 = MQ7ppm * (28,06 / 24,45); Serial.println (ConcentrationINmgm3);
24-uurs gemiddelde berekenen:
Bereken vervolgens in de volgende regels het 24-uurgemiddelde voor PM10-, PM2,5-metingen en 8-uurgemiddelde voor koolmonoxidemetingen. Neem in de eerste regel code het huidige totaal en trek het eerste element in de array af, sla dit nu op als het nieuwe totaal. In eerste instantie zal het nul zijn. Haal vervolgens de sensorwaarden op en tel de huidige meting op bij het totaal en verhoog de nummerindex. Als de waarde van de index gelijk is aan of groter is dan numReadings, stelt u de index weer in op nul.
totalPM10 = totalPM10 - aflezingenPM10; readingsPM10 = p10; totalPM10 = totalPM10 + aflezingenPM10; readIndexPM10 = readIndexPM10 + 1; if (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Publiceer deze waarden dan eindelijk op Adafruit IO.
if (! Temperature.publish (temperatuur)) {vertraging (30000); } if (! Humidity.publish (vochtigheid)) {vertraging (30000); ………………………………………………………. ……………………………………………………….
3D-geprinte behuizing voor AQI-bewakingssysteem
Vervolgens heb ik de afmetingen van de opstelling gemeten met mijn nonius en ook de afmetingen van de sensoren en OLED gemeten om een behuizing te ontwerpen. Mijn ontwerp zag er hieronder ongeveer zo uit, toen het eenmaal klaar was.
Nadat ik tevreden was met het ontwerp, heb ik het geëxporteerd als een STL-bestand, in plakjes gesneden op basis van printerinstellingen en uiteindelijk afgedrukt. Wederom is het STL-bestand ook beschikbaar om te downloaden van Thingiverse en kunt u uw behuizing ermee afdrukken.
Nadat de afdruk klaar was, ging ik verder met het monteren van het project in een permanente behuizing om het in een faciliteit te installeren. Met de volledige verbinding gemaakt, heb ik het circuit in mijn behuizing gemonteerd en alles paste goed zoals je hier kunt zien.
Testen van het AQI-monitoringsysteem
Zodra de hardware en code klaar zijn, is het tijd om het apparaat te testen. We hebben een externe 12V 1A-adapter gebruikt om het apparaat van stroom te voorzien. Zoals u kunt zien, geeft het apparaat de concentratie van PM10, PM2.5 en koolmonoxide weer op het OLED-scherm. De concentratie van PM2,5 en PM10 is in µg / m 3 terwijl de concentratie van Koolmonoxide in mg / m 3 is.
Deze metingen zullen ook worden gepubliceerd op het Adafruit IO Dashboard. Het maximum van alle parameters (PM10, PM2.5 & CO) is de AQI.
De AQI-waarden van de afgelopen 30 dagen worden als grafiek weergegeven.
Op deze manier kunt u de SDS011- en MQ-7-sensoren gebruiken om de luchtkwaliteitsindex te berekenen. De volledige werking van het project is ook te vinden in de onderstaande video. Ik hoop dat je genoten hebt van het project en het interessant vond om er zelf een te bouwen. Als u vragen heeft, laat deze dan achter in het commentaargedeelte hieronder.