Всем известно, что в Краснодарском крае, особенно летом, без кондиционера никак. Зимой они тоже помогают экономить нервы и средства. Тут очень важен подогрев.
Я установил в свою 3-комнатную квартиру три кондиционера DEXP AC-CH9ONF. Это самый простой и бюджетный вариант, я не ожидал от него особых возможностей.
Поначалу все устраивало, но учитывая, что в квартире реализован простенький умный дом на основе Zigbee-контроллера SLS, хотелось бы управлять кондиционерами дистанционно.
Управление по IR командам сразу забраковал, так как это неудобно.
Почему?
Отсутствие обратной связи: невозможно понять, включен ли кондиционер в данный момент.
Ненадежность сигнала: IR сигнал может потеряться по пути, и кондиционер не включится, хотя мы думали, что это сделали.
Ограниченный контроль: алгоритм работы и контроль температуры остаются прежними.
Проблемы с алгоритмом
Режим охлаждения: после отключения компрессора (по достижении заданной температуры) кондиционер продолжает обдув (типа просушки?), в результате чего в комнате повышается влажность, появляется неприятный запах и становится очень душно.
Режим нагрева: в межсезонье, когда хочется немного согреться, кондиционер включается на подогрев, работает 15 минут и отключается. Датчик внутри считает, что в комнате тепло, хотя на самом деле это не так. Эффективность нагрева очень низкая.
Решение
Когда стало совсем холодно, и я с двумя детьми начал подмерзать — решил заняться доработкой кондиционеров.
Разобрал плату управления и нашел все дорожки, ведущие к основным органам управления:
Транзистор управления реле включения компрессора
Транзистор управления реле вентилятора внешнего блока
Транзистор клапаном обратного хода внешнего блока (обогрев/охлаждение)
Управление вентилятором внутреннего блока
Для управления использовал любимые контроллеры ESP32 — WeMos (Lolin) S2 mini.
Удобный форм-фактор
Много GPIO
Встроенный LDO-стабилизатор питания
Перерезав дорожки бортового контроллера к органам управления, я подключил ESP32. Все подключения удалось выполнить напрямую без дополнительной гальванической развязки (кроме одного момента, об этом ниже).
Далее я написал логику работы:
Получение температуры с внешнего ZigBee-датчика в комнате
Включение/выключение кондиционера по заданной температуре (гистерезис около 0.5 градусов)
Первая прошивка была залита уже через час.
Я предусмотрел заливку прошивки удаленно через Wi‑Fi — OTA, потому что каждый раз разбирать кондиционер не очень удобно.
Сложности
Управление внутренним вентилятором: он управляется через тиристор, а не транзистор (как я предпологал), и подача на него простого ШИМ разных частот не давала нужного результата. Оказалось, что это мотор переменного тока, и управляется через ШИМ 50Гц, срезом полупериодов. Это своего рода диммирование с открытием тиристора в нужный момент полупериода сети, что и ограничивает напряжение и скорость вентилятора. об том как это работает неплохо расписано например тут.
Для реализации этого метода в контроллер должен приходить оцифрованный сигнал 100Гц — удвоенная частота сети, характеризующая тайминг каждого полупериода и прохождение через ноль.
Мне пришлось снова разобрать кондиционер, найти эту цепь и вывести сигнал в контроллер. Так как на плате контроллер 5В, я зацепил его через резистор 5кОм, чтобы ESP32 не нервничал от такой амплитуды (он работает от 3.3v и не имеет защиты 5v tolerance, однако ограничивающего резистора вполне достаточно).
Получение температуры: в реализации умного дома на этом объекте нет локального MQTT, используется облачный сервис, который сразу дружит все устройства с Яндекс Алисой. Но, если пропадет интернет, хотелось бы, чтобы кондиционер работал дальше?
Я прочитал про HTTP API SLS и понял, что можно получать состояние датчиков прямо с контроллера. Так и сделал.
Результат
Я реализовал простой веб-интерфейс с основными элементами управления и возможностью отладки (пощелкать релюшками, порулить скоростью, задать температуру и режим работы).
Теперь в режиме обогрева очень тепло: контроль по внешнему датчику.
В режиме охлаждения нет посторонних запахов (я почти сразу останавливаю вентилятор после отключения компрессора — 20 сек).
В комнате тишина, в режиме ожидания ничего не крутится и не шумит.
Четкий (в рамках гистерезиса 0.5 градуса) контроль состояния каждой комнаты.
Далее я подключил контроллер ESP32 к облачному MQTT и пробросил все параметры в умный дом Яндекса. Теперь Алиса тоже рулит кондиционером и сообщает в каком он текущем состоянии.
Внимательные люди могут заметить, что нет ни слова про жалюзи кондиционера?
Управлять ими не так и сложно, там шаговый мотор. Но я никогда их не трогал, и даже наоборот руками подправлял так, как мне нужно. Так что, они просто всегда открыты и направлены в правильном направлении.
Всем благ! Интересны комментарии к реализации :)