Реверс умных лампочек 2: Голос машин
Какое-то время назад занимался реверс-инжинирингом вай-фай лампочек по 100 рублей/штука. Мне так понравилось, что даже пересадил «мозги» розетке. А недавно решил приспособить и «сердце», то есть блок питания. Как раз совпало с желанием автоматизировать свет в ванной. Простая переделка обернулась загадкой дыры. Что ж, если вы готовы, то под катом мы в нее окунемся...
Введение
Чтобы совсем не уходить в сумбур, немного обозначим проблему. Итак, мне понадобилось автоматизировать освещение ванной по движению. Можно купить отдельные модули микроволнового датчика движения и умного реле. Но ведь так неинтересно… А интересно взять кусок умной лампочки, которое мы теоретически (и немного практически) изучали, прикорячить esp8266 и ld2420 вместе с модулем реле и запихнуть все это в основание корпуса лампочки. И чтобы можно было повесить это в локальный умный дом Hassio. Изначально также подумал добавить аналоговый датчик угарного газа, так как имеется газовое оборудование (потому сразу отказался от чипа «мозгов» лампочки — у него нет аналогового пина).

Почему просто не вставить ld2420 и не подключить к цепи той самой копеечной лампочки (прошив мозги)? Причин несколько. Первая — скучно. Вторая — скучно конструкция итак перегружена по тепловыделению. Чахлые неизолированные преобразователи греются неслабо, и вешать дополнительную нагрузку в виде ld2420 не хотелось. В третьих, чипы управления bk7231n достаточно хилые, а прошивка сыровата для считывания датчиков по uart. А мне хотелось именно включать свет в зависимости от удаления объекта от лампочки, и чтобы можно было все поднастроить на лету. Ах да! Чип прошивается ESPHome. Благодаря этому можно гибко конфигурировать настройку датчиков и интеграцию в локальную сеть.

В общем, исходя из выясненной схемы питания линию 3V3 для питания чипа решил оставить без изменений, а вот линию 110V, от которой питается светодиодный драйвер решил переделать на 5 (как уже делал ранее на макете) и повесить соответствующее реле.

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

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

На этом этапе идея с датчиком газа как-то сама отпала, ведь разобрав плафон, я увидел что он довольно герметичен, а значит показания датчика не будут сильно полезны. Впрочем, на сенсор влажности надежда еще была...
Так что первым делом я решил разработать модель крышки с пазами под датчики влажности, присутствия, освещения и контроллер. Для этого я нашел модели моих плат в сети (спасибо всем причастным инженерам), а затем раскидал их таким образом, чтобы все поместилось и было более-менее удобно размещать во время сборки (и даже более-менее герметично сделал, с колпачком).


С первого раза не особенно хорошо получились отверстия для ножек фотосенсора, но их легко расширил, вставив его нагретым. Остальные компоненты поместились достаточно плотно.
В корпус лампочки я не сильно попал, он оказался какой-то хлипкий, из крошащейся пластмассы (в местах, где не было алюминия). Переделывать концепцию стало жутко лень, и я решил просто применить клей для смартфонов (B-7000) во время сборки. А теперь можно перейти к соединению электронных модулей.
Чистая цифровая душа/гнилые киберпотроха
Закономерно спросить, а на кой там этот датчик освещенности? А я отвечу, что таким образом хотел отслеживать сгорание лампочки. Реле включено — лампочка нет — уведомление на телефон о смене лампочки через умный дом. Просто и понятно. Датчик температуры и влажности тоже предполагался для косвенной телеметрии времени включения воды. Сразу скажу, вешать его оказалось бессмысленно — в плафоне он показывает по сути температуру нагреваемого лампочкой плафона и больше ничего. Надежда все еще осталось, но с учетом усложнения реализации — возможно, стоит делать поправку на рост температуры. А так в целом, можно и по расстоянию до объекта с датчика присутствия определять. Не воду, конечно, но нахождения человека внутри душа так точно (или может, кота...).
В первую очередь я запаял ESP8266 со стандартной обвязкой + UART программаторной, сразу залив пустую прошивку ESPHome без пинов. Это позволяет избежать неожиданных хлопот с «боевой» прошивкой в дальнейшем, так как устройство уже видит сеть и прошивается по воздуху (а значит большинство проблем с пинами обвязки нивелируется).

Схему я прикинул в уме. Все равно нужно было просто раскидать модули по пинам контроллера. Нашел в сети образцы и спаял соответствующим образом, выведя провода.



Реле соединял способом, описанным в статье про удлинитель Франкенштейна — через «понижающий» светодиод.
При этом питание ESP здесь осуществляется через неизолированный преобразователь на 3V3, как и датчик AM2320 и сенсор присутствия LD2420. Туда же повесил фоторезистор. От переделанной линии 5V запитал реле. Далее собрал все в корпус. Оставалась только прошивка (так я думал).
Прошивку я накидал за 5 минут. С реализацией логики локальной автоматизации света не заморачивался (и слава Богу!).
uart:
tx_pin: GPIO15
rx_pin: GPIO13
baud_rate: 115200
ld2420:
text_sensor:
- platform: ld2420
fw_version:
name: LD2420 Firmware
- platform: template
name: ${friendly_name} uptime
lambda: |-
int seconds = (id(uptime_sec).state);
int days = seconds / (24 * 3600);
seconds = seconds % (24 * 3600);
int hours = seconds / 3600;
seconds = seconds % 3600;
int minutes = seconds / 60;
seconds = seconds % 60;
return { (String(days) +" д. " + String(hours) +" ч. " + String(minutes) +" мин.").c_str() };
icon: mdi:clock
update_interval: 113s
sensor:
- platform: ld2420
moving_distance:
name : Moving Distance
- platform: dht
pin: GPIO14
temperature:
name: "Температура в ванной"
id: bathroom_tempreture
humidity:
name: "Влажность в ванной"
id: bathroom_humidity
update_interval: 60s
- platform: resistance
sensor: light_sensor
configuration: DOWNSTREAM
resistor: 10kOhm
name: Resistance Sensor
- platform: adc
id: light_sensor
pin: A0
- platform: uptime
name: ${name}-uptime
id: uptime_sec
internal: true
- platform: wifi_signal
name: ${name}-WiFi-Signal"
update_interval: 60s
binary_sensor:
- platform: ld2420
has_target:
name: Presence
- platform: gpio
pin: GPIO16
name: "Присутствие в ванной"
select:
- platform: ld2420
operating_mode:
name: Operating Mode
number:
- platform: ld2420
presence_timeout:
name: Detection Presence Timeout
min_gate_distance:
name: Detection Gate Minimum
max_gate_distance:
name: Detection Gate Maximum
# See "Number" section below for detail
gate_select:
name: Select Gate to Set
still_threshold:
name: Set Still Threshold Value
move_threshold:
name: Set Move Threshold Value
button:
- platform: ld2420
apply_config:
name: Apply Config
factory_reset:
name: Factory Reset
restart_module:
name: Restart Module
revert_config:
name: Undo Edits
switch:
- platform: gpio
pin: GPIO04
inverted: True
restore_mode: RESTORE_DEFAULT_ON
id: bathroom_light_switch
name: "Свет в ванной"
В ней учтены показания с различных сенсоров и только. При включении питания (щелкнул выключатель), лампа переходит во включенный режим. Дополнительно снимаются показания сенсоров света и температуры с влажностью. На датчике присутствия завязана логика работы освещения, но уже через верхнеуровневые автоматизации в HomeAssistant.


Далее начались тесты, и результаты их оказались… интереснейшие.
Во-первых, при выключенном реле устройство начинало… бухтеть. Ну не знаю, как объяснить. Как будто какие-то звуки соединения начинали излучаться как у dial-up модема, но сам звук другой, что-то вроде тихой сирены (какой-то «вращающийся» звук, тоже с затиханиями и сменами тональности, как у модема). Опять же, источник излучения мне не удалось определить. Но звук был настолько слышен, что я его различал в соседней комнате. При включенном реле звук пропадал...
Во-вторых, LD2420 вел себя странно. Устройство включается в сеть — датчик недоступен.

Перезагружаешь тестово на столе — заводится. Перезагружаешь в патроне от лампы — ничего не меняется.

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

Изначально подумал, что из-за отсутствия нагрузки преобразователь уходит в режим низкой частоты, отчего шумит дроссель по питанию уже в слышимом диапазоне. А проблема LD2420 из-за того, что висит сенсор на слабеньком преобразователе 3V3, и, возможно, питание при старте шалит. Решил убить двух зайцев разом — пересадить LD2420 на линию 5V к реле через стабилизатор LM1117. Сделал пайку навесом прям на сенсоре.

С одной стороны, капризный сенсор получает питание через привычный силовой тракт. Со второй, линия 5V получает постоянного потребителя в 50мА (судя по даташиту к датчику). Учитывая, что реле кушает 82 мА в активированном состоянии, это вроде должно покрывать «холостой режим». Но угадайте, что случилось дальше...
Я ожидал чего угодно — что линия 5V что-нибудь спалит (она пошаливала по напряжению без нагрузки), что контроллер через дроссель начнет исполнять лунную сонату или, наконец, заткнется. Но не поменялось ровным счетом ничего. То есть вообще ничего. LD2420 все так же продолжил делать мне мозги, а схема с реле продолжила щебетать на своем инопланетном языке свои протоколы...
Повестка дня
И тут я понял, что без бутыл народа не разберемся. Потому приглашаю к обсуждению людей толковых и знающих. Я думаю, как-то можно побороть эти проблемы, но моих знаний в области аналоговой электроники как будто не хватает (хотя будь у чипов нормальные даташиты, может и разобрался бы), при том что в схеме неизолированного преобразователя и нет ничего — дроссель да конденсатор по входу и выходу кроме самого контроллера. Но портить настроение эта штука умеет. Другой вопрос касается датчиков LD и их капризов. Главным образом это касается капризов по питанию и как их бороть. И реальная загадка дыры, почему поведение отличается в собранном состоянии и навесном.
В целом, если бы не звук, можно было бы хотя бы пользоваться цепью 110В для реле + вешать датчики, не слишком капризные по питанию (AM2320 не подводил, какой-нибудь RCWL-0516 для присутствия попробовать, в конце концов). Но И ЗВУК, И ФЕЙЛЫ ЗАПУСКА вместе я в готовом устройстве не потерплю, да и любой уважающий себя диайвайщик, я думаю, тоже. И обидно, что в принципе работающее устройство наделено такими недостатками… Но поскольку цена все еще копеечная, а неизвестные мне варианты все еще не перебраны, предлагаю их накидать. С вас варианты, с меня «Мечтают ли андроиды об электроовцах?».

В любом случае, спасибо за внимание, дорогие читатели!
| +73 |
5142
93
|
но всё же мне проще щёлкнуть тумблером перед заходом в туалет, чем связываться с программированием
Прям очень удобно. Настолько привыкаешь, что в гостях приходится выходить и искать где включить свет.
Управление светом — это один из простых но очень прям удобных сценариев.
Еще хорошо бы окно открывать, и закрывать, когда кто-то начинает курить, холодно, приехал мусоровоз итп, но это существенно сложнее