- Потрібні компоненти
- Nova PM Sensor SDS011 для вимірювання PM2,5 і PM10
- Основи 0,96-дюймового OLED-модуля
- Підготовка датчика MQ-7 до вимірювання окису вуглецю (CO)
- Розрахунок індексу якості повітря
- Кругова діаграма
- Побудова схеми системи контролю якості повітря на платі Perf
- Налаштування Adafruit IO
- Пояснення коду для
- 3D друкований корпус для системи моніторингу AQI
- Тестування системи моніторингу AQI
З настанням зими повітря, яке нависає над нами, згущується від диму та газоподібних викидів від палаючих полів, промислових заводів та транспортного руху, перекриваючи сонце та ускладнюючи дихання. Експерти стверджують, що високий рівень забруднення повітря та пандемія COVID-19 можуть бути небезпечною сумішшю, яка може мати серйозні наслідки. Необхідність моніторингу якості повітря в режимі реального часу дуже кричуща.
Отже, у цьому проекті ми збираємося побудувати систему моніторингу якості повітря ESP32 з використанням датчика Nova PM SDS011, датчика MQ-7 та датчика DHT11. Ми також будемо використовувати OLED-дисплейний модуль для відображення значень якості повітря. Індекс якості повітря (І) в Індії базуються на вісім інвентаризацію викидів забруднюючих речовин, PM10, PM2.5, SO2 і NO2, CO, озон, NH3 і Pb. Однак не потрібно вимірювати всі забруднюючі речовини. Отже, ми збираємося виміряти концентрацію PM2,5, PM10 та окису вуглецю для розрахунку індексу якості повітря. Значення AQI будуть опубліковані на Adafruit IO, щоб ми могли контролювати його з будь-якого місця. Раніше ми також вимірювали концентрацію зрідженого газу, диму та аміаку, використовуючи Arduino.
Потрібні компоненти
- ESP32
- Nova PM Sensor SDS011
- 0,96 'SPI OLED-модуль дисплея
- Датчик DHT11
- Датчик MQ-7
- Провід перемички
Nova PM Sensor SDS011 для вимірювання PM2,5 і PM10
Датчик SDS011 - це нещодавно датчик якості повітря, розроблений Nova Fitness. Він працює за принципом лазерного розсіяння і може отримати концентрацію частинок від 0,3 до 10 мкм у повітрі. Цей датчик складається з невеликого вентилятора, впускного клапана для повітря, лазерного діода та фотодіода. Повітря надходить через повітровідвідник, де джерело світла (лазер) висвітлює частинки, а розсіяне світло перетворюється в сигнал за допомогою фотодетектора. Потім ці сигнали посилюються та обробляються, щоб отримати концентрацію частинок PM2,5 та PM10. Раніше ми використовували Nova PM Sensor з Arduino для розрахунку концентрації PM10 і PM2.5.
Характеристики датчика SDS011:
- Вихід: PM2,5, PM10
- Діапазон вимірювання: 0,0-999,9 мкг / м3
- Вхідна напруга: від 4,7 В до 5,3 В
- Максимальний струм: 100 мА
- Сон струму: 2мА
- Час відповіді: 1 секунда
- Частота послідовного виведення даних: 1 раз / с
- Роздільна здатність діаметра частинок: ≤0,3 мкм
- Відносна помилка: 10%
- Діапазон температур: -20 ~ 50 ° C
Основи 0,96-дюймового OLED-модуля
OLED (Organic Light Emitting Diode) - це різновид світлодіода, який виготовляється з використанням органічних сполук, збуджуючих, коли через них пропускається електричний струм. Ці органічні сполуки мають своє власне світло, отже, вони не потребують жодної схеми підсвічування, як звичайні РК-дисплеї. З цієї причини технологія OLED-дисплеїв є енергоефективною і широко використовується в телевізорах та інших продуктах дисплея.
На ринку доступні різні типи OLED, засновані на кольорі дисплея, кількості контактів, розмірі та мікросхемі контролера. У цьому посібнику ми будемо використовувати монохромний синій 7-контактний модуль OLED SSD1306 0,96 ”OLED, який має ширину 128 пікселів і довжину 64 пікселі. Цей 7-контактний OLED підтримує протокол SPI, а контролер IC SSD1306 допомагає OLED відображати отримані символи. Дізнайтеся більше про OLED та його взаємодію з різними мікроконтролерами, перейшовши за посиланням.
Підготовка датчика MQ-7 до вимірювання окису вуглецю (CO)
Модуль датчика газу з окисом вуглецю MQ-7 CO визначає концентрації СО у повітрі. Датчик може вимірювати концентрації від 10 до 10000 ppm. Датчик MQ-7 можна придбати як модуль, так і просто як датчик. Раніше ми використовували багато різних типів газових датчиків для виявлення та вимірювання різного газу. Ви також можете перевірити їх, якщо вам цікаво. У цьому проекті ми використовуємо сенсорний модуль MQ-7 для вимірювання концентрації окису вуглецю в PPM. Принципова схема плати MQ-7 наведена нижче:
Навантажувальний резистор RL відіграє дуже важливу роль у спрацьовуванні датчика. Цей резистор змінює значення опору відповідно до концентрації газу. Плата датчика MQ-7 постачається з опором навантаження 1 КОм, що марно і впливає на показання датчика. Отже, щоб виміряти відповідні значення концентрації CO, вам слід замінити резистор 1KΩ резистором 10KΩ.
Розрахунок індексу якості повітря
AQI в Індії розраховується на основі середньої концентрації певного забруднювача, виміряної за стандартний інтервал часу (24 години для більшості забруднювачів, 8 годин для окису вуглецю та озону). Наприклад, AQI для PM2,5 та PM10 базується на 24-годинній середній концентрації, а AQI для монооксиду вуглецю - на 8-годинній середній концентрації). Розрахунки AQI включають вісім забруднювачів: PM10, PM2.5, діоксид азоту (NO 2), діоксид сірки (SO 2), оксид вуглецю (CO), приземний озон (O 3), аміак (NH 3), і свинець (Pb). Однак усі забруднюючі речовини вимірюються не в усіх місцях.
На основі виміряних 24-годинних концентрацій забруднювача в навколишньому середовищі розраховується субіндекс, який є лінійною функцією концентрації (наприклад, субіндекс для РМ2,5 становитиме 51 при концентрації 31 мкг / м3, 100 при концентрації 60 мкг / м3 і 75 при концентрації 45 мкг / м3). Найгірший субіндекс (або максимум усіх параметрів) визначає загальний показник AQI.
Кругова діаграма
Принципова схема системи моніторингу якості повітря на основі IoT дуже проста і подана нижче:
Датчик SDS011, датчик DHT11 та датчик MQ-7 живляться від + 5 В, тоді як модуль дисплея OLED - від 3,3 В. Виводи передавача і приймача SDS011 підключені до GPIO16 і 17 ESP32. Контакт аналогового виходу датчика MQ-7 підключений до GPIO 25, а контакт даних датчика DHT11 - до датчика GPIO27. Оскільки модуль OLED-дисплея використовує зв'язок SPI, ми встановили зв'язок SPI між модулем OLED та ESP32. З'єднання показані в таблиці нижче:
С.Ні |
PIN-код модуля OLED |
Штифт ESP32 |
1 |
GND |
Земля |
2 |
VCC |
5 В |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
ВДЕ |
2 |
6 |
Постійного струму |
4 |
7 |
CS |
5 |
С.Ні |
SDS011 Штифт |
Штифт ESP32 |
1 |
5 В |
5 В |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
С.Ні |
DHT штифт |
Штифт ESP32 |
1 |
Vcc |
5 В |
2 |
GND |
GND |
3 |
Дані |
27 |
С.Ні |
Штифт MQ-7 |
Штифт ESP32 |
1 |
Vcc |
5 В |
2 |
GND |
GND |
3 |
A0 |
25 |
Побудова схеми системи контролю якості повітря на платі Perf
Як видно з основного зображення, ідея полягала в тому, щоб використовувати цю схему всередині 3D друкованого кожуха. Отже, повна схема, показана вище, припаяна до плати. Обов’язково використовуйте дроти, щоб залишити достатню відстань для кріплення OLED та датчиків. Моя плата перфів припаяна до OLED і модуль датчика показаний нижче.
Налаштування Adafruit IO
Adafruit IO - це відкрита платформа даних, яка дозволяє агрегувати, візуалізувати та аналізувати дані в реальному часі в хмарі. Використовуючи Adafruit IO, ви можете завантажувати, відображати та відстежувати свої дані через Інтернет та вмикати свій проект IoT. Ви можете керувати двигунами, читати дані датчиків та створювати круті програми IoT через Інтернет, використовуючи Adafruit IO.
Щоб використовувати Adafruit IO, спочатку створіть обліковий запис на Adafruit IO. Для цього перейдіть на веб-сайт Adafruit IO та натисніть "Почати безкоштовно" у верхньому правому куті екрана.
Закінчивши процес створення облікового запису, увійдіть до нього та натисніть «Переглянути ключ AIO» у верхньому правому куті, щоб отримати ім’я користувача та ключ AIO.
Коли ви натискаєте на "AIO Key", відкриється вікно з Adafruit IO AIO Key та ім'ям користувача. Скопіюйте цей ключ та ім'я користувача, воно буде використано в коді.
Тепер, отримавши клавіші AIO, створіть стрічку для зберігання даних датчика DHT. Щоб створити стрічку, натисніть «Потік». Потім натисніть "Дії", а потім виберіть "Створити новий канал" з доступних параметрів.
Після цього відкриється нове вікно, де потрібно ввести назву та опис стрічки. Написати опис необов’язково.
Натисніть "Створити" після цього; Ви будете перенаправлені на новостворену стрічку.
Для цього проекту ми створили загалом шість каналів для значень PM10, PM2.5, CO, температури, вологості та AQI. Дотримуйтесь тієї самої процедури, що і вище, щоб створити решту каналів.
Після створення каналів ми зараз створимо функцію приладної дошки Adafruit IO для візуалізації даних датчика на одній сторінці. Для цього спочатку створіть інформаційну панель, а потім додайте всі ці канали на цю панель.
Щоб створити інформаційну панель, натисніть опцію "Інформаційна панель", а потім натисніть "Дія", а після цього натисніть "Створити нову панель".
У наступному вікні введіть назву інформаційної панелі та натисніть «Створити».
По мірі створення інформаційної панелі, тепер ми будемо використовувати блоки Adafruit IO, такі як Gauge і Slider, для візуалізації даних. Щоб додати блок, натисніть на "+" у верхньому правому куті.
Потім виберіть блок «Датчик».
У наступному вікні виберіть дані стрічки, які потрібно візуалізувати.
На завершальному кроці змініть параметри блоку, щоб налаштувати його.
Тепер дотримуйтесь тієї самої процедури, що і вище, щоб додати блоки візуалізації для решти каналів. Моя панель керування Adafruit IO виглядала так:
Пояснення коду для
Повний код цього проекту наведено в кінці документа. Тут ми пояснюємо деякі важливі частини коду.
Код використовує SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, і DHT.h бібліотеки. Бібліотеки SDS011, Adafruit_GFX та Adafruit_SSD1306 можна завантажити з Менеджера бібліотек в IDE Arduino та встановити звідти. Для цього відкрийте IDE Arduino і перейдіть до Sketch <Include Library <Manage Libraries . Тепер шукайте SDS011 та встановіть бібліотеку SDS Sensor Р. Zschiegner.
Подібним чином встановіть бібліотеки Adafruit GFX та Adafruit SSD1306 фірми Adafruit. Adafruit_MQTT.h та DHT11.h можна завантажити за поданими посиланнями.
Після встановлення бібліотек в Arduino IDE запустіть код, включивши необхідні файли бібліотек.
#включати
У наступних рядках визначте ширину та висоту дисплея OLED. У цьому проекті я використав OLED-дисплей 128 × 64 SPI. Ви можете змінити змінні SCREEN_WIDTH та SCREEN_HEIGHT відповідно до вашого дисплея.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Потім визначте шпильки зв'язку SPI, де підключений OLED-дисплей.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Потім створіть екземпляр для дисплея Adafruit із шириною та висотою та протоколом зв'язку SPI, визначеним раніше.
Дисплей Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Потім включіть облікові дані WiFi та Adafruit IO, скопійовані із сервера Adafruit IO. Вони включатимуть сервер MQTT, номер порту, ім’я користувача та ключ 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"
Потім налаштуйте канали вводу-виводу Adafruit для зберігання даних датчика. У моєму випадку я визначив шість каналів для зберігання різних даних датчика, а саме: AirQuality, Температура, Вологість, PM10, PM25 та CO.
Adafruit_MQTT_Client mqtt (& клієнт, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS); Adafruit_MQTT_Publish AirQuality = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / AirQuality"); Adafruit_MQTT_Publish Температура = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Температура"); Adafruit_MQTT_Publish Вологість = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Вологість"); 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");
Тепер усередині функції setup () ініціалізуйте послідовний монітор зі швидкістю передачі в 9600 для цілей налагодження. Також ініціалізуйте OLED-дисплей, датчик DHT і датчик SDS011 за допомогою функції start () .
void setup () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
Цикл for всередині функції установки використовується для збору значень до певного числа, а потім встановлення лічильника на нуль.
for (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }
Зчитування значень датчика:
Тепер усередині функції циклу використовуйте метод millis () для зчитування значень датчика кожну годину. Кожен з газових датчиків видає аналогове значення від 0 до 4095. Для перетворення цього значення у напругу використовуйте таке рівняння: RvRo = MQ7Raw * (3.3 / 4095); де MQ7Raw - аналогове значення від аналогового штифта датчика. Також зчитуйте показники PM2,5 та PM10 з датчика SDS011.
if ((unsigned long) (currentMillis - previousMillis)> = інтервал) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3,3 / 4095); MQ7ppm = 3.027 * exp (1.0698 * (RvRo)); Serial.println (MQ7ppm); помилка = my_sds.read (& p25, & p10); if (! error) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + Рядок (p10)); }}
Перетворення значень:
Значення PM2,5 і PM10 вже знаходяться в мкг / м 3, але нам потрібно перетворити значення Чадного газу з PPM в мг / м 3. Формула перерахунку наведена нижче:
Концентрація (мг / м 3) = Концентрація (PPM) × (Молекулярна маса (г / моль) / Молярний об’єм (L))
Де: молекулярна маса СО становить 28,06 г / моль і молярний об'єм складає 24.45L при 25 0 С
КонцентраціяINmgm3 = MQ7ppm * (28.06 / 24.45); Serial.println (ConcentrationINmgm3);
Розрахунок 24-годинного середнього:
Потім у наступних рядках обчисліть середнє значення за 24 години для показника PM10, показник PM2,5 та 8-годинне середнє значення для показів чадного газу. У першому рядку коду візьміть поточний підсумок і відніміть перший елемент масиву, тепер збережіть це як новий підсумок. Спочатку це буде Нуль. Потім отримайте значення датчика і додайте поточні показники до загальної суми та збільште індекс числа. Якщо значення індексу дорівнює або перевищує numReadings, тоді встановіть індекс назад на нуль.
totalPM10 = totalPM10 - показанняPM10; показанняPM10 = p10; totalPM10 = totalPM10 + показанняPM10; readIndexPM10 = readIndexPM10 + 1; якщо (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Потім нарешті опублікуйте ці значення на Adafruit IO.
if (! Temperature.publish (температура)) {затримка (30000); } if (! Вологість.публікувати (вологість)) {затримка (30000); ………………………………………………………. ……………………………………………………….
3D друкований корпус для системи моніторингу AQI
Потім я виміряв розміри установки за допомогою ноніуса, а також виміряв розміри датчиків та OLED для проектування корпусу. Мій дизайн виглядав приблизно так, як це було зроблено нижче.
Після того, як я був задоволений дизайном, я експортував його як файл STL, нарізав на основі налаштувань принтера і нарешті роздрукував. Знову ж файл STL також доступний для завантаження з Thingiverse, і ви можете надрукувати його корпус, використовуючи його.
Після того, як друк був зроблений, я приступив до складання проекту, встановленого в постійному приміщенні, щоб встановити його в приміщенні. Після повного встановленого підключення я зібрав схему в корпус, і все було гарно, як ви можете бачити тут.
Тестування системи моніторингу AQI
Після того, як обладнання та код готові, настав час протестувати пристрій. Для живлення пристрою ми використовували зовнішній адаптер 12В 1А. Як бачите, пристрій відображатиме концентрацію PM10, PM2.5 та окису вуглецю на OLED-дисплеї. Концентрація PM2,5 і PM10 знаходиться в мкг / м 3, тоді як концентрація чадного газу - у мг / м 3.
Ці показання також будуть опубліковані на інформаційній панелі Adafruit IO. Максимум усіх параметрів (PM10, PM2.5 & CO) буде AQI.
Значення AQI за останні 30 днів будуть показані у вигляді графіку.
Ось як ви можете використовувати датчики SDS011 та MQ-7 для обчислення індексу якості повітря. Повну роботу проекту також можна знайти у відео, наведеному нижче. Сподіваюся, вам сподобався проект і вам було цікаво побудувати власний. Якщо у вас виникли запитання, залиште їх у розділі коментарів нижче.