- Erforderliche Komponenten
- Nova PM Sensor SDS011 zur Messung von PM2.5 und PM10
- Grundlagen des 0,96 'OLED-Anzeigemoduls
- Vorbereitung des MQ-7-Sensors zur Messung von Kohlenmonoxid (CO)
- Berechnung des Luftqualitätsindex
- Schaltplan
- Aufbau des Luftqualitätsüberwachungssystems auf Perf Board
- Adafruit IO-Setup
- Code Erklärung für
- 3D-gedrucktes Gehäuse für AQI-Überwachungssystem
- Testen des AQI-Überwachungssystems
Während der Winter einsetzt, verdichtet sich die Luft, die über uns hängt, mit Rauch und gasförmigen Emissionen aus brennenden Feldern, Industriefabriken und dem Fahrzeugverkehr, wodurch die Sonne blockiert und das Atmen erschwert wird. Experten sagen, dass die hohe Luftverschmutzung und die COVID-19-Pandemie eine gefährliche Mischung sein können, die schwerwiegende Folgen haben kann. Die Notwendigkeit einer Echtzeitüberwachung der Luftqualität ist sehr offensichtlich.
In diesem Projekt werden wir ein ESP32-Luftqualitätsüberwachungssystem mit Nova PM SDS011-Sensor, MQ-7-Sensor und DHT11-Sensor bauen. Wir werden auch ein OLED-Anzeigemodul verwenden, um Luftqualitätswerte anzuzeigen. Der Luftqualitätsindex (AQI) in Indien basiert auf acht Schadstoffen, PM10, PM2,5, SO2 und NO2, CO, Ozon, NH3 und Pb. Es ist jedoch nicht erforderlich, alle Schadstoffe zu messen. Wir werden also die Konzentration von PM2,5, PM10 und Kohlenmonoxid messen, um den Luftqualitätsindex zu berechnen. Die AQI-Werte werden auf Adafruit IO veröffentlicht, damit wir sie von überall aus überwachen können. Zuvor haben wir auch die Konzentration von LPG, Rauch und Ammoniakgas mit Arduino gemessen.
Erforderliche Komponenten
- ESP32
- Nova PM Sensor SDS011
- 0,96 'SPI OLED-Anzeigemodul
- DHT11 Sensor
- MQ-7 Sensor
- Überbrückungsdrähte
Nova PM Sensor SDS011 zur Messung von PM2.5 und PM10
Der SDS011-Sensor ist ein neuer Luftqualitätssensor, der von Nova Fitness entwickelt wurde. Es arbeitet nach dem Prinzip der Laserstreuung und kann die Partikelkonzentration in der Luft zwischen 0,3 und 10 μm erreichen. Dieser Sensor besteht aus einem kleinen Lüfter, einem Lufteinlassventil, einer Laserdiode und einer Fotodiode. Die Luft tritt durch den Lufteinlass ein, wo eine Lichtquelle (Laser) die Partikel beleuchtet und das gestreute Licht von einem Fotodetektor in ein Signal umgewandelt wird. Diese Signale werden dann verstärkt und verarbeitet, um die Partikelkonzentration von PM2,5 und PM10 zu erhalten. Wir haben zuvor Nova PM Sensor mit Arduino verwendet, um die Konzentration von PM10 und PM2.5 zu berechnen.
SDS011-Sensorspezifikationen:
- Ausgabe: PM2.5, PM10
- Messbereich: 0,0-999,9 μg / m3
- Eingangsspannung: 4,7 V bis 5,3 V.
- Maximaler Strom: 100mA
- Schlafstrom: 2mA
- Reaktionszeit: 1 Sekunde
- Serielle Datenausgangsfrequenz: 1 Mal / Sekunde
- Auflösung des Partikeldurchmessers: ≤ 0,3 μm
- Relativer Fehler: 10%
- Temperaturbereich: -20 ~ 50 ° C.
Grundlagen des 0,96 'OLED-Anzeigemoduls
OLED (Organic Light Emitting Diode) ist eine Art Leuchtdiode, die aus organischen Verbindungen hergestellt wird, die anregen, wenn der elektrische Strom durch sie fließen kann. Diese organischen Verbindungen haben ihr eigenes Licht, daher benötigen sie keine Hintergrundbeleuchtungsschaltungen wie normale LCDs. Aus diesem Grund ist die OLED-Anzeigetechnologie energieeffizient und wird häufig in Fernsehgeräten und anderen Anzeigeprodukten eingesetzt.
Auf dem Markt sind verschiedene Arten von OLEDs erhältlich, basierend auf der Farbe des Displays, der Anzahl der Pins, der Größe und dem Controller-IC. In diesem Tutorial verwenden wir das monochrome blaue 7-polige SSD1306 0,96-Zoll-OLED-Modul, das 128 Pixel breit und 64 Pixel lang ist. Diese 7-polige OLED unterstützt das SPI-Protokoll und der Controller-IC SSD1306 hilft der OLED, die empfangenen Zeichen anzuzeigen. Erfahren Sie mehr über OLED und seine Schnittstelle zu verschiedenen Mikrocontrollern, indem Sie dem Link folgen.
Vorbereitung des MQ-7-Sensors zur Messung von Kohlenmonoxid (CO)
Das CO- Kohlenmonoxid-Gassensormodul MQ-7 erfasst die CO-Konzentrationen in der Luft. Der Sensor kann Konzentrationen von 10 bis 10.000 ppm messen. Der MQ-7-Sensor kann entweder als Modul oder nur als Sensor erworben werden. Bisher haben wir viele verschiedene Arten von Gassensoren verwendet, um verschiedene Gase zu erfassen und zu messen. Sie können sie auch überprüfen, wenn Sie interessiert sind. In diesem Projekt verwenden wir das MQ-7-Sensormodul, um die Kohlenmonoxidkonzentration in PPM zu messen. Das Schaltbild für die MQ-7-Karte ist unten angegeben:
Der Lastwiderstand RL spielt eine sehr wichtige Rolle, damit der Sensor funktioniert. Dieser Widerstand ändert seinen Widerstandswert entsprechend der Gaskonzentration. Die MQ-7-Sensorplatine verfügt über einen Lastwiderstand von 1 kΩ, der unbrauchbar ist und die Sensorwerte beeinflusst. Um die entsprechenden CO-Konzentrationswerte zu messen, müssen Sie den 1KΩ-Widerstand durch einen 10KΩ-Widerstand ersetzen.
Berechnung des Luftqualitätsindex
Der AQI in Indien wird basierend auf der durchschnittlichen Konzentration eines bestimmten Schadstoffs berechnet, die über ein Standardzeitintervall gemessen wurde (24 Stunden für die meisten Schadstoffe, 8 Stunden für Kohlenmonoxid und Ozon). Beispielsweise basiert der AQI für PM2.5 und PM10 auf einer durchschnittlichen Konzentration von 24 Stunden und der AQI für Kohlenmonoxid auf einer durchschnittlichen Konzentration von 8 Stunden. Die AQI-Berechnungen umfassen die acht Schadstoffe PM10, PM2,5, Stickstoffdioxid (NO 2), Schwefeldioxid (SO 2), Kohlenmonoxid (CO), bodennahes Ozon (O 3), Ammoniak (NH 3), und Blei (Pb). Es werden jedoch nicht alle Schadstoffe an jedem Ort gemessen.
Basierend auf den gemessenen 24-Stunden-Umgebungskonzentrationen eines Schadstoffs wird ein Subindex berechnet, der eine lineare Funktion der Konzentration ist (z. B. beträgt der Subindex für PM2,5 51 bei einer Konzentration von 31 µg / m3, 100 bei einer Konzentration 60 µg / m3 und 75 bei einer Konzentration von 45 µg / m3). Der schlechteste Subindex (oder das Maximum aller Parameter) bestimmt den Gesamt-AQI.
Schaltplan
Der Schaltplan für das IoT-basierte Luftqualitätsüberwachungssystem ist sehr einfach und wird im Folgenden angegeben:
SDS011-Sensor, DHT11- und MQ-7-Sensor werden mit +5 V versorgt, während das OLED-Anzeigemodul mit 3,3 V versorgt wird. Die Sender- und Empfänger-Pins von SDS011 sind mit GPIO16 & 17 von ESP32 verbunden. Der Analogausgang des MQ-7-Sensors ist mit dem GPIO 25 verbunden, und der Datenstift des DHT11-Sensors ist mit dem GPIO27-Sensor verbunden. Da das OLED-Anzeigemodul die SPI-Kommunikation verwendet, haben wir eine SPI-Kommunikation zwischen dem OLED-Modul und ESP32 hergestellt. Die Verbindungen sind in der folgenden Tabelle aufgeführt:
S.No. |
OLED-Modul-Pin |
ESP32 Pin |
1 |
GND |
Boden |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
DC |
4 |
7 |
CS |
5 |
S.No. |
SDS011 Pin |
ESP32 Pin |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
S.No. |
DHT Pin |
ESP32 Pin |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Daten |
27 |
S.No. |
MQ-7 Pin |
ESP32 Pin |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Aufbau des Luftqualitätsüberwachungssystems auf Perf Board
Wie Sie dem Hauptbild entnehmen können, bestand die Idee darin, diese Schaltung in einem 3D-gedruckten Gehäuse zu verwenden. Die oben gezeigte komplette Schaltung wird also auf eine Perf-Platine gelötet. Stellen Sie sicher, dass Sie Kabel verwenden, um genügend Abstand für die Montage der OLED und der Sensoren zu lassen. Meine Perf-Platine ist mit OLED verlötet und das Sensormodul ist unten dargestellt.
Adafruit IO-Setup
Adafruit IO ist eine offene Datenplattform, mit der Sie Live-Daten in der Cloud aggregieren, visualisieren und analysieren können. Mit Adafruit IO können Sie Ihre Daten über das Internet hochladen, anzeigen und überwachen und Ihr Projekt-IoT aktivieren. Mit Adafruit IO können Sie Motoren steuern, Sensordaten lesen und coole IoT-Anwendungen über das Internet erstellen.
Um Adafruit IO zu verwenden, erstellen Sie zunächst ein Konto bei Adafruit IO. Gehen Sie dazu zur Adafruit IO-Website und klicken Sie oben rechts auf dem Bildschirm auf "Kostenlos loslegen".
Melden Sie sich nach Abschluss der Kontoerstellung beim Konto an und klicken Sie oben rechts auf "AIO-Schlüssel anzeigen", um den Benutzernamen und den AIO-Schlüssel des Kontos abzurufen.
Wenn Sie auf "AIO-Schlüssel" klicken, wird ein Fenster mit dem Adafruit IO-AIO-Schlüssel und dem Benutzernamen angezeigt. Kopieren Sie diesen Schlüssel und Benutzernamen, er wird im Code verwendet.
Nachdem Sie die AIO-Schlüssel erhalten haben, erstellen Sie einen Feed zum Speichern der DHT-Sensordaten. Um einen Feed zu erstellen, klicken Sie auf "Feed". Klicken Sie dann auf "Aktionen" und wählen Sie "Neuen Feed erstellen" aus den verfügbaren Optionen.
Danach öffnet sich ein neues Fenster, in das Sie den Namen und die Beschreibung des Feeds eingeben müssen. Das Schreiben einer Beschreibung ist optional.
Klicken Sie danach auf "Erstellen". Sie werden zum neu erstellten Feed weitergeleitet.
Für dieses Projekt haben wir insgesamt sechs Feeds für die Werte PM10, PM2.5, CO, Temperatur, Luftfeuchtigkeit und AQI erstellt. Gehen Sie wie oben beschrieben vor, um den Rest der Feeds zu erstellen.
Nach dem Erstellen von Feeds erstellen wir jetzt eine Adafruit IO-Dashboard-Funktion, um die Sensordaten auf einer einzelnen Seite anzuzeigen. Erstellen Sie dazu zunächst ein Dashboard und fügen Sie dann alle diese Feeds in dieses Dashboard ein.
Um ein Dashboard zu erstellen, klicken Sie auf die Option Dashboard und dann auf "Aktion". Klicken Sie anschließend auf "Neues Dashboard erstellen".
Geben Sie im nächsten Fenster den Namen des Dashboards ein und klicken Sie auf "Erstellen".
Während das Dashboard erstellt wird, verwenden wir jetzt die Adafruit IO-Blöcke wie Gauge und Slider, um die Daten zu visualisieren. Um einen Block hinzuzufügen, klicken Sie auf das '+' in der oberen rechten Ecke.
Wählen Sie dann den Block 'Messgerät'.
Wählen Sie im nächsten Fenster die Feeddaten aus, die Sie visualisieren möchten.
Ändern Sie im letzten Schritt die Blockeinstellungen, um sie anzupassen.
Gehen Sie nun wie oben beschrieben vor, um Visualisierungsblöcke für den Rest der Feeds hinzuzufügen. Mein Adafruit IO Dashboard sah folgendermaßen aus:
Code Erklärung für
Der vollständige Code für dieses Projekt ist am Ende des Dokuments angegeben. Hier erklären wir einige wichtige Teile des Codes.
Der Code verwendet die SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, und DHT.h Bibliotheken. Die Bibliotheken SDS011, Adafruit_GFX und Adafruit_SSD1306 können vom Bibliotheksmanager in der Arduino IDE heruntergeladen und von dort installiert werden. Öffnen Sie dazu die Arduino IDE und gehen Sie zu Skizze <Bibliothek einschließen <Bibliotheken verwalten . Suchen Sie nun nach SDS011 und installieren Sie die SDS-Sensorbibliothek von R. Zschiegner.
Installieren Sie in ähnlicher Weise die Bibliotheken Adafruit GFX und Adafruit SSD1306 von Adafruit. Die Adafruit_MQTT.h und DHT11.h können von den angegebenen Links heruntergeladen werden.
Starten Sie nach der Installation der Bibliotheken in Arduino IDE den Code, indem Sie die erforderlichen Bibliotheksdateien einschließen.
#einschließen
Definieren Sie in den nächsten Zeilen die Breite und Höhe der OLED-Anzeige. In diesem Projekt habe ich ein 128 × 64 SPI OLED-Display verwendet. Sie können die Variablen SCREEN_WIDTH und SCREEN_HEIGHT entsprechend Ihrer Anzeige ändern.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Definieren Sie dann die SPI-Kommunikationspins, an denen das OLED-Display angeschlossen ist.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Erstellen Sie dann eine Instanz für die Adafruit-Anzeige mit der zuvor definierten Breite und Höhe sowie dem SPI-Kommunikationsprotokoll.
Adafruit_SSD1306-Anzeige (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Geben Sie dann die Anmeldeinformationen für WLAN und Adafruit IO an, die Sie vom Adafruit IO-Server kopiert haben. Dazu gehören der MQTT-Server, die Portnummer, der Benutzername und der AIO-Schlüssel.
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"
Richten Sie dann die Adafruit IO-Feeds zum Speichern der Sensordaten ein. In meinem Fall habe ich sechs Feeds definiert, um verschiedene Sensordaten zu speichern, nämlich: Luftqualität, Temperatur, Luftfeuchtigkeit, PM10, PM25 und 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");
Initialisieren Sie nun in der Funktion setup () den seriellen Monitor für Debugging-Zwecke mit einer Baudrate von 9600. Initialisieren Sie außerdem das OLED-Display, den DHT-Sensor und den SDS011-Sensor mit der Funktion begin () .
void setup () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
Die for-Schleife innerhalb der Setup- Funktion wird verwendet, um die Werte bis zu einer definierten Zahl zu sammeln und dann den Zähler auf Null zu setzen.
for (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }}
Sensorwerte lesen:
Verwenden Sie nun innerhalb der Schleifenfunktion die millis () -Methode, um die Sensorwerte alle eine Stunde zu lesen. Jeder der Gassensoren gibt einen Analogwert von 0 bis 4095 aus. Um diesen Wert in Spannung umzuwandeln, verwenden Sie die folgende Gleichung: RvRo = MQ7Raw * (3.3 / 4095); Dabei ist MQ7Raw der analoge Wert vom analogen Pin des Sensors. Lesen Sie auch die PM2.5- und PM10-Messwerte vom SDS011-Sensor.
if ((unsigned long) (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); if (! error) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + String (p10)); }}
Werte umrechnen:
Die PM2.5- und PM10-Werte sind bereits in µg / m 3 angegeben, aber wir müssen die Kohlenmonoxidwerte von PPM in mg / m 3 umrechnen. Die Umrechnungsformel ist unten angegeben:
Konzentration (mg / m 3) = Konzentration (PPM) × (Molekularmasse (g / mol) / Molvolumen (L))
Wo: Molekülmasse von CO ist 28,06 g / mol und Molvolumen 24.45L bei 25 0 C
Konzentration INmgm3 = MQ7ppm * (28.06 / 24.45); Serial.println (ConcentrationINmgm3);
Berechnung des 24-Stunden-Durchschnitts:
Berechnen Sie dann in den nächsten Zeilen den 24-Stunden-Durchschnitt für PM10-, PM2,5-Messwerte und den 8-Stunden-Durchschnitt für Kohlenmonoxid-Messwerte. Nehmen Sie in der ersten Codezeile die aktuelle Summe und subtrahieren Sie das erste Element im Array. Speichern Sie diese nun als neue Summe. Anfangs wird es Null sein. Holen Sie sich dann die Sensorwerte und addieren Sie den aktuellen Messwert zur Gesamtsumme und erhöhen Sie den Zahlenindex. Wenn der Wert des Index gleich oder größer als numReadings ist, setzen Sie den Index zurück auf Null.
totalPM10 = totalPM10 - readingsPM10; readingsPM10 = p10; totalPM10 = totalPM10 + readingsPM10; readIndexPM10 = readIndexPM10 + 1; if (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }}
Veröffentlichen Sie diese Werte dann endlich auf Adafruit IO.
if (! Temperature.publish (Temperatur)) {delay (30000); } if (! Humidity.publish (Luftfeuchtigkeit)) {delay (30000); ………………………………………………………. ……………………………………………………….
3D-gedrucktes Gehäuse für AQI-Überwachungssystem
Als nächstes habe ich die Abmessungen des Aufbaus mit meinem Nonius gemessen und auch die Abmessungen der Sensoren und der OLED gemessen, um ein Gehäuse zu entwerfen. Mein Design sah unten ungefähr so aus, als es fertig war.
Nachdem ich mit dem Design zufrieden war, exportierte ich es als STL-Datei, schnitt es basierend auf den Druckereinstellungen in Scheiben und druckte es schließlich. Auch hier steht die STL-Datei bei Thingiverse zum Download zur Verfügung und Sie können Ihr Gehäuse damit ausdrucken.
Nachdem der Druck abgeschlossen war, baute ich das in einem permanenten Gehäuse eingerichtete Projekt zusammen, um es in einer Einrichtung zu installieren. Nachdem die komplette Verbindung hergestellt war, baute ich die Schaltung in mein Gehäuse ein und alles passte gut, wie Sie hier sehen können.
Testen des AQI-Überwachungssystems
Sobald die Hardware und der Code fertig sind, ist es Zeit, das Gerät zu testen. Wir haben einen externen 12V 1A-Adapter verwendet, um das Gerät mit Strom zu versorgen. Wie Sie sehen können, zeigt das Gerät die Konzentration von PM10, PM2.5 und Kohlenmonoxid auf dem OLED-Display an. Die Konzentration von PM2,5 und PM10 liegt in µg / m 3, während die Konzentration von Kohlenmonoxid in mg / m 3 liegt.
Diese Messwerte werden auch im Adafruit IO Dashboard veröffentlicht. Das Maximum aller Parameter (PM10, PM2.5 & CO) ist der AQI.
Die AQI-Werte der letzten 30 Tage werden als Grafik angezeigt.
Auf diese Weise können Sie die Sensoren SDS011 und MQ-7 zur Berechnung des Luftqualitätsindex verwenden. Die vollständige Arbeitsweise des Projekts finden Sie auch in dem unten verlinkten Video. Ich hoffe, Ihnen hat das Projekt gefallen und Sie fanden es interessant, Ihr eigenes zu bauen. Wenn Sie Fragen haben, hinterlassen Sie diese bitte im Kommentarbereich unten.