Использование ИК пультов для умного дома
Я уже давно использую способ управления умным домом с помощью ИК пультов. Это довольно интересная история, раньше вообще были такие выключатели, которые позволяли привязывать ИК пульт к ним, какую-то кнопку с инфракрасного пульта и управлять включением и выключением и даже диммировать позволяли освещение. Но сейчас таких выключателей, конечно уже нет, но в принципе тоже функционал можно реализовать достаточно просто.
Я использую инфракрасный пульт от телевизора, у меня в гостиной сделано так что телевизоре на пульте есть несколько кнопок, они практически не используются ни в каких приложениях и ни в каких других функциях на телевизоре, и поэтому их можно смело использовать для управления. Я сделал так что три кнопки управляют включением света в комнате, поскольку там используют три потолочных светильника, а четвертая кнопка используется для различных сценариев. Это раньше у меня было включение / выключение света полностью, сейчас это некоторая другая функция, которая отключает автоматическое управление светом в комнате, если это вдруг нужно. Например если там спит человек или если по какой-то причине нет никаких движений или хочется, чтобы свет не выключался или не включался.
Сама реализация этой технологии достаточно простая, используется обычный приемник на 38 килогерц, это практически стандартная частота во всех пультах, и даже если она например другая, это бывает либо 40 либо 36, то а часто сам приемник конечно может и эту частоту тоже уловить, но таких пультов практически не встречается и с этим особых проблем не возникает.
Но по протоколам обмена есть сложности разные пульты работают по-разному, большая часть пультов от телевизоров, например, или каких-то других устройств техники, они работают по единому протоколу это просто последовательность сигналов обычно это 32-битная последовательность, которую легко распознать и легко обработать.
Но например есть пульты это от каких-нибудь вентиляторов или каких-нибудь таких устройств достаточно нестандартных бытовых, там используется небольшой пульт и сам формат передачи отличается, там передаются небольшие пакеты данных, но очень часто, для того чтобы обеспечить гарантированное включение, например вентилятора, или переключение режимов, и обработать их единым алгоритмом довольно сложно сам приемник он может подключаться либо напрямую например к микроконтроллеру какому-нибудь, либо к микрокомпьютеру, например если это Raspberry, то у него есть разъемы дополнительные, которые позволяют подключать разные устройства, в том числе и подключить ИК приемник. Если это микроконтроллер, то к нему конечно тоже можно подключить ИК приемник и дальше используется специальная библиотека на микроконтроллере это используется библиотеки, например если программирования идет в среде Arduino IDE, то там можно скачать готовую библиотеку и использовать ее, но часто эти библиотеки они либо заточены под определенный протокол, что не очень удобно и достаточно сложно каждый раз пытаться обработать с помощью этой библиотеки. Гораздо проще и понятнее это просто разобраться в протоколе. Я посмотрел что необходимо и как необходимо распознавать, это просто последовательность символов там, импульсов определенной длины, которые очень легко распознать и на основании этого сделать соответствующие преобразования в определенный сигнал. У меня используется шлюз который на базе esp8266, ну также на нем еще подключен приемник и передатчик на частоте 433 мегагерца дополнительно. И соответственно на нем, к нему подключен ИК приемник, который позволяет обрабатывать с пульта. Когда я нажимаю на пульте каком-нибудь у меня по протоколу MQTT отправляется информация на сервер умного дома о сработавшей кнопке
Сам формат передачи он довольно хитрый на нем первый сигнал передает конкретную комбинацию, а следующий сигнал при удержании передают всегда одну и ту же комбинацию для любой кнопки. Это комбинация означает, что просто идет повторное нажатие и здесь очень сложно обработать правильно какая кнопка и какой сигнал был следующий, и соответственно если идут какие-то задержки по протоколу передачи, либо это надо будет обрабатывать сразу на микроконтроллере, что довольно сильно ограничивает, нужно заранее знать что и какой сигнал обрабатывать. Поэтому проще обрабатывать просто по одному нажатию и выполнять команду тоже по одному нажатию.
Также есть пульты, например от кондиционеров, которые работают совсем по-другому формату, там передается информация сразу о всех настройках кондиционера, то есть можно просто понажимать нужные кнопки, выставить нужные режим, а потом при нажатии любой кнопки с пульта будет на кондиционер отправлена вся информация.
Также для управления можно либо подключить передатчик, это по сути просто инфракрасный светодиод, который можно подключить либо напрямую к микроконтроллеру, либо к микрокомпьютеру и уже обрабатывать там. но можно использовать специальный инфракрасный шлюз, продается и у яндекса есть и в экосистеме tuya есть такой, такое устройство они практически одинаковые и технически это одно и то же устройство, и оно позволяет отправлять сигнал определенный на, допустим включение телевизора или управление каким-то устройством либо как раз вот на управление кондиционером, и там можно допустим через приложение выбрать определенный тип кондиционера и управлять им прямо с этого пульта.
Либо при выполнении какого-то сценария отправлять сигнал на кондиционер или какое-то устройство.
Если инфракрасный приемник или передатчик подключается к микрокомпьютеру, например к Raspberry, там используется специальная библиотека, это тоже достаточно неудобно получается, ее очень сложно запрограммировать и правильно настроить, и для этого я сделал небольшой скрипт, который просто позволяет автоматически сформировать нужный файл и этот файл автоматически подсовывается этой библиотеки и так можно тоже достаточно просто перенастраивать все эти параметры для передачи и связи с устройствами. Это у меня используется в основном только на микрокомпьютере Orange, на Raspberry я вообще просто использовал библиотеку которая работает напрямую с портом микрокомпьютера и просто сделал на си специальную программку, которая обрабатывает этот сигнал по аналогии с микроконтроллером.
Но изначально я его делал на python и конечно производительность питона недостаточно и не такая стабильная и иногда получилась так что сигнал не распознается из-за задержек исполнения программы. На Си конечно побыстрее, но тоже это программный способ он достаточно неоднозначный и бывают разрывы по времени и поэтому срабатывает условно через раз.
В целом дальность передачи неплохая любой пульт нормальный он конечно достаточно далеко берет и чувствительность самого приемника тоже высокая. В принципе продаются эти приемники как готовое решение, либо это простом в простом корпусе с тремя выходами специальная микросхема, которая сразу на выходе выдает значение единицу или ноль в зависимости от того какой сигнал пришел.
Например шлюз от Яндекса я использую для того, чтобы включить телевизор. Телевизор конечно хоть и называется smart, но он совсем не поддерживает нормально смартф функции, то есть элементарно его даже включить практически через интернет невозможно, причем у меня модель такая, которая при выключенном телевизоре через некоторое время отсоединяется от сети её через ethernet уже невозможно обратиться и включить его. И в принципе настроил на Яндекс пульте возможность такую что он включает телевизор, там можно выставить необходимой задержки пока телевизор загрузится, после этого выполняются команды и смещения влево-вправо и нажатие, и таким образом например можно запустить какой-нибудь проигрыватель или зайти в какой-то систему для просмотра фильмов или телеканалов.
Автоматизация в умном доме должна быть полезной и создавать дополнительный комфорт, но иногда всё идет не так… Причины этого, и как всё настроить смотри на моём канале.
Discuss about post