Обучаемый IR-контроллер для управления двумя группами светильников
Эта конструкция выходного карантинного дня своими корнями уходит в мои публикации 4-х летней давности. Ну а поводом к написанию стало появившееся, благодаря карантину, время и желание все-же поделиться с народом архиполезной (как показало время) штукой.
Итак, четыре года назад я воплотил свои мечты в реальность о выключении света в комнате, не вставая с дивана. И самое главное, что выключатель работает, как и прежде. Даже внешний вид его не изменился. И для этого мне не пришлось использовать ни всякие радио-брелки, в изобилии предлагающиеся на Али и мгновенно теряющиеся в околодиванном пространстве, ни «умные выключатели», бесполезные без смарта, ни радиовыключатели-дублеры, которые нужно наклеивать на стену рядом с диваном. Все эти решения плодили новые избыточные сущности с их специфическими проблемами.
В комнате ничего не изменилось. Обычный с виду выключатель, который и работает как обычный выключатель: щелк-включил, щелк-выключил. Вот только теперь я еще и могу включать и выключать свет с любого, первого подвернувшегося под руку пульта. Весь секрет внутри:
За снятой клавишей, ровно под ее красным окошком, виден IR-приемник моего контроллера, построенного на Arduino. А сам контроллер с реле и блоком питания находится в выдолбленной в стене нише под выключателем.
За все время использования я несколько раз знакомил выключатель с новыми пультами, поскольку обзавелся проектором и ТВ-боксами. И для этого мне не пришлось даже вставать с дивана. Мое ноу-хау позволяет это делать, не напрягаясь. Об этом ниже.
За четыре года я настолько привык к такому удобству, что, конечно, решил применить это решение и на даче. Но, поскольку на даче в спальне два источника света, то схему пришлось переделать и в этом мне помог карантин, снабдивший меня домашним временем. Как показывает практика, управление двумя источниками света наиболее востребованное решение для большинства помещений, поэтому надеюсь, что мой опыт кому-нибудь да пригодится.
Схема невероятно простая, повторить ее сможет любой, умеющий держать паяльник, а вот результат будет радовать долгие-долгие годы. Детали также стоят копейки на том-же Али. Собрать-же можно, как и я, просто на макетке. Весь функционал контроллера в программе, но я ее выкладываю здесь в исходных кодах в свободное использование. Требование только одно — упоминание авторства при ее использовании на других ресурсах.
Схема:
Скетч:
// Klop 2020
#include <IRremote.h>
#include <EEPROM2.h>
#define led 13 // светодиод
#define speaker 9 // плюс пищалки
#define RECV_PIN 5 // нога на IRDA приемник
#define DP1 6 // нога на реле 1
#define DP2 7 // нога на реле 2
#define VIK1 2 // нога на выключатель 1
#define VIK2 3 // нога на выключатель 2
#define maxstack 8 // размер стека-1
#define maxbut 40 // максимум запомненных кнопок
byte maxpults;
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long butt[maxbut];
unsigned long buttstack[maxstack+1];
bool VikState[]={false, false};
bool sost[]={true,true};
bool flaglearn = false;
byte DP[]={DP1, DP2};
byte VIK[]={VIK1, VIK2};
//------------------------------------------------------------
void setup()
{
irrecv.enableIRIn(); // Старт ресивера IRDA
pinMode(DP1, OUTPUT); // выход на реле 1
pinMode(DP2, OUTPUT); // выход на реле 2
pinMode(VIK1, INPUT); // вход выключателя 1
pinMode(VIK2, INPUT); // вход выключателя 2
VikState[0]=digitalRead(VIK1);
VikState[1]=digitalRead(VIK2);
digitalWrite(DP1, HIGH); // зависит от реле!!! При необходимости заменить на LOW
digitalWrite(DP2, HIGH); // зависит от реле!!! При необходимости заменить на LOW
pinMode(speaker, OUTPUT);
pinMode(led, OUTPUT);
digitalWrite(led, LOW); // гасим светодиод
for (maxpults=0;maxpults<maxbut;maxpults++)
{EEPROM_read(maxpults*4, butt[maxpults]); // читаем значения пультов
if (butt[maxpults]==0) break;
}
}
//------------------------------------------------------------
void ChangeRelay(byte n)
{
sost[n]=!sost[n];
digitalWrite(DP[n],sost[n]);
}
//------------------------------------------------------------
void mybeep(byte n) // звук, n - число пиков
{
for (byte i=0;i<n;i++)
{analogWrite(speaker,150);
delay(100);
analogWrite(speaker,0);
delay(50);
}
}
//------------------------------------------------------------
void IFVIKSTATE()
{
for (byte i=0;i<2;i++)
{
if (VikState[i] != digitalRead(VIK[i])) // если изменилось состояние кнопки выключателя
{ ChangeRelay(i);
VikState[i]=!VikState[i];
delay(800);
}
}
}
//------------------------------------------------------------
void iflearn(unsigned long code) // проверка на включение режима обучения
{
for (byte i=0;i<maxstack;i++) // суем в стек LIFO код клавиши
buttstack[maxstack-i]=buttstack[maxstack-i-1];
buttstack[0]=code;
//если в стеке последовательность 3-х разных кнопок 3 раза, то переход в режим программирования
if ((buttstack[0]==buttstack[3]) && (buttstack[0]==buttstack[6])
&& (buttstack[1]==buttstack[4]) && (buttstack[1]==buttstack[7])
&& (buttstack[2]==buttstack[5]) && (buttstack[2]==buttstack[8]) && (buttstack[0]!=buttstack[1])
&& (buttstack[0]!=buttstack[2]) && (buttstack[1]!=buttstack[2]))
{ // переход в режим программирования
digitalWrite(led, HIGH);
mybeep(1);
flaglearn=true;
for (byte i=0;i<maxstack+1;i++) // чистим стек
buttstack[i]=0;
maxpults=0;
}
}
//------------------------------------------------------------
void IFPULTS()
{
if (irrecv.decode(&results))
{ if (flaglearn) { // если флаг обучения взведен, входим в режим обучения пульта
if ((maxpults>0) && (results.value==butt[maxpults-1]) || (maxpults==maxbut))
{ // режим обучения отключаем при дублировании последней кнопки
flaglearn=false;
digitalWrite(led, LOW);
mybeep(5);
butt[maxpults]=0;
for (byte i=0;i<=maxpults;i++) // записываем коды в EEPROM
EEPROM_write(i*4, butt[i]);
} else
{ for (byte i=0;i<maxpults-1;i++) // был ли такой код ранее?
if (butt[i]==results.value) goto m1;
butt[maxpults]=results.value; // такого кода ранее не было
maxpults++;
mybeep(maxpults%2+1);
}
} else
{ // обычный режим ловли кода кнопки пульта
iflearn(results.value);
for (byte i=0;i<maxpults;i++) // сравним полученный код с каждым из пультов
{ if (results.value==butt[i])
{ ChangeRelay(i%2); // если код совпал, переключаем соответствующее реле
break; // и выходим из цикла
}
}
}
m1:
delay(400); // убираем дребезг
irrecv.resume();
}
}
//------------------------------------------------------------
void loop()
{
IFVIKSTATE(); // проверяем выключатели
IFPULTS(); // проверяем пульты
}
Библиотеки IRremote.h и EEPROM2.h легко гуглятся на github.com. Разумеется, еще понадобится элементарный навык работы с Ардуино, но таких руководств на youtube сегодня пруд пруди.
Опишу работу.
Для знакомства контроллера с новыми пультами я применяю придуманный мной способ, который я назвал «виртуальный цифровой замок» и использовал еще 4 года назад. Для этого я, к примеру, беру любой пульт и последовательно нажимаю на нем три любые клавиши с интервалом не менее полсекунды. Затем повторяю эту операцию еще два раза. Это и есть код входа в режим обучения, в реальной жизни случайно так сделать практически невозможно (шифр можно изменить, изменив код программы).
В данной реализации зажжется светодиод на плате Ардуино и пищалка пискнет один раз. Один раз — это значит, что контроллер ждет нажатия кнопки на пульте, которая будет управлять первой группой светильников. После нажатия кнопки, контроллер запомнит этот код и пикнет два раза. Это, понятно, означает, что следует нажать другую кнопку, которая будет управлять второй группой светильников. После этого контроллер пискнет снова один раз. Значит можно программировать аналогичным образом и второй пульт. И так до 20 пультов. Но если этот пульт последний, то после 1 пика следует еще раз нажать последнюю нажатую клавишу. Тогда контроллер пискнет 5 раз, запишет все введенные коды во внутреннюю постоянную память, погасит светодиод и выйдет из режима обучения.
Процесс работы наглядно показан в видео:
Что понадобится купить:
Еще, для питания контроллера, конечно потребуется БП на 5V и возможность его запитать в месте расположения. Как раз с этим может возникнуть проблема, если проводка уже разведена и в месте расположения контроллера нет фазы или ноля. Конечно, для таких гуру электроники как Ksiman это не проблема, он и в прошлый раз показал как это сделать, но я в этом откровенно слаб и не рискую делать то, чего не понимаю.
Я использую такие БП:
В квартире я, для получения ноля в выключателе, использовал один из фазовых проводов от выключателя к светильнику, переподключив его к нолю на светильнике, пожертвовав, таким образом, одной группой. А на даче разводку делал сам, поэтому там уже все предусмотрено заранее.
Следует упомянуть такой момент. Если вдруг в наше отсутствие отключили свет, а потом включили. Как поведет себя эта конструкция? В этом случае реле встанут в положение «Выключено» и свет будет выключен.
На этом я заканчиваю, надеюсь, что ничего не упустил. А если упустил — спрашивайте, постараюсь ответить на все вопросы и дополнить статью.
Всем здоровья и с пользой провести свалившееся на нас карантинное время!
а если скомпановать, чтобы вместо выключателя влезло? без долбильных работ )))
Ну так это как по месту приложится. На даче, к примеру, я все собираюсь разместить в одном из светильников. А дома у меня стена кирпичная, толщиной в пол-метра, так что тоже без проблем ))
как реализована возможность включения/выключения света выключателем? Включил выключателем и потом можно управлять пультом? Тогда получается: выключил выключателем и пультом уже не включишь? Или выключатель работает по принципу кнопок?
Нет. Все работает независимо друг от друга. Можно пультом. Можно клавишей выключателя. Просто клавиша вверху, например, не означает постоянно, что свет включен (или выключен). Если свет выключен, то его можно включить пультом или клавишей. Если свет включен, то также его можно выключить пультом или клавишей. Т.е. и пульт и клавиши работают по принципу триггера — они просто переключают состояние лампы (вкл/выкл). На видео этот момент показан.
Не получится. Эта статья как раз о двойном выключателе. Одна кнопка пульта и одна клавиша выключателя работают с одной лампой, а другая кнопка пульта и другая клавиша выключателя работают со второй лампой. На видео все видно.
Лет 20 назад типа такого выключатели были в моде, тоже от любого ик пульта работали. Сапфир вроде назывались, могли ещё и диммировать лампы накаливания. И что интересно — без ардуино работали)
Лет 20 назад типа такого выключатели были в моде, тоже от любого ик пульта работали. Сапфир вроде назывались, могли ещё и диммировать лампы накаливания.
О нет, продукция Ноотехники работала совсем по другому принципу. Там долгое нажатие кнопки на пульте вводило выключатель в режим работы с пультом (инструкция). Это было актуально, пока дома не было IR управляемых устройств. А сейчас, нажав, к примеру, кнопку на пульте телека прибавления звука на несколько секунд, мы свой свет введем в режим светомузыки. Потому и канула в лету та технология. Здесь таких проблем в принципе нет.
Для того времени это был прогресс. Случайные срабатывания от регулировки громкости тв случались раза 2 за много лет. А в целом, было удобно. В лету канула потому что 20 лет прошло и сейчас умные дома с совершенно другой технологией и массой преимуществ, я лично уж точно к ик возвращаться не хочу, сейчас и ик пультом то пользуюсь раз в год) В общем, для начинающих автоматизаторов пойдёт, спасибо за статью!
да, на 8 пике были (наверное р затёрто), сенсорные с димированием, управление симистором, питание от разницы между своими полюсами (не требует фазы), хорошая штука была, и стоила прилично по тем временам, но жена сказала снять, тк сенсорное — враг, переключать удобнее, лежит лет 10 в ящике, нафиг теперь не нужен, думал как переделать, но я ардуинщик, а там места мало.
Я так и подумал. Но почему не симистор? Сильно меньше места, потребления у светильников не великое, да и ценник копеечный.
В квартире я, для получения ноля в выключателе, использовал один из фазовых проводов от выключателя к светильнику, переподключив его к нолю на светильнике, пожертвовав, таким образом, одной группой. А на даче разводку делал сам, поэтому там уже все предусмотрено заранее.
Так с дачей понятно. А как с квартирой. Ну смотри, схема стандартная. В подрозетник к выключателю где планируется использовать двойной выключатель заводят 3 провода. Первый скажем фаза вход (многие электрики кланы на снипы, госты и прочее и я часто встречал когда фаза идет напрямую на потребитель, а разрывают ноль), от выключателя на светильники идет по проводу после выключателя фаза. Ты отключил один, переведя его на ноль. Но выход у тебя то остался один провод. Как по нему ты управляешь двумя проводами? Стоп. Ты вообще отказался от 2-х источников света в таком раскладе? Но зачем тогда 2 реле? Или это уже фотки из дачного варианта?
Понял принял. Знакомым переделывал под сонофы. Пришлось половину коробок в стене вскрывать. Благо они под натяжным потолком и куски обоев они сохранили.
Бистабильное реле +n способов выключения/включения. Уже лет много юзаю.
Хоть по блубупу, хоть по вифи, хоть по инфраред, хоть по хлопку, хоть по касанию, хоть проведи рукой… И т.д.
Ну наехали на человека, даже грустно стало… Я так с удовольствием почитал, интересно сделано и толково, надо попробовать. Так для отключения питания некоторых элементов с давних лет такую китайскую штуку пользую, на кнопку от пульта программируется (обзоры на нее есть тут)
ИК не удобно же, пульт искать, целится. Блок питания кстати избыточный, куда проще таких малышей использовать 24х15мм стоит меньше доллара.
У самого подобная лампа на ESP8266 -> wifi MQTT-> Raspberry Pi-> Xiaomi Gateway->Xiaomi Button
Когда лежишь на диване, пульт от чего нибудь; телека, tv-box-а, кондея и т.д. всегда под рукой. Целиться тоже не нужно особо — направил в сторону стены с выключателем и все.
Блок питания кстати избыточный, куда проще таких малышей
БП типа вашего у меня не пошел в силу очень «грязного» питания. Пульты с таким не работают нормально. Но и свой я покупал в районе бакса (б\у с разборки на али).
У самого подобная лампа на ESP8266 -> wifi MQTT-> Raspberry Pi-> Xiaomi Gateway->Xiaomi Button
WI-FI предполагает смарт, который как раз не всегда под рукой — это раз. А во вторых, чтобы им воспользоваться — придется снять защиту, найти свое приложение, запустить его. Потом пальцем попасть в нужный значок. Проще встать и выключить свет вручную.
Да я сам не очень эти алисы и алексы всякие люблю, у меня вообще всё само догадывается, когда что включать) Но вообще там перед командой ключевое слово надо произнести, телек конечно тоже нынче умный, но не настолько ещё))
Ого, надо же. Восстание машин просто) Значит надо не слово, а фразу делать ключевой, вероятность случайного срабатывания будет стремиться к нулю. Особенно если эта фраза матерная)))
Я программу распознавания голоса настраивал, нужно было показываемые ей на экране слова несколько раз повторять. Дошло до слова «Close», я, видимо, повторил на 1 раз больше чем было нужно для обучения, программа закрылась…
WiFi не обязательно смарт. Потому и упомянул цепочку в конце которой Xiaomi Button который на самом деле Xiaomi Smart Wireless Switch. Просто беспроводная кнопка (или несколько) на двустороннем скотче которая управляет сразу 3мя группами света каждая. Из кухни или коридора вы своим ИК пультом свет не выключите, а с беспроводной кнопкой запросто.
К тому же по WiFi можно и заливать новые скетчи через Arduino IDE.
пульт от чего нибудь; телека, tv-box-а, кондея и т.д. всегда под рукой.
Лично у меня ни одного пульта в доме нет.
10 пультов прошлый век, сейчас лучше использовать что то вроде Logitech Harmony или хотя бы Broadlink Universal IR Remote Controller.
Просто беспроводная кнопка (или несколько) на двустороннем скотче которая управляет сразу 3мя группами света каждая.
Да, я писал про это. Мне не подходит, поскольку на стене у дивана ковер, а на ковер клеить… Плюс о питании надо заботиться. Да и лишний девай плодится.
Из кухни или коридора вы своим ИК пультом свет не выключите, а с беспроводной кнопкой запросто.
Это да. Но есть вероятность, что ваш сосед у вас будет светом управлять (а вы у него)). А если я в отпуске при этом? Безопасность выше всего. Поэтому только ИК.
Батарейкам больше 2х лет ни одной еще не поменял из 4х устройств, к тому же устройства сообщают уровень своего заряда.
Но есть вероятность, что ваш сосед у вас будет светом управлять
Такая вероятность равна 0, кнопка привязывается к конкретному шлюзу.
Спецификация ZigBee ориентирована на приложения, требующие гарантированной безопасной передачи данных при относительно небольших скоростях и возможности длительной работы сетевых устройств от автономных источников питания (батарей), она при малом энергопотреблении поддерживает не только простые топологии сети («точка-точка», «дерево» и «звезда»), но и самоорганизующуюся и самовосстанавливающуюся ячеистую (mesh) топологию с ретрансляцией и маршрутизацией сообщений.Wikipedia®
А если я в отпуске при этом?
Свою лампу я могу прямо из отпуска включать через телеграмм или другим способом, имитируя нахождение дома, или наоборот выключить если забыл.
У которого и температура сенсора самого показана, и 1х1 матрица с объективом: youtu.be/0iNoJzhLny0
И луч направлен на взмах руки человека или просто теплого тела любого. Фиг знает сколько у него частота, написано 8Hz, но у их тепловизионного 32х24 (не болометр, а сегнетоэлектрический датчик, ну и стекло другое) есть и 64Hz режим при описании в некоторых местах в 8Hz, просто рост шума происходит существенный.
А тут инфракрасное в другом смысле. Ну, я уже отвык наводить пульт на приемник, пора использовать блютуз и прочее радио на 2.4.
Просто и со вкусом! А можно попросить добавить фотографию с нишей под выключателем? Я из обзора не понял чем она прикрыта. Кстати, а сколько это устройство плтребляет?
Потребление 18 mA. А разбирать выключатель не хочется, попробую объяснить. Вынимаем выключатель. Что видим? Стакан подрозеточный. Вырубаем стамеской ему дно и выдалбливаем нишу. Все вкладываем в нее и закрываем выключателем.
P.S.: Для авторов раздела *Самоделки* предлагаю карантин сделать бессрочным..:))
-самым грамотным и толковым можно и без сохранения зарплаты(-они и на «муське»
заработают не меньше!)… ;-)
потом все таки на блютуэ перешел, с обратной связью оказалось поудобней
www.youtube.com/watch?v=5Sl787khXZQ
не только лишь все…
Что-то непонятно, а как реализована возможность включения/выключения света выключателем?… Сорри. Прочитал в «публикации 4-х летней давности»Об этой проблеме в статье написано особо, в том числе описано как я ее решил для себя.
Так с дачей понятно. А как с квартирой. Ну смотри, схема стандартная. В подрозетник к выключателю где планируется использовать двойной выключатель заводят 3 провода. Первый скажем фаза вход (многие электрики кланы на снипы, госты и прочее и я часто встречал когда фаза идет напрямую на потребитель, а разрывают ноль), от выключателя на светильники идет по проводу после выключателя фаза. Ты отключил один, переведя его на ноль. Но выход у тебя то остался один провод. Как по нему ты управляешь двумя проводами? Стоп. Ты вообще отказался от 2-х источников света в таком раскладе? Но зачем тогда 2 реле? Или это уже фотки из дачного варианта?
Хоть по блубупу, хоть по вифи, хоть по инфраред, хоть по хлопку, хоть по касанию, хоть проведи рукой… И т.д.
У самого подобная лампа на ESP8266 -> wifi MQTT-> Raspberry Pi-> Xiaomi Gateway->Xiaomi Button
БП типа вашего у меня не пошел в силу очень «грязного» питания. Пульты с таким не работают нормально. Но и свой я покупал в районе бакса (б\у с разборки на али).
WI-FI предполагает смарт, который как раз не всегда под рукой — это раз. А во вторых, чтобы им воспользоваться — придется снять защиту, найти свое приложение, запустить его. Потом пальцем попасть в нужный значок. Проще встать и выключить свет вручную.
К тому же по WiFi можно и заливать новые скетчи через Arduino IDE.
Лично у меня ни одного пульта в доме нет.
10 пультов прошлый век, сейчас лучше использовать что то вроде Logitech Harmony или хотя бы Broadlink Universal IR Remote Controller.
Это да. Но есть вероятность, что ваш сосед у вас будет светом управлять (а вы у него)). А если я в отпуске при этом? Безопасность выше всего. Поэтому только ИК.
Такая вероятность равна 0, кнопка привязывается к конкретному шлюзу.
Спецификация ZigBee ориентирована на приложения, требующие гарантированной безопасной передачи данных при относительно небольших скоростях и возможности длительной работы сетевых устройств от автономных источников питания (батарей), она при малом энергопотреблении поддерживает не только простые топологии сети («точка-точка», «дерево» и «звезда»), но и самоорганизующуюся и самовосстанавливающуюся ячеистую (mesh) топологию с ретрансляцией и маршрутизацией сообщений.Wikipedia®
Свою лампу я могу прямо из отпуска включать через телеграмм или другим способом, имитируя нахождение дома, или наоборот выключить если забыл.
www.sparkfun.com/datasheets/Sensors/Temperature/MLX90614_rev001.pdf
У которого и температура сенсора самого показана, и 1х1 матрица с объективом:
youtu.be/0iNoJzhLny0
И луч направлен на взмах руки человека или просто теплого тела любого. Фиг знает сколько у него частота, написано 8Hz, но у их тепловизионного 32х24 (не болометр, а сегнетоэлектрический датчик, ну и стекло другое) есть и 64Hz режим при описании в некоторых местах в 8Hz, просто рост шума происходит существенный.
А тут инфракрасное в другом смысле. Ну, я уже отвык наводить пульт на приемник, пора использовать блютуз и прочее радио на 2.4.
P.S.: Для авторов раздела *Самоделки* предлагаю карантин сделать бессрочным..:))
-самым грамотным и толковым можно и без сохранения зарплаты(-они и на «муське»
заработают не меньше!)… ;-)