- Необходимые компоненты
- Датчик Nova PM SDS011 для измерения PM2,5 и PM10
- Основы 0,96-дюймового модуля OLED-дисплея
- Подготовка датчика MQ-7 к измерению угарного газа (CO)
- Расчет индекса качества воздуха
- Принципиальная электрическая схема
- Построение схемы системы мониторинга качества воздуха на Perf Board
- Настройка Adafruit IO
- Код Пояснение для
- Корпус с 3D-печатью для системы мониторинга AQI
- Тестирование системы мониторинга AQI
С наступлением зимы воздух, нависающий над нами, сгущается от дыма и газообразных выбросов от горящих полей, промышленных заводов и транспортных средств, блокируя солнце и затрудняя дыхание. Эксперты говорят, что высокий уровень загрязнения воздуха и пандемия COVID-19 могут быть опасной смесью, которая может иметь серьезные последствия. Необходимость мониторинга качества воздуха в реальном времени очевидна.
Итак, в этом проекте мы собираемся построить систему мониторинга качества воздуха ESP32 с использованием датчика Nova PM SDS011, датчика MQ-7 и датчика DHT11. Мы также будем использовать модуль OLED-дисплея для отображения значений качества воздуха. Индекс качества воздуха (AQI) в Индии основан на восьми загрязнителях: PM10, PM2,5, SO2 и NO2, CO, озоне, NH3 и Pb. Однако нет необходимости измерять все загрязняющие вещества. Итак, мы собираемся измерить концентрацию PM2,5, PM10 и окиси углерода для расчета индекса качества воздуха. Значения AQI будут опубликованы на Adafruit IO, чтобы мы могли отслеживать их откуда угодно. Ранее мы также измеряли концентрацию сжиженного нефтяного газа, дыма и аммиака с помощью Arduino.
Необходимые компоненты
- ESP32
- Датчик Nova PM SDS011
- 0,96 'SPI OLED-дисплей
- Датчик DHT11
- Датчик MQ-7
- Перемычки
Датчик Nova PM SDS011 для измерения PM2,5 и PM10
Датчик SDS011 - это новейший датчик качества воздуха, разработанный Nova Fitness. Он работает по принципу лазерного рассеяния и может обеспечивать концентрацию частиц в воздухе от 0,3 до 10 мкм. Этот датчик состоит из небольшого вентилятора, впускного воздушного клапана, лазерного диода и фотодиода. Воздух поступает через воздухозаборник, где источник света (лазер) освещает частицы, а рассеянный свет преобразуется в сигнал с помощью фотодетектора. Затем эти сигналы усиливаются и обрабатываются, чтобы получить концентрацию частиц PM2,5 и PM10. Ранее мы использовали датчик Nova PM с 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 (органический светоизлучающий диод) - это своего рода светоизлучающий диод, который сделан из органических соединений, которые возбуждают, когда электрический ток проходит через них. Эти органические соединения имеют свой собственный свет, поэтому они не требуют какой-либо схемы подсветки, как обычные ЖК-дисплеи. По этой причине технология OLED-дисплеев является энергоэффективной и широко используется в телевизорах и других дисплеях.
На рынке доступны различные типы OLED в зависимости от цвета дисплея, количества контактов, размера и микросхемы контроллера. В этом уроке мы будем использовать монохромный синий 7-контактный модуль SSD1306 0.96 ”OLED, который имеет ширину 128 пикселей и длину 64 пикселя. Этот 7-контактный OLED поддерживает протокол SPI, а микросхема контроллера SSD1306 помогает OLED отображать полученные символы. Узнайте больше об OLED и его взаимодействии с различными микроконтроллерами, перейдя по ссылке.
Подготовка датчика MQ-7 к измерению угарного газа (CO)
Модуль датчика угарного газа MQ-7 CO определяет концентрацию CO в воздухе. Датчик может измерять концентрации от 10 до 10 000 ppm. Датчик MQ-7 можно приобрести как модуль, так и просто как датчик. Ранее мы использовали много различных типов газовых датчиков для обнаружения и измерения различных газов, вы также можете проверить их, если вам интересно. В этом проекте мы используем сенсорный модуль MQ-7 для измерения концентрации угарного газа в PPM. Принципиальная схема платы MQ-7 представлена ниже:
Нагрузочный резистор RL играет очень важную роль в обеспечении работы датчика. Этот резистор изменяет свое значение сопротивления в зависимости от концентрации газа. Плата датчика MQ-7 имеет сопротивление нагрузки 1 кОм, что бесполезно и влияет на показания датчика. Таким образом, чтобы измерить соответствующие значения концентрации CO, вам необходимо заменить резистор 1 кОм на резистор 10 кОм.
Расчет индекса качества воздуха
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-часовых концентраций загрязняющего вещества в окружающей среде рассчитывается субиндекс, который является линейной функцией концентрации (например, субиндекс для PM2,5 будет 51 при концентрации 31 мкг / м3, 100 при концентрации 60 мкг / м3 и 75 при концентрации 45 мкг / м3). Наихудший субиндекс (или максимум из всех параметров) определяет общий AQI.
Принципиальная электрическая схема
Принципиальная схема системы мониторинга качества воздуха на основе Интернета вещей очень проста и представлена ниже:
Датчик SDS011, датчик DHT11 и MQ-7 получают питание от +5 В, а модуль OLED-дисплея - от 3,3 В. Контакты передатчика и приемника SDS011 подключены к GPIO16 и 17 ESP32. Вывод аналогового выхода датчика MQ-7 подключен к GPIO 25, а вывод данных датчика DHT11 подключен к датчику GPIO27. Поскольку модуль OLED-дисплея использует связь SPI, мы установили связь SPI между модулем OLED и ESP32. Подключения показаны в таблице ниже:
S.No |
Вывод модуля OLED |
ESP32 Pin |
1 |
GND |
Земля |
2 |
VCC |
5В |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
ВИЭ |
2 |
6 |
ОКРУГ КОЛУМБИЯ |
4 |
7 |
CS |
5 |
S.No |
SDS011 Pin |
ESP32 Pin |
1 |
5В |
5В |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
S.No |
Пин DHT |
ESP32 Pin |
1 |
Vcc |
5В |
2 |
GND |
GND |
3 |
Данные |
27 |
S.No |
Контакт MQ-7 |
ESP32 Pin |
1 |
Vcc |
5В |
2 |
GND |
GND |
3 |
A0 |
25 |
Построение схемы системы мониторинга качества воздуха на Perf Board
Как видно из основного изображения, идея заключалась в том, чтобы использовать эту схему внутри корпуса с 3D-печатью. Таким образом, полная схема, показанная выше, припаяна на перфокарт. Обязательно используйте провода, чтобы оставить достаточное расстояние для установки OLED и датчиков. Моя перфокарта припаяна к OLED, а модуль датчика показан ниже.
Настройка Adafruit IO
Adafruit IO - это открытая платформа данных, которая позволяет агрегировать, визуализировать и анализировать данные в реальном времени в облаке. Используя Adafruit IO, вы можете загружать, отображать и отслеживать свои данные через Интернет, а также включать в свой проект IoT. Вы можете управлять двигателями, считывать данные с датчиков и создавать крутые IoT-приложения через Интернет с помощью Adafruit IO.
Чтобы использовать Adafruit IO, сначала создайте учетную запись на Adafruit IO. Для этого перейдите на веб-сайт Adafruit IO и нажмите «Начать бесплатно» в правом верхнем углу экрана.
После завершения процесса создания учетной записи войдите в учетную запись и нажмите «Просмотреть ключ AIO» в правом верхнем углу, чтобы получить имя пользователя учетной записи и ключ AIO.
Когда вы нажмете «Ключ AIO», появится окно с ключом Adafruit IO AIO и именем пользователя. Скопируйте этот ключ и имя пользователя, он будет использован в коде.
Теперь, после получения ключей AIO, создайте канал для хранения данных датчика DHT. Чтобы создать ленту, нажмите «Лента». Затем нажмите «Действия», а затем выберите «Создать новый канал» из доступных вариантов.
После этого откроется новое окно, в котором нужно ввести Имя и Описание ленты. Написание описания необязательно.
После этого нажмите «Создать»; вы будете перенаправлены на только что созданный канал.
Для этого проекта мы создали в общей сложности шесть кормов для значений PM10, PM2,5, CO, температуры, влажности и AQI. Выполните ту же процедуру, что и выше, для создания остальных каналов.
После создания каналов мы создадим функцию панели управления Adafruit IO для визуализации данных датчиков на одной странице. Для этого сначала создайте панель мониторинга, а затем добавьте все эти каналы в эту панель.
Чтобы создать информационную панель, выберите опцию «Панель мониторинга», затем нажмите «Действие», а после этого нажмите «Создать новую информационную панель».
В следующем окне введите имя панели инструментов и нажмите «Создать».
Поскольку панель инструментов создана, теперь мы будем использовать блоки ввода-вывода Adafruit, такие как Gauge и Slider, для визуализации данных. Чтобы добавить блок, нажмите «+» в правом верхнем углу.
Затем выберите блок «Датчик».
В следующем окне выберите данные канала, которые вы хотите визуализировать.
На последнем этапе измените настройки блока, чтобы настроить его.
Теперь выполните ту же процедуру, что и выше, чтобы добавить блоки визуализации для остальных каналов. Моя панель мониторинга Adafruit IO выглядела так:
Код Пояснение для
Полный код этого проекта приведен в конце документа. Здесь мы объясняем некоторые важные части кода.
Код использует SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, и DHT.h библиотеки. Библиотеки SDS011, Adafruit_GFX и Adafruit_SSD1306 можно загрузить из диспетчера библиотек в среде разработки Arduino и установить оттуда. Для этого откройте IDE Arduino и перейдите в Sketch <Include Library <Manage Libraries . Теперь найдите SDS011 и установите библиотеку датчиков SDS от R. 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, которые вы скопировали с сервера ввода-вывода Adafruit. Они будут включать сервер MQTT, номер порта, имя пользователя и ключ AIO.
const char * ssid = "Галактика-М20"; const char * pass = "ac312124"; #define MQTT_SERV "io.adafruit.com" #define MQTT_PORT 1883 #define MQTT_NAME "choudharyas" #define MQTT_PASS "988c4e045ef64c1b9bc8b5bb7ef5f2d9"
Затем настройте каналы ввода-вывода Adafruit для хранения данных датчиков. В моем случае я определил шесть каналов для хранения различных данных датчиков, а именно: качество воздуха, температура, влажность, 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 Temperature = 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");
Теперь внутри функции setup () инициализируйте Serial Monitor со скоростью 9600 бод для целей отладки. Также инициализируйте OLED-дисплей, датчик DHT и датчик SDS011 с помощью функции begin () .
пустая настройка () {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.
если ((длинное без знака) (currentMillis - previousMillis)> = интервал) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3,3 / 4095); MQ7ppm = 3,027 * эксп (1,0698 * (RvRo)); Serial.println (MQ7ppm); error = my_sds.read (& p25, & p10); если (! ошибка) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + String (p10)); }}
Преобразование значений:
Значения PM2,5 и PM10 уже указаны в мкг / м 3, но нам необходимо преобразовать значения оксида углерода из PPM в мг / м 3. Формула преобразования приведена ниже:
Концентрация (мг / м 3) = Концентрация (PPM) × (Молекулярная масса (г / моль) / Молярный объем (л))
Где: молекулярная масса СО составляет 28,06 г / моль и мольный объем составляет 24.45L при 25 0 С
Концентрация INmgm3 = MQ7ppm * (28,06 / 24,45); Serial.println (ConcentrationINmgm3);
Расчет среднего за 24 часа:
Затем в следующих строках вычислите среднее значение за 24 часа для показаний PM10, PM2,5 и среднего за 8 часов для показаний окиси углерода. В первой строке кода возьмите текущую сумму и вычтите первый элемент массива, теперь сохраните это как новую сумму. Изначально это будет Zero. Затем получите значения датчика и добавьте текущее показание к сумме и увеличьте числовой индекс. Если значение индекса равно или больше, чем numReadings, установите индекс обратно в ноль.
totalPM10 = totalPM10 - показания PM10; показания PM10 = p10; totalPM10 = totalPM10 + показания PM10; readIndexPM10 = readIndexPM10 + 1; если (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Затем, наконец, опубликуйте эти значения на Adafruit IO.
если (! Temperature.publish (температура)) {задержка (30000); } если (! Humidity.publish (влажность)) {задержка (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 для расчета индекса качества воздуха. Полную работу проекта также можно найти в видео по ссылке ниже. Надеюсь, вам понравился проект, и вам было интересно создать свой собственный. Если у вас есть вопросы, оставьте их в разделе комментариев ниже.