Новость

Как работает инфракрасный пульт? Поясняем

Привет! В рамках проекта LOOKin последние 5 лет мы каждый день работаем с ИК-сигналами. И все это время мы узнаем что-то новое. 
Когда мы начинаем работать с новыми клиентами, делаем посты о нашем продукте или нанимаем новых сотрудников, мы видим интерес к тому, как работает ИК-пульт. Вроде бы простой кусок пластика, но что происходит в его недрах - магия. Давайте узнаем, как это работает... Поехали! 
Когда вы направляете пульт дистанционного управления на телевизор, чтобы посмотреть любимый фильм, и нажимаете кнопку на пульте, ИК-диод в пульте начинает излучать сигнал, и ИК-приемник на телевизоре принимает тот же сигнал. ИК-диод - это просто лампочка, светящаяся в инфракрасном диапазоне невидимого для нас спектра. Поэтому для простоты описания представим ИК-диод, на котором находится пульт от кондиционера или телевизора просто мигающим светом. Embed

Преобразование света в цифры

Но как включить телевизор с помощью ИК-лампы? В пульте дистанционного управления телевизором находится передающий ИК-диод, а в самом телевизоре - инфракрасный приемник, который может считывать мигание ИК-диода в пульте. Практически любая команда, передаваемая пультом ДУ, представляет собой набор двоичных данных - 1 и 0. Пульт ДУ посылает телевизору команду "включить" - телевизор включается, посылает команду увеличить громкость - телевизор увеличивает громкость. Каждая такая команда - это просто набор 1 и 0. Каждый производитель сам определяет список команд, опираясь только на свое представление о том, как это должно быть. Тем не менее, существуют определенные стандарты, которым, по нашему опыту, мало кто следует. Например, для большинства распространенных телевизоров Samsung код включения имеет вид 0xE0E040BF.Это шестнадцатеричное представление команды. Если копнуть глубже, то команда выглядит как следующий набор 1 и 0: 

11100000111000000100000010111111

Теперь посмотрим, как этот код выглядит на графике.
Красная кривая в верхней части - свет (ИК-диод в пульте ДУ телевизора Samsung) включен, красная линия в нижней части - свет выключен.

Рис. 1: Так выглядит на графике сигнал включения телевизора Samsung

Большинство вычислительных устройств работают с бинарной логикой в которой есть только 1 и 0.Пожалуй, единственным надежным способом кодирования 1 и 0 при передаче по ИК-связи является их кодирование с помощью длительности свечения и паузы ИК-диода (нашей обычной лампочки). Различают ИК-протоколы с ведущим нулем и ведущей единицей, но оставим это за скобками повествования. Конкретно в этом протоколе (NECx2) для телевизоров Samsung 1 и 0 кодируются следующим образом:

  • Импульс (свет включен) 600 мкс и затем пауза (свет выключен) в 600 мкс - это 1
  • Импульс (свет включен) 600 мкс и затем пауза (свет выключен) в 1600 мкс - 0.

Умно, правда? 
Давайте еще раз посмотрим на наш график и отметим на нем 1 и 0 (рисунок 2):

Рис. 2: двоичные цифры в сигнале с телевизора Samsung

Резюме: 0 и 1 кодируются только тем, как долго горит ИК-диод (лампочка) и как долго не горит.
Внимательный читатель спросит: "А что же тогда представляют собой эти странные всплески в левой части ИК-сигнала на рис. 1?". И тут мы закономерно переходим ко второй части повествования - к ИК-протоколам.

Удивительный мир ИК-протоколов

В мире ИК-технологий существует множество различных протоколов. Не ошибусь, если скажу, что самым распространенным ИК-протоколом является NEC. Почти со 100% вероятностью можно утверждать, что у вас дома есть пульт дистанционного управления, использующий этот протокол. 
Но существуют десятки других протоколов, популярных у производителей бытовой техники. 
Как их различить? 
В этом помогает преамбула - начальный код, определяющий, какой ИК-протокол используется. Некая уникальная особенность протокола.
Увидев ее, приемник телевизора, Cable-Box или ресивера понимает - ага, сигнал, скорее всего, адресован мне, и начинает слушать. 
Для семейства протоколов NEC преамбула состоит из периода 9000 мкс, когда ИК-диод включен, и паузы (ИК-диод выключен) 4500 мкс. Для сигнала от телевизора Samsung такой преамбулой является свечение ИК-диода длительностью 4500 мкс и затем такая же пауза. 
Если сейчас начать описывать все существующие ИК-протоколы, то читатель быстро уснет, а я так и не закончу рассказ до глубокой старости. Поэтому для усвоения материала давайте вкратце рассмотрим семейство NEC. 
Сначала был самый канонический ИК-протокол NEC (сейчас более известный как NEC1), и идея была хороша: в 32-битном ИК-сигнале расположение было следующим: 

Рис. 3: ИК-протокол NEC1 (изображение с сайта Altium)

То есть первые 8 бит - это адрес, что-то вроде ID устройства, затем тот же адрес в инвертированном виде (для проверки). Биты 16-24 - команда, затем она инвертируется. Идея была хорошая и могла бы привести к стандартизации, Адрес, например, мог бы быть типом устройства - телевизор, Cable-Box или что-то еще, а команда могла бы быть действием, например, "Увеличить громкость" или "Включить". Но что-то пошло не так... 
Сначала 256 возможных команд перестало хватать некоторым производителям, и появился протокол NEC1x. 

Рис. 4: ИК-протокол NEC1 (изображение с сайта Altium)

А потом адресов в 256 значений стало недостаточно, и стали появляться такие протоколы, как NECx2 (именно такой используется в некоторых моделях телевизоров Samsung, с которых мы начали этот рассказ).

Существуют такие протоколы, как Denon, семейство протоколов Sony (часто они имеют особенность, заключающуюся в необходимости передачи одного сигнала не менее двух раз с заданной паузой), Kenwood типа NEC1 с дополнениями, RC5, RC6 и многие-многие другие...

Как записать ИК сигнал

Raw (сырые тайминги)

Поскольку ИК-передача - это просто "светится" и "не светится", то изначально самой простой и наглядной записью является запись в так называемом сыром виде. Положительные числа - ИК-диод светится, отрицательные - не светится. Пример необработанной записи сигнала с pic1:

4570 -4420 620 -1610 590 -1640 620 -1610 620 -490 600 -510 590 -520 620 -490 620 -490 620 -1610 620 -1610 620 -1610 590 -520 620 -490 620 -490 620 -490 620 - 490 590 -520 620 -1610 620 -490 600 -510 590 -520 620 -490 620 -490 620 -490 590 -1640 620 -490 620 -1610 620 -1610 620 -1610 620 -1610 620 -1610 600 -1630 620 -45000
  • 4570 -4420 - преамбула, идентификатор протокола
  • 620 -1610 - двоичный разряд 0
  • 590 -1640 - двоичная цифра 1
  • ...
  • -45000 - заключительная пауза, конец передачи.

ProntoHEX

Но существуют и альтернативные распространенные способы записи, например, формат ProntoHEX, в котором тот же сигнал выглядит следующим образом:

0018 0014 0014 0014 0018 003D 0018 0014 0014 0014 0014 0014 0018 0014 0014 0018 0014 0018 0014 0014 0014 003D 0018 0014 0018 0018 003D 0018 003D 0018 003D 0018 003D 0018 003D 0014 003D 0018 06AE

Здесь все немного интереснее, так как первые 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 620 -1610 590 -1640 620 -1610 620 -490 600 -510 590 -520 620 -490 620 -490 620 -1610 620 -1610 620 -1610 590 -520 620 -490 620 -490 620 -490 620 - 490 590 -520 620 -1610 620 -490 600 -510 590 -520 620 -490 620 -490 620 -490 590 -1640 620 -490 620 -1610 620 -1610 620 -1610 620 -1610 620 -1610 600 -1630 620 -45000

Таким образом, каждый раз телевизор будет принимать его немного по-разному. Поскольку речь идет о большом количестве миганий и очень высокой частоте, ошибки неизбежны. Представьте, что у вашего друга мигает лампа, а вам нужно с помощью секундомера засечь, сколько времени она горела. Каждый раз, когда вы будете выполнять это упражнение, цифры будут немного отличаться. 
Например, преамбулу можно записать в виде:4570 -4420 или 4600 -4400 или 4610 -4410 или 4580 -4390 ... И это все один ИК-сигнал! 
Поэтому необработанные ИК-сигналы никогда нельзя сравнивать простым сравнением. Последовательно сравниваются разряд за разрядом, и если разница между ними не превышает 15-25%, то считается, что сигнал совпадает. Отчасти в этом помогает кодировка ProntoHEX, но она также использует округление, и нельзя просто взять и сравнить два сигнала на идентичность. Однако если сигнал уже декодирован и представляет собой готовую команду и протокол, то такое сравнение вполне возможно.

А что будет, если зажать кнопку на пульте и удерживать ее длительное время?

Удивительно, но в большинстве протоколов, с которыми мы сталкивались, будет передаваться одна единственная команда, а затем периодически - короткий повторный сигнал. Частота посылки повторного сигнала зависит от протокола. В протоколе NEC, рассмотренном выше, повторный сигнал выглядит примерно так:

Рис. 5: Повторный сигнал ИК-протокола NEC1 (изображение от Altium)

То есть, если вы нажали кнопку увеличения громкости, то сначала посылается "начальное сообщение", а затем короткий сигнал повтора каждые 10 раз в секунду.

И пока вы удерживаете кнопку, сигнал будет повторяться.

Телевизор может отреагировать на это соответствующим образом: сначала немного увеличить громкость, а через несколько секунд - с более высокими значениями.

Повтор сигналов различается в разных протоколах, а в некоторых он не предусмотрен в принципе, пока вы держите кнопку нажатой - "исходное сообщение" просто повторяется снова и снова.

Пульты дистанционного управления кондиционерами

И если до этого все было довольно просто:

  • нажимаешь кнопку "Включение" на пульте ДУ - телевизор включается. 
  • Нажимаешь кнопку переключения каналов - канал меняется на плюс или минус.
  • Нажимаешь кнопку смены входа HDMI - меняется вход

В кондиционерах все сложнее...В одном ИК-сигнале передаются сразу все данные - температура, режим работы, положение шторки, режим вентилятора, таймеры и многие другие служебные параметры. Более того, нередко сигналы от кондиционеров разбиваются на несколько блоков с фиксированными паузами, а каждый блок ИК-сообщения подписывается с помощью CRC (опять же, для разных протоколов по-разному). Но это уже совсем другой удивительный мир. Если вас заинтересовала эта публикация, то ставьте лайки, шеры, репосты, если статья наберет хороший отклик, то вскоре мы выпустим статью о том, как работает IR в пультах кондиционеров 😊😁. 

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

А самое главное - что бы вы хотели узнать еще? ) Со своей же стороны, каждому пользователю платформы-партнеры sprut.ai, мы предоставляем промокод - sprutai. Он распространяется на все виды продукции.

Дмитрий, CEO платформы LOOKin и умного пульта LOOKin Remote2


О, я как раз на днях на своём роботике учебное задание с ИК пультом проходил. Там на Python-е здоровая такая функция по декодированию сигнала написана была. Что интересно, передаётся не просто код команды а ещё и проверочный код, которые надо сложить, чтобы FF получилось
http://www.yahboom.net/study/Raspbot
А я все бьюсь со своим кондиционером LG и хабом Aqara M2, у которого есть ИК-пульт. Кондиционер можно включить, иногда можно что-то настроить в течение 5 секунд после включения, а потом все, кондер перестает принимать сигналы от хаба. Особенно нужно выключение, я его уже и вручную с пульта записывал, и через готовые пресеты в хабе добавлял - толку ноль, видимо какая сложная система шифрования. Но, что примечательно, когда кондер выключен и ему послать команду "выключение", то он отзывается звуковым сигналом, типа "да-да, я итак уже выключен". Может быть кто-то поможет мне победить хаб и кондер?
У меня одно время с пультом от Яндекса и телеком было что-то похожее, как будто команда иногда дважды посылалась. Я пульт на шкафу чуть перемесил и ушёл эффект. Для себя я решил, что это какие-то "множественные отражения" от стен или чего-то такого.

Вернуться назад
Вернуться назад