- Erforderliche Komponenten:
- Schaltplan und Erklärung:
- Arbeitserklärung:
- Code Erläuterung:
- "; Webseite + =" Luftqualität ist "; Webseite + = Luftqualität; Webseite + =" PPM "; Webseite + ="
";
Der folgende Code ruft eine Funktion namens sendData auf und sendet die Daten- und Nachrichtenzeichenfolgen zur Anzeige an die Webseite.
sendData (cipSend, 1000, DEBUG); sendData (Webseite, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Der folgende Code druckt die Daten auf dem LCD. Wir haben verschiedene Bedingungen zur Überprüfung der Luftqualität angewendet, und das LCD druckt die Meldungen entsprechend den Bedingungen und der Summer piept auch, wenn die Verschmutzung 1000 ppm überschreitet.
lcd.setCursor (0, 0); lcd.print ("Luftqualität ist"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Frischluft"); digitalWrite (8, LOW);
Schließlich sendet und zeigt die folgende Funktion die Daten auf der Webseite. Die Daten, die wir in der Zeichenfolge "Webseite" gespeichert haben, werden in der Zeichenfolge "Befehl" gespeichert . Das ESP liest dann das Zeichen einzeln aus dem 'Befehl' und druckt es auf der Webseite aus.
String sendData (String-Befehl, const int timeout, boolesches Debug) {String response = ""; esp8266.print (Befehl); // sende das gelesene Zeichen an esp8266 long int time = millis (); while ((Zeit + Zeitüberschreitung)> millis ()) {while (esp8266.available ()) {// Der esp hat Daten, also zeigt seine Ausgabe im seriellen Fenster an char c = esp8266.read (); // Lies das nächste Zeichen. Antwort + = c; }} if (Debug) {Serial.print (Antwort); } return response; }}
- Testen und Ausgabe des Projekts:
In diesem Projekt werden wir ein IoT-basiertes Luftverschmutzungsüberwachungssystem entwickeln, in dem wir die Luftqualität über einen Webserver über das Internet überwachen und einen Alarm auslösen, wenn die Luftqualität über ein bestimmtes Niveau hinausgeht, dh wenn eine ausreichende Menge vorhanden ist in der Luft sind schädliche Gase wie CO2, Rauch, Alkohol, Benzol und NH3 vorhanden. Es zeigt die Luftqualität in PPM auf dem LCD und auf der Webseite an, so dass wir sie sehr einfach überwachen können.
Früher haben wir den LPG-Detektor mit dem MQ6-Sensor und den Rauchmelder mit dem MQ2-Sensor gebaut. Diesmal haben wir jedoch den MQ135-Sensor als Luftqualitätssensor verwendet, der die beste Wahl für die Überwachung der Luftqualität ist, da er die meisten schädlichen Gase erkennen und deren Menge messen kann genau. In diesem IOT-Projekt können Sie den Verschmutzungsgrad von überall mit Ihrem Computer oder Mobiltelefon überwachen. Wir können dieses System überall installieren und auch ein Gerät auslösen, wenn die Verschmutzung über ein bestimmtes Maß hinausgeht, z. B. den Abluftventilator einschalten oder dem Benutzer eine Alarm-SMS / E-Mail senden.
Erforderliche Komponenten:
- MQ135 Gassensor
- Arduino Uno
- Wi-Fi-Modul ESP8266
- 16X2 LCD
- Steckbrett
- 10K Potentiometer
- 1K Ohm Widerstände
- 220 Ohm Widerstand
- Summer
Sie können alle oben genannten Komponenten hier kaufen.
Schaltplan und Erklärung:
Zunächst werden wir den ESP8266 mit dem Arduino verbinden. ESP8266 wird mit 3,3 V betrieben. Wenn Sie dem Arduino 5 V geben, funktioniert es nicht richtig und kann beschädigt werden. Verbinden Sie den VCC und den CH_PD mit dem 3,3-V-Pin von Arduino. Der RX-Pin des ESP8266 arbeitet mit 3,3 V und kommuniziert nicht mit dem Arduino, wenn wir ihn direkt mit dem Arduino verbinden. Wir müssen also einen Spannungsteiler dafür herstellen, der die 5 V in 3,3 V umwandelt. Dies kann erreicht werden, indem drei Widerstände wie in der Schaltung in Reihe geschaltet werden. Verbinden Sie den TX-Pin des ESP8266 über die Widerstände mit dem Pin 10 des Arduino und den RX-Pin des esp8266 mit dem Pin 9 des Arduino.
Das Wi-Fi-Modul ESP8266 ermöglicht Ihren Projekten den Zugriff auf Wi-Fi oder Internet. Es ist ein sehr billiges Gerät und macht Ihre Projekte sehr leistungsfähig. Es kann mit jedem Mikrocontroller kommunizieren und ist das führende Gerät auf der IOT-Plattform. Weitere Informationen zur Verwendung von ESP8266 mit Arduino finden Sie hier.
Dann werden wir den MQ135-Sensor mit dem Arduino verbinden. Verbinden Sie den VCC und den Erdungsstift des Sensors mit 5 V und die Erdung des Arduino und den Analogstift des Sensors mit dem A0 des Arduino.
Schließen Sie einen Summer an Pin 8 des Arduino an, der zu piepen beginnt, wenn die Bedingung erfüllt ist.
Zuletzt werden wir LCD mit dem Arduino verbinden. Die Anschlüsse des LCD sind wie folgt
- Verbinden Sie Pin 1 (VEE) mit Masse.
- Verbinden Sie Pin 2 (VDD oder VCC) mit 5V.
- Verbinden Sie Pin 3 (V0) mit dem mittleren Pin des 10K-Potentiometers und verbinden Sie die beiden anderen Enden des Potentiometers mit dem VCC und dem GND. Das Potentiometer dient zur Steuerung des Bildschirmkontrasts des LCD. Potentiometer mit anderen Werten als 10K funktionieren ebenfalls.
- Verbinden Sie Pin 4 (RS) mit Pin 12 des Arduino.
- Verbinden Sie Pin 5 (Lesen / Schreiben) mit der Masse von Arduino. Dieser Stift wird nicht oft verwendet, daher werden wir ihn mit der Erde verbinden.
- Verbinden Sie Pin 6 (E) mit Pin 11 des Arduino. Der RS- und E-Pin sind die Steuerpins, die zum Senden von Daten und Zeichen verwendet werden.
- Die folgenden vier Pins sind Datenpins, die zur Kommunikation mit dem Arduino verwendet werden.
Verbinden Sie Pin 11 (D4) mit Pin 5 von Arduino.
Verbinden Sie Pin 12 (D5) mit Pin 4 von Arduino.
Verbinden Sie Pin 13 (D6) mit Pin 3 von Arduino.
Verbinden Sie Pin 14 (D7) mit Pin 2 von Arduino.
- Verbinden Sie Pin 15 über den 220-Ohm-Widerstand mit dem VCC. Der Widerstand wird verwendet, um die Helligkeit der Hintergrundbeleuchtung einzustellen. Größere Werte machen das Hintergrundlicht viel dunkler.
- Verbinden Sie Pin 16 mit Masse.
Arbeitserklärung:
Der MQ135-Sensor kann NH3, NOx, Alkohol, Benzol, Rauch, CO2 und einige andere Gase erfassen und ist daher der perfekte Gassensor für unser Projekt zur Überwachung der Luftqualität. Wenn wir es an Arduino anschließen, erkennt es die Gase und wir erhalten den Verschmutzungsgrad in PPM (parts per million). Der Gassensor MQ135 gibt den Ausgang in Form von Spannungspegeln aus und muss in PPM umgewandelt werden. Für die Konvertierung der Ausgabe in PPM haben wir hier eine Bibliothek für den MQ135-Sensor verwendet. Diese wird im Abschnitt „Code-Erklärung“ weiter unten ausführlich erläutert.
Der Sensor gab uns einen Wert von 90, wenn sich kein Gas in der Nähe befand und die sichere Luftqualität 350 ppm betrug und 1000 ppm nicht überschreiten sollte. Wenn es die Grenze von 1000 ppm überschreitet, verursacht es Kopfschmerzen, Schläfrigkeit und stagnierende, abgestandene, stickige Luft. Wenn es mehr als 2000 ppm überschreitet, kann es eine erhöhte Herzfrequenz und viele andere Krankheiten verursachen.
Wenn der Wert weniger als 1000 ppm beträgt, werden auf dem LCD und der Webseite „Frischluft“ angezeigt. Immer wenn der Wert um 1000 ppm erhöht wird, ertönt ein Signalton und auf dem LCD und der Webseite wird „Schlechte Luft, Windows öffnen“ angezeigt. Wenn es 2000 erhöht, piept der Summer weiter und auf dem LCD und der Webseite wird „Gefahr! An die frische Luft bringen “.
Code Erläuterung:
Bevor wir mit der Codierung für dieses Projekt beginnen, müssen wir zuerst den MQ135-Gassensor kalibrieren. Es sind viele Berechnungen erforderlich, um die Ausgabe des Sensors in einen PPM-Wert umzuwandeln. Wir haben diese Berechnung bereits in unserem vorherigen Smoke Detector-Projekt durchgeführt. Aber hier verwenden wir die Bibliothek für MQ135. Sie können diese MQ135-Bibliothek hier herunterladen und installieren:
Mit dieser Bibliothek können Sie die PPM-Werte direkt abrufen, indem Sie einfach die folgenden zwei Zeilen verwenden:
MQ135 gasSensor = MQ135 (A0); float air_quality = gasSensor.getPPM ();
Zuvor müssen wir jedoch den MQ135-Sensor kalibrieren. Um den Sensor zu kalibrieren, laden Sie den unten angegebenen Code hoch und lassen Sie ihn 12 bis 24 Stunden lang laufen, um dann den RZERO- Wert zu erhalten.
#include "MQ135.h" void setup () {Serial.begin (9600); } void loop () {MQ135 gasSensor = MQ135 (A0); // Sensor an Pin A0 anschließen float rzero = gasSensor.getRZero (); Serial.println (rzero); Verzögerung (1000); }}
Nach Erhalt des RZERO- Wertes. Fügen Sie den RZERO-Wert in die Bibliotheksdatei ein, die Sie "MQ135.h" heruntergeladen haben: #define RZERO 494.63
Jetzt können wir mit dem eigentlichen Code für unser Projekt zur Überwachung der Luftqualität beginnen.
Im Code haben wir zunächst die Bibliotheken und Variablen für den Gassensor und das LCD definiert. Mithilfe der Software Serial Library können wir jeden digitalen Pin als TX- und RX-Pin erstellen. In diesem Code haben wir Pin 9 als RX-Pin und Pin 10 als TX-Pin für den ESP8266 festgelegt. Dann haben wir die Bibliothek für das LCD aufgenommen und die Pins für dasselbe definiert. Wir haben auch zwei weitere Variablen definiert: eine für den analogen Sensor-Pin und eine zum Speichern des air_quality- Werts.
#einschließen
Dann deklarieren wir den Pin 8 als den Ausgangspin, an dem wir den Summer angeschlossen haben. l Der Befehl cd.begin (16,2) startet das LCD, um Daten zu empfangen, und setzt dann den Cursor auf die erste Zeile und druckt die 'Circuitdigest' . Dann setzen wir den Cursor in die zweite Zeile und drucken 'Sensor Warming' .
PinMode (8, OUTPUT); lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("Circuitdigest"); lcd.setCursor (0,1); lcd.print ("Sensorerwärmung"); Verzögerung (1000);
Dann stellen wir die Baudrate für die serielle Kommunikation ein. Unterschiedliche ESPs haben unterschiedliche Baudraten. Schreiben Sie sie daher entsprechend der Baudrate Ihres ESP. Anschließend senden wir die Befehle, um das ESP für die Kommunikation mit dem Arduino einzustellen und die IP-Adresse auf dem seriellen Monitor anzuzeigen.
Serial.begin (115200); esp8266.begin (115200); sendData ("AT + RST \ r \ n", 2000, DEBUG); sendData ("AT + CWMODE = 2 \ r \ n", 1000, DEBUG); sendData ("AT + CIFSR \ r \ n", 1000, DEBUG); sendData ("AT + CIPMUair_quality = 1 \ r \ n", 1000, DEBUG); sendData ("AT + CIPSERVER = 1,80 \ r \ n", 1000, DEBUG); pinMode (sensorPin, INPUT); lcd.clear ();
Zum Drucken der Ausgabe auf der Webseite im Webbrowser müssen wir die HTML-Programmierung verwenden. Also haben wir eine Zeichenfolge mit dem Namen webpage erstellt und die Ausgabe darin gespeichert. Wir subtrahieren 48 von der Ausgabe, weil die Funktion read () den ASCII-Dezimalwert zurückgibt und die erste Dezimalzahl, die 0 ist, bei 48 beginnt.
if (esp8266.available ()) {if (esp8266.find ("+ IPD,")) {delay (1000); int connectionId = esp8266.read () - 48; String webpage = "
IOT-System zur Überwachung der Luftverschmutzung
"; Webseite + =""; Webseite + =" Luftqualität ist "; Webseite + = Luftqualität; Webseite + =" PPM "; Webseite + ="
";
Der folgende Code ruft eine Funktion namens sendData auf und sendet die Daten- und Nachrichtenzeichenfolgen zur Anzeige an die Webseite.
sendData (cipSend, 1000, DEBUG); sendData (Webseite, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Der folgende Code druckt die Daten auf dem LCD. Wir haben verschiedene Bedingungen zur Überprüfung der Luftqualität angewendet, und das LCD druckt die Meldungen entsprechend den Bedingungen und der Summer piept auch, wenn die Verschmutzung 1000 ppm überschreitet.
lcd.setCursor (0, 0); lcd.print ("Luftqualität ist"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Frischluft"); digitalWrite (8, LOW);
Schließlich sendet und zeigt die folgende Funktion die Daten auf der Webseite. Die Daten, die wir in der Zeichenfolge "Webseite" gespeichert haben, werden in der Zeichenfolge "Befehl" gespeichert. Das ESP liest dann das Zeichen einzeln aus dem 'Befehl' und druckt es auf der Webseite aus.
String sendData (String-Befehl, const int timeout, boolesches Debug) {String response = ""; esp8266.print (Befehl); // sende das gelesene Zeichen an esp8266 long int time = millis (); while ((Zeit + Zeitüberschreitung)> millis ()) {while (esp8266.available ()) {// Der esp hat Daten, also zeigt seine Ausgabe im seriellen Fenster an char c = esp8266.read (); // Lies das nächste Zeichen. Antwort + = c; }} if (Debug) {Serial.print (Antwort); } return response; }}
Testen und Ausgabe des Projekts:
Stellen Sie vor dem Hochladen des Codes sicher, dass Sie mit dem WLAN Ihres ESP8266-Geräts verbunden sind. Öffnen Sie nach dem Hochladen den seriellen Monitor und er zeigt die IP-Adresse wie unten gezeigt an.
Geben Sie diese IP-Adresse in Ihren Browser ein. Die Ausgabe wird wie unten gezeigt angezeigt. Sie müssen die Seite erneut aktualisieren, wenn Sie den aktuellen Luftqualitätswert in PPM anzeigen möchten.
Wir haben einen lokalen Server eingerichtet, um dessen Funktionsweise zu demonstrieren. Sie können das folgende Video überprüfen. Um die Luftqualität von überall auf der Welt zu überwachen, müssen Sie den Port 80 (für HTTP oder Internet verwendet) an Ihre lokale oder private IP-Adresse (192.168 *) Ihres Geräts weiterleiten. Nach der Portweiterleitung werden alle eingehenden Verbindungen an diese lokale Adresse weitergeleitet. Sie können die oben gezeigte Webseite öffnen, indem Sie einfach von überall die öffentliche IP-Adresse Ihres Internets eingeben. Sie können den Port weiterleiten, indem Sie sich bei Ihrem Router (192.168.1.1) anmelden und die Option zum Einrichten der Portweiterleitung finden.