- Gerekli Bileşenler
- Nova PM Sensor SDS011, PM2.5 ve PM10'u Ölçmek için
- 0.96 'OLED Ekran Modülünün Temelleri
- MQ-7 Sensörünü Karbon Monoksit (CO) Ölçmek için Hazırlama
- Hava Kalitesi İndeksi Hesaplaması
- Devre şeması
- Perf Board üzerinde Hava Kalitesi İzleme Sistemi Devresinin Kurulması
- Adafruit IO Kurulumu
- İçin Kod Açıklaması
- AQI İzleme Sistemi için 3D Baskılı Kasa
- AQI İzleme Sisteminin Test Edilmesi
Kış geldikçe üzerimizde asılı olan hava, yanan tarlalardan, endüstriyel fabrikalardan ve araç trafiğinden kaynaklanan duman ve gaz emisyonlarıyla yoğunlaşarak güneşi engelliyor ve nefes almayı zorlaştırıyor. Uzmanlar, yüksek seviyelerde hava kirliliği ve COVID-19 pandemisinin ciddi sonuçları olabilecek tehlikeli bir karışım olabileceğini söylüyor. Hava Kalitesinin gerçek zamanlı izlenmesinin gerekliliği çok dikkat çekicidir.
Dolayısıyla bu projede Nova PM SDS011 sensörü, MQ-7 sensörü ve DHT11 sensörünü kullanarak bir ESP32 Hava Kalitesi İzleme Sistemi inşa edeceğiz. Hava Kalitesi Değerlerini görüntülemek için bir OLED Ekran modülü de kullanacağız. Hava Kalitesi Endeksi Hindistan'da (AQI) sekiz kirletici, PM10, PM2.5, SO2 ve NO2, CO, Ozon, NH3 ve Pb dayanmaktadır. Ancak tüm kirleticileri ölçmek gerekli değildir. Hava Kalitesi İndeksini hesaplamak için PM2.5, PM10 ve Karbon Monoksit konsantrasyonunu ölçeceğiz. AQI değerleri, her yerden izleyebilmemiz için Adafruit IO'da yayınlanacak. Daha önce, Arduino kullanarak LPG, Duman ve Amonyak gazının konsantrasyonunu da ölçtük.
Gerekli Bileşenler
- ESP32
- Nova PM Sensör SDS011
- 0.96 'SPI OLED Ekran Modülü
- DHT11 Sensörü
- MQ-7 Sensör
- Atlama Telleri
Nova PM Sensor SDS011, PM2.5 ve PM10'u Ölçmek için
SDS011 Sensörü, Nova Fitness tarafından geliştirilmiş çok yeni bir Hava Kalitesi Sensörüdür. Lazer saçılması prensibine göre çalışır ve partikül konsantrasyonunu havada 0.3 ila 10μm arasında alabilir. Bu sensör küçük bir fan, hava giriş valfi, Lazer diyot ve fotodiyottan oluşur. Hava, bir ışık kaynağının (Lazer) parçacıkları aydınlattığı ve saçılan ışığın bir fotodetektör tarafından sinyale dönüştürüldüğü hava girişinden girer. Bu sinyaller daha sonra yükseltilir ve PM2.5 ve PM10 partikül konsantrasyonunu elde etmek için işlenir. PM10 ve PM2.5 konsantrasyonunu hesaplamak için daha önce Nova PM Sensörünü Arduino ile birlikte kullandık.
SDS011 Sensör Özellikleri:
- Çıkış: PM2.5, PM10
- Ölçüm Aralığı: 0.0-999.9μg / m3
- Giriş Voltajı: 4.7V - 5.3V
- Maksimum Akım: 100mA
- Uyku Akımı: 2mA
- Tepki Süresi: 1 saniye
- Seri Veri Çıkış Frekansı: 1 kez / saniye
- Parçacık Çapı Çözünürlüğü: ≤0.3μm
- Göreli Hata:% 10
- Sıcaklık Aralığı: -20 ~ 50 ° C
0.96 'OLED Ekran Modülünün Temelleri
OLED (Organik Işık Yayan Diyot), elektrik akımının içlerinden geçmesine izin verildiğinde uyaran organik bileşikler kullanılarak yapılan bir tür Işık Yayan Diyottur. Bu organik bileşiklerin kendi ışığı vardır, bu nedenle normal LCD'ler gibi herhangi bir arka ışık devresi gerektirmezler. Bu nedenle, OLED ekran teknolojisi güç verimlidir ve Televizyonlarda ve diğer ekran ürünlerinde yaygın olarak kullanılmaktadır.
Piyasada ekranın rengine, pim sayısına, boyutuna ve denetleyici IC'sine bağlı olarak çeşitli OLED türleri mevcuttur. Bu eğitimde, 128 piksel genişliğinde ve 64 piksel uzunluğunda olan Monochrome Blue 7-pin SSD1306 0.96 ”OLED modülünü kullanacağız. Bu 7 pinli OLED, SPI protokolünü destekler ve denetleyici IC SSD1306, OLED'in alınan karakterleri görüntülemesine yardımcı olur. Bağlantıyı takip ederek OLED ve farklı mikro denetleyicilerle arabirimi hakkında daha fazla bilgi edinin.
MQ-7 Sensörünü Karbon Monoksit (CO) Ölçmek için Hazırlama
MQ-7 CO Karbonmonoksit Gaz Sensör Modülü, havadaki CO konsantrasyonlarını algılar. Sensör, 10 ila 10.000 ppm konsantrasyonları ölçebilir. MQ-7 sensörü, bir modül olarak veya yalnızca bir sensör olarak satın alınabilir. Daha önce, çeşitli gazları algılamak ve ölçmek için birçok farklı türde Gaz sensörü kullandık, ayrıca ilgileniyorsanız bunları da kontrol edebilirsiniz. Bu projede, PPM'deki Karbon Monoksit konsantrasyonunu ölçmek için MQ-7 sensör modülünü kullanıyoruz. MQ-7 kartı için devre şeması aşağıda verilmiştir:
Yük direnci RL, sensörün çalışmasında çok önemli bir rol oynar. Bu direnç, gaz konsantrasyonuna göre direnç değerini değiştirir. MQ-7 sensör kartı, işe yaramaz ve sensör okumalarını etkileyen 1KΩ'luk bir Yük direnci ile birlikte gelir. Bu nedenle uygun CO konsantrasyon değerlerini ölçmek için 1KΩ direncini 10KΩ dirençle değiştirmeniz gerekir.
Hava Kalitesi İndeksi Hesaplaması
Hindistan'daki AQI, standart bir zaman aralığında ölçülen belirli bir kirleticinin ortalama konsantrasyonuna göre hesaplanır (çoğu kirletici için 24 saat, karbon monoksit ve ozon için 8 saat). Örneğin, PM2.5 ve PM10 için AQI 24 saatlik ortalama konsantrasyona dayanır ve Karbon Monoksit için AQI 8 saatlik ortalama konsantrasyona dayanır). AQI hesaplamaları, PM10, PM2.5, Nitrojen Dioksit (NO 2), Sülfür Dioksit (SO 2), Karbon Monoksit (CO), yer seviyesi ozon (O 3), Amonyak (NH 3) olan sekiz kirletici maddeyi içerir. ve Kurşun (Pb). Ancak tüm kirleticiler her yerde ölçülmez.
Bir kirleticinin ölçülen 24 saatlik ortam konsantrasyonlarına dayalı olarak, konsantrasyonun doğrusal bir fonksiyonu olan bir alt indeks hesaplanır (örneğin, PM2.5 için alt indeks 31 µg / m3 konsantrasyonda 51 olacaktır, konsantrasyonda 100 60 µg / m3 ve 45 µg / m3 konsantrasyonda 75). En kötü alt dizin (veya tüm parametrelerin en büyüğü) genel AQI'yi belirler.
Devre şeması
IoT Tabanlı Hava Kalitesi İzleme Sisteminin devre şeması çok basittir ve aşağıda verilmiştir:
SDS011 Sensör, DHT11 ve MQ-7 sensörü + 5V ile çalıştırılırken, OLED Ekran modülü 3.3V ile çalışır. SDS011'in verici ve Alıcı pinleri ESP32'nin GPIO16 & 17'sine bağlanır. MQ-7 sensörünün Analog Çıkış pini GPIO 25'e bağlanır ve DHT11 sensörünün veri pini GPIO27 sensörüne bağlanır. OLED Ekran modülü SPI iletişimini kullandığından, OLED modülü ile ESP32 arasında bir SPI iletişimi kurduk. Bağlantılar aşağıdaki tabloda gösterilmektedir:
S.No |
OLED Modül Pimi |
ESP32 Pimi |
1 |
GND |
Zemin |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
DC |
4 |
7 |
CS |
5 |
S.No |
SDS011 Pimi |
ESP32 Pimi |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
S.No |
DHT Pimi |
ESP32 Pimi |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Veri |
27 |
S.No |
MQ-7 Pimi |
ESP32 Pimi |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Perf Board üzerinde Hava Kalitesi İzleme Sistemi Devresinin Kurulması
Ana görüntüden de görebileceğiniz gibi, fikir bu devreyi 3B Baskılı Kasa içinde kullanmaktı. Bu nedenle, yukarıda gösterilen tüm devre bir performans kartına lehimlenmiştir. OLED ve Sensörleri monte etmek için yeterli mesafe bırakacak şekilde kablo kullandığınızdan emin olun. Performans kartım OLED'e lehimlendi ve sensör modülü aşağıda gösterilmektedir.
Adafruit IO Kurulumu
Adafruit IO, buluttaki canlı verileri toplamanıza, görselleştirmenize ve analiz etmenize olanak tanıyan açık bir veri platformudur. Adafruit IO'yu kullanarak verilerinizi internet üzerinden yükleyebilir, görüntüleyebilir ve izleyebilir ve projenizi IoT'yi etkinleştirebilirsiniz. Adafruit IO'yu kullanarak motorları kontrol edebilir, sensör verilerini okuyabilir ve internet üzerinden harika IoT uygulamaları yapabilirsiniz.
Adafruit IO'yu kullanmak için önce Adafruit IO'da bir hesap oluşturun. Bunu yapmak için, Adafruit IO web sitesine gidin ve ekranın sağ üst köşesindeki 'Ücretsiz Başlayın' seçeneğine tıklayın.
Hesap oluşturma işlemini bitirdikten sonra, hesaba giriş yapın ve hesap kullanıcı adını ve AIO anahtarını almak için sağ üst köşedeki 'AIO Anahtarını Görüntüle'ye tıklayın.
'AIO Anahtarı'na tıkladığınızda, Adafruit IO AIO Anahtarı ve kullanıcı adının bulunduğu bir pencere açılır. Bu anahtarı ve kullanıcı adını kopyalayın, kodda kullanılacaktır.
Şimdi, AIO anahtarlarını aldıktan sonra, DHT sensör verilerini depolamak için bir besleme oluşturun. Bir besleme oluşturmak için 'Besleme'yi tıklayın. Ardından 'Eylemler'i tıklayın ve ardından mevcut seçeneklerden' Yeni Bir Besleme Oluştur'u seçin.
Bundan sonra, beslemenin Adını ve Açıklamasını girmeniz gereken yeni bir pencere açılacaktır. Bir açıklama yazmak isteğe bağlıdır.
Bundan sonra 'Oluştur'a tıklayın; yeni oluşturulan beslemeye yönlendirileceksiniz.
Bu proje için PM10, PM2.5, CO, Sıcaklık, Nem ve AQI değerleri için toplam altı besleme oluşturduk. Beslemelerin geri kalanını oluşturmak için yukarıdaki prosedürün aynısını izleyin.
Feed'ler oluşturduktan sonra, şimdi sensör verilerini tek bir sayfada görselleştirmek için bir Adafruit IO dashboard özelliği oluşturacağız. Bunun için önce bir gösterge tablosu oluşturun ve ardından tüm bu beslemeleri bu gösterge tablosuna ekleyin.
Bir gösterge tablosu oluşturmak için Gösterge Tablosu seçeneğini tıklayın ve ardından 'Eylem'i tıklayın ve bundan sonra' Yeni Gösterge Tablosu Oluştur'u tıklayın.
Sonraki pencerede, kontrol panelinin adını girin ve 'Oluştur'u tıklayın.
Kontrol paneli oluşturulurken, verileri görselleştirmek için artık Gauge ve Slider gibi Adafruit IO bloklarını kullanacağız. Blok eklemek için sağ üst köşedeki '+' işaretine tıklayın.
Ardından 'Gösterge' bloğunu seçin.
Sonraki pencerede görselleştirmek istediğiniz yayın verilerini seçin.
Son adımda, özelleştirmek için blok ayarlarını değiştirin.
Şimdi, beslemelerin geri kalanı için görselleştirme blokları eklemek için yukarıdaki prosedürün aynısını izleyin. Adafruit IO Dashboard'um şuna benziyordu:
İçin Kod Açıklaması
Bu projenin tam kodu belgenin sonunda verilmiştir. Burada kodun bazı önemli kısımlarını açıklıyoruz.
Kod; SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT ve DHT.h kitaplıklarını kullanır. SDS011, Adafruit_GFX ve Adafruit_SSD1306 kitaplıkları, Arduino IDE'deki Kitaplık Yöneticisi'nden indirilebilir ve oradan yüklenebilir. Bunun için Arduino IDE'yi açın ve Sketch <Include Library <Manage Libraries'e gidin . Şimdi SDS011'i arayın ve R. Zschiegner tarafından hazırlanan SDS Sensör kitaplığını kurun.
Benzer şekilde, Adafruit tarafından Adafruit GFX ve Adafruit SSD1306 kitaplıklarını yükleyin. Adafruit_MQTT.h ve DHT11.h verilen bağlantılardan indirilebilir.
Kitaplıkları Arduino IDE'ye yükledikten sonra, gerekli kitaplık dosyalarını ekleyerek kodu başlatın.
#Dahil etmek
Sonraki satırlarda OLED ekran genişliğini ve yüksekliğini tanımlayın. Bu projede 128 × 64 SPI OLED ekran kullandım. Değişebilirsin SCREEN_WIDTH ve SCREEN_HEIGHT ekranınıza göre değişkenler.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Ardından OLED Ekranın bağlandığı SPI iletişim pinlerini tanımlayın.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Ardından, daha önce tanımlanan genişlik ve yükseklik ve SPI iletişim protokolüyle Adafruit ekranı için bir örnek oluşturun.
Adafruit_SSD1306 ekranı (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Ardından, Adafruit IO sunucusundan kopyaladığınız WiFi ve Adafruit IO kimlik bilgilerini ekleyin. Bunlar, MQTT sunucusu, Bağlantı Noktası No, Kullanıcı Adı ve AIO Anahtarını içerecektir.
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"
Ardından, sensör verilerini depolamak için Adafruit IO beslemelerini ayarlayın. Benim durumumda, farklı sensör verilerini depolamak için altı besleme tanımladım: Hava Kalitesi, Sıcaklık, Nem, PM10, PM25 ve CO.
Adafruit_MQTT_Client mqtt (& müşteri, 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 / Sıcaklık"); Adafruit_MQTT_Publish Nem = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Nem"); 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");
Şimdi setup () işlevinin içinde, hata ayıklama amacıyla Seri Monitörü 9600 baud hızında başlatın. Ayrıca, start () işlevi ile OLED ekranını, DHT sensörünü ve SDS011 sensörünü başlatın.
geçersiz kurulum () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
Döngüsü içinde ayar işlevi tanımlanmış sayıda değerlerini toplamak ve daha sonra sıfıra sayacı ayarlamak için kullanılır.
for (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }
Sensör Değerlerinin Okunması:
Şimdi döngü işlevinin içinde, sensör değerlerini her bir saatte bir okumak için millis () yöntemini kullanın. Gaz sensörlerinin her biri, 0 ila 4095 arasında bir analog değer çıkarır. Bu değeri voltaja dönüştürmek için aşağıdaki denklemi kullanın: RvRo = MQ7Raw * (3.3 / 4095); burada MQ7Raw , sensörün analog pininden alınan analog değerdir. Ayrıca, SDS011 sensöründen gelen PM2.5 ve PM10 okumalarını okuyun.
eğer ((unsigned long) (currentMillis - previousMillis)> = interval) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3.3 / 4095); MQ7ppm = 3.027 * exp (1.0698 * (RvRo)); Serial.println (MQ7ppm); error = my_sds.read (& p25, & p10); eğer (! error) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + Dize (p10)); }}
Değerleri Dönüştürmek:
PM 2.5 ve PM 10 değerleri önceden ug / m olan 3 ancak mg / m PPM Karbon Monoksit değerleri dönüştürmek gerekir 3. Dönüşüm formülü aşağıda verilmiştir:
Konsantrasyon (mg / m 3) = konsantrasyon (ppm) x (Moleküler kütle (g / mol) / molar hacmi (L))
Burada: CO'nun Moleküler Kütlesi 28.06 g / mol ve Molar Hacim 25 0 C'de 24.45L'dir.
KonsantrasyonINmgm3 = MQ7ppm * (28.06 / 24.45); Serial.println (ConcentrationINmgm3);
24 Saatlik Ortalamanın Hesaplanması:
Ardından sonraki satırlarda PM10, PM2.5 okumaları için 24 saatlik ortalamayı ve Karbon Monoksit okumaları için 8 saatlik ortalamayı hesaplayın. İlk kod satırında, mevcut toplamı alın ve dizideki ilk öğeyi çıkarın, şimdi bunu yeni toplam olarak kaydedin. Başlangıçta Sıfır olacaktır. Ardından sensör değerlerini alın ve mevcut okumayı toplama ekleyin ve sayı endeksini artırın. Dizinin değeri numReadings'e eşitse veya ondan büyükse, dizini yeniden sıfıra ayarlayın.
totalPM10 = totalPM10 - okumalar PM10; okumalar PM10 = p10; totalPM10 = totalPM10 + okumalarPM10; readIndexPM10 = readIndexPM10 + 1; eğer (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Sonunda bu değerleri Adafruit IO'da yayınlayın.
eğer (! Sıcaklık. yayınla (sıcaklık)) {gecikme (30000); } if (! Nem. yayın (nem)) {gecikme (30000); ………………………………………………………. ……………………………………………………….
AQI İzleme Sistemi için 3D Baskılı Kasa
Daha sonra, verniyerimi kullanarak kurulumun boyutlarını ölçtüm ve ayrıca bir kasa tasarlamak için sensörlerin ve OLED'in boyutlarını ölçtüm. Tasarımım, yapıldıktan sonra aşağıdaki gibi görünüyordu.
Tasarımdan memnun kaldıktan sonra, bir STL dosyası olarak dışa aktardım, yazıcı ayarlarına göre dilimledim ve sonunda yazdırdım. Yine STL dosyası da Thingiverse'den indirilebilir ve kasanızı kullanarak yazdırabilirsiniz.
Baskı yapıldıktan sonra, bir tesise kurmak için kalıcı bir muhafaza içine kurulan projeyi bir araya getirmeye başladım. Tam bağlantı ile devreyi kasamın içine monte ettim ve burada gördüğünüz gibi her şey güzel bir uyum oldu.
AQI İzleme Sisteminin Test Edilmesi
Donanım ve kod hazır olduğunda, cihazı test etme zamanı gelmiştir. Cihazı çalıştırmak için harici bir 12V 1A adaptör kullandık. Gördüğünüz gibi, cihaz OLED Ekranda PM10, PM2.5 ve Karbon Monoksit Konsantrasyonunu gösterecektir. PM2.5 ve PM10 konsantrasyon ug / m olan 3 karbon monoksit konsantrasyonu mg / m ise 3.
Bu okumalar ayrıca Adafruit IO Dashboard'da da yayınlanacaktır. Tüm parametrelerin (PM10, PM2.5 ve CO) maksimumu AQI olacaktır.
Son 30 günün AQI değerleri bir grafik olarak gösterilecektir.
Hava Kalitesi İndeksini hesaplamak için SDS011 ve MQ-7 sensörlerini bu şekilde kullanabilirsiniz. Projenin tam çalışması, aşağıda bağlantısı verilen videoda da bulunabilir. Umarım projeyi beğenmişsinizdir ve kendi projenizi inşa etmeyi ilginç bulmuşsunuzdur. Herhangi bir sorunuz varsa, lütfen aşağıdaki yorum bölümüne bırakın.