Привет! В рамках проекта LOOKin последние 5 лет мы каждый день работаем с ИК-сигналами. И все это время мы узнаем что-то новое.
Когда мы начинаем работать с новыми клиентами, делаем посты о нашем продукте или нанимаем новых сотрудников, мы видим интерес к тому, как работает ИК-пульт. Вроде бы простой кусок пластика, но что происходит в его недрах - магия. Давайте узнаем, как это работает... Поехали!
Когда вы направляете пульт дистанционного управления на телевизор, чтобы посмотреть любимый фильм, и нажимаете кнопку на пульте, ИК-диод в пульте начинает излучать сигнал, и ИК-приемник на телевизоре принимает тот же сигнал. ИК-диод - это просто лампочка, светящаяся в инфракрасном диапазоне невидимого для нас спектра. Поэтому для простоты описания представим ИК-диод, на котором находится пульт от кондиционера или телевизора просто мигающим светом. Embed
Преобразование света в цифры
Но как включить телевизор с помощью ИК-лампы? В пульте дистанционного управления телевизором находится передающий ИК-диод, а в самом телевизоре - инфракрасный приемник, который может считывать мигание ИК-диода в пульте. Практически любая команда, передаваемая пультом ДУ, представляет собой набор двоичных данных - 1 и 0. Пульт ДУ посылает телевизору команду "включить" - телевизор включается, посылает команду увеличить громкость - телевизор увеличивает громкость. Каждая такая команда - это просто набор 1 и 0. Каждый производитель сам определяет список команд, опираясь только на свое представление о том, как это должно быть. Тем не менее, существуют определенные стандарты, которым, по нашему опыту, мало кто следует. Например, для большинства распространенных телевизоров Samsung код включения имеет вид 0xE0E040BF.Это шестнадцатеричное представление команды. Если копнуть глубже, то команда выглядит как следующий набор 1 и 0:
Теперь посмотрим, как этот код выглядит на графике.
Красная кривая в верхней части - свет (ИК-диод в пульте ДУ телевизора Samsung) включен, красная линия в нижней части - свет выключен.
Большинство вычислительных устройств работают с бинарной логикой в которой есть только 1 и 0.Пожалуй, единственным надежным способом кодирования 1 и 0 при передаче по ИК-связи является их кодирование с помощью длительности свечения и паузы ИК-диода (нашей обычной лампочки). Различают ИК-протоколы с ведущим нулем и ведущей единицей, но оставим это за скобками повествования. Конкретно в этом протоколе (NECx2) для телевизоров Samsung 1 и 0 кодируются следующим образом:
- Импульс (свет включен) 600 мкс и затем пауза (свет выключен) в 600 мкс - это 1
- Импульс (свет включен) 600 мкс и затем пауза (свет выключен) в 1600 мкс - 0.
Умно, правда?
Давайте еще раз посмотрим на наш график и отметим на нем 1 и 0 (рисунок 2):
Резюме: 0 и 1 кодируются только тем, как долго горит ИК-диод (лампочка) и как долго не горит.
Внимательный читатель спросит: "А что же тогда представляют собой эти странные всплески в левой части ИК-сигнала на рис. 1?". И тут мы закономерно переходим ко второй части повествования - к ИК-протоколам.
Удивительный мир ИК-протоколов
В мире ИК-технологий существует множество различных протоколов. Не ошибусь, если скажу, что самым распространенным ИК-протоколом является NEC. Почти со 100% вероятностью можно утверждать, что у вас дома есть пульт дистанционного управления, использующий этот протокол.
Но существуют десятки других протоколов, популярных у производителей бытовой техники.
Как их различить?
В этом помогает преамбула - начальный код, определяющий, какой ИК-протокол используется. Некая уникальная особенность протокола.
Увидев ее, приемник телевизора, Cable-Box или ресивера понимает - ага, сигнал, скорее всего, адресован мне, и начинает слушать.
Для семейства протоколов NEC преамбула состоит из периода 9000 мкс, когда ИК-диод включен, и паузы (ИК-диод выключен) 4500 мкс. Для сигнала от телевизора Samsung такой преамбулой является свечение ИК-диода длительностью 4500 мкс и затем такая же пауза.
Если сейчас начать описывать все существующие ИК-протоколы, то читатель быстро уснет, а я так и не закончу рассказ до глубокой старости. Поэтому для усвоения материала давайте вкратце рассмотрим семейство NEC.
Сначала был самый канонический ИК-протокол NEC (сейчас более известный как NEC1), и идея была хороша: в 32-битном ИК-сигнале расположение было следующим:
То есть первые 8 бит - это адрес, что-то вроде ID устройства, затем тот же адрес в инвертированном виде (для проверки). Биты 16-24 - команда, затем она инвертируется. Идея была хорошая и могла бы привести к стандартизации, Адрес, например, мог бы быть типом устройства - телевизор, Cable-Box или что-то еще, а команда могла бы быть действием, например, "Увеличить громкость" или "Включить". Но что-то пошло не так...
Сначала 256 возможных команд перестало хватать некоторым производителям, и появился протокол NEC1x.
А потом адресов в 256 значений стало недостаточно, и стали появляться такие протоколы, как NECx2 (именно такой используется в некоторых моделях телевизоров Samsung, с которых мы начали этот рассказ).
Существуют такие протоколы, как Denon, семейство протоколов Sony (часто они имеют особенность, заключающуюся в необходимости передачи одного сигнала не менее двух раз с заданной паузой), Kenwood типа NEC1 с дополнениями, RC5, RC6 и многие-многие другие...
Как записать ИК сигнал
Raw (сырые тайминги)
Поскольку ИК-передача - это просто "светится" и "не светится", то изначально самой простой и наглядной записью является запись в так называемом сыром виде. Положительные числа - ИК-диод светится, отрицательные - не светится. Пример необработанной записи сигнала с pic1:
- 4570 -4420 - преамбула, идентификатор протокола
- 620 -1610 - двоичный разряд 0
- 590 -1640 - двоичная цифра 1
- ...
- -45000 - заключительная пауза, конец передачи.
ProntoHEX
Но существуют и альтернативные распространенные способы записи, например, формат ProntoHEX, в котором тот же сигнал выглядит следующим образом:
Здесь все немного интереснее, так как первые 4 блока - служебные:
- 0000 - характеристика сигнала, 0000 - новый
- 0001 - изученный
- 006D - Несущая частота ИК-сигнала (подробнее об этом в следующей главе)
- 0022 - Длина одного временного всплеска (сигнал начального действия)
- 0000 - длина второго всплеска (повтор действия, при удержании кнопки)
И далее, блок за блоком, представлены сигнал начального действия и сигнал повторного действия, рассчитанные по специальной формуле.
Командная нотация
ИК-команда может быть записана так же, как и команда, которую она несет.
Как в нашем примере с включением телевизора Samsung - 0xE0E040BF.
В этом случае обязательно указывается протокол.
Альтернативные обозначения
Некоторые производители интеллектуальных пультов придумывают собственные схемы записи ИК-сигналов, но они весьма специфичны и не являются предметом рассмотрения в данной статье.
Характеристики ИК-сигналов
Инфракрасные приемники и передатчики имеют две очень важные характеристики это несущая частота и скважность:
Несущая частота
ИК-диод не просто светится сплошным светом, он постоянно включается и выключается, как, кстати, и светодиодная подсветка. Происходит это очень быстро. Одна из наиболее распространенных частот ИК-излучения - 38 кГц, что соответствует 38 000 миганий в секунду. Такая особенность работы позволяет ИК-приемнику отличать сигнал от пульта дистанционного управления от внешних ИК-шумов.
Побочным эффектом является то, что если ваш пульт ДУ работает на частоте 40 кГц, а приемник, например, на 36 кГц, то все будет работать вблизи, но уже на расстоянии и то не факт. Более того, если и приемник, и передатчик согласованы - имеют одну и ту же частоту, то рабочий диапазон будет гораздо лучше. Наиболее распространенные частоты - 36 кГц, 38 кГц, 40 кГц. 56 кГц встречаются крайне редко. Есть и очень редкие, например, оборудование Bang & Olufsen работает на частоте 455 кГц.
Скважность (duty cycle)
Фактически под скважностью сигнала понимается отношение длительности свечения ИК-диода к паузе после него. Ведь помните, что он загорается несколько десятков тысяч раз в секунду? Так вот, скважность показывает, сколько длится пауза после этого. Обе эти характеристики важны для нормальной работы пульта ДУ вашего устройства. Когда мы говорим об универсальных пультах, то рабочий цикл и частота сигнала не всегда известны, поэтому они почти всегда работают несколько хуже. Например, у них меньше рабочий диапазон по сравнению с оригинальными пультами.
Сравнение ИК-сигналов
А теперь еще немного магии. Помните наш сигнал при включении телевизора?
Таким образом, каждый раз телевизор будет принимать его немного по-разному. Поскольку речь идет о большом количестве миганий и очень высокой частоте, ошибки неизбежны. Представьте, что у вашего друга мигает лампа, а вам нужно с помощью секундомера засечь, сколько времени она горела. Каждый раз, когда вы будете выполнять это упражнение, цифры будут немного отличаться.
Например, преамбулу можно записать в виде:4570 -4420 или 4600 -4400 или 4610 -4410 или 4580 -4390 ... И это все один ИК-сигнал!
Поэтому необработанные ИК-сигналы никогда нельзя сравнивать простым сравнением. Последовательно сравниваются разряд за разрядом, и если разница между ними не превышает 15-25%, то считается, что сигнал совпадает. Отчасти в этом помогает кодировка ProntoHEX, но она также использует округление, и нельзя просто взять и сравнить два сигнала на идентичность. Однако если сигнал уже декодирован и представляет собой готовую команду и протокол, то такое сравнение вполне возможно.
А что будет, если зажать кнопку на пульте и удерживать ее длительное время?
Удивительно, но в большинстве протоколов, с которыми мы сталкивались, будет передаваться одна единственная команда, а затем периодически - короткий повторный сигнал. Частота посылки повторного сигнала зависит от протокола. В протоколе NEC, рассмотренном выше, повторный сигнал выглядит примерно так:
То есть, если вы нажали кнопку увеличения громкости, то сначала посылается "начальное сообщение", а затем короткий сигнал повтора каждые 10 раз в секунду.
И пока вы удерживаете кнопку, сигнал будет повторяться.
Телевизор может отреагировать на это соответствующим образом: сначала немного увеличить громкость, а через несколько секунд - с более высокими значениями.
Повтор сигналов различается в разных протоколах, а в некоторых он не предусмотрен в принципе, пока вы держите кнопку нажатой - "исходное сообщение" просто повторяется снова и снова.
Пульты дистанционного управления кондиционерами
И если до этого все было довольно просто:
- нажимаешь кнопку "Включение" на пульте ДУ - телевизор включается.
- Нажимаешь кнопку переключения каналов - канал меняется на плюс или минус.
- Нажимаешь кнопку смены входа HDMI - меняется вход
В кондиционерах все сложнее...В одном ИК-сигнале передаются сразу все данные - температура, режим работы, положение шторки, режим вентилятора, таймеры и многие другие служебные параметры. Более того, нередко сигналы от кондиционеров разбиваются на несколько блоков с фиксированными паузами, а каждый блок ИК-сообщения подписывается с помощью CRC (опять же, для разных протоколов по-разному). Но это уже совсем другой удивительный мир. Если вас заинтересовала эта публикация, то ставьте лайки, шеры, репосты, если статья наберет хороший отклик, то вскоре мы выпустим статью о том, как работает IR в пультах кондиционеров 😊😁.
Спасибо за внимание. Напишите в комментариях, понравилась ли вам статья или она была не полезна, и дайте советы, что можно улучшить. Любая обратная связь будет оценена по достоинству.
А самое главное - что бы вы хотели узнать еще? ) Со своей же стороны, каждому пользователю платформы-партнеры sprut.ai, мы предоставляем промокод - sprutai. Он распространяется на все виды продукции.
Дмитрий, CEO платформы LOOKin и умного пульта LOOKin Remote2
http://www.yahboom.net/study/Raspbot