- Kinakailangan ang Mga Bahagi
- Nova PM Sensor SDS011 para sa Pagsukat sa PM2.5 at PM10
- Mga Pangunahing Kaalaman sa 0.96 'OLED Display Module
- Paghahanda ng MQ-7 Sensor upang Sukatin ang Carbon Monoxide (CO)
- Pagkalkula sa Marka ng Kalidad ng Air
- Diagram ng Circuit
- Pagbuo ng Circuit System ng Monitoring ng Kalidad ng Air sa Perf Board
- Pag-setup ng Adafruit IO
- Paliwanag sa Code para sa
- 3D Printed Casing para sa AQI Monitoring System
- Pagsubok sa AQI Monitoring System
Tulad ng paglubog ng taglamig, ang hangin na nakabitin sa amin ay nagpapalap ng usok at mga gas na emissions mula sa nasusunog na mga bukirin, mga pabrika ng industriya, at trapiko ng sasakyan, na hinahadlangan ang araw at ginagawa itong mahirap huminga. Sinabi ng mga eksperto na ang mataas na antas ng polusyon sa hangin at COVID-19 pandemya ay maaaring isang mapanganib na halo na maaaring magkaroon ng mga seryosong kahihinatnan. Ang pangangailangan para sa real-time na pagsubaybay sa Kalidad ng Hangin ay napakasisilaw.
Kaya sa proyektong ito, magtatayo kami ng isang ESP32 Air Quality Monitoring System gamit ang Nova PM SDS011 sensor, MQ-7 sensor, at DHT11 sensor. Gumagamit din kami ng isang module ng OLED Display upang maipakita ang Mga Halaga sa Kalidad ng Air. Ang Air Quality Index (AQI) sa India ay batay sa walong mga pollutant, PM10, PM2.5, SO2 at NO2, CO, Ozone, NH3, at Pb. Gayunpaman, hindi kinakailangan upang masukat ang lahat ng mga pollutant. Sususukatin namin ang konsentrasyon ng PM2.5, PM10, at Carbon Monoxide upang makalkula ang Air Quality Index. Ang mga halaga ng AQI ay mai-publish sa Adafruit IO upang masubaybayan namin ito mula sa kahit saan. Dati nasusukat din namin ang konsentrasyon ng LPG, Usok, at Ammonia gas gamit ang Arduino.
Kinakailangan ang Mga Bahagi
- ESP32
- Nova PM Sensor SDS011
- 0.96 'SPI OLED Display Module
- DHT11 Sensor
- MQ-7 Sensor
- Jumper Wires
Nova PM Sensor SDS011 para sa Pagsukat sa PM2.5 at PM10
Ang SDS011 Sensor ay isang pinakabagong Air Quality Sensor na binuo ng Nova Fitness. Gumagana ito sa prinsipyo ng pagsabog ng laser at maaaring makuha ang konsentrasyon ng maliit na butil sa pagitan ng 0.3 hanggang 10μm sa hangin. Ang sensor na ito ay binubuo ng isang maliit na bentilador, balbula ng papasok ng hangin, Laser diode, at photodiode. Ang hangin ay pumapasok sa pamamagitan ng papasok na hangin kung saan ang isang mapagkukunan ng ilaw (Laser) ay nag-iilaw ng mga maliit na butil at ang nakakalat na ilaw ay nabago sa isang senyas ng isang photodetector. Ang mga signal na ito ay pinalakas at pinoproseso upang makuha ang konsentrasyon ng maliit na butil ng PM2.5 at PM10. Ginamit namin dati ang Nova PM Sensor kasama si Arduino upang makalkula ang konsentrasyon ng PM10 & PM2.5.
Mga pagtutukoy ng SDS011 Sensor:
- Output: PM2.5, PM10
- Saklaw ng Pagsukat: 0.0-999.9μg / m3
- Input Boltahe: 4.7V hanggang 5.3V
- Pinakamataas na Kasalukuyang: 100mA
- Kasalukuyang Pagtulog: 2mA
- Oras ng Tugon: 1 segundo
- Frequency ng Serial Data Output: 1 oras / segundo
- Paglutas ng Diameter ng Particle: ≤0.3μm
- Kamag-anak na Error: 10%
- Saklaw ng Temperatura: -20 ~ 50 ° C
Mga Pangunahing Kaalaman sa 0.96 'OLED Display Module
Ang OLED (Organic Light Emitting Diode) ay isang uri ng Light Emitting Diode na ginawa gamit ang mga organikong compound na nasasabik kapag pinapayagan ang daloy ng kuryente na dumaloy sa kanila. Ang mga organikong compound na ito ay mayroong sariling ilaw samakatuwid hindi sila nangangailangan ng anumang backlight circuitry tulad ng normal na LCD. Dahil sa kadahilanang ito, ang teknolohiya sa pagpapakita ng OLED ay mahusay sa kapangyarihan at malawak na ginagamit sa Telebisyon at iba pang mga produktong ipinapakita.
Ang iba't ibang mga uri ng OLED ay magagamit sa merkado batay sa kulay ng display, ang bilang ng mga pin, laki, at controller IC. Sa tutorial na ito, gagamitin namin ang Monochrome Blue 7-pin SSD1306 0.96 ”OLED module na 128 pixel ang lapad at 64 pixel ang haba. Sinusuportahan ng 7-pin OLED na ito ang SPI protocol at ang controller na IC SSD1306 ay tumutulong sa OLED na ipakita ang natanggap na mga character. Matuto nang higit pa tungkol sa OLED at ang pag-interfaced nito sa iba't ibang mga microcontroller sa pamamagitan ng pagsunod sa link.
Paghahanda ng MQ-7 Sensor upang Sukatin ang Carbon Monoxide (CO)
Ang MQ-7 CO Carbon Monoxide Gas Sensor Module ay nakikita ang mga konsentrasyon ng CO sa hangin. Maaaring sukatin ng sensor ang mga konsentrasyon na 10 hanggang 10,000 ppm. Ang MQ-7 sensor ay maaaring binili bilang isang module o tulad din ng isang sensor na nag-iisa. Dati nagamit namin ang maraming iba't ibang mga uri ng gas Sensor upang makita at masukat ang iba't ibang gas, maaari mo ring suriin ang mga ito kung interesado ka. Sa proyektong ito, ginagamit namin ang MQ-7 sensor module upang masukat ang konsentrasyon ng Carbon Monoxide sa PPM. Ang circuit diagram para sa board ng MQ-7 ay ibinibigay sa ibaba:
Ang resistor ng load RL ay may gampanan na napakahalagang papel sa paggana ng sensor. Binabago ng resistor na ito ang halaga ng paglaban nito alinsunod sa konsentrasyon ng gas. Ang board ng sensor ng MQ-7 ay mayroong isang resistensya ng Load na 1KΩ na walang silbi at nakakaapekto sa mga pagbabasa ng sensor. Kaya upang masukat ang naaangkop na mga halaga ng konsentrasyon ng CO, kailangan mong palitan ang resistor ng 1KΩ ng isang risistor na 10KΩ.
Pagkalkula sa Marka ng Kalidad ng Air
Ang AQI sa India ay kinakalkula batay sa average na konsentrasyon ng isang partikular na pollutant na sinusukat sa isang pamantayan ng agwat ng oras (24 na oras para sa karamihan ng mga pollutant, 8 na oras para sa carbon monoxide at ozone). Halimbawa, ang AQI para sa PM2.5 at PM10 ay batay sa 24 na oras na average na konsentrasyon at AQI para sa Carbon Monoxide ay batay sa 8-oras na average na konsentrasyon). Kasama sa mga kalkulasyon ng AQI ang walong mga pollutant na PM10, PM2.5, Nitrogen Dioxide (NO 2), Sulphur Dioxide (SO 2), Carbon Monoxide (CO), ground-level ozone (O 3), Ammonia (NH 3), at Lead (Pb). Gayunpaman, ang lahat ng mga pollutant ay hindi sinusukat sa bawat lokasyon.
Batay sa sinusukat na 24 na oras na ambient concentrations ng isang pollutant, kinakalkula ang isang sub-index, na isang linear function ng konsentrasyon (hal. Ang sub-index para sa PM2.5 ay magiging 51 sa konsentrasyon 31 µg / m3, 100 sa konsentrasyon 60 µg / m3, at 75 sa isang konsentrasyon na 45 µg / m3). Ang pinakapangit na sub-index (o maximum ng lahat ng mga parameter) ay tumutukoy sa pangkalahatang AQI.
Diagram ng Circuit
Ang circuit diagram para sa IoT Base Air Quality Monitoring System ay napaka-simple at ibinigay sa ibaba:
Ang SDS011 Sensor, DHT11, at MQ-7 sensor ay pinalakas ng + 5V habang ang module ng OLED Display ay pinalakas ng 3.3V. Ang mga transmiter at Receiver pin ng SDS011 ay konektado sa GPIO16 & 17 ng ESP32. Ang pin ng Analog Out ng sensor ng MQ-7 ay konektado sa GPIO 25 at ang data pin ng sensor ng DHT11 ay konektado sa sensor ng GPIO27. Dahil ang module ng OLED Display ay gumagamit ng komunikasyon sa SPI, nagtaguyod kami ng isang komunikasyon na SPI sa pagitan ng OLED module at ng ESP32. Ang mga koneksyon ay ipinapakita sa talahanayan sa ibaba:
S.Hindi |
OLED Module Pin |
ESP32 Pin |
1 |
GND |
Lupa |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
DC |
4 |
7 |
CS |
5 |
S.Hindi |
SDS011 Pin |
ESP32 Pin |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
S.Hindi |
DHT Pin |
ESP32 Pin |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Data |
27 |
S.Hindi |
MQ-7 Pin |
ESP32 Pin |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Pagbuo ng Circuit System ng Monitoring ng Kalidad ng Air sa Perf Board
Tulad ng nakikita mo mula sa pangunahing imahe, ang ideya ay gamitin ang circuit na ito sa loob ng isang 3D Printed Casing. Kaya't ang kumpletong circuit na ipinakita sa itaas ay solder sa isang perf board. Siguraduhing gumamit ng mga wire upang mag-iwan ng sapat na distansya upang mai-mount ang OLED at Sensors. Ang aking perf board na solder sa OLED at ang module ng sensor ay ipinapakita sa ibaba.
Pag-setup ng Adafruit IO
Ang Adafruit IO ay isang bukas na platform ng data na nagbibigay-daan sa iyo upang pagsamahin, mailarawan, at pag-aralan ang live na data sa cloud. Gamit ang Adafruit IO, maaari kang mag-upload, magpakita, at subaybayan ang iyong data sa internet, at paganahin ang iyong proyekto na IoT. Maaari mong kontrolin ang mga motor, basahin ang data ng sensor, at gumawa ng mga cool na aplikasyon ng IoT sa internet gamit ang Adafruit IO.
Upang magamit ang Adafruit IO, lumikha muna ng isang account sa Adafruit IO. Upang magawa ito, pumunta sa website ng Adafruit IO at mag-click sa 'Magsimula nang Libre' sa kanang tuktok ng screen.
Matapos matapos ang proseso ng paglikha ng account, mag-log in sa account at mag-click sa 'Tingnan ang AIO Key' sa kanang sulok sa itaas upang makuha ang account username at AIO key.
Kapag nag-click ka sa 'AIO Key,' ang isang window ay mag-pop up gamit ang Adafruit IO AIO Key at username. Kopyahin ang key at username na ito, gagamitin ito sa code.
Ngayon, pagkatapos makuha ang mga key ng AIO, lumikha ng isang feed upang maiimbak ang data ng sensor ng DHT. Upang lumikha ng isang feed, mag-click sa 'Feed.' Pagkatapos mag-click sa 'Mga Pagkilos,' at pagkatapos ay piliin ang 'Lumikha ng isang Bagong Feed' mula sa mga magagamit na pagpipilian.
Pagkatapos nito, magbubukas ang isang bagong window kung saan kailangan mong i-input ang Pangalan at Paglalarawan ng feed. Ang pagsusulat ng isang paglalarawan ay opsyonal.
Mag-click sa 'Lumikha,' pagkatapos nito; ire-redirect ka sa bagong nilikha na feed.
Para sa proyektong ito, gumawa kami ng kabuuang anim na feed para sa mga halagang PM10, PM2.5, CO, Temperatura, Humidity, at AQI. Sundin ang parehong pamamaraan tulad ng nasa itaas upang lumikha ng natitirang mga feed.
Matapos lumikha ng mga feed, ngayon lilikha kami ng isang tampok na dashboard ng Adafruit IO upang mailarawan ang data ng sensor sa isang solong pahina. Para doon, una, lumikha ng isang dashboard at pagkatapos ay idagdag ang lahat ng mga feed na ito sa dashboard na iyon.
Upang lumikha ng isang dashboard, mag-click sa pagpipiliang Dashboard at pagkatapos ay mag-click sa 'Aksyon,' at pagkatapos nito, mag-click sa 'Lumikha ng isang Bagong Dashboard.'
Sa susunod na window, ipasok ang pangalan ng dashboard at mag-click sa 'Lumikha.'
Habang nilikha ang dashboard, gagamitin namin ngayon ang mga bloke ng Adafruit IO tulad ng Gauge at Slider upang mailarawan ang data. Upang magdagdag ng isang bloke, mag-click sa '+' sa kanang sulok sa itaas.
Pagkatapos Piliin ang bloke na 'Gauge'.
Sa susunod na window, piliin ang data ng feed na nais mong mailarawan.
Sa huling hakbang, baguhin ang mga setting ng block upang ipasadya ito.
Sundin ngayon ang parehong pamamaraan tulad ng nasa itaas upang magdagdag ng mga bloke ng pagpapakita para sa natitirang feed. Ganito ang hitsura ng aking Adafruit IO Dashboard:
Paliwanag sa Code para sa
Ang kumpletong code para sa proyektong ito ay ibinibigay sa dulo ng dokumento. Narito ipinapaliwanag namin ang ilang mahahalagang bahagi ng code.
Ang code ay gumagamit ng SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, at DHT.h aklatan. Maaaring mai-download ang mga aklatan ng SDS011, Adafruit_GFX, at Adafruit_SSD1306 mula sa Library Manager sa Arduino IDE at mai-install doon. Para doon, buksan ang Arduino IDE at pumunta sa Sketch <Isama ang Library <Pamahalaan ang Mga Aklatan . Ngayon maghanap para sa SDS011 at i-install ang SDS Sensor library ni R. Zschiegner.
Katulad nito, i-install ang Adafruit GFX at Adafruit SSD1306 na mga aklatan ng Adafruit. Maaaring ma-download ang Adafruit_MQTT.h at DHT11.h mula sa mga naibigay na link.
Matapos mai-install ang mga aklatan sa Arduino IDE, simulan ang code sa pamamagitan ng pagsasama ng mga kinakailangang file ng mga library.
# isama
Sa mga susunod na linya, tukuyin ang lapad at taas ng OLED display. Sa proyektong ito, gumamit ako ng isang 128 × 64 SPI OLED display. Maaari mong baguhin ang mga variable ng SCREEN_WIDTH , at SCREEN_HEIGHT ayon sa iyong display.
# tukuyin ang SCREEN_WIDTH 128 # tukuyin ang SCREEN_HEIGHT 64
Pagkatapos tukuyin ang mga pin ng komunikasyon ng SPI kung saan nakakonekta ang OLED Display.
#define OLED_MOSI 23 # tukuyin ang OLED_CLK 18 # tukuyin ang OLED_DC 4 # tukuyin ang OLED_CS 5 # tukuyin ang OLED_RESET 2
Pagkatapos, lumikha ng isang halimbawa para sa display ng Adafruit na may lapad at taas at SPI na komunikasyon na proteksyon na tinukoy nang mas maaga.
Display ng Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Pagkatapos isama ang mga kredensyal ng WiFi at Adafruit IO na kinopya mo mula sa server ng Adafruit IO. Isasama rito ang MQTT server, Port No, User Name, at AIO Key.
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"
Pagkatapos ay i-set up ang mga feed ng Adafruit IO para sa pagtatago ng data ng sensor. Sa aking kaso, tinukoy ko ang anim na feed upang mag-imbak ng magkakaibang data ng sensor, katulad ng: AirQuality, Temperatura, Humidity, PM10, PM25, at CO.
Adafruit_MQTT_Client mqtt (& client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS); Adafruit_MQTT_Publish AirQual = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / AirQual"); Adafruit_MQTT_Publish Temperatura = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Temperature"); 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");
Sa loob ng pag- andar ng pag- setup () , ipasimula ang Serial Monitor sa isang rate ng baud na 9600 para sa mga layuning pag-debug. Simulan din ang pagpapakita ng OLED, sensor ng DHT, at sensor ng SDS011 na may pagsisimula () na pagpapaandar.
void setup () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
Ang para sa loop sa loob ng pag- andar ng pag- setup ay ginagamit upang kolektahin ang mga halaga hanggang sa isang tinukoy na numero at pagkatapos ay itakda ang counter sa zero.
para sa (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }
Pagbasa ng Mga Halaga ng Sensor:
Ngayon sa loob ng pag-andar ng loop, gamitin ang millis () na pamamaraan upang mabasa ang mga halaga ng sensor sa bawat isang oras. Ang bawat isa sa mga sensor ng gas ay naglalabas ng isang analog na halaga mula 0 hanggang 4095. Upang mai-convert ang halagang ito sa boltahe, gamitin ang sumusunod na equation: RvRo = MQ7Raw * (3.3 / 4095); kung saan ang MQ7Raw ay ang halaga ng analog mula sa analog pin ng sensor. Gayundin, basahin ang mga pagbabasa ng PM2.5 at PM10 mula sa sensor ng SDS011.
kung ((unsigned haba) (currentMillis - nakaraangMillis)> = agwat) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3.3 / 4095); MQ7ppm = 3.027 * exp (1.0698 * (RvRo)); Serial.println (MQ7ppm); error = my_sds.read (& p25, & p10); kung (! error) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + String (p10)); }}
Pag-convert ng Mga Halaga:
Ang mga halagang PM2.5 at PM10 ay nasa µg / m 3 ngunit kailangan naming baguhin ang mga halaga ng Carbon Monoxide mula sa PPM hanggang mg / m 3. Ibinigay sa ibaba ang formula ng conversion:
Konsentrasyon (mg / m 3) = Konsentrasyon (PPM) × (Molecular Mass (g / mol) / Molar Volume (L))
Kung saan: Ang Molecular Mass ng CO ay 28.06 g / mol at ang Molar Volume ay 24.45L sa 25 0 C
KonsentrasyonINmgm3 = MQ7ppm * (28.06 / 24.45); Serial.println (ConcentrationINmgm3);
Kinakalkula ang Average na 24 na Oras:
Pagkatapos sa mga susunod na linya, kalkulahin ang average na 24 na oras para sa pagbasa ng PM10, PM2.5, at average na 8 oras para sa mga pagbasa ng Carbon Monoxide. Sa unang linya ng code, kunin ang kasalukuyang kabuuan at ibawas ang unang elemento sa array, i-save ito bilang bagong kabuuang. Sa una, magiging Zero ito. Pagkatapos makuha ang mga halaga ng sensor at idagdag ang kasalukuyang pagbabasa sa kabuuan at taasan ang index ng numero. Kung ang halaga ng index ay katumbas ng o mas malaki sa numReadings, pagkatapos ay itakda ang index pabalik sa zero.
totalPM10 = totalPM10 - readingsPM10; pagbasaPM10 = p10; totalPM10 = totalPM10 + readingsPM10; readIndexPM10 = readIndexPM10 + 1; kung (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Pagkatapos, sa wakas, i-publish ang mga halagang ito sa Adafruit IO.
kung (! Temperatura.publish (temperatura)) {pagkaantala (30000); } kung (! Humidity.publish (halumigmig)) {pagkaantala (30000); ……………………………………………………………. …………………………………………………………….
3D Printed Casing para sa AQI Monitoring System
Susunod, sinukat ko ang mga sukat ng pag-setup gamit ang aking vernier at sinukat din ang mga sukat ng mga sensor at OLED upang mag-disenyo ng isang pambalot. Ang aking disenyo ay tumingin ng tulad nito sa ibaba, sa sandaling ito ay tapos na.
Matapos akong nasiyahan sa disenyo, na-export ko ito bilang isang STL file, hiniwa ito batay sa mga setting ng printer, at sa wakas ay nai-print ito. Muli ang STL file ay magagamit din para sa pag-download mula sa Thingiverse at maaari mong mai-print ang iyong pambalot gamit ito.
Matapos ang pag-print ay tapos na, nagpatuloy ako sa pag-iipon ng proyekto na na-set up sa isang permanenteng enclosure upang mai-install ito sa isang pasilidad. Gamit ang kumpletong koneksyon na ginawa, tinipon ko ang circuit sa aking pambalot at lahat ng bagay ay isang magandang akma tulad ng nakikita mo dito.
Pagsubok sa AQI Monitoring System
Kapag handa na ang hardware at code, oras na upang subukan ang aparato. Gumamit kami ng isang panlabas na 12V 1A adapter upang mapagana ang aparato. Tulad ng nakikita mo, ipapakita ng aparato ang Konsentrasyon ng PM10, PM2.5, at Carbon Monoxide sa OLED Display. Ang konsentrasyon ng PM2.5 at PM10 ay nasa µg / m 3 habang ang konsentrasyon ng Carbon Monoxide ay nasa mg / m 3.
Ang mga pagbabasa na ito ay mai-publish din sa Adafruit IO Dashboard. Ang maximum ng lahat ng mga parameter (PM10, PM2.5 & CO) ay ang AQI.
Ang mga halagang AQI ng huling 30 araw ay ipapakita bilang isang graph.
Ito ay kung paano mo magagamit ang mga sensor ng SDS011 at MQ-7 upang makalkula ang Air Quality Index. Ang kumpletong pagtatrabaho ng proyekto ay maaari ding makita sa video na naka-link sa ibaba. Inaasahan kong nasiyahan ka sa proyekto at nahanap mo itong nakakainteres na bumuo ng iyong sarili. Kung mayroon kang anumang mga katanungan, mangyaring iwanan ang mga ito sa seksyon ng komento sa ibaba.