Привет, Хабр!

В одной из прошлых своих статей, пару лет назад, я уже описывал реализацию дешевого самодельного датчика качества воздуха на базе сенсора BME680. Но прошло время, многое изменилось, и теперь возникла потребность в подобном устройстве на новом месте. Недавно на одном маркетплейсе мне попалась комбинированная плата с датчиками ENS160+AHT21, которая подходит под мои задачи, а что в итоге получилось, читайте далее.

❯ Небольшое предисловие

Наверное, многие из ва�� понимают важность отслеживания состояния воздуха в современном мире. Ведь полученные данные могут быть использованы не только для оценки воздействия на здоровье человека, но и найдут применение в системах домашней автоматизации: например, для управления вентиляцией в доме или своевременного оповещения о негативных изменениях окружающей среды. Поэтому, полагаю, вопрос «А для чего это нужно?» отпадет сам собой.

❯ Аппаратная платформа

Так как мы придерживаемся принципа максимальной экономии, то будем использовать максимально дешевые и проверенные временем решения. Ранее я уже упомянул, что в качестве основного сенсора будем использовать комбинированную плату с датчиками ENS160+AHT21, а в качестве «мозгов» устройства будем использовать модуль ESP-02S на базе SoC ESP8285 — уж очень мне нравится с ним работать.

Ниже представлен внешний вид платы датчика.

Плата ENS160+AHT21
Плата ENS160+AHT21

И небольшая техническая информация модуля:

Параметр

Значение

Напряжение питания

3.3 В (совместим с 5 В системами)

Интерфейс

I²C / SPI

Диапазон измерения температур

–40°C … +85°C

Диапазон измерения влажности

5 … 95% RH

Диапазон измерения газов

0–65535 ppb

Изменяемые параметры

eCO₂, TVOC, AQI, температура, влажность

Время прогрева

< 1 мин

Размеры модуля

24 × 19 мм

Итак, с основными компонентами устройства мы разобрались, поэтому, с вашего позволения, ниже представлена принципиальная схема нашего устройства:

Принципиальная схема датчика качества воздуха
Принципиальная схема датчика качества воздуха

Схема достаточно простая и не требует каких-либо пояснений, единственное, что хочется добавить, это интерфейс питания: у нас он реализован с помощью разъема USB Type-C.

❯ Корпус устройства

Одна из интересных вещей — это моделирование корпуса устройств, для меня это как успокоительное. Здесь моя фантазия просто разыгралась: мне хотелось сделать что-то красивое и практичное. И как всегда, разработка корпуса велась в открытой САПР FreeCAD, ниже представлен рендер модели корпуса:

Рендер модели корпуса
Рендер модели корпуса

Как можно видеть на изображении, расположение датчика организовано в отдельном модуле, чтобы минимизировать нагрев от микроконтроллера на датчик.

❯ Сборка датчика

Приступим к самому интересному — где наша задумка воплощается в реальность с нотками магии из детства, когда родители купили новый конструктор и тебе не терпится его собрать. Для начала распечатаем наш корпус. Благо деталей немного, и с моим 3D-принтером FlashForge 5M это занимает считанные минуты.

Результат печати
Результат печати

Далее припаиваем провода к USB-разъему, не забыв припаять перемычку на линию DATA.

Подключение USB разъема
Подключение USB разъема

Затем запрессовываем разъем в корпус, предварительно просунув провода в отверстие. И монтируем всю электронику в корпус.

Монтаж электроники
Монтаж электроники

Сам контроллер монтируется в предусмотренный фиксатор, а регулятор напряжения был припаян навесным монтажом.

Монтаж платы датчика
Монтаж платы датчика

А здесь на фото показан монтаж платы датчиков. Ниже еще несколько фото собранного устройства.

Корпус в сборе
Корпус в сборе
Корпус с подставкой
Корпус с подставкой
Вид с боку
Вид с боку

На этом сборка устройства завершена и вы можете оценить его внешний вид во всей красе.

❯ Прошивка и интеграция в HomeAssistant

Микро ПО устройства разрабатывалось в среде Arduino IDE и базируется на собственной прошивке для IoT устройств. Для удобства я объединил библиотеки для сенсоров ENS160 и AHT21 в единую библиотеку, ниже представлен пример использования библиотеки:

Код для работы с датчиками
#include <ENS160_AHT2x.h>  // Подключаем библиотеку сенсоров
#include <Wire.h>          // Для использования I2C 

// Пины подключения к датчику
#define sda_pin    14                    // SDA 
#define scl_pin    12                    // SCL

Sensor_ENS160 ENS160;     //  Инициализируем класс датчика качества воздуха
AHT20 AHT21;              //  Инициализируем класс датчика температуры и влажности

bool sens_stat_q, sens_stat_th; // Статусы инициализации датчиков

int ensStatus(NAN), AQI(NAN), TVOC(NAN), ECO2(NAN);  // Переменные для хранения данных датчиков
float temp(NAN), hum(NAN); 

void setup() { 
   Wire.begin(sda_pin, scl_pin);  // Инициализация шины I2C
      for(int x = 0; x < 160; x ++){  // Цикл ожидания подключения датчика качества воздуха
      if (ENS160.begin()){ 
            sens_stat_q = true;
            break; }
      delay(100); 
     }
    for(int x = 0; x < 160; x ++){    // Цикл ожидания подключения датчика влажности и температуры
      if (AHT21.begin()){ 
            sens_stat_th = true;
            break; }
      delay(100); 
     }
    ENS160.setOperatingMode(SFE_ENS160_RESET);  // Сбрасываем датчик
    ENS160.setOperatingMode(SFE_ENS160_STANDARD);  // Установка стандартных параметров
  }

void loop(){
     // Чтение данных
     if(ENS160.checkDataStatus() && sens_stat_q){
         AQI  = ENS160.getAQI();
         TVOC = ENS160.getTVOC();
         ECO2 = ENS160.getECO2();
         ensStatus = ENS160.getFlags();
     }
     if(sens_stat_th){
         temp = AHT21.getTemperature();
         hum  = AHT21.getHumidity();;
     }
    delay(1000); 
}

Первоначальная прошивка устройства выполняется с помощью USB-TTL адаптера, а дальнейшее обновление реализовано с помощью встроенной функции FOTA. Первоначальная настройка подключения к Wi-Fi сети выполняется с помощью технологии Captive Portal. Ниже показаны несколько скриншотов интерфейса устройства.

Страница входа
Страница входа

По умолчанию пароль доступа к устройству «admin», который позже можно изменить.

Главная страница
Главная страница

Здесь все по «классике»: отображаются измеряемые параметры датчика и некоторые настройки.

Настройка MQTT
Настройка MQTT

Интеграция в HomeAssistant

Для интеграции датчика в умный дом HomeAssistant используются протокол MQTT и механизм MQTT Discovery, благодаря которому интеграция устройства выполняется по принципу Plug&Play. Ниже представлены скриншоты из HomeAssistant.

Отображение устройств MQTT
Отображение устройств MQTT
Страница датчика качества воздуха
Страница датчика качества воздуха
График TVOC
График TVOC

❯ Итоги

В итоге у нас получился простой и бюджетный датчик качест��а воздуха для HomeAssistant, позволяющий автоматизировать работу вентиляции. И как всегда, все исходники проекта прикрепляю ниже.

На этом можно и завершить статью. Надеюсь, она была вам полезна! И большое спасибо за вашу финансовую поддержку, для меня это очень важно и мотивирует делиться своим опытом на Хабре. Если у вас возникли вопросы или есть чем поделиться, то добро пожаловать в комментарии! Всем интересных проектов и успехов!

Ссылки к статье:

Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале 

Перейти ↩
Может быть интересно: