- Wymagane komponenty:
- Schemat obwodu i wyjaśnienie:
- Objaśnienie robocze:
- Objaśnienie kodu:
- "; webpage + =" Jakość powietrza to "; webpage + = air_quality; webpage + =" PPM "; webpage + ="
";
Poniższy kod wywoła funkcję o nazwie sendData i wyśle ciągi danych i komunikatów do strony internetowej w celu wyświetlenia.
sendData (cipSend, 1000, DEBUG); sendData (strona internetowa, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Poniższy kod wydrukuje dane na wyświetlaczu LCD. Zastosowaliśmy różne warunki sprawdzania jakości powietrza, a wyświetlacz LCD wydrukuje komunikaty zgodnie z warunkami, a brzęczyk również wyda sygnał dźwiękowy, jeśli zanieczyszczenie przekroczy 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Jakość powietrza to"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Świeże powietrze"); digitalWrite (8, NISKI);
Na koniec poniższa funkcja wyśle i pokaże dane na stronie internetowej. Dane, które zapisaliśmy w ciągu o nazwie „strona internetowa”, zostaną zapisane w ciągu o nazwie „polecenie” . ESP odczyta następnie znak po kolei z „polecenia” i wydrukuje go na stronie internetowej.
String sendData (polecenie String, const int timeout, boolean debug) {Odpowiedź ciągu = ""; esp8266.print (polecenie); // wyślij odczytany znak do esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// esp ma dane, więc wyświetl jego wyjście w oknie szeregowym char c = esp8266.read (); // przeczytaj następny znak. odpowiedź + = c; }} if (debugowanie) {Serial.print (odpowiedź); } odpowiedź zwrotna; }
- Testowanie i wyniki projektu:
W tym projekcie zamierzamy stworzyć system monitorowania zanieczyszczenia powietrza oparty na IoT, w którym będziemy monitorować jakość powietrza na serwerze internetowym za pomocą Internetu i uruchomimy alarm, gdy jakość powietrza spadnie powyżej określonego poziomu, czyli gdy będzie wystarczająca ilość w powietrzu obecne są szkodliwe gazy, takie jak CO2, dym, alkohol, benzen i NH3. Pokaże jakość powietrza w PPM na wyświetlaczu LCD, a także na stronie internetowej, dzięki czemu możemy ją bardzo łatwo monitorować.
Wcześniej budowaliśmy detektor LPG z czujnikiem MQ6 i czujnikiem dymu z czujnikiem MQ2, ale tym razem jako czujnik jakości powietrza zastosowaliśmy czujnik MQ135, który jest najlepszym wyborem do monitorowania jakości powietrza, ponieważ wykrywa najbardziej szkodliwe gazy i może mierzyć ich ilość dokładnie. W tym projekcie IOT możesz monitorować poziom zanieczyszczenia z dowolnego miejsca za pomocą komputera lub telefonu komórkowego. Możemy zainstalować ten system w dowolnym miejscu, a także wyzwolić jakieś urządzenie, gdy zanieczyszczenie przekroczy pewien poziom, na przykład możemy włączyć wentylator wyciągowy lub wysłać ostrzeżenie SMS / e-mail do użytkownika.
Wymagane komponenty:
- MQ135 Czujnik gazu
- Arduino Uno
- Moduł Wi-Fi ESP8266
- Wyświetlacz LCD 16X2
- Płytka prototypowa
- Potencjometr 10 K.
- Rezystory 1K ohm
- Rezystor 220 omów
- Brzęczyk
Możesz kupić wszystkie powyższe komponenty tutaj.
Schemat obwodu i wyjaśnienie:
Przede wszystkim połączymy ESP8266 z Arduino. ESP8266 działa na 3,3 V i jeśli dasz mu 5 V z Arduino, to nie będzie działać poprawnie i może ulec uszkodzeniu. Podłącz VCC i CH_PD do pinu 3,3 V Arduino. Pin RX ESP8266 działa na 3,3 V i nie będzie komunikował się z Arduino, gdy podłączymy go bezpośrednio do Arduino. Będziemy więc musieli zrobić dla niego dzielnik napięcia, który zamieni 5 V na 3,3 V. Można to zrobić, łącząc trzy rezystory szeregowo, tak jak to zrobiliśmy w obwodzie. Podłącz pin TX ESP8266 do pin 10 Arduino i pin RX esp8266 do pin 9 Arduino poprzez rezystory.
Moduł Wi-Fi ESP8266 zapewnia Twoim projektom dostęp do Wi-Fi lub internetu. Jest to bardzo tanie urządzenie i sprawia, że Twoje projekty są bardzo potężne. Może komunikować się z dowolnym mikrokontrolerem i jest wiodącym urządzeniem na platformie IOT. Dowiedz się więcej o używaniu ESP8266 z Arduino tutaj.
Następnie połączymy czujnik MQ135 z Arduino. Podłącz VCC i pin masy czujnika do 5 V i masę Arduino i analogowy pin czujnika do A0 Arduino.
Podłącz brzęczyk do pinu 8 Arduino, który zacznie wydawać sygnał dźwiękowy, gdy stan się spełni.
Na koniec połączymy LCD z Arduino. Połączenia wyświetlacza LCD są następujące
- Podłącz pin 1 (VEE) do masy.
- Podłącz pin 2 (VDD lub VCC) do 5V.
- Podłącz pin 3 (V0) do środkowego kołka potencjometru 10K i podłącz pozostałe dwa końce potencjometru do VCC i GND. Potencjometr służy do regulacji kontrastu ekranu LCD. Potencjometr o wartościach innych niż 10K też będzie działał.
- Podłącz pin 4 (RS) do pinu 12 Arduino.
- Podłącz pin 5 (odczyt / zapis) do masy Arduino. Ten pin nie jest często używany, więc podłączymy go do masy.
- Podłącz pin 6 (E) do pinu 11 Arduino. Pin RS i E to piny sterujące, które służą do przesyłania danych i znaków.
- Następujące cztery piny są pinami danych, które służą do komunikacji z Arduino.
Podłącz pin 11 (D4) do pinu 5 Arduino.
Podłącz pin 12 (D5) do pinu 4 Arduino.
Podłącz pin 13 (D6) do pinu 3 Arduino.
Podłącz pin 14 (D7) do pinu 2 Arduino.
- Podłącz pin 15 do VCC przez rezystor 220 omów. Rezystor zostanie użyty do ustawienia jasności podświetlenia. Większe wartości spowodują, że podświetlenie będzie znacznie ciemniejsze.
- Podłącz pin 16 do uziemienia.
Objaśnienie robocze:
Czujnik MQ135 może wykrywać NH3, NOx, alkohol, benzen, dym, CO2 i inne gazy, więc jest idealnym czujnikiem gazu do naszego projektu monitorowania jakości powietrza. Kiedy podłączymy go do Arduino, wykryje gazy, a my uzyskamy poziom zanieczyszczenia w PPM (części na milion). Czujnik gazu MQ135 podaje wyjście w postaci poziomów napięć i należy je przeliczyć na PPM. Tak więc do konwersji danych wyjściowych w PPM użyliśmy tutaj biblioteki dla czujnika MQ135, co zostało szczegółowo wyjaśnione w sekcji „Objaśnienie kodu” poniżej.
Czujnik podawał wartość 90, gdy w pobliżu nie było gazu, a bezpieczny poziom jakości powietrza to 350 PPM i nie powinien przekraczać 1000 PPM. Kiedy przekracza limit 1000 PPM, zaczyna powodować bóle głowy, senność oraz zastój, stęchłe, duszne powietrze, a jeśli przekracza 2000 PPM, może powodować przyspieszenie akcji serca i wiele innych chorób.
Gdy wartość będzie mniejsza niż 1000 PPM, na wyświetlaczu LCD i na stronie internetowej zostanie wyświetlony komunikat „Świeże powietrze”. Za każdym razem, gdy wartość wzrośnie o 1000 PPM, brzęczyk zacznie wydawać dźwięk, a na wyświetlaczu LCD i na stronie internetowej zostanie wyświetlony komunikat „Poor Air, Open Windows”. Jeśli wzrośnie o 2000, brzęczyk będzie nadal piszczał, a na wyświetlaczu LCD i na stronie internetowej pojawi się „Niebezpieczeństwo! Przenieś się na świeże powietrze ”.
Objaśnienie kodu:
Przed rozpoczęciem kodowania dla tego projektu musimy najpierw skalibrować czujnik gazu MQ135. Istnieje wiele obliczeń związanych z konwersją sygnału wyjściowego czujnika na wartość PPM, wykonaliśmy te obliczenia wcześniej w naszym poprzednim projekcie czujnika dymu. Ale tutaj używamy biblioteki dla MQ135, możesz pobrać i zainstalować tę bibliotekę MQ135 stąd:
Korzystając z tej biblioteki, możesz bezpośrednio pobrać wartości PPM, używając tylko poniższych dwóch linii:
MQ135 gasSensor = MQ135 (A0); float air_quality = gasSensor.getPPM ();
Ale wcześniej musimy skalibrować czujnik MQ135, aby skalibrować czujnik załaduj poniższy kod i pozwól mu działać przez 12 do 24 godzin, a następnie uzyskaj wartość RZERO .
#include „MQ135.h” void setup () {Serial.begin (9600); } void loop () {MQ135 gasSensor = MQ135 (A0); // Podłącz czujnik do pinu A0 float rzero = gasSensor.getRZero (); Serial.println (rzero); opóźnienie (1000); }
Po uzyskaniu wartości RZERO . Umieść wartość RZERO w pobranym pliku biblioteki „MQ135.h”: # zdefiniuj RZERO 494.63
Teraz możemy rozpocząć kodowanie naszego projektu monitorowania jakości powietrza.
W kodzie zdefiniowaliśmy przede wszystkim biblioteki i zmienne dla czujnika gazu i wyświetlacza LCD. Korzystając z Software Serial Library, możemy wykonać dowolny cyfrowy pin jako TX i RX. W tym kodzie stworzyliśmy Pin 9 jako pin RX i pin 10 jako pin TX dla ESP8266. Następnie dołączyliśmy bibliotekę do LCD i zdefiniowaliśmy piny do tego samego. Zdefiniowaliśmy również dwie dodatkowe zmienne: jedną dla styku analogowego czujnika i drugą do przechowywania wartości air_quality .
#zawierać
Następnie zadeklarujemy pin 8 jako pin wyjściowy, do którego podłączyliśmy brzęczyk. Polecenie l cd.begin (16,2) uruchomi wyświetlacz LCD w celu odebrania danych, a następnie ustawimy kursor na pierwszą linię i wydrukujemy „circuitdigest” . Następnie ustawimy kursor w drugiej linii i wydrukujemy „Sensor Warming” .
pinMode (8, WYJŚCIE); lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("circuitdigest"); lcd.setCursor (0,1); lcd.print ("Ogrzewanie czujnika"); opóźnienie (1000);
Następnie ustawimy prędkość transmisji dla komunikacji szeregowej. Różne ESP mają różne szybkości transmisji, więc zapisz je zgodnie z szybkością transmisji ESP. Następnie wyślemy polecenia, aby ustawić ESP na komunikację z Arduino i wyświetlić adres IP na monitorze szeregowym.
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 ();
Aby wydrukować wynik na stronie internetowej w przeglądarce internetowej, będziemy musieli użyć programowania HTML. Dlatego stworzyliśmy ciąg o nazwie webpage i zapisaliśmy w nim dane wyjściowe. Odejmujemy 48 od wyniku, ponieważ funkcja read () zwraca wartość dziesiętną ASCII, a pierwsza liczba dziesiętna równa 0 zaczyna się od 48.
if (esp8266.available ()) {if (esp8266.find ("+ IPD,")) {opóźnienie (1000); int connectionId = esp8266.read () - 48; String webpage = "
System monitorowania zanieczyszczenia powietrza IOT
"; strona internetowa + =""; webpage + =" Jakość powietrza to "; webpage + = air_quality; webpage + =" PPM "; webpage + ="
";
Poniższy kod wywoła funkcję o nazwie sendData i wyśle ciągi danych i komunikatów do strony internetowej w celu wyświetlenia.
sendData (cipSend, 1000, DEBUG); sendData (strona internetowa, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Poniższy kod wydrukuje dane na wyświetlaczu LCD. Zastosowaliśmy różne warunki sprawdzania jakości powietrza, a wyświetlacz LCD wydrukuje komunikaty zgodnie z warunkami, a brzęczyk również wyda sygnał dźwiękowy, jeśli zanieczyszczenie przekroczy 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("Jakość powietrza to"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Świeże powietrze"); digitalWrite (8, NISKI);
Na koniec poniższa funkcja wyśle i pokaże dane na stronie internetowej. Dane, które zapisaliśmy w ciągu o nazwie „strona internetowa”, zostaną zapisane w ciągu o nazwie „polecenie” . ESP odczyta następnie znak po kolei z „polecenia” i wydrukuje go na stronie internetowej.
String sendData (polecenie String, const int timeout, boolean debug) {Odpowiedź ciągu = ""; esp8266.print (polecenie); // wyślij odczytany znak do esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// esp ma dane, więc wyświetl jego wyjście w oknie szeregowym char c = esp8266.read (); // przeczytaj następny znak. odpowiedź + = c; }} if (debugowanie) {Serial.print (odpowiedź); } odpowiedź zwrotna; }
Testowanie i wyniki projektu:
Przed przesłaniem kodu upewnij się, że masz połączenie z Wi-Fi swojego urządzenia ESP8266. Po załadowaniu otwórz monitor szeregowy i pokaże adres IP, jak pokazano poniżej.
Wpisz ten adres IP w przeglądarce, pokaże ci dane wyjściowe, jak pokazano poniżej. Będziesz musiał ponownie odświeżyć stronę, jeśli chcesz zobaczyć aktualną wartość jakości powietrza w PPM.
Skonfigurowaliśmy lokalny serwer, aby zademonstrować jego działanie, możesz sprawdzić poniższe wideo. Aby jednak monitorować jakość powietrza z dowolnego miejsca na świecie, musisz przekierować port 80 (używany do HTTP lub Internetu) na lokalny lub prywatny adres IP (192.168 *) urządzenia. Po przekierowaniu portu wszystkie połączenia przychodzące zostaną przekierowane na ten adres lokalny i możesz otworzyć powyższą stronę internetową, wprowadzając publiczny adres IP swojego Internetu z dowolnego miejsca. Możesz przekierować port, logując się do routera (192.168.1.1) i znajdź opcję konfiguracji przekierowania portu.