- Wymagane składniki
- Czujnik Nova PM SDS011 do pomiaru PM2,5 i PM10
- Podstawy modułu wyświetlacza OLED 0,96 '
- Przygotowanie czujnika MQ-7 do pomiaru tlenku węgla (CO)
- Obliczanie wskaźnika jakości powietrza
- Schemat obwodu
- Budowa obwodu systemu monitorowania jakości powietrza na płycie Perf
- Konfiguracja IO Adafruit
- Objaśnienie kodu dla
- Obudowa z nadrukiem 3D do systemu monitorowania AQI
- Testowanie systemu monitorowania AQI
Gdy nadchodzi zima, powietrze nad nami gęstnieje od dymu i emisji gazów z płonących pól, fabryk przemysłowych i ruchu samochodowego, blokując słońce i utrudniając oddychanie. Eksperci twierdzą, że wysoki poziom zanieczyszczenia powietrza i pandemia COVID-19 mogą być niebezpieczną mieszanką, która może mieć poważne konsekwencje. Konieczność monitorowania jakości powietrza w czasie rzeczywistym jest bardzo rażąca.
W ramach tego projektu zamierzamy zbudować system monitorowania jakości powietrza ESP32 z wykorzystaniem czujnika Nova PM SDS011, czujnika MQ-7 i czujnika DHT11. Będziemy również używać modułu wyświetlacza OLED do wyświetlania wartości jakości powietrza. Indeks Jakości powietrza (AQI) w Indiach jest oparty na ośmiu zanieczyszczeń, PM10, PM2.5, SO2 i NO2, CO, ozon, NH3 i Pb. Jednak nie jest konieczne mierzenie wszystkich zanieczyszczeń. Więc zamierzamy zmierzyć stężenie PM2,5, PM10 i tlenku węgla, aby obliczyć wskaźnik jakości powietrza. Wartości AQI zostaną opublikowane w Adafruit IO, abyśmy mogli je monitorować z dowolnego miejsca. Wcześniej mierzyliśmy również stężenie LPG, dymu i amoniaku za pomocą Arduino.
Wymagane składniki
- ESP32
- Czujnik Nova PM SDS011
- 0,96 'moduł wyświetlacza SPI OLED
- Czujnik DHT11
- Czujnik MQ-7
- Przewody połączeniowe
Czujnik Nova PM SDS011 do pomiaru PM2,5 i PM10
Czujnik SDS011 to najnowszy czujnik jakości powietrza opracowany przez firmę Nova Fitness. Działa na zasadzie rozpraszania laserowego i może osiągnąć stężenie cząstek w powietrzu od 0,3 do 10 μm. Ten czujnik składa się z małego wentylatora, zaworu wlotu powietrza, diody laserowej i fotodiody. Powietrze wchodzi przez wlot powietrza, gdzie źródło światła (laser) oświetla cząstki, a rozproszone światło jest przekształcane w sygnał przez fotodetektor. Sygnały te są następnie wzmacniane i przetwarzane w celu uzyskania stężenia cząstek PM2,5 i PM10. Wcześniej korzystaliśmy z czujnika Nova PM Sensor z Arduino do obliczenia stężenia PM10 i PM2,5.
Dane techniczne czujnika SDS011:
- Wyjście: PM2,5, PM10
- Zakres pomiarowy: 0,0-999,9 μg / m3
- Napięcie wejściowe: 4,7 V do 5,3 V.
- Maksymalny prąd: 100mA
- Prąd uśpienia: 2mA
- Czas reakcji: 1 sekunda
- Szeregowa częstotliwość wyjściowa danych: 1 raz / sekundę
- Rozdzielczość średnicy cząstek: ≤0,3 μm
- Względny błąd: 10%
- Zakres temperatur: -20 ~ 50 ° C
Podstawy modułu wyświetlacza OLED 0,96 '
OLED (Organic Light Emitting Diode) to rodzaj diody elektroluminescencyjnej, która jest wytwarzana przy użyciu związków organicznych, które wzbudzają się, gdy przepływa przez nie prąd elektryczny. Te związki organiczne mają własne światło, dlatego nie wymagają żadnych obwodów podświetlenia, takich jak zwykłe wyświetlacze LCD. Z tego powodu technologia wyświetlania OLED jest energooszczędna i szeroko stosowana w telewizorach i innych produktach wyświetlających.
Na rynku dostępne są różne typy diod OLED w zależności od koloru wyświetlacza, liczby pinów, rozmiaru i układu scalonego kontrolera. W tym samouczku użyjemy 7-pinowego modułu OLED Monochrome Blue SSD1306 0,96 cala o szerokości 128 pikseli i długości 64 pikseli. Ten 7-pinowy OLED obsługuje protokół SPI, a kontroler IC SSD1306 pomaga OLED wyświetlać odebrane znaki. Dowiedz się więcej o OLED i jego interfejsach z różnymi mikrokontrolerami, klikając łącze.
Przygotowanie czujnika MQ-7 do pomiaru tlenku węgla (CO)
Moduł czujnika gazu tlenku węgla MQ-7 CO wykrywa stężenie CO w powietrzu. Czujnik może mierzyć stężenia od 10 do 10 000 ppm. Czujnik MQ-7 można zakupić jako moduł lub sam czujnik. Wcześniej używaliśmy wielu różnych typów czujników gazu do wykrywania i pomiaru różnych gazów, możesz je również sprawdzić, jeśli jesteś zainteresowany. W tym projekcie używamy modułu czujnika MQ-7 do pomiaru stężenia tlenku węgla w PPM. Schemat obwodu płyty MQ-7 przedstawiono poniżej:
Rezystor obciążający RL odgrywa bardzo ważną rolę w działaniu czujnika. Ten rezystor zmienia swoją wartość rezystancji w zależności od stężenia gazu. Płytka czujnika MQ-7 ma rezystancję obciążenia 1 KΩ, która jest bezużyteczna i wpływa na odczyty czujnika. Aby więc zmierzyć odpowiednie wartości stężenia CO, należy wymienić rezystor 1KΩ na rezystor 10KΩ.
Obliczanie wskaźnika jakości powietrza
Wskaźnik AQI w Indiach jest obliczany na podstawie średniego stężenia określonego zanieczyszczenia mierzonego w standardowym przedziale czasu (24 godziny dla większości zanieczyszczeń, 8 godzin dla tlenku węgla i ozonu). Na przykład AQI dla PM2,5 i PM10 opiera się na średnim stężeniu z 24 godzin, a AQI dla tlenku węgla na podstawie średniego stężenia z 8 godzin). Obliczenia AQI obejmują osiem zanieczyszczeń, którymi są PM10, PM2,5, dwutlenek azotu (NO 2), dwutlenek siarki (SO 2), tlenek węgla (CO), ozon w warstwie przyziemnej (O 3), amoniak (NH 3), i ołów (Pb). Jednak nie wszystkie zanieczyszczenia są mierzone w każdym miejscu.
Na podstawie zmierzonych 24-godzinnych stężeń zanieczyszczeń w otoczeniu obliczany jest indeks cząstkowy, który jest liniową funkcją stężenia (np. Indeks cząstkowy PM2,5 wyniesie 51 przy stężeniu 31 µg / m3, 100 przy stężeniu 60 µg / m3 i 75 przy stężeniu 45 µg / m3). Najgorszy subindeks (lub maksimum ze wszystkich parametrów) określa ogólną AQI.
Schemat obwodu
Schemat obwodu dla systemu monitorowania jakości powietrza opartego na IoT jest bardzo prosty i podano poniżej:
Czujnik SDS011, czujnik DHT11 i czujnik MQ-7 są zasilane napięciem + 5 V, podczas gdy moduł wyświetlacza OLED jest zasilany napięciem 3,3 V. Piny nadajnika i odbiornika SDS011 są podłączone do GPIO16 i 17 ESP32. Pin wyjścia analogowego czujnika MQ-7 jest połączony z GPIO 25, a pin danych czujnika DHT11 jest połączony z czujnikiem GPIO27. Ponieważ moduł wyświetlacza OLED wykorzystuje komunikację SPI, ustanowiliśmy komunikację SPI między modułem OLED a ESP32. Połączenia przedstawiono w poniższej tabeli:
S.Nr |
Pin modułu OLED |
Pin ESP32 |
1 |
GND |
Ziemia |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
DC |
4 |
7 |
CS |
5 |
S.Nr |
SDS011 Pin |
Pin ESP32 |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
S.Nr |
Pin DHT |
Pin ESP32 |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Dane |
27 |
S.Nr |
Kołek MQ-7 |
Pin ESP32 |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Budowa obwodu systemu monitorowania jakości powietrza na płycie Perf
Jak widać na głównym zdjęciu, pomysł polegał na zastosowaniu tego obwodu wewnątrz obudowy z nadrukiem 3D. Tak więc cały pokazany powyżej obwód jest przylutowany do płytki perf. Upewnij się, że używasz przewodów, aby pozostawić wystarczającą odległość do zamontowania OLED i czujników. Moja płytka perf wlutowałem do OLED, a moduł czujnika pokazano poniżej.
Konfiguracja IO Adafruit
Adafruit IO to otwarta platforma danych, która umożliwia agregację, wizualizację i analizę danych na żywo w chmurze. Korzystając z Adafruit IO, możesz przesyłać, wyświetlać i monitorować swoje dane przez Internet oraz włączać IoT projektu. Możesz sterować silnikami, odczytywać dane z czujników i tworzyć fajne aplikacje IoT przez Internet za pomocą Adafruit IO.
Aby korzystać z Adafruit IO, najpierw utwórz konto na Adafruit IO. Aby to zrobić, przejdź do witryny Adafruit IO i kliknij „Rozpocznij za darmo” w prawym górnym rogu ekranu.
Po zakończeniu procesu tworzenia konta zaloguj się na konto i kliknij „Wyświetl klucz AIO” w prawym górnym rogu, aby uzyskać nazwę użytkownika konta i klucz AIO.
Po kliknięciu „AIO Key”, pojawi się okno z kluczem AIO IO Adafruit i nazwą użytkownika. Skopiuj ten klucz i nazwę użytkownika, zostaną one użyte w kodzie.
Teraz, po uzyskaniu kluczy AIO, utwórz kanał do przechowywania danych czujnika DHT. Aby utworzyć kanał, kliknij „Kanał”. Następnie kliknij „Działania”, a następnie wybierz „Utwórz nowy kanał” z dostępnych opcji.
Następnie otworzy się nowe okno, w którym należy wprowadzić nazwę i opis źródła. Pisanie opisu jest opcjonalne.
Następnie kliknij „Utwórz”; zostaniesz przekierowany do nowo utworzonego kanału.
Na potrzeby tego projektu stworzyliśmy w sumie sześć kanałów dla wartości PM10, PM2,5, CO, temperatury, wilgotności i AQI. Postępuj zgodnie z tą samą procedurą, co powyżej, aby utworzyć pozostałe kanały.
Po utworzeniu feedów, teraz stworzymy funkcję pulpitu Adafruit IO, aby wizualizować dane z czujnika na jednej stronie. W tym celu najpierw utwórz pulpit nawigacyjny, a następnie dodaj wszystkie te kanały do tego panelu.
Aby utworzyć pulpit nawigacyjny, kliknij opcję Pulpit nawigacyjny, a następnie kliknij „Akcja”, a następnie kliknij „Utwórz nowy pulpit”.
W następnym oknie wprowadź nazwę panelu i kliknij „Utwórz”.
W miarę tworzenia pulpitu nawigacyjnego będziemy teraz używać bloków IO Adafruit, takich jak Gauge i Slider, do wizualizacji danych. Aby dodać blok, kliknij „+” w prawym górnym rogu.
Następnie wybierz blok „Miernik”.
W następnym oknie wybierz dane źródła, które chcesz wizualizować.
Na koniec zmień ustawienia bloku, aby go dostosować.
Teraz wykonaj tę samą procedurę, co powyżej, aby dodać bloki wizualizacji dla pozostałych kanałów. Mój pulpit IO Adafruit wyglądał następująco:
Objaśnienie kodu dla
Pełny kod tego projektu znajduje się na końcu dokumentu. Tutaj wyjaśniamy kilka ważnych części kodu.
Kod wykorzystuje SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, a DHT.h bibliotek. Biblioteki SDS011, Adafruit_GFX i Adafruit_SSD1306 można pobrać z Menedżera bibliotek w Arduino IDE i stamtąd zainstalować. W tym celu otwórz Arduino IDE i przejdź do Sketch <Include Library <Manage Libraries . Teraz wyszukaj SDS011 i zainstaluj bibliotekę SDS Sensor autorstwa R. Zschiegnera.
Podobnie zainstaluj biblioteki Adafruit GFX i Adafruit SSD1306 firmy Adafruit. Adafruit_MQTT.h i DHT11.h można pobrać z podanych linków.
Po zainstalowaniu bibliotek do Arduino IDE, uruchom kod, dołączając potrzebne pliki bibliotek.
#zawierać
W kolejnych wierszach określ szerokość i wysokość wyświetlacza OLED. W tym projekcie wykorzystałem wyświetlacz SPI OLED 128 × 64. Można zmienić SCREEN_WIDTH i SCREEN_HEIGHT zmienne w zależności od wyświetlacza.
# zdefiniować SCREEN_WIDTH 128 # zdefiniować SCREEN_HEIGHT 64
Następnie zdefiniuj piny komunikacyjne SPI, do których podłączony jest wyświetlacz OLED.
# zdefiniować OLED_MOSI 23 # zdefiniować OLED_CLK 18 # zdefiniować OLED_DC 4 # zdefiniować OLED_CS 5 # zdefiniować OLED_RESET 2
Następnie utwórz instancję dla wyświetlacza Adafruit z szerokością i wysokością oraz protokołem komunikacyjnym SPI zdefiniowanym wcześniej.
Wyświetlacz Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Następnie dołącz dane uwierzytelniające Wi-Fi i Adafruit IO skopiowane z serwera Adafruit IO. Obejmują one serwer MQTT, numer portu, nazwę użytkownika i klucz AIO.
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"
Następnie skonfiguruj kanały IO Adafruit do przechowywania danych z czujników. W moim przypadku zdefiniowałem sześć kanałów do przechowywania różnych danych z czujników, a mianowicie: jakość powietrza, temperatura, wilgotność, PM10, PM25 i CO.
Adafruit_MQTT_Client mqtt (& klient, 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 / Temperatura"); Adafruit_MQTT_Publish Humidity = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Humidity"); 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");
Teraz w funkcji setup () , zainicjuj monitor szeregowy z szybkością transmisji 9600 w celu debugowania. Zainicjuj również wyświetlacz OLED, czujnik DHT i czujnik SDS011 za pomocą funkcji begin () .
void setup () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
Pętli wewnątrz instalacji funkcja służy do gromadzenia wartości aż do określonej liczby, a następnie ustawienie licznika do zera.
for (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }
Odczytywanie wartości czujnika:
Teraz w funkcji pętli użyj metody millis () , aby odczytać wartości z czujnika co godzinę. Każdy z czujników gazu wyprowadza wartość analogową od 0 do 4095. Aby zamienić tę wartość na napięcie, należy użyć następującego równania: RvRo = MQ7Raw * (3,3 / 4095); gdzie MQ7Raw jest wartością analogową z analogowego pinu czujnika. Odczytaj również odczyty PM2,5 i PM10 z czujnika SDS011.
if ((unsigned long) (currentMillis - previousMillis)> = interwał) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3,3 / 4095); MQ7ppm = 3,027 * exp (1,0698 * (RvRo)); Serial.println (MQ7ppm); błąd = my_sds.read (& p25, & p10); if (! błąd) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + String (p10)); }}
Konwersja wartości:
Wartości PM2,5 i PM10 są już w µg / m 3, ale musimy przeliczyć wartości tlenku węgla z PPM na mg / m 3. Wzór konwersji jest podany poniżej:
Stężenie (mg / m 3) = Stężenie (PPM) × (Masa cząsteczkowa (g / mol) / Objętość molowa (L))
Gdzie: Masa cząsteczkowa CO wynosi 28,06 g / mol, a objętość molowa wynosi 24,45 l w temperaturze 25 0 C.
Stężenie INmgm3 = MQ7ppm * (28,06 / 24,45); Serial.println (ConcentrationINmgm3);
Obliczanie średniej 24-godzinnej:
Następnie w następnych wierszach oblicz średnią z 24 godzin dla odczytów PM10, PM2,5 i średnią z 8 godzin dla odczytów tlenku węgla. W pierwszym wierszu kodu weź bieżącą sumę i odejmij pierwszy element tablicy, a teraz zapisz to jako nową sumę. Początkowo będzie to Zero. Następnie uzyskaj wartości czujnika i dodaj bieżący odczyt do sumy i zwiększ indeks liczbowy. Jeśli wartość indeksu jest równa lub większa niż numReadings, ustaw indeks z powrotem na zero.
totalPM10 = totalPM10 - odczyty PM10; odczyty PM10 = p10; totalPM10 = totalPM10 + odczyty PM10; readIndexPM10 = readIndexPM10 + 1; if (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
W końcu opublikuj te wartości na Adafruit IO.
if (! Temperature.publish (temperature)) {delay (30000); } if (! Wilgotność.publish (wilgotność)) {opóźnienie (30000); ………………………………………………………. ……………………………………………………….
Obudowa z nadrukiem 3D do systemu monitorowania AQI
Następnie zmierzyłem wymiary zestawu za pomocą mojego noniusza, a także wymiary czujników i OLED, aby zaprojektować obudowę. Mój projekt wyglądał mniej więcej tak poniżej, gdy był gotowy.
Gdy byłem zadowolony z projektu, wyeksportowałem go jako plik STL, pokroiłem na plasterki na podstawie ustawień drukarki i ostatecznie wydrukowałem. Ponownie plik STL jest również dostępny do pobrania z Thingiverse i możesz za jego pomocą wydrukować swoją obudowę.
Po wykonaniu wydruku przystąpiłem do montażu projektu ustawionego w stałej obudowie do instalacji w obiekcie. Po wykonaniu kompletnego połączenia zmontowałem układ w mojej obudowie i wszystko było dobrze dopasowane, jak widać tutaj.
Testowanie systemu monitorowania AQI
Gdy sprzęt i kod są gotowe, czas przetestować urządzenie. Do zasilania urządzenia użyliśmy zewnętrznego zasilacza 12V 1A. Jak widać, urządzenie wyświetli stężenie PM10, PM2,5 i tlenku węgla na wyświetlaczu OLED. Stężenie PM2,5 i PM10 jest podane w µg / m 3, a stężenie tlenku węgla w mg / m 3.
Te odczyty zostaną również opublikowane w Adafruit IO Dashboard. Maksymalnym ze wszystkich parametrów (PM10, PM2,5 i CO) będzie AQI.
Wartości AQI z ostatnich 30 dni zostaną pokazane w postaci wykresu.
W ten sposób można wykorzystać czujniki SDS011 i MQ-7 do obliczenia wskaźnika jakości powietrza. Pełne działanie projektu można również znaleźć w filmie, do którego link znajduje się poniżej. Mam nadzieję, że projekt spodobał Ci się i zbudowanie własnego okazało się interesujące. Jeśli masz jakieś pytania, zostaw je w sekcji komentarzy poniżej.