- Szükséges alkatrészek
- Nova PM Sensor SDS011 PM2,5 és PM10 mérésére
- A 0,96 'OLED kijelző modul alapjai
- Az MQ-7 érzékelő előkészítése a szén-monoxid (CO) mérésére
- Levegőminőségi index kiszámítása
- Kördiagramm
- A levegőminőség-ellenőrző rendszer áramkörének kiépítése Perf Board-ra
- Adafruit IO beállítása
- Kód magyarázata
- 3D nyomtatott ház az AQI megfigyelő rendszerhez
- Az AQI Monitoring Rendszer tesztelése
A tél beköszöntével a felettünk lógó levegő az égő mezők, az ipari gyárak és a járműforgalom füstjétől és gázkibocsátásától sűrűsödik, elzárva a napot és megnehezítve a légzést. Szakértők szerint a magas légszennyezettség és a COVID-19 járvány veszélyes keverék lehet, amelynek súlyos következményei lehetnek. A levegőminőség valós idejű ellenőrzésének szükségessége nagyon kirívó.
Tehát ebben a projektben egy ESP32 levegőminőség-ellenőrző rendszert fogunk építeni Nova PM SDS011 érzékelő, MQ-7 érzékelő és DHT11 érzékelő felhasználásával. A levegőminőségi értékek megjelenítéséhez OLED kijelző modult is használunk. Az indiai levegőminőségi index (AQI) nyolc szennyező anyagon, a PM10, PM2,5, SO2 és NO2, CO, ózon, NH3 és Pb alapul. Nem szükséges azonban az összes szennyező anyagot megmérni. Tehát meg fogjuk mérni a PM2,5, a PM10 és a szén-monoxid koncentrációját a levegőminőségi index kiszámításához. Az AQI értékeket közzétesszük az Adafruit IO-n, hogy bárhonnan figyelemmel kísérhessük azokat. Korábban az Arduino segítségével mértük az LPG, a füst és az ammónia gáz koncentrációját is.
Szükséges alkatrészek
- ESP32
- Nova PM Sensor SDS011
- 0,96 'SPI OLED kijelző modul
- DHT11 érzékelő
- MQ-7 érzékelő
- Jumper huzalok
Nova PM Sensor SDS011 PM2,5 és PM10 mérésére
Az SDS011 érzékelő egy nagyon friss levegőminőségi érzékelő, amelyet a Nova Fitness fejlesztett ki. A lézerszórás elvén működik, és 0,3–10μm közötti részecskekoncentrációt képes elérni a levegőben. Ez az érzékelő egy kis ventilátorból, levegőbemenet szelepből, lézerdiódából és fotodiódából áll. A levegő a levegő beömlő nyílásán keresztül jut be, ahol egy fényforrás (lézer) megvilágítja a részecskéket, és a szétszórt fényt fotodetektor alakítja jellé. Ezeket a jeleket ezután felerősítik és feldolgozzák, hogy megkapják a PM2,5 és a PM10 részecskekoncentrációját. Korábban Nova PM Sensort használtunk Arduinóval a PM10 és PM2,5 koncentrációjának kiszámításához.
SDS011 érzékelő műszaki adatai:
- Kimenet: PM2,5, PM10
- Mérési tartomány: 0,0-999,9μg / m3
- Bemeneti feszültség: 4,7 V - 5,3 V
- Maximális áram: 100mA
- Alvási áram: 2mA
- Válaszidő: 1 másodperc
- Soros adat kimeneti frekvencia: 1 alkalom / másodperc
- Részecskeátmérő Felbontás: ≤0,3μm
- Relatív hiba: 10%
- Hőmérsékleti tartomány: -20 ~ 50 ° C
A 0,96 'OLED kijelző modul alapjai
Az OLED (Organic Light Emitting Diode) egyfajta fénykibocsátó dióda, amelyet olyan szerves vegyületek felhasználásával állítanak elő, amelyek gerjesztenek, amikor az elektromos áramnak átengedik őket. Ezeknek a szerves vegyületeknek megvan a saját fényük, ezért nem igényelnek háttérvilágítást, mint a normál LCD-k. Emiatt az OLED kijelző technológia energiatakarékos, és széles körben használják a televíziókban és más megjelenítő termékekben.
Különböző típusú OLED-ek állnak rendelkezésre a piacon, a kijelző színe, a csapok száma, a méret és a vezérlő IC alapján. Ebben az oktatóanyagban a monokróm kék kék 7 tűs SSD1306 0,96 ”OLED modult fogjuk használni, amely 128 pixel széles és 64 pixel hosszú. Ez a 7 tűs OLED támogatja az SPI protokollt, és az SSD1306 IC vezérlő segíti az OLED-t a fogadott karakterek megjelenítésében. Tudjon meg többet az OLED-ről és a különböző mikrovezérlőkkel való összekapcsolásáról a link követésével.
Az MQ-7 érzékelő előkészítése a szén-monoxid (CO) mérésére
Az MQ-7 CO szén-monoxid-gázérzékelő modul érzékeli a levegőben lévő CO koncentrációit. Az érzékelő 10-10 000 ppm koncentrációt képes mérni. Az MQ-7 érzékelő modulként vagy csak érzékelőként is megvásárolható. Korábban számos különböző típusú gázérzékelőt használtunk a különféle gáz érzékelésére és mérésére, ha érdekli, akkor is ellenőrizheti őket. Ebben a projektben az MQ-7 szenzor modult használjuk a szén-monoxid koncentráció mérésére PPM-ben. Az MQ-7 kártya kapcsolási rajza az alábbiakban látható:
Az RL terhelési ellenállás nagyon fontos szerepet játszik az érzékelő működésében. Ez az ellenállás megváltoztatja ellenállási értékét a gáz koncentrációjának megfelelően. Az MQ-7 érzékelőtábla 1KΩ terhelési ellenállással rendelkezik, amely haszontalan és befolyásolja az érzékelő leolvasását. Tehát a megfelelő CO koncentrációértékek méréséhez le kell cserélni az 1KΩ ellenállást egy 10KΩ ellenállásra.
Levegőminőségi index kiszámítása
Az indiai AQI-értéket egy adott szennyező anyag átlagos koncentrációja alapján számítják ki, standard időintervallumban mérve (24 óra a legtöbb szennyező anyag esetében, 8 óra szén-monoxid és ózon esetében). Például a PM2,5 és a PM10 AQI-értéke a 24 órás átlagos koncentráción, a szén-monoxid AQI-értéke pedig 8 órás átlagos koncentráción alapul). Az AQI számítások tartalmazzák a nyolc szennyező anyagot, amelyek a PM10, PM2,5, nitrogén-dioxid (NO 2), kén-dioxid (SO 2), szén-monoxid (CO), talajszintű ózon (O 3), ammónia (NH 3), és ólom (Pb). Az összes szennyező anyagot azonban nem mérik minden helyen.
A szennyező anyag 24 órás, mért környezeti koncentrációi alapján egy részindexet számolunk, amely a koncentráció lineáris függvénye (pl. A PM2,5 alindexe 51 lesz 31 µg / m3 koncentrációnál, 100 koncentrációnál 60 µg / m3 és 75 µg / m3 koncentrációban). A legrosszabb alindex (vagy az összes paraméter maximuma) határozza meg a teljes AQI értéket.
Kördiagramm
Az IoT alapú levegőminőség-ellenőrző rendszer kapcsolási rajza nagyon egyszerű, és az alábbiakban ismertetésre kerül:
Az SDS011 érzékelő, a DHT11 és az MQ-7 érzékelő tápellátása + 5 V, míg az OLED kijelző modul 3,3 V feszültséggel működik. Az SDS011 adó- és vevőcsapjai csatlakoznak az ESP32 GPIO16 és 17-hez. Az MQ-7 érzékelő analóg kimeneti csatlakozója a GPIO 25-höz, a DHT11 érzékelő adatcsapja pedig a GPIO27 érzékelőhöz van csatlakoztatva. Mivel az OLED Display modul SPI kommunikációt használ, létrehoztunk egy SPI kommunikációt az OLED modul és az ESP32 között. A csatlakozásokat az alábbi táblázat mutatja:
S.No |
OLED modul csap |
ESP32 tű |
1 |
GND |
Talaj |
2 |
VCC |
5V |
3 |
D0 |
18. |
4 |
D1 |
23 |
5. |
RES |
2 |
6. |
DC |
4 |
7 |
CS |
5. |
S.No |
SDS011 tű |
ESP32 tű |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17. |
4 |
TX |
16. |
S.No |
DHT csap |
ESP32 tű |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Adat |
27. |
S.No |
MQ-7 tű |
ESP32 tű |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
A levegőminőség-ellenőrző rendszer áramkörének kiépítése Perf Board-ra
Amint az a fő képen látható, az ötlet az volt, hogy ezt az áramkört 3D nyomtatott házon belül használjuk. Tehát a fent bemutatott teljes áramkört egy perf táblára forrasztják. Ügyeljen arra, hogy vezetékekkel elegendő távolságot hagyjon az OLED és az érzékelők felszereléséhez. Az OLED-re forrasztott perf táblám és az érzékelő modul alább látható.
Adafruit IO beállítása
Az Adafruit IO egy nyílt adatplatform, amely lehetővé teszi az élő adatok összesítését, vizualizálását és elemzését a felhőben. Az Adafruit IO használatával feltöltheti, megjelenítheti és figyelheti adatait az interneten keresztül, és engedélyezheti a projekt IoT-t. Az Adafruit IO használatával vezérelheti a motorokat, olvashatja az érzékelők adatait és hűvös IoT alkalmazásokat készíthet az interneten.
Az Adafruit IO használatához először hozzon létre egy fiókot az Adafruit IO-n. Ehhez látogasson el az Adafruit IO webhelyére, és kattintson a képernyő jobb felső sarkában található „Kezdés ingyen” gombra.
Miután befejezte a fiók létrehozásának folyamatát, jelentkezzen be a fiókba, és kattintson a jobb felső sarokban található „AIO kulcs megtekintése” elemre a fiók felhasználónév és AIO kulcs megszerzéséhez.
Ha rákattint az 'AIO Key' gombra, egy ablak jelenik meg az Adafruit IO AIO Key és felhasználónévvel. Másolja ezt a kulcsot és felhasználónevet, kódban fogják használni.
Az AIO kulcsok megszerzése után hozzon létre egy hírcsatornát a DHT érzékelő adatainak tárolásához. Táblázat létrehozásához kattintson a "Hírcsatorna" gombra. Ezután kattintson a 'Műveletek' elemre, majd válassza a rendelkezésre álló lehetőségek közül az 'Új hírcsatorna létrehozása' lehetőséget.
Ezt követően egy új ablak nyílik meg, ahol meg kell adnia a hírcsatorna nevét és leírását. A leírás megadása nem kötelező.
Ezután kattintson a "Létrehozás" gombra; átirányít az újonnan létrehozott hírcsatornára.
Ehhez a projekthez összesen hat betáplálást hoztunk létre a PM10, PM2,5, CO, hőmérséklet, páratartalom és AQI értékekhez. A többi hírcsatorna létrehozásához kövesse a fenti eljárást.
A hírcsatornák létrehozása után most létrehozunk egy Adafruit IO műszerfal funkciót az érzékelők adatainak egyetlen oldalon történő megjelenítésére. Ehhez először hozzon létre egy irányítópultot, majd adja hozzá ezeket a hírcsatornákat abba az irányítópultba.
Irányítópult létrehozásához kattintson az Irányítópult opcióra, majd a „Művelet” elemre, majd ezek után kattintson az „Új irányítópult létrehozása” elemre.
A következő ablakban írja be az irányítópult nevét, majd kattintson a "Létrehozás" gombra.
Az irányítópult létrehozásakor most az Adafruit IO blokkokat, például a Gauge és a Slider fogjuk használni az adatok megjelenítéséhez. Blokk hozzáadásához kattintson a jobb felső sarokban található „+” gombra.
Ezután válassza ki a 'Gauge' blokkot.
A következő ablakban válassza ki a megjeleníteni kívánt hírcsatorna adatait.
Az utolsó lépésben módosítsa a blokkbeállításokat a testreszabáshoz.
Most kövesse a fenti eljárást, hogy megjelenítési blokkokat adjon a többi hírcsatornához. Az Adafruit IO Irányítópultom így nézett ki:
Kód magyarázata
A projekt teljes kódja a dokumentum végén található. Itt elmagyarázzuk a kód néhány fontos részét.
A kód az SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT és DHT.h könyvtárakat használja. Az SDS011, Adafruit_GFX és Adafruit_SSD1306 könyvtárak letölthetők az Arduino IDE könyvtárkezelőjéből, és onnan telepíthetők. Ehhez nyissa meg az Arduino IDE-t, és lépjen a Sketch <Könyvtár belefoglalása <Könyvtárak kezelése oldalra . Most keresse meg az SDS011 fájlt, és telepítse R. Zschiegner SDS Sensor könyvtárát.
Hasonlóképpen telepítse az Adafruit GFX és az Adafruit SSD1306 könyvtárakat is. Az Adafruit_MQTT.h és a DHT11.h a megadott linkekről tölthető le.
Miután telepítette a könyvtárakat az Arduino IDE-be, indítsa el a kódot a szükséges könyvtárak fájljainak beillesztésével.
#include
A következő sorokban adja meg az OLED kijelző szélességét és magasságát. Ebben a projektben egy 128 × 64 SPI OLED kijelzőt használtam. Megváltoztathatja a SCREEN_WIDTH és a SCREEN_HEIGHT változókat a megjelenítésnek megfelelően.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Ezután adja meg az SPI kommunikációs csapokat, ahová az OLED kijelző csatlakozik.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Ezután hozzon létre egy példányt az Adafruit kijelzőhöz a korábban meghatározott szélességgel és magassággal és SPI kommunikációs protokollal.
Adafruit_SSD1306 kijelző (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Ezután adja hozzá a WiFi és az Adafruit IO hitelesítő adatokat, amelyeket az Adafruit IO szerverről másolt. Ide tartoznak az MQTT szerver, a portszám, a felhasználónév és az AIO kulcs.
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"
Ezután állítsa be az Adafruit IO hírcsatornákat az érzékelő adatok tárolásához. Esetemben hat adattáblát határoztam meg a különböző érzékelőadatok tárolására, nevezetesen: AirQuality, Temperature, Páratartalom, PM10, PM25 és CO.
Adafruit_MQTT_Client mqtt (& kliens, 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 / hőmérséklet"); Adafruit_MQTT_Publish Humidity = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / páratartalom"); 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");
Most a setup () funkción belül inicializálja a soros monitort 9600-as sebességgel hibakeresés céljából. Inicializálja az OLED kijelzőt, a DHT érzékelőt és az SDS011 érzékelőt a start () funkcióval is.
void setup () {my_sds.begin (16,17); Serial.begin (9600); dht.kezdés (); display.begin (SSD1306_SWITCHCAPVCC);
A beállítási függvény belsejében lévő for ciklust arra használjuk, hogy összegyűjtsük az értékeket egy meghatározott számig, majd nullára állítsuk a számlálót.
for (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {leolvasásPM10 = 0; }
Az érzékelő értékeinek olvasása:
Most a hurokfunkció belsejében használja a millis () metódust az érzékelők értékeinek leolvasására óránként. Mindegyik gázérzékelő 0 és 4095 közötti analóg értéket ad ki. Ennek az értéknek a feszültséggé történő átalakításához használja a következő egyenletet: RvRo = MQ7Raw * (3,3 / 4095); ahol az MQ7Raw az érzékelő analóg érintkezőjének analóg értéke. Olvassa el az SDS011 érzékelő PM2,5 és PM10 leolvasásait is.
if ((hosszú aláíratlan) (currentMillis - előzőMillis)> = intervallum) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3,3 / 4095); MQ7ppm = 3,027 * exp (1,0698 * (RvRo)); Serial.println (MQ7ppm); hiba = my_sds.read (& p25, & p10); if (! hiba) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + karakterlánc (p10)); }}
Az értékek konvertálása:
A PM2,5 és a PM10 értékek már µg / m 3 -ben vannak, de a szén-monoxid értékeket PPM-ről mg / m 3 -re kell konvertálnunk. Az átszámítási képlet az alábbiakban található:
Koncentráció (mg / m 3) = Koncentráció (PPM) × (Molekulatömeg (g / mol) / Moláris térfogat (L))
Ahol: molekulatömege CO 28.06 g / mol, és moláris térfogata is 24.45L 25 0 C-on
Koncentráció INmgm3 = MQ7ppm * (28,06 / 24,45); Serial.println (koncentrációINmgm3);
24 órás átlag kiszámítása:
Ezután a következő sorokban számítsa ki a 24 órás átlagot a PM10, a PM2,5 és a 8 órás átlagot a szén-monoxid értékekre. A kód első sorában vegye fel az aktuális összeget, és vonja le a tömb első elemét, most mentse el ezt új összként. Kezdetben a Zero lesz. Ezután szerezze meg az érzékelő értékeit, és adja hozzá az aktuális értéket az összértékhez, és növelje a számindexet. Ha az index értéke egyenlő vagy nagyobb, mint a numReadings, akkor állítsa vissza az indexet nullára.
totalPM10 = totalPM10 - leolvasásokPP10; leolvasásokPP10 = p10; totalPM10 = összesenPP10 + leolvasásPM10; readIndexPM10 = readIndexPM10 + 1; if (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Végül tegye közzé ezeket az értékeket az Adafruit IO-n.
if (! Hőmérséklet.publikálás (hőmérséklet)) {delay (30000); } if (! Páratartalom.publikálás (páratartalom)) {delay (30000); ………………………………………………………. ……………………………………………………….
3D nyomtatott ház az AQI megfigyelő rendszerhez
Ezután megmértem a telepítés méreteit a vernierem segítségével, valamint a szenzorok és az OLED méreteit is egy ház kialakításához. A tervem valahogy így nézett ki, ha elkészült.
Miután meg voltam elégedve a dizájnnal, STL fájlként exportáltam, a nyomtató beállításai alapján felszeleteltem, végül kinyomtattam. Az STL fájl szintén letölthető a Thingiverse-ről, és a házát kinyomtathatja.
Miután elkészült a nyomtatás, folytattam az állandó házban felállított projekt összeállítását, hogy azt egy létesítménybe telepítsem. A teljes összeköttetéssel összeállítottam az áramkört a házamba, és minden szépen megfelelt, amint itt láthatja.
Az AQI Monitoring Rendszer tesztelése
Miután elkészült a hardver és a kód, ideje tesztelni az eszközt. A készülék táplálásához külső 12V 1A adaptert használtunk. Amint láthatja, a készülék megjeleníti a PM10, a PM2,5 és a szén-monoxid koncentrációját az OLED kijelzőn. A PM2,5 és a PM10 koncentrációja µg / m 3, míg a szén-monoxid koncentrációja mg / m 3.
Ezeket az olvasmányokat az Adafruit IO műszerfalon is közzéteszik. Az összes paraméter (PM10, PM2,5 és CO) maximuma az AQI lesz.
Az elmúlt 30 nap AQI értékei grafikonként jelennek meg.
Így használhatja az SDS011 és az MQ-7 érzékelőket a levegőminőségi index kiszámításához. A projekt teljes működése megtalálható az alább linkelt videóban is. Remélem, hogy tetszett a projekt, és érdekesnek találta a saját építését. Ha bármilyen kérdése van, kérjük, hagyja őket az alábbi megjegyzés részben.