- Vereiste componenten:
- Schakelschema en uitleg:
- Werkende uitleg:
- Code Verklaring:
- "; webpage + =" Luchtkwaliteit is "; webpage + = air_quality; webpage + =" PPM "; webpage + ="
";
De volgende code roept een functie met de naam sendData aan en stuurt de gegevens- en berichtstrings naar de webpagina om weer te geven.
sendData (cipSend, 1000, DEBUG); sendData (webpagina, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
De volgende code zal de gegevens op het LCD-scherm afdrukken. We hebben verschillende voorwaarden toegepast om de luchtkwaliteit te controleren, en het LCD-scherm zal de berichten afdrukken volgens de omstandigheden en de zoemer zal ook piepen als de vervuiling groter is dan 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Luchtkwaliteit is"); lcd.print (luchtkwaliteit); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Fresh Air"); digitalWrite (8, LOW);
Ten slotte zal de onderstaande functie de gegevens op de webpagina verzenden en tonen. De gegevens die we hebben opgeslagen in een string met de naam 'webpagina' , worden opgeslagen in een string met de naam 'commando' . De ESP leest het teken dan een voor een uit het 'commando' en drukt het af op de webpagina.
String sendData (String-opdracht, const int time-out, boolean debug) {String response = ""; esp8266.print (opdracht); // stuur het gelezen karakter naar de esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// De esp heeft data, dus geef de output weer in het seriële venster char c = esp8266.read (); // lees het volgende teken. antwoord + = c; }} if (debug) {Serial.print (antwoord); } antwoord terug; }
- Testen en uitvoeren van het project:
In dit project gaan we een op IoT gebaseerd Air Pollution Monitoring System maken waarin we de luchtkwaliteit via een webserver via internet monitoren en een alarm laten afgaan als de luchtkwaliteit een bepaald niveau overschrijdt, dat wil zeggen wanneer er voldoende van schadelijke gassen zijn aanwezig in de lucht zoals CO2, rook, alcohol, benzeen en NH3. Het toont de luchtkwaliteit in PPM op het LCD-scherm en ook op de webpagina, zodat we het heel gemakkelijk kunnen volgen.
Eerder hebben we de LPG-detector gebouwd met een MQ6-sensor en een rookdetector met een MQ2-sensor, maar deze keer hebben we de MQ135-sensor gebruikt als de luchtkwaliteitssensor, wat de beste keuze is voor het bewaken van de luchtkwaliteit, omdat deze de meeste schadelijke gassen kan detecteren en hun hoeveelheid kan meten. nauwkeurig. In dit IOT-project kunt u het vervuilingsniveau overal volgen met uw computer of mobiel. We kunnen dit systeem overal installeren en kunnen ook een apparaat activeren wanneer de vervuiling een bepaald niveau overschrijdt, zoals we de afzuigventilator kunnen inschakelen of een waarschuwings-sms / mail naar de gebruiker kunnen sturen.
Vereiste componenten:
- MQ135 Gassensor
- Arduino Uno
- Wi-Fi-module ESP8266
- 16X2 LCD
- Breadboard
- 10K potentiometer
- 1K ohm weerstanden
- 220 ohm weerstand
- Zoemer
U kunt hier alle bovenstaande componenten kopen.
Schakelschema en uitleg:
Allereerst gaan we de ESP8266 verbinden met de Arduino. ESP8266 werkt op 3.3V en als je hem 5V van de Arduino geeft, zal hij niet goed werken en kan hij beschadigd raken. Verbind de VCC en de CH_PD met de 3.3V pin van Arduino. De RX-pin van ESP8266 werkt op 3.3V en zal niet communiceren met de Arduino wanneer we hem rechtstreeks op de Arduino aansluiten. We zullen er dus een spanningsdeler voor moeten maken die de 5V omzet in 3.3V. Dit kan worden gedaan door drie weerstanden in serie te schakelen zoals we deden in het circuit. Verbind de TX-pin van de ESP8266 met de pin 10 van de Arduino en de RX-pin van de esp8266 met de pin 9 van Arduino via de weerstanden.
ESP8266 Wi-Fi-module geeft uw projecten toegang tot Wi-Fi of internet. Het is een erg goedkoop apparaat en maakt uw projecten erg krachtig. Het kan communiceren met elke microcontroller en het zijn de meest toonaangevende apparaten op het IOT-platform. Lees hier meer over het gebruik van ESP8266 met Arduino.
Dan gaan we de MQ135 sensor verbinden met de Arduino. Verbind de VCC en de aardingspin van de sensor met de 5V en aarde van de Arduino en de analoge pin van de sensor met de A0 van de Arduino.
Sluit een zoemer aan op pin 8 van de Arduino die begint te piepen wanneer de toestand waar wordt.
Als laatste zullen we LCD verbinden met de Arduino. De aansluitingen van de LCD zijn als volgt
- Verbind pin 1 (VEE) met de grond.
- Verbind pin 2 (VDD of VCC) met de 5V.
- Verbind pin 3 (V0) met de middelste pin van de 10K potentiometer en verbind de andere twee uiteinden van de potentiometer met de VCC en de GND. De potentiometer wordt gebruikt om het schermcontrast van het LCD-scherm te regelen. Potentiometer met andere waarden dan 10K zal ook werken.
- Sluit pin 4 (RS) aan op pin 12 van de Arduino.
- Verbind pin 5 (lezen / schrijven) met de aarde van Arduino. Deze pin wordt niet vaak gebruikt dus we zullen hem met de grond verbinden.
- Sluit pin 6 (E) aan op pin 11 van de Arduino. De RS- en E-pin zijn de controlepennen die worden gebruikt om gegevens en tekens te verzenden.
- De volgende vier pinnen zijn datapinnen die worden gebruikt om te communiceren met de Arduino.
Verbind pin 11 (D4) met pin 5 van Arduino.
Verbind pin 12 (D5) met pin 4 van Arduino.
Verbind pin 13 (D6) met pin 3 van Arduino.
Verbind pin 14 (D7) met pin 2 van Arduino.
- Verbind pin 15 met de VCC via de 220 ohm-weerstand. De weerstand wordt gebruikt om de helderheid van het achtergrondlicht in te stellen. Bij hogere waarden wordt de achtergrondverlichting veel donkerder.
- Verbind pin 16 met de grond.
Werkende uitleg:
De MQ135-sensor kan NH3, NOx, alcohol, benzeen, rook, CO2 en enkele andere gassen detecteren, dus het is de perfecte gassensor voor ons Air Quality Monitoring Project. Wanneer we het op Arduino aansluiten, zal het de gassen detecteren en krijgen we het vervuilingsniveau in PPM (delen per miljoen). MQ135 gassensor geeft de output in de vorm van spanningsniveaus en we moeten deze omzetten in PPM. Dus voor het converteren van de uitvoer in PPM, hebben we hier een bibliotheek voor de MQ135-sensor gebruikt, dit wordt in detail uitgelegd in het gedeelte "Code-uitleg" hieronder.
De sensor gaf ons een waarde van 90 als er geen gas in de buurt was en het veilige niveau van luchtkwaliteit 350 PPM is en het mag niet hoger zijn dan 1000 PPM. Wanneer het de limiet van 1000 PPM overschrijdt, begint het hoofdpijn, slaperigheid en stagnerende, muffe, verstopte lucht te veroorzaken en als het hoger is dan 2000 PPM, kan het een verhoogde hartslag en vele andere ziekten veroorzaken.
Als de waarde minder is dan 1000 PPM, wordt op het LCD-scherm en de webpagina "Fresh Air" weergegeven. Telkens wanneer de waarde met 1000 PPM wordt verhoogd, begint de zoemer te piepen en wordt op het LCD-scherm en de webpagina "Poor Air, Open Windows" weergegeven. Als het hoger wordt dan 2000, blijft de zoemer piepen en wordt op het LCD-scherm en de webpagina 'Gevaar! Ga naar frisse lucht ”.
Code Verklaring:
Voordat we met de codering voor dit project beginnen, moeten we eerst de MQ135-gassensor kalibreren. Er zijn veel berekeningen betrokken bij het omzetten van de output van de sensor in PPM-waarde, we hebben deze berekening eerder gedaan in ons vorige rookdetectorproject. Maar hier gebruiken we de bibliotheek voor MQ135, u kunt deze MQ135-bibliotheek vanaf hier downloaden en installeren:
Met behulp van deze bibliotheek kunt u rechtstreeks de PPM-waarden ophalen door alleen de onderstaande twee regels te gebruiken:
MQ135 gasSensor = MQ135 (A0); zweven air_quality = gasSensor.getPPM ();
Maar daarvoor moeten we de MQ135-sensor kalibreren, voor het kalibreren van de sensor upload je de onderstaande code en laat je deze 12 tot 24 uur draaien en krijg je de RZERO- waarde.
#inclusief "MQ135.h" void setup () {Serial.begin (9600); } void loop () {MQ135 gasSensor = MQ135 (A0); // Bevestig sensor aan pin A0 float rzero = gasSensor.getRZero (); Serial.println (rzero); vertraging (1000); }
Na het verkrijgen van de RZERO- waarde. Zet de RZERO-waarde in het bibliotheekbestand dat u "MQ135.h" hebt gedownload: #define RZERO 494.63
Nu kunnen we beginnen met de eigenlijke code voor ons luchtkwaliteitsbewakingsproject.
In de code hebben we allereerst de bibliotheken en de variabelen voor de gassensor en de LCD gedefinieerd. Door de Software Serial Library te gebruiken, kunnen we elke digitale pin als TX- en RX-pin maken. In deze code hebben we pin 9 gemaakt als de RX-pin en de pin 10 als de TX-pin voor de ESP8266. Vervolgens hebben we de bibliotheek voor het LCD-scherm opgenomen en de pinnen hiervoor gedefinieerd. We hebben ook nog twee variabelen gedefinieerd: een voor de analoge pin van de sensor en een andere voor het opslaan van de waarde van luchtkwaliteit .
# omvatten
Dan zullen we de pin 8 declareren als de output pin waarop we de zoemer hebben aangesloten. l cd.begin (16,2) commando zal de LCD starten om data te ontvangen en dan zullen we de cursor op de eerste regel zetten en de 'circuitdigest' printen . Vervolgens plaatsen we de cursor op de tweede regel en drukken we 'Sensor Warming' af .
pinMode (8, UITGANG); lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("circuitdigest"); lcd.setCursor (0,1); lcd.print ("Sensor Warming"); vertraging (1000);
Vervolgens stellen we de baudrate voor de seriële communicatie in. Verschillende ESP's hebben verschillende baudrates, dus schrijf ze op basis van de baudrate van je ESP. Vervolgens zullen we de commando's sturen om de ESP in te stellen om te communiceren met de Arduino en het IP-adres op de seriële monitor te tonen.
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 ();
Om de uitvoer op de webpagina in een webbrowser af te drukken, zullen we HTML-programmering moeten gebruiken. We hebben dus een string met de naam webpagina gemaakt en de uitvoer daarin opgeslagen. We trekken 48 af van de uitvoer omdat de functie read () de ASCII-decimale waarde retourneert en het eerste decimale getal dat 0 is, begint bij 48.
if (esp8266.available ()) {if (esp8266.find ("+ IPD,")) {vertraging (1000); int connectionId = esp8266.read () - 48; String webpage = "
IOT-bewakingssysteem voor luchtverontreiniging
"; webpagina + =""; webpage + =" Luchtkwaliteit is "; webpage + = air_quality; webpage + =" PPM "; webpage + ="
";
De volgende code roept een functie met de naam sendData aan en stuurt de gegevens- en berichtstrings naar de webpagina om weer te geven.
sendData (cipSend, 1000, DEBUG); sendData (webpagina, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
De volgende code zal de gegevens op het LCD-scherm afdrukken. We hebben verschillende voorwaarden toegepast om de luchtkwaliteit te controleren, en het LCD-scherm zal de berichten afdrukken volgens de omstandigheden en de zoemer zal ook piepen als de vervuiling groter is dan 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Luchtkwaliteit is"); lcd.print (luchtkwaliteit); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Fresh Air"); digitalWrite (8, LOW);
Ten slotte zal de onderstaande functie de gegevens op de webpagina verzenden en tonen. De gegevens die we hebben opgeslagen in een string met de naam 'webpagina' , worden opgeslagen in een string met de naam 'commando' . De ESP leest het teken dan een voor een uit het 'commando' en drukt het af op de webpagina.
String sendData (String-opdracht, const int time-out, boolean debug) {String response = ""; esp8266.print (opdracht); // stuur het gelezen karakter naar de esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// De esp heeft data, dus geef de output weer in het seriële venster char c = esp8266.read (); // lees het volgende teken. antwoord + = c; }} if (debug) {Serial.print (antwoord); } antwoord terug; }
Testen en uitvoeren van het project:
Zorg ervoor dat u bent verbonden met de Wi-Fi van uw ESP8266-apparaat voordat u de code uploadt. Open na het uploaden de seriële monitor en deze toont het IP-adres zoals hieronder weergegeven.
Typ dit IP-adres in uw browser, het toont u de uitvoer zoals hieronder weergegeven. U moet de pagina opnieuw verversen als u de huidige luchtkwaliteitswaarde in PPM wilt zien.
We hebben een lokale server opgezet om de werking te demonstreren, u kunt de onderstaande video bekijken. Maar om de luchtkwaliteit overal ter wereld te bewaken, moet u poort 80 (gebruikt voor HTTP of internet) doorsturen naar uw lokale of privé IP-adres (192.168 *) van uw apparaat. Na port forwarding worden alle inkomende verbindingen doorgestuurd naar dit lokale adres en kunt u de bovenstaande webpagina openen door het openbare IP-adres van uw internet overal in te voeren. U kunt de poort doorsturen door in te loggen op uw router (192.168.1.1) en de optie te zoeken om de poortdoorschakeling in te stellen.