Интернетовская мудрость гласит: Сначала ты молодой, а потом ходишь и выключаешь за всеми свет. И хоть мои многочисленные домашние свет в санузлах за собой выключать давно научились, работающие постоянно вентиляторы там достают безмерно. Не то чтобы электричества жалко, а шумят, и вообще непорядок.
Управление вентилятором в каждом храме фаянса выведено на отдельный выключатель. Ибо если спарить его со светом, как правило, в перерыве помещение не успевает подготовиться к использованию очередным, хм, пользователем.
Исходное ТЗ было сделать реле времени. Казалось бы все уже придумано сто раз. Активно не хотелось менять клавишу выключателя на кнопку, да и вообще что-либо вкорячивать в его стенную коробку. Тесно там. А под подвесным жестяным потолком места много, вуайеристам сдавать можно. Только форматировать их предварительно. Электроники туда тоже можно упихать порядочно.
Значит выключатель не меняю и нарушаю лишь одно основополагающее правило. Про падающее тело, пораженного током электрика, которое должно отключать нагрузку. Честно пытался сначала найти аналоговое решение. Гуглеж с запросом "запуск одновибратора по фронту и по спаду" вывел в т.ч. и на тему на этом форуме. Да только в той схеме надо выставлять одним резистором длительность импульса по фронту, а другим - по спаду. Потом все это закиснет, номиналы уедут, и аллё.
Без микроконтоллера точно не обойтись. Там есть PinChange прерывания, которые снимут вопрос. Набрал мешок DigiSpark ATTiny85. И 13 хватило бы, но уж больно лениво вокруг программатора плясать. А тут воткнул в USB и прошил.
Напрограммил светодиодик с таймером на замыкание/размыкание, возрадовался собственной хитрости.
Потом таки одумался. Это ж нежную слаботочку надоть стенным выключателем коммутировать. А там рядом фазный провод, наводки всякие - ужос, гроб, кладбище.
Задача усложнилась, стал гуглить детектор переменного напряжения - хрен там. На родных просторах упоминания о таких модулях есть, но они не импортозаместились. Модули, в смысле. На редите нарыл схему, собрал. Конденсатор там лишний, я его зачеркнул. Меандр нужен, а не порнография.
После переписывания кода заработало. Идея состоит в ловле двух событий: появились прерывания и исчезли прерывания. Без Arduino.h не обошлось. Нужна была millis(), а только настройки таймера под нее из исходников выдирать без бутылки я не буду. И оно дальше пригодилось при следующем изменении ТЗ.
Зато придумал способ сооружать хоть десяток проходных переключателей на двух проводах к каждому. Скорее всего, все тысячу лет назад придумали китайцы, только не получилось нагуглить в остатках сети.
Далее захотелось побороться с родительской болью. Как известно, всяческие рилсы лучше всего заходят молодому поколению, когда оно сидит на горшке. Опционально - с сигареткой. Когда поколение было совсем мелким, помогали угрозы и отключение вайфая накрайняк - пулей вылетали. Сейчас же сооружение LTE глушилки будет негуманно по отношению к соседям, да и незаконно это. В итоге имеем постоянную очередь как на стадионе или в зоне прилета. Хоть толчки платными делай. Но теперь "вкалывают роботы
- счастлив человек!"
По включению света начинается отсчет пятнадцати минут. Если по истечению свет еще включен... Нет не буду его выключать, чтобы детеныш не решил, как в том анекдоте, что у него глаза лопнули. Начинает играть бодрая музыка/звуки из мемов по кругу в случайном порядке. Заодно пристроен один из давно сдуру купленных модулей DFPlayer Mini.
Несколько дней устройство уже работает. Семья довольна.
Схему и код под platformio прилагаю. Наговнокожено изрядно, ибо писалось в свободное время левой ногой. Наоптимизировать можно раза в три по размеру. Да, больно думать о том как восьмибитный avr перабатывает многократно четырехбайтные числа. Прям как дедушка, который вечером выкхекивает случайно утром проглоченную сливовую косточку. Но работает же. И watchdog туда всажен чисто чтобы был.
Да еще: Поскольку связь с плейером специально делалась односторонней, количество папок-сетов на карточке захардкожено дефайном. Псевдослучайный ассемблер я не осилил, avr-gcc его не прожевывает. Ссылка на источник в коде имеется. Может кто поможет его победить? Хотя оно там в такой момент вызывается, что лишние шесть тысяч тактов рояль не играют.
Здесь свой полный искрометного сортирного юмора длиннопост, наконец, завершаю.

