Как стать автором
Обновить
1556
Timeweb Cloud
То самое облако

Как я делал бюджетное устройство мониторинга качества среды и что из этого вышло

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров13K
image

В начале немного предыстории.

Однажды я был в гостях у своего товарища, который как и я, активно занимается домашней автоматизацией. Я увидел у него смонтированную систему приточной вентиляции и поинтересовался, как он реализовал автоматизацию этой системы. В ответ услышал, что он её включает вручную, так как у него нет устройства, которое анализирует качество воздуха, а готовые решения имеют зачастую слишком неоправданную цену для систем бытового применения. Недолго думая, я предложил ему своё решение, о котором далее и пойдет речь.

Разработка


Уже на этапе разговора у меня в голове сложилась определенная концепция устройства, которая бы идеально вписывалась в существующую систему домашней автоматизации, и некоторые выдвинутые условия товарища (будем их называть ТЗ), уточнили некоторые моменты.

Некоторые моменты:

  • Устройство должно иметь эстетичный вид и не выглядеть «колхозно».
  • Устройство должно иметь веб интерфейс для конфигурации устройства.
  • Устройство должно поддерживать протокол обмена MQTT и иметь возможность интеграции в Home Assistant.
  • Разъем питания должен быть USB-C.
  • Не стоить как крыло от Boeing.


Разработка аппаратной части


На самом деле здесь ничего сложного. В качестве газового сенсора был выбран проверенный временем BME680 от небезызвестной компании Bosh.

Внешний вид датчика BME680, установленного на плате


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

  • Датчик ЛОВ: IAQ 0…500 с разрешением 1, потребление от 0,1 мА;
  • Датчик влажности: 0…100 %, точность ±3%, время отклика 8 с;
  • Датчик давления: диапазон 300…1100 кПа, точность ± 0,6 кПа;
  • Датчик температуры: диапазон измерений –40 … 85 °С, абсолютная точность ±1 °С;
  • Потребление: 3,1 мкА температура/ давление при 1 Гц; 3,7 мкА температура/ давление/ влажность; 0,09…12 мА температура/ давление/ влажность/ воздух;
  • Потребление в режиме сна: 0,15 мкА;
  • Коммуникационные интерфейсы: I2C или SPI;
  • Напряжение питания: 1,2…3,6 В (VDD); 1,71…3,6 В (VDDIO);
  • Диапазон рабочих температур: –40 … 85 °С;
  • Корпус: 8 — выводный LGA размером 3,0 x 3,0 x 1 мм.

Более подробную техническую информацию о датчике можно узнать на сайте компании.

В качестве микроконтроллера, который будет обрабатывать данные с датчика и выполнять функции коммуникации с Home Assistant, применим всеми любимый ESP8266 от компании Espressif Systems.

Функцию разъема питания устройства будет выполнять модуль с USB type C, который можно купить на известном китайском маркетплейсе килограммами за небольшую плату.

Модуль с разъёмом USB-C

После всего вышесказанного у нас «вырисовывается» следующая принципиальная схема устройства.

Принципиальная схема устройстваПринципиальная схема устройства

Как можно видеть, схема достаточно проста и её можно собрать без применения печатной платы, но простой путь это не наш путь.

Рендер печатной платы устройства

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

Готовая плата устройства

Для цветовой индикации о качестве воздуха на устройстве применен адресный светодиод SK6812, но можно использовать и WS2812B. Отображаться цвета на индикаторе будут согласно следующей таблице.

Зависимость цвета индикатора от уровня загрязнения

С аппаратной частью устройства более менее понятно, приступим к разработке корпуса.

Разработка корпуса


Так как в ТЗ заказчика прозвучала фраза:

Устройство должно иметь эстетичный вид и не выглядеть «колхозно».

Постараемся следовать данному запросу.

Используя FreeCAD в соответствии с размерами платы, была разработана модель корпуса. Рендеры корпуса можно увидеть ниже.

Рендер корпуса (все элементы)

Рендер корпуса в сборе

После печати и обработки корпуса получаем следующий результат.

Собранное устройство

Подключенное устройство с индикацией уровня загрязнения воздуха

Ссылка на STL файлы для печати на 3D принтере будет размещена в конце статьи.

Разработка программного обеспечения (микро ПО) устройства


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

Самые большие трудности для пользователя возникают при первоначальной конфигурации устройства, особенно если речь идет о ESP8266 и первоначальной настройки сетевого подключения, так как устройство обладает только Wi-Fi интерфейсом, и конфигурация выполняется путем подключения к точке доступа, созданной устройством.

Как это обычно происходит:

  • Пользователь должен подключиться к Wi-Fi точке доступа, созданной устройством.
  • Пользователь должен узнать IP адрес подключения в документации, если его нет, то нужно зайти в конфигурацию Wi-Fi и посмотреть IP основного шлюза текущего подключения, чтобы перейти по нему для конфигурации.
  • Открыть браузер.
  • Ввести в адресной строке IP адрес для перехода на страницу конфигурации.

Слишком много действий, поэтому для упрощения жизни пользователя будем использовать технологию Captive portal для мгновенного доступа к странице конфигурации при подключении к точке доступа устройства.

Перейдем к техническим сущностям. Так как для разработки используется среда Arduino IDE, соответственно для работы с датчиком BME680 используется библиотека для Arduino, которая опубликована в официальном репозитории на GitHub. Библиотека имеет некоторые нюансы при использовании в Arduino IDE, но они хорошо описаны в Readme.

Библиотека BSEC достаточно понятна и в ней разберется даже начинающий «Ардуинщик», но стоит обратить внимание на некоторые моменты в инициализации подключения датчика по I2C шине. В примере описан следующий метод инициализации, однако этот метод не всегда работает c использованием модуля датчика, который применен в этой статье.

iaqSensor.begin(BME68X_I2C_ADDR_LOW, Wire);

Если обмен с датчиком не выполняется, то необходимо использовать следующий метод инициализации:

iaqSensor.begin(BME68X_I2C_ADDR_HIGH, Wire);

И для общего развития ниже описан пример получения данных с датчика BME680:

String ouput;

if (iaqSensor.run()) {                     // If new data is available
    output = String(time_trigger);
    output += ", " + String(iaqSensor.iaq);
    output += ", " + String(iaqSensor.iaqAccuracy);
    output += ", " + String(iaqSensor.staticIaq);
    output += ", " + String(iaqSensor.co2Equivalent);
    output += ", " + String(iaqSensor.breathVocEquivalent);
    output += ", " + String(iaqSensor.rawTemperature);
    output += ", " + String(iaqSensor.pressure);
    output += ", " + String(iaqSensor.rawHumidity);
    output += ", " + String(iaqSensor.gasResistance);
    output += ", " + String(iaqSensor.stabStatus);
    output += ", " + String(iaqSensor.runInStatus);
    output += ", " + String(iaqSensor.temperature);
    output += ", " + String(iaqSensor.humidity);
    output += ", " + String(iaqSensor.gasPercentage);
    Serial.println(output);
  }

Описывать весь код прошивки в этой статье я не стану, там нет ничего необычного, прошивка написана с применением стандартных технологий, примеры которых вы найдете в среде разработки Arduino IDE.

Пользовательский интерфейс


Как уже было описано ранее, устройство должно иметь веб-интерфейс для конфигурации. Каких-либо особенностей при использовании интерфейса нет. Ниже представлены скриншоты некоторых страниц.

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

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

Главная страница устройства

На главной странице устройства в реальном времени отображаются следующие параметры:

  • Время работы устройства, с момента включения. Формат ДД: ЧЧ: ММ: ММ.
  • Статус MQTT. Статус «подключен» отображается только в момент отправки данных на MQTT сервер. Постоянного соединения с MQTT сервером устройство не имеет.
  • Данные сенсора. Параметр «точность датчика» имеет пять значений от 0 до 4, чем выше значение, тем точнее данные. Данный параметр зависит от накопленной внутренней статистики датчика BME680.
  • Активация светодиодного индикатора и регулировка яркости.

Страница конфигурации передачи данных с использованием MQTT протокола

Страница конфигурации передачи данных по MQTT. Думаю, что здесь всё понятно и описание излишне.

Интеграция с Home Assistant


Для интеграции нашего устройства в Home Assistant, как бы это странно не звучало, используется протокол MQTT.

Карточка нашего устройства на приборной панели Home Assistant

Для интеграции в Home Assistant нужно сделать два простых шага:

  • В конфигурационном файле указать параметры датчиков устройства.
  • На панели Home Assistant создать новые карточки.

Ниже пример кода интеграции в файле configuration.yaml. В примере указано имя топика "qsens/jsondata", формат данных JSON.

mqtt:
  sensor:   #датчик качества воздуха
    - name: "Датчик температуры"
      unique_id: 5bc54f8b-791-46fdg97-bfce-e98e92409d3e
      state_topic: "qsens/jsondata"
      unit_of_measurement: "°C"
      value_template: "{{ value_json.temp }}"
      device_class: temperature 
    - name: "Датчик влажности"
      unique_id: 5bc54f8b-7d741-4df99-bfce-e98e92409d3e
      state_topic: "qsens/jsondata"
      unit_of_measurement: "%"
      value_template: "{{ value_json.hum }}"
      device_class: humidity
    - name: "Датчик атмосферного давления"
      unique_id: 5bc54f8b-7d671-47fg74-e98e924
      state_topic: "qsens/jsondata"
      unit_of_measurement: "mmHg"
      value_template: "{{ value_json.pressure_sensor }}"
      device_class: pressure
    - name: "Датчик качества воздуха IAQ"
      unique_id: 5bc54f8b-7d7078671-47fg74-e98e924
      state_topic: "qsens/jsondata"
      unit_of_measurement: "ed"
      value_template: "{{ value_json.ppm_iaq }}"
      device_class: aqi
    - name: "Датчик качества воздуха TVOC"
      unique_id: 5bc54f8b-7d70734671-47fg74-e98e924
      state_topic: "qsens/jsondata"
      unit_of_measurement: "ppb"
      value_template: "{{ value_json.ppm_TVOC }}"
      device_class: volatile_organic_compounds
    - name: "Датчик качества воздуха CO2_Eq"
      unique_id: 5bc54f8b-778671-47fg74-e98e924
      state_topic: "qsens/jsondata"
      unit_of_measurement: "ppm"
      value_template: "{{ value_json.qual }}"
      device_class: carbon_dioxide

Код карточки типа "сетка" для отображения стрелочных индикаторов:

square: true
type: grid
cards:
  - type: gauge
    entity: sensor.datchik_kachestva_vozdukha_iaq
    severity:
      green: 0
      yellow: 100
      red: 200
    needle: false
    min: 0
    name: iAq
    max: 500
    unit: ' '
  - type: gauge
    entity: sensor.datchik_kachestva_vozdukha_co2_eq
    name: CO2_Eq
    unit: ppm
    needle: false
    severity:
      green: 0
      yellow: 800
      red: 1500
    max: 3000
  - type: gauge
    entity: sensor.datchik_kachestva_vozdukha_tvoc
    name: TVOC
    needle: false
    severity:
      green: 0
      yellow: 660
      red: 1431
    min: 0
    max: 500

Код карточки "объекты" для отображения основных параметров устройства:
type: entities
entities:
  - entity: sensor.datchik_temperatury
  - entity: sensor.datchik_vlazhnosti
  - entity: sensor.datchik_atmosfernogo_davleniia_2
  - entity: sensor.datchik_kachestva_vozdukha_co2_eq
  - entity: sensor.datchik_kachestva_vozdukha_tvoc
  - entity: sensor.datchik_kachestva_vozdukha_iaq
title: Система мониторинга среды
footer:
  type: graph
  entity: sensor.datchik_kachestva_vozdukha_co2_eq
  detail: 2

Заключение


В итоге у нас разработано и собрано компактное устройство для мониторинга качества воздуха в помещении по цене не более $13. Устройство отлично интегрировалось в автоматизацию управления приточной вентиляцией в качестве источника данных загрязнения воздуха. Ниже предоставлен график, на котором показана эффективность работы приточной вентиляции в автоматическом режиме.

Общая оценка качества воздуха, при работе проточной вентиляции в автоматическом режиме


Зеленым обозначен период работы вентиляции в автоматическом режиме.

Спасибо всем, кто дочитал до конца! Вы молодцы!

Файлы проекта:






Возможно, захочется почитать и это:


Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 25: ↑24 и ↓1+33
Комментарии27

Публикации

Информация

Сайт
timeweb.cloud
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия
Представитель
Timeweb Cloud