Рубрики
Проекты на ESP32

Анализатор качества воздуха с определением частиц PM2.5, PM10 и CO на ESP32

В настоящее время в связи с текущим ухудшением экологической обстановки во всем мире повышается актуальность использования различных анализаторов качества воздуха. В связи с этим в данной статье мы рассмотрим создание анализатора качества воздуха с определением частиц PM2.5, PM10 и CO на основе модуля ESP32 и датчиков Nova PM SDS011, MQ-7 и DHT11. Вывод измеряемых значений мы будем производить на экран OLED дисплея.

В современном мире основными загрязнителями воздуха, влияющим на здоровье человека, являются ультрадисперсные взвешенные частицы PM2.5 и PM10, а также окись углерода (CO). На основе этих трех показателей мы и будем определять индекс качества воздуха. Все измеряемые значения мы будем передавать на онлайн сервис Adafruit IO, что позволит иметь доступ к ним из любой точки земного шара где есть подключение к сети интернет.

Ранее на нашем сайте мы рассматривали подобный анализатор качества воздуха с определением частиц PM2.5 и PM10 на основе платы Arduino. Также на нашем сайте вы можете посмотреть и другие проекты анализаторов качества воздуха:

Необходимые компоненты

  1. Модуль ESP32 (купить на AliExpress).
  2. Nova PM Sensor SDS011 (датчик SDS011 от компании Nova) (купить на AliExpress).
  3. 0.96’ SPI OLED Display Module – модуль OLED дисплея с диагональю 0.96’ и поддержкой интерфейса SPI (купить на AliExpress — если будете покупать по приведенной ссылке, то выбирайте модель OLED дисплея с 7 контактами).
  4. Датчик температуры и влажности DHT11 (купить на AliExpress).
  5. Датчик газа MQ-7.
  6. Соединительные провода.

Nova PM Sensor SDS011

Датчик SDS011 – недавно появившийся на рынке анализатор качества воздуха, разработанный компанией Nova Fitness. Принцип его работы основан на активной лазерной спектроскопии (анализ рассеяния луча лазера). Данный датчик способен обнаруживать в воздухе частицы с размерами от 0.3 до 10μm (микрометров). Датчик состоит из небольшого вентилятора, клапана впуска воздуха, лазерного диода и фотодиода. Воздух в датчик поступает через клапан впуска (air inlet). Внутри датчика работает лазерный диод, который освещает поступивший внутрь датчика воздух и частицы, содержащиеся в нем. Получившийся рассеянный свет преобразуется в электрический сигнал с помощью фотодетектора. Этот сигнал затем усиливается и обрабатывается. В результате обработки вычисляется концентрация частиц PM2.5 и PM10.

Технические характеристик датчика SDS011:

  • обнаружение частиц: PM2.5, PM10;
  • диапазон измерений: 0.0-999.9μg/m3;
  • входное напряжение: от 4.7V до 5.3V;
  • максимальный ток: 100mA;
  • ток покоя (в «спящем» состоянии): 2mA;
  • время отклика: 1 секунда;
  • разрешающая способность при обнаружении частиц: ≤ 0.3μm;
  • относительная ошибка: 10% ;
  • диапазон рабочих температур: -20~50°C.

Модуль OLED дисплея (0.96’ OLED Display Module)

OLED (Organic Light-Emitting Diodes, органический светоизлучающий диод) – это светоизлучающая технология, которая применяется в большинстве современных телевизоров. В OLED дисплеях используется тот же принцип формирования изображения, что и в современных телевизорах, только количество пикселей в них значительно меньше.

Для нашего проекта мы использовали монохромный 7-ми контактный OLED дисплей SSD1306 с диагональю 0.96”. Он может использовать 3 различных коммуникационных протокола: 3-х проводный SPI, 4-х проводный SPI и I2C.

Назначение его контактов (распиновка) приведены в следующей таблице.

Номер контакта Название контакта Альтернативное название контакта Назначение контакта
1 Gnd Ground земля
2 Vdd Vcc, 5V напряжение питания (в диапазоне 3-5 В)
3 SCK D0, SCL, CLK используется как контакт часов (clock pin). Применяется в интерфейсах I2C и SPI
4 SDA D1, MOSI контакт данных. Применяется в интерфейсах I2C и SPI
5 RES RST, RESET контакт сброса модуля. Применяется в интерфейсе SPI
6 DC A0 контакт команд (Data Command pin). Применяется в интерфейсе SPI
7 CS Chip Select (выбор чипа) используется когда несколько устройств взаимодействуют по интерфейсу SPI

Все проекты с использованием данного дисплея на нашем сайте вы можете посмотреть по следующей ссылке.

Технические характеристики OLED дисплея SSD1306:

  • драйвер микросхемы OLED: SSD1306;
  • разрешение: 128 x 64;
  • угол зрения: >160°;
  • входное напряжение: 3.3V ~ 6V;
  • цвет пикселов: синий;
  • диапазон рабочих температур: -30°C ~ 70°C.

Подготовка датчика MQ-7 для измерения окиси углерода (CO)

Датчик MQ-7 (CO Carbon Monoxide Gas Sensor Module) способен определять концентрацию окиси углерода/угарного газа (CO) в окружающем воздухе. Он способен измерять концентрации данного газа от 10 до 10,000 ppm (part(s) per million – число частиц на миллион). MQ-7 можно купить либо в виде модуле, либо в виде отдельного датчика. Ранее на нашем сайте мы уже рассматривали проекты с использованием различных датчиков газа, посмотреть их вы можете по этой ссылке. В этом проекте мы будем использовать датчик MQ-7 для измерения концентрации окиси углерода в PPM. Принципиальная схема датчика MQ-7 представлена на следующем рисунке.

Важную роль в работе данного датчика играет нагрузочный резистор RL. Его сопротивление изменяется в зависимости от концентрации газа. По умолчанию датчик MQ-7 поставляется с резистором RL сопротивлением 1 кОм, которое практически бесполезно в нашем проекте, поэтому нам необходимо заменить его на резистор сопротивлением 10 кОм.

Индекс качества воздуха (ИКВ)

Индекс качества воздуха (ИКВ) в различных странах рассчитывается исходя из средней концентрации определенных загрязнителей, измеряемых в течение стандартного интервала времени (24 часа для большинства загрязнителей, 8 часов для окиси углерода и озона). Для частиц PM2.5 и PM10 также используется 24-часовой интервал измерения. Суммарный индекс качества воздуха включает 8 загрязнителей: PM10, PM2.5, двуокись азота (NO2), диоксид серы/сернистый газ (SO2), окись углерода (CO), озон в околоземном пространстве (O3), аммиак (NH3) и свинец (Pb). Но не в каждой локации измеряются все эти 8 загрязнителей.

Поэтому часто вместо полного индекса качества воздуха измеряется субиндекс, который представляет собой линейную функцию концентрации частиц PM2.5 и PM10, например, субиндекс для частиц PM2.5 при их концентрации 31 µg/m3 будет равен 51, при их концентрации 60 µg/m3 он будет равен 100, а при концентрации 45 µg/m3 – 75. Самый худший субиндекс (по максимуму всех параметров) будет определять суммарный индекс качества воздуха.

Схема проекта

Схема анализатора качества воздуха с определением частиц PM2.5, PM10 и CO на основе модуля ESP32 представлена на следующем рисунке.

Датчики SDS011, DHT11 и MQ-7 запитываются от +5V, а OLED дисплей – от 3.3V. Передающий и приемный контакты датчика SDS011 подключены к контактам GPIO16 & 17 модуля ESP32. Аналоговый контакт датчика MQ-7 подключен к контакту GPIO 25 модуля, а контакт данных датчика DHT11 – к контакту GPIO27 модуля. OLED дисплей подключен к модулю ESP32 по интерфейсу SPI. Полная схема соединений проекта приведена в следующей таблице.

№ п/п OLED дисплей Модуль ESP32
1 GND Ground
2 VCC 5V
3 D0 18
4 D1 23
5 RES 2
6 DC 4
7 CS 5
№ п/п Датчик SDS011 Модуль ESP32
1 5V 5V
2 GND GND
3 RX 17
4 TX 16
№ п/п Датчик DHT11 Модуль ESP32
1 Vcc 5V
2 GND GND
3 Data 27
№ п/п Датчик MQ-7 Модуль ESP32
1 Vcc 5V
2 GND GND
3 A0 25

Корпус нашего проекта мы напечатаем на 3D принтере, поэтому схему нашего проекта мы спаяли на перфорированной плате. Учтите, что соединительные провода должны иметь достаточную длину для подключения датчиков и OLED дисплее. Внешний вид собранной на перфорированной плате конструкции проекта приведен на следующем рисунке.

Настройка сервиса Adafruit IO

Adafruit IO – это открытая облачная платформа, которая позволяет агрегировать, визуализировать и анализировать данные реального времени. Используя Adafruit IO вы можете загружать, отображать и производить мониторинг данных через сеть интернет, что делает ее чрезвычайно удобной для применения в различных проекта интернета вещей (IoT).

Для использования Adafruit IO вам сначала необходимо зарегистрироваться в данной платформе. Для этого перейдите на веб-сайт Adafruit IO и нажмите на ‘Get started for Free’ в правом верхнем углу экрана.

После окончания регистрации зайдите в свой аккаунт и нажмите на ‘View AIO Key’ в правом верхнем углу экрана чтобы получить имя пользователя (username) и AIO key (ключ).

Когда вы нажмете на ‘AIO Key’, откроется всплывающее окно с данными AIO Key и username. Скопируйте и сохраните этот ключ и имя пользователя, в дальнейшем они нам понадобятся при написании программы.

Теперь, после получения AIO ключа, создайте фид (feed) для хранения данных датчика DHT. Для создания фида нажмите на ‘Feed’. Затем нажмите на ‘Actions’ (действия), после этого выберите ‘Create a New Feed’ из доступных пунктов.

После этого откроется новое окно, в котором вам необходимо ввести имя (Name) и описание (Description) фида. Описание можно не указывать.

Затем нажмите на кнопку ‘Create’, после этого вы будете перенаправлены на новый созданный фид. Для данного проекта мы создадим 6 фидов – для PM10, PM2.5, CO, температуры, влажности и индекса качества воздуха (AQI).

После создания фидов создадим панель инструментов (dashboard) Adafruit IO, на которой мы будем визуализировать данные от наших датчиков. Для этого создайте панель инструментов и добавьте на нее все наши фиды.

Для создания панели инструментов нажмите на Dashboard, затем на ‘Action’, и после этого на ‘Create a New Dashboard’ (создать новую панель инструментов).

В следующем открывшемся окне введите имя панели инструментов и нажмите на ‘Create’.

После того как панель инструментов будет создана, вы можете использовать блоки Adafruit IO типа Gauge и Slider для визуализации данных. Для добавления блоков нажмите на иконку ‘+’ в правом верхнем углу экрана.

Далее выберите блок ‘Gauge’.

В следующем окне выберите данные фида, которые вы хотите визуализировать.

И, наконец, измените настройки блока в соответствии со своими предпочтениями.

Аналогичным образом добавьте блоки визуализации для остальных фидов. После этого панель инструментов Adafruit IO должна у вас выглядеть примерно следующим образом:

Объяснение программы для модуля ESP32

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В коде нашей программы будут использоваться библиотеки SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT и DHT.h. При этом библиотеки SDS011, Adafruit_GFX и Adafruit_SSD1306 можно скачать и установить с помощью менеджера библиотек (Library Manager) Arduino IDE. Для этого откройте Arduino IDE и выберите в ней пункт меню Sketch < Include Library < Manage Libraries. После этого выполните поиск библиотеки SDS011 и в открывшихся результатах поиска установите библиотеку от R. Zschiegner.

Аналогичным образом установите библиотеки Adafruit GFX и Adafruit SSD1306 от компании Adafruit. Библиотеки Adafruit_MQTT.h и DHT11.h можно скачать с репозитория Github.

После скачивания и установки всех необходимых библиотек подключим их использование в программе.

Затем зададим ширину и высоту экрана OLED дисплея в пикселах.

Затем укажем контакты для связи по интерфейсу SPI с OLED дисплеем.

Далее создадим объект для работы с OLED дисплеем.

После этого укажем параметры доступа к сети WiFi (имя пользователя и пароль) и параметры для работы с платформой Adafruit IO, которые будут включать MQTT сервер, номер порта, имя пользователя и ключ AIO (AIO Key).

Затем укажем фиды Adafruit IO для хранения данных от датчиков. В нашем случае мы использовали 6 фидов с именами AirQuality, Temperature, Humidity, PM10, PM25 и CO.

После этого внутри функции void setup() инициализируем последовательную связь со скоростью 9600 бод для целей отладки. Также инициализируем OLED дисплей, датчики DHT и SDS011 с помощью функций begin().

Далее цикл for внутри функции setup используется для сбора значений с определенного номера и затем установки счетчика в 0.

После этого мы будем считывать данные с датчиков. Для этого внутри функции loop мы будем использовать функцию millis() чтобы считывать данные с датчиков каждый час. После считывания данных c аналогового выхода датчика MQ-7 мы получаем значения на выходе АЦП в диапазоне от 0 до 4095. Для преобразования этого значения в аналоговое значение напряжения используем формулу:

RvRo = MQ7Raw * (3.3 / 4095)

где MQ7Raw – значение с выхода АЦП аналогового контакта, к которому подключен датчик MQ-7.

Также считаем данные о концентрации частиц PM2.5 и PM10 с датчика SDS011.

Мы считываем значения PM2.5 и PM10 с датчика SDS011 в µg/m3, а значения окиси углерода (Carbon Monoxide) – в PPM (частиц на миллион). Нам их необходимо преобразовать в mg/m3, для этого используем формулу:

в которой молекулярная масса (Molecular Mass) CO равна 28.06 g/mol, а ее молярный объем (Molar Volume) равен 24.45L при 25 градусах Цельсия.

Расчет средних значений за 24 часа

В следующем фрагменте кода рассчитаем средние за 24 часа значения частиц PM10, PM2.5 и средние за 8 часов значения окиси углерода. В первой строке этого фрагмента кода из общей суммы значений вычтем первый элемент массива. Затем получим текущее значение и прибавим его к общему, и увеличим номер индекса. Если значение индекса равно или больше чем numReadings, сбросим значение индекса снова в 0.

И, наконец, опубликуем эти данные на платформе Adafruit IO.

Изготовление корпуса для нашего проекта

Далее мы измерили размеры всех компонентов нашего проекта и на основе их значений спроектировали модель корпуса, показанную на следующем рисунке.

После этого мы экспортировали эту модель в STL и закачали его на сервис Thingiverse — вы ее можете скачать и использовать для изготовления корпуса проекта. Также этот STL файл мы использовали для печати данной модели корпуса на 3D принтере. После этого мы разместили в нее все компоненты нашего проекта. Внешний вид собранной в корпусе конструкции нашего проекта показан на следующем рисунке.

Тестирование работы проекта

После того как аппаратная часть проекта будет готова можно приступить к тестированию его работы. Мы использовали адаптер 12V 1A для подачи питания на устройство. Как вы видите из представленного ниже рисунка, на экране OLED дисплея отображаются значения концентрации частиц PM10 и PM2.5 (в µg/m3), а также концентрация окиси углерода (в mg/m3).

Эти же значения публикуются и в нашей панели инструментов Adafruit IO. Максимальное значение из всех этих трех параметров (PM10, PM2.5 & CO) и будет значением индекса качества воздуха (AQI).

Также значения индекса качества воздуха (AQI) за последние 30 дней будут выводиться на графике.

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

Источник статьи

4 ответа к “Анализатор качества воздуха с определением частиц PM2.5, PM10 и CO на ESP32”

Можете прислать проект с использованием многофункциональной платы 9 в 1 желательно с кодом программы? Спасибо за раннее.

Так что вы за плату 9 в 1 имеете ввиду, никак не могу понять

Нет, с этой многофункциональной платой у нас, к сожалению, нет проектов на нашем сайте

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *