» » » Делаем «умный» контроллер для кондиционера на ESP8266

 

Делаем «умный» контроллер для кондиционера на ESP8266

Автор: admin от 13-08-2018, 04:30, посмотрело: 42

Наступило лето, с ним — жара, а также время включать кондиционеры. А если вы увлекаетесь современными технологиями и умным домом, то управление кондиционерами хочется делать как-то по-умному (или хотя бы по-современному). Ниже — ряд заметок о моей попытке интегрировать погоду в доме с голосовым управлением и кросс-платформенным интерфейсом.



Задача



В квартире стоят четыре кондиционера, ими нужно научиться управлять:




  • Из веб-интерфейса (у меня это Home Assistant, крутящийся на отдельном Raspberry Pi, но в идеале хочется простого подключения к любой системе);

  • Голосом (Google Assistant подойдёт, потом подумаем об Алисе);

  • Скриптами;

  • Дёшево...



Sensibo Sky

Примерно $100 на комнату, нативно работает с Google Assistant и IFTTT, красиво выглядит, но всё равно дороговато.



Делаем «умный» контроллер для кондиционера на ESP8266

tado° — аналогично (и ещё дороже).



Xiaomi Aqara / Mi Home, Broadlink RM Pro / Mini



Универсальные ИК-передатчики, некоторые теоретически поддерживают нужные кондиционеры «из коробки», с грехом пополам интегрируются с Home Assistant, но в целом — так себе решение, хоть и ценник уже гораздо ближе к доступному ($20-35 за комнату, в зависимости от возможностей). Да и приложения на китайском языке (в некоторых случаях) — это не то, к чему я стремился.



Делаем «умный» контроллер для кондиционера на ESP8266

DIY



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



Выбор компонентов



Тут есть над чем подумать, но в целом нам понадобится:



Железо



Контроллер



Тупо берём ESP8266, а для простоты прошивки и обеспечения питанием воспользуемся D1 mini. Управлять системой, очевидно, будем через WiFi.



Делаем «умный» контроллер для кондиционера на ESP8266

ИК-передатчик



Для прототипа воспользуемся простым ИК-светодиодом, сопротивлением и транзистором, потом подумаем, как это можно улучшить.



Датчик температуры



С ним веселее, можно задавать целевую температуру, и делать автоматическое включение/выключение. Для начала тупо возьмём DHT22.



Делаем «умный» контроллер для кондиционера на ESP8266

Экран



На него выведем текущее состояние системы (для отладки), а может быть и текущий ip-адрес (вдруг пригодится?).



Делаем «умный» контроллер для кондиционера на ESP8266

Софт



IDE



Реализовывать всё будем в Arduino IDE (с которой я никогда до этого не работал), используя открытые библиотеки.

Сильно позже, когда проект уже работал, я перешёл на Visual Studio Code с плагином PlatformIO.



Протокол



Общаться с Home Assistant будем через MQTT (библиотека PubSubClient), т.к. это открытый протокол, и для него есть специальный компонент.



Конфигурация будет выглядеть, например, как-то так:



climate:
  - platform: mqtt
    name: Living Room HVAC
    modes:
      - "off"
      - "auto"
      - "heat"
      - "cool"
      - "dry"
      - "fan"
    swing_modes:
      - "auto"
      - "off"
    fan_modes:
      - "auto"
      - "low"
      - "medium"
      - "high"
    mode_command_topic: "livingroom/meteo/mode/set"
    mode_state_topic: "livingroom/meteo/mode"
    temperature_command_topic: "livingroom/meteo/target/set"
    temperature_state_topic: "livingroom/meteo/target"
    fan_mode_command_topic: "livingroom/meteo/fan/set"
    fan_mode_state_topic: "livingroom/meteo/fan"
    swing_mode_command_topic: "livingroom/meteo/swing/set"
    swing_mode_state_topic: "livingroom/meteo/swing"
    current_temperature_topic: "livingroom/meteo/temperature"


Управление



Библиотека HeatpumpIR поможет нам отправлять сигналы на кондиционер (модель кондиционера пока захардкодим).



Разное



Понадобятся ещё библиотеки для таймера, для работы с датчиком температуры и с экраном, но это уже мелочи. Привычным жестом добавим WiFiManager и ArduinoOTA, чтобы обновлять прошивку через веб-интерфейс, а не USB.



Прототип (00)



Покупаем на алиэкспрессе случайные компоненты, собираем вместе на бредборде, тестируем идею.



Делаем «умный» контроллер для кондиционера на ESP8266

Понимаем, что:




  • Экран был заказан слишком большой, и у него слишком много ног.

  • Один светодиод бьёт не очень далеко, и не очень надёжно.



Но в целом идея работает! В интерфейсе Home Assistant появляется «родной» компонент HVAC, а значит, управление из любой точки мира у нас уже «в кармане». Родная интеграция Home Assistant с Google Assistant добавляет нам голосовые команды и обратную связь: можно у ассистента спросить про температуру в комнате, и он ответит как целевую, так и текущую температуру.



Делаем «умный» контроллер для кондиционера на ESP8266

Изменение целевой температуры, скорости обдува и режима кондиционера в веб-интерфейсе тоже на месте (и, главное, работает!).



Делаем «умный» контроллер для кондиционера на ESP8266

Тестовый образец (01)



Поменяем пару компонентов: закажем экранчик поменьше, и чтобы работал через I2C (и библиотеку применим другую).



Делаем «умный» контроллер для кондиционера на ESP8266

Также заменим ИК-светодиод на готовый модуль.



Делаем «умный» контроллер для кондиционера на ESP8266

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



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



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



Делаем «умный» контроллер для кондиционера на ESP8266

Для проектирования я использовал EasyEDA, готовую продукцию заказывал на OSHPark (опять же, наверняка можно было найти более дешёвый вариант), и в результате получил примерно такое:






Делаем «умный» контроллер для кондиционера на ESP8266Делаем «умный» контроллер для кондиционера на ESP8266


Делаем «умный» контроллер для кондиционера на ESP8266

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



Что ж, уже неплохо, осталось добавить корпус. Для этого запускаем Blender, делаем кучку параллелепипедов, применяем ряд булевских операций…



Делаем «умный» контроллер для кондиционера на ESP8266

И отправляем на 3D-принтер.



Делаем «умный» контроллер для кондиционера на ESP8266

Итого, получилось дёшево (меньше $10 за экземпляр), гибко (будет работать с почти любым кондиционером), легко интегрируется, управляется голосом и через веб, стабильно добивает с пяти метров. В общем, примерно то, чего я и хотел.



Как бы всё это сделать чуть лучше?..



Серийная модель (02)



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




  • Датчик температуры можно взять поменьше размером и более точный, например, BME280, HTU21D или Si7021, что позволит повесить его на те же ноги, что и экран (I2C), заметно уменьшить размер готового устройства и упростить разводку печатной платы. На практике оказалось, что на тот же BME280 начинает сильно влиять нагрев самой ESP8266, и выдаваемые показания нужно корректировать.



    Делаем «умный» контроллер для кондиционера на ESP8266

  • (вытекает из первого пункта) Держать ESP8266 постоянно работающей — это не комильфо, нужно периодически уходить в Deep Sleep, лишь иногда просыпаясь для отправки показаний и приёма команд;

  • (вытекает из второго пункта) Обычный MQTT уже не очень подходит, нужно использовать MQTT-SN, чтобы управляющие команды запоминались и доставлялись на контроллер в момент пробуждения;

  • Реализация вышеперечисленных пунктов позволит сменить «проводное» питание на аккумулятор;

  • Текущий способ крепления компонентов к печатной плате (обычная пайка) является сложным в реализации и недостаточно гибок: имеет смысл припаять хедеры, чтобы те же датчики температуры можно было менять, как перчатки;

  • Наконец (в противоречие с предыдущим пунктом), всё-таки готовые модули — это хорошо и просто, но слегка громоздко, в идеале вместо D1 mini была бы голая ESP8266, а датчик температуры, кнопка и ИК-светодиоды были бы распаяны на одной плате (как это и делают в серийных продуктах), что позволило бы уменьшить размер устройства и его серийную цену;

  • Да и вообще, было бы здорово предусмотреть в прошивке возможность лёгкого выбора своей модели кондиционера одним кликом...



  • Заключение



    Это было славное приключение, и я многое понял. Например, я понял, почему серийные устройства стоят так дорого, и сколько сил нужно было бы приложить, чтобы выйти на один уровень с ними. С другой стороны, очень многое в этом проекте я делал впервые (работа в Arduino IDE, заказ печатных плат, создание модели для 3D-принтера), и получить этот опыт было бесценно. Исходники, впрочем, не покажу: мне за них достаточно стыдно :)



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


    Источник: Хабр / Интересные публикации

    Категория: Google

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

    Добавление комментария

    Имя:*
    E-Mail:
    Комментарий:
    Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
    Введите два слова, показанных на изображении: *