- Gerekli Bileşenler:
- Devre Şeması ve Açıklaması:
- Çalışma Açıklaması:
- Kod Açıklaması:
- "; web sayfası + =" Hava Kalitesi "; web sayfası + = hava_kalitesi; web sayfası + =" PPM "; web sayfası + ="
";
Aşağıdaki kod sendData adlı bir işlevi çağıracak ve verileri ve mesaj dizelerini gösterilmesi için web sayfasına gönderecektir.
sendData (cipSend, 1000, DEBUG); sendData (web sayfası, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Aşağıdaki kod, veriyi LCD'ye yazdıracaktır. Hava kalitesini kontrol etmek için çeşitli koşullar uyguladık ve LCD, mesajları koşullara göre yazdıracak ve kirlilik 1000 PPM'yi aşarsa sesli uyarı da bipleyecektir.
lcd.setCursor (0, 0); lcd.print ("Hava Kalitesi"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Temiz Hava"); digitalWrite (8, DÜŞÜK);
Son olarak, aşağıdaki işlev web sayfasındaki verileri gönderecek ve gösterecektir. 'Web sayfası' adlı dizede sakladığımız veriler , 'command' adlı dizede kaydedilecektir . Daha sonra ESP, 'komuttan' karakteri tek tek okuyacak ve web sayfasında yazdıracaktır.
String sendData (String komutu, const int zaman aşımı, mantıksal hata ayıklama) {String response = ""; esp8266.print (komut); // okunan karakteri esp8266'ya gönderin long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// esp veriye sahiptir, bu yüzden çıkışını seri pencereye göster char c = esp8266.read (); // sonraki karakteri oku. yanıt + = c; }} if (hata ayıklama) {Seri.print (yanıt); } dönüş yanıtı; }
- Projenin Test Edilmesi ve Çıktısı:
Bu projede , Hava Kalitesini internet üzerinden bir web sunucusu üzerinden izleyeceğimiz ve hava kalitesi belirli bir seviyenin üzerine çıktığında, yani yeterli miktar olduğunda alarm tetikleyeceğimiz IoT Tabanlı Hava Kirliliği İzleme Sistemi yapacağız. Havada CO2, duman, alkol, benzen ve NH3 gibi zararlı gazlar bulunur. Hava kalitesini PPM olarak LCD'de ve web sayfasında gösterecek, böylece çok kolay bir şekilde izleyeceğiz.
Daha önce LPG dedektörünü MQ6 sensörü ve Duman dedektörü kullanarak MQ2 sensörünü kullanarak inşa etmiştik, ancak bu sefer en zararlı gazları algılayabildiği ve miktarını ölçebildiği için Hava Kalitesini izlemek için en iyi seçim olan hava kalitesi sensörü olarak MQ135 sensörünü kullandık. doğru. Bu IoT projesinde, bilgisayarınızı veya cep telefonunuzu kullanarak herhangi bir yerden kirlilik seviyesini izleyebilirsiniz. Bu sistemi herhangi bir yere kurabiliriz ve ayrıca egzoz fanını çalıştırabiliriz veya kullanıcıya uyarı SMS / postası gönderebiliriz gibi kirlilik bir seviyenin ötesine geçtiğinde bazı cihazları tetikleyebiliriz.
Gerekli Bileşenler:
- MQ135 Gaz sensörü
- Arduino Uno
- Wi-Fi modülü ESP8266
- 16X2 LCD
- Breadboard
- 10K potansiyometre
- 1K ohm dirençler
- 220 ohm direnç
- Buzzer
Yukarıdaki tüm bileşenleri buradan satın alabilirsiniz.
Devre Şeması ve Açıklaması:
Öncelikle ESP8266'yı Arduino ile bağlayacağız. ESP8266 3,3V ile çalışır ve eğer Arduino'dan 5V verirseniz o zaman düzgün çalışmaz ve zarar görebilir. VCC ve CH_PD'yi Arduino'nun 3.3V pinine bağlayın. ESP8266'nın RX pini 3.3V üzerinde çalışır ve doğrudan Arduino'ya bağladığımızda Arduino ile iletişim kurmayacaktır. Bu nedenle, 5V'u 3.3V'a dönüştürecek bir voltaj bölücü yapmamız gerekecek. Bu, devrede yaptığımız gibi üç direnci seri olarak bağlayarak yapılabilir. ESP8266'nın TX pinini Arduino'nun 10 numaralı pinine ve esp8266'nın RX pinini dirençler aracılığıyla Arduino'nun 9 numaralı pinine bağlayın.
ESP8266 Wi-Fi modülü, projelerinize Wi-Fi veya internete erişim sağlar. Çok ucuz bir cihazdır ve projelerinizi çok güçlü kılar. Herhangi bir mikrodenetleyici ile iletişim kurabilir ve IOT platformundaki en önde gelen cihazdır. ESP8266'yı Arduino ile kullanma hakkında buradan daha fazla bilgi edinin.
Ardından MQ135 sensörünü Arduino ile bağlayacağız. VCC'yi ve sensörün toprak pinini 5V'a ve Arduino'nun toprağına ve sensörün Analog pinini Arduino'nun A0'ına bağlayın.
Arduino'nun 8 numaralı pimine, durum gerçekleştiğinde bip sesi çıkarmaya başlayacak olan bir zil bağlayın.
Son olarak, LCD'yi Arduino ile bağlayacağız. LCD'nin bağlantıları aşağıdaki gibidir
- Pin 1'i (VEE) toprağa bağlayın.
- Pin 2'yi (VDD veya VCC) 5V'ye bağlayın.
- Pin 3'ü (V0) 10K potansiyometrenin orta pinine bağlayın ve potansiyometrenin diğer iki ucunu VCC ve GND'ye bağlayın. Potansiyometre, LCD'nin ekran kontrastını kontrol etmek için kullanılır. 10K dışındaki değerlerin potansiyometresi de çalışacaktır.
- 4. pini (RS) Arduino'nun 12. pimine bağlayın.
- Pin 5'i (Okuma / Yazma) Arduino'nun topraklamasına bağlayın. Bu pim sık kullanılmadığından onu toprağa bağlayacağız.
- Pin 6 (E) 'yi Arduino'nun 11 numaralı pinine bağlayın. RS ve E pini, veri ve karakter göndermek için kullanılan kontrol pimleridir.
- Aşağıdaki dört pin, Arduino ile iletişim kurmak için kullanılan veri pinleridir.
11. pini (D4) Arduino'nun 5. pimine bağlayın.
Pin 12'yi (D5) Arduino'nun 4. pinine bağlayın.
Pin 13'ü (D6) Arduino'nun 3. pinine bağlayın.
Pin 14'ü (D7) Arduino'nun 2. pinine bağlayın.
- Pin 15'i 220 ohm direnç üzerinden VCC'ye bağlayın. Direnç, arka ışık parlaklığını ayarlamak için kullanılacaktır. Daha büyük değerler arka ışığı çok daha koyu hale getirecektir.
- 16 numaralı pimi Toprağa bağlayın.
Çalışma Açıklaması:
MQ135 sensörü NH3, NOx, alkol, Benzen, duman, CO2 ve diğer bazı gazları algılayabilir, bu nedenle Hava Kalitesi İzleme Projemiz için mükemmel bir gaz sensörüdür. Arduino'ya bağladığımızda gazları algılayacak ve Kirlilik seviyesini PPM (milyonda parça) olarak alacağız. MQ135 gaz sensörü, çıkışı voltaj seviyeleri şeklinde verir ve bunu PPM'ye dönüştürmemiz gerekir. Bu yüzden çıktıyı PPM'ye dönüştürmek için burada MQ135 sensörü için bir kitaplık kullandık, aşağıdaki “Kod Açıklaması” bölümünde ayrıntılı olarak açıklanmıştır.
Sensör, yakınında gaz yokken bize 90 değerini veriyordu ve güvenli hava kalitesi seviyesi 350 PPM ve 1000 PPM'yi geçmemesi gerekiyordu. 1000 PPM sınırını aştığında, Baş ağrısı, uykululuk ve durgunluk, bayat, havasızlık ve 2000 PPM'yi aşarsa, kalp atış hızının artmasına ve diğer birçok hastalığa neden olabilir.
Değer 1000 PPM'den az olduğunda, LCD ve web sayfası “Temiz Hava” gösterecektir. Değer 1000 PPM arttığında, sesli uyarı bip sesi çıkarmaya başlayacak ve LCD ve web sayfası "Kötü Hava, Açık Pencereler" gösterecektir. 2000 artarsa, sesli uyarı biplemeye devam edecek ve LCD ve web sayfasında “Tehlike! Temiz Havaya Geçin ”.
Kod Açıklaması:
Bu proje için kodlamaya başlamadan önce, önce MQ135 Gaz sensörünü kalibre etmemiz gerekiyor. Sensör çıkışının PPM değerine dönüştürülmesiyle ilgili birçok hesaplama vardır, bu hesaplamayı daha önce önceki Duman Dedektörü projemizde yapmıştık. Ancak burada MQ135 için Kitaplığı kullanıyoruz, bu MQ135 kitaplığını buradan indirebilir ve yükleyebilirsiniz:
Bu kitaplığı kullanarak, yalnızca aşağıdaki iki satırı kullanarak doğrudan PPM değerlerini alabilirsiniz:
MQ135 gasSensor = MQ135 (A0); float air_quality = gasSensor.getPPM ();
Ancak bundan önce, sensörü kalibre etmek için MQ135 sensörünü kalibre etmemiz gerekiyor, aşağıda verilen kodu yükleyin ve 12 ila 24 saat çalışmasına izin verin ve ardından RZERO değerini alın.
#include "MQ135.h" void setup () {Serial.begin (9600); } boşluk döngüsü () {MQ135 gasSensor = MQ135 (A0); // Sensörü A0 float pinine takın rzero = gasSensor.getRZero (); Serial.println (rzero); gecikme (1000); }
RZERO değerini aldıktan sonra. RZERO değerini "MQ135.h" indirdiğiniz kitaplık dosyasına koyun: #define RZERO 494.63
Şimdi Hava kalitesi izleme projemiz için gerçek kodu başlatabiliriz.
Kodda, öncelikle Gaz sensörü ve LCD için kitaplıkları ve değişkenleri tanımladık. Yazılım Seri Kitaplığı'nı kullanarak herhangi bir dijital pin'i TX ve RX pin olarak yapabiliriz. Bu kodda ESP8266 için RX pin olarak Pin 9 ve TX pin olarak pin 10 yaptık. Daha sonra LCD için kütüphaneyi ekledik ve bunun için pinleri tanımladık. Ayrıca iki değişken daha tanımladık: biri sensör analog pini için ve diğeri hava kalitesi değerini depolamak için.
#Dahil etmek
Ardından buzzer'ı bağladığımız çıkış pini olarak pin 8'i ilan edeceğiz. l cd.begin (16,2) komutu veriyi almak için LCD'yi başlatacak ve ardından imleci ilk satıra ayarlayıp 'devrenin çalışmasını' yazdıracağız . Daha sonra imleci ikinci satıra getirip 'Sensör Isıtması' yazdıracağız.
pinMode (8, ÇIKIŞ); lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("circuitdigest"); lcd.setCursor (0,1); lcd.print ("Sensör Isıtması"); gecikme (1000);
Ardından seri iletişim için baud hızını ayarlayacağız. Farklı ESP'lerin farklı baud hızları vardır, bu nedenle ESP'nizin baud hızına göre yazın. Daha sonra ESP'yi Arduino ile iletişim kuracak ve IP adresini seri monitörde gösterecek şekilde ayarlamak için komutlar göndereceğiz.
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 ();
Web sayfasındaki çıktıyı web tarayıcısında yazdırmak için HTML programlama kullanmamız gerekecek. Böylece, web sayfası adında bir dize oluşturduk ve çıktıyı içinde sakladık. Read () işlevi ASCII ondalık değerini döndürdüğü ve 0 olan ilk ondalık sayı 48'den başlayacağı için çıktıdan 48'i çıkarıyoruz.
eğer (esp8266.available ()) {if (esp8266.find ("+ IPD,")) {delay (1000); int connectionId = esp8266.read () - 48; Dize web sayfası = "
IOT Hava Kirliliği İzleme Sistemi
"; web sayfası + =""; web sayfası + =" Hava Kalitesi "; web sayfası + = hava_kalitesi; web sayfası + =" PPM "; web sayfası + ="
";
Aşağıdaki kod sendData adlı bir işlevi çağıracak ve verileri ve mesaj dizelerini gösterilmesi için web sayfasına gönderecektir.
sendData (cipSend, 1000, DEBUG); sendData (web sayfası, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = webpage.length (); cipSend + = "\ r \ n";
Aşağıdaki kod, veriyi LCD'ye yazdıracaktır. Hava kalitesini kontrol etmek için çeşitli koşullar uyguladık ve LCD, mesajları koşullara göre yazdıracak ve kirlilik 1000 PPM'yi aşarsa sesli uyarı da bipleyecektir.
lcd.setCursor (0, 0); lcd.print ("Hava Kalitesi"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (air_quality <= 1000) {lcd.print ("Temiz Hava"); digitalWrite (8, DÜŞÜK);
Son olarak, aşağıdaki işlev web sayfasındaki verileri gönderecek ve gösterecektir. 'Web sayfası' adlı dizede sakladığımız veriler, 'command' adlı dizede kaydedilecektir. Daha sonra ESP, 'komuttan' karakteri tek tek okuyacak ve web sayfasında yazdıracaktır.
String sendData (String komutu, const int zaman aşımı, mantıksal hata ayıklama) {String response = ""; esp8266.print (komut); // okunan karakteri esp8266'ya gönderin long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// esp veriye sahiptir, bu yüzden çıkışını seri pencereye göster char c = esp8266.read (); // sonraki karakteri oku. yanıt + = c; }} if (hata ayıklama) {Seri.print (yanıt); } dönüş yanıtı; }
Projenin Test Edilmesi ve Çıktısı:
Kodu yüklemeden önce, ESP8266 cihazınızın Wi-Fi ağına bağlı olduğunuzdan emin olun. Yükledikten sonra, seri monitörü açın ve aşağıda gösterildiği gibi IP adresini gösterecektir.
Bu IP adresini tarayıcınıza yazın, çıktıyı aşağıda gösterildiği gibi gösterecektir. Mevcut Hava Kalitesi Değerini PPM'de görmek istiyorsanız sayfayı tekrar yenilemeniz gerekecektir.
Çalıştığını göstermek için yerel bir sunucu kurduk, aşağıdaki Videoyu kontrol edebilirsiniz. Ancak dünyanın herhangi bir yerinden hava kalitesini izlemek için, 80 numaralı bağlantı noktasını (HTTP veya internet için kullanılır) cihazınızın yerel veya özel IP adresinize (192.168 *) iletmeniz gerekir. Port yönlendirmeden sonra gelen tüm bağlantılar bu yerel adrese iletilecektir ve yukarıda gösterilen web sayfasını herhangi bir yerden internetinizin genel IP adresini girerek açabilirsiniz. Yönlendiricinizde (192.168.1.1) oturum açarak bağlantı noktasını iletebilir ve bağlantı noktası yönlendirmeyi ayarlama seçeneğini bulabilirsiniz.