Подключаем светодиодную люстру к умному дому по ИК

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

Управление обычно осуществляется с помощью инфракрасного пульта. Реже встречаются модели с радиопультом, а в некоторых современных версиях добавлена возможность управления по Wi-Fi через облачное приложение.

Однако все эти «навороченные» «умные» модели стоят значительно дороже обычных. При этом управление через малопонятные китайские приложения выглядит довольно сомнительным решением: как правило, оно требует постоянного подключения к интернету и плохо интегрируется с локальными системами умного дома, например с Home Assistant.

Поэтому во время ремонта квартиры я выбрал бюджетные LED-люстры с инфракрасным управлением. А интеграцию с умным домом решил реализовать самостоятельно — с помощью самодельного ИК-передатчика на базе «народного» микроконтроллера ESP32.

Основные требования

Перед началом разработки я сформулировал несколько требований к будущему устройству:

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

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

Также было важно обеспечить достаточно мощный ИК-передатчик, способный уверенно работать в пределах комнаты.

Поскольку питание ESP32 с постоянно включённым Wi-Fi от батареи — утопия, я сразу решил сделать стационарное питание 5В.

Ну и наконец, устройство хотелось сделать в габаритах стандартного настенного выключателя.

Выбор железа

В качестве контроллера я выбрал ESP32-C3 в форм-факторе модуля WROOM. Низкая стоимость и встроенная поддержка USB, позволяющая обойтись без дополнительных микросхем для прошивки и отладки — для такого проекта это практически идеальный вариант.

В качестве ИК-излучателей я использовал диоды TSAL6200 от Vishay Semiconductors . Шесть таких диодов, подключённых через внешний транзисторный ключ, позволяют получить суммарную мощность излучения порядка 1 Вт. В результате устройство превращается в достаточно мощный ИК-передатчик, уверенно работающий в пределах комнаты.

Для локального управления были выбраны кнопки OMRON B3F, рассчитанные на один миллион нажатий согласно даташиту.

Приём ИК-сигналов реализован с помощью приёмника TSOP4838 от того же Vishay Semiconductors , работающем частоте 38 кГц, которая используется большинством бытовых ИК-пультов.

Полная схема устройства:

Реализация

Плату сразу решил делать «заводской». Как раз был заказ в Китай. Заодно прикупил там и другие компоненты, чтобы снизить итоговую стоимость проекта.

Размер платы получился 70×40, что с вполне укладывалось в требования размера выключателя.

Монтаж светодиодов я спланировал как в отверстия (THT), так и поверхностный (SMD). В дальнейшем можно ориентировать их в сторону светильника при различных вариантах размещения контроллера.

Плата поместилась в корпус 74*50*14, но я решил, что квадратный «выключатель» более привычен на вид.

Прошивка

Пробную прошивку я сделал в Arduino IDE, используя библиотеки IRremote и PubSubClient. К Home Assistant устройство подключил через MQTT. ИК-коды были зашиты прямо в прошивку. Сначала я хотел сделать простой WEB-интерфейс для конфигурации, но в итоге решил попробовать «классический» путь через ESPHome.

Оказалось, что разработка и отладка YAML-файла на ~350 строк — это настоящий ад по сравнению с обычным программированием, особенно когда в этот же файл приходится вставлять фрагменты кода на C.

После нескольких часов экспериментов появилась конфигурация, выполняющая следующие функции.

Устройство подключается по Wi-Fi к моему Home Assistant и регистрирует 7 кнопок:

  • Питание Вкл/Откл
  • Свет 100%
  • Свет 50%
  • Свет 10%
  • Свет тёплый
  • Свет нейтральный
  • Свет холодный

Также создаётся переключатель «Обучение». После его включения и нажатия нужной кнопки в Home Assistant можно отправить ИК-команду, нажав соответствующую кнопку на штатном пульте. Полученная команда записывается во флэш-память ESP32 и затем используется при нажатии этой кнопки в обычном режиме.

Функции аппаратных кнопок следующие:

  • Первая кнопка — управление питанием светильника (команда «Вкл/Откл»).
  • Вторая кнопка — по очереди отправляет команды 10% → 50% → 100% и управляет яркостью светильника.
  • Третья кнопка — по очереди отправляет команды «тёплый → нейтральный → холодный» и управляет цветовой температурой.

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

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

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

На некоторых ИК пультах отсутствует отдельная кнопка «нейтральный свет», поэтому я подготовил также альтернативную конфигурацию для шести кнопок управления светом.

В Home Assistant устройство отображается следующим образом.

Далее через Yandex Smart Home я подключил устройство к умной колонке Yandex. Теперь светом можно управлять голосовыми командами, например:

  • «Алиса, свет в спальне»
  • «Алиса, слабый свет в спальне»

Проблемы

Есть несколько вещей, которые мне не понравились в этом проекте.

Главная проблема — система умного дома не знает достоверного состояния люстры. Её можно включить или выключить штатным инфракрасным пультом, простым размыканием питания настенным выключателем или даже моим самодельным пультом с отключённым Wi-Fi. В этом случае действие происходит в обход системы умного дома.

Поэтому в системе умного дома нельзя использовать действие «включить люстру» как гарантированную команду. Фактически можно лишь продублировать кнопку пульта, отправив команду «Вкл/Откл». По этой же причине невозможно создавать надежные сценарии автоматического управления освещения.

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

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

Ещё один практический момент — выключатель не всегда удобно размещать в прямой видимости светильника. Например, в ванной комнате и туалете выключатели часто устанавливаются на внешней стене, и ИК-сигналу может просто не хватить дальности или прямой видимости. Поэтому в будущем стоит попробовать раздельную конструкцию с каким-нибудь радиовыключателем. Заодно применение покупного выключателя может положительно сказаться на внешнем виде решения.

Ну и, конечно, давно пора заменить «Алису» на локальный голосовой ассистент — но это уже совсем другая история.

Подводя итоги

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

В перспективе хочется поэкспериментировать с сенсорными кнопками и микроконтроллером ESP32-C6, чтобы заменить «тяжёлый» Wi-Fi на ZigBee. Хотя запитать устройство от батареек, постоянно ожидающее команд от системы умного дома, скорее всего не получится.

Все материалы к статье (схему, герберы, STL-файлы корпуса и исходники прошивок) я выложил на GitHub.

Спасибо всем, кто дочитал, и творческих успехов!

Отзывы сейчас закрыты, но вы можете оставить трекбек со своего сайта.

Комментарии закрыты.