ИК-пульты и модуль YS-IRTM или TV-пульт - клавиатура для Arduino

Для многих проектов на базе ардуино актуально наличие нескольких кнопок в качестве интерфейса. Зачастую удачным решением является использование щита совмещающего в себе и двухстрочный символьный дисплей 1602 и 5 кнопок, использующих лишь одну аналоговую линию для работы с ними. Но бывают и другие ситуации, например когда 5-ти кнопок мало, или в качестве щита используется другой щит, пересекающийся по линиям, либо механические несовместимый … ну и т.п.

Изобретать клавиатуру – что изобретать велосипед, можно – а зачем? Хотя, на самом деле – из готовых решений: удобных, функциональных, при этом компактных клавиатур и самое главное эффективно юзабельных совместно с ардуино … т.е. использующих малое количество сигнальных линий в интерфейсе - крайне малО! Странно – но факт. Примеры приводить не буду. Не компьютерную же клавиатуру PS/2 припиливать? (хотя 2 провода в интерфейсе с таким числом клавиш, вместе с низкой ценно а зачастую и наличием в закромах – возможно не самое плохое решение, размер только великоват, да и клавиш столько едали нужно).

Где еще готовых кнопок много? Правильно! – на ИК-пультах от различной бытовой техники (и не обязательно от телевизоров, но и от прочих медиа-центров, магнитофонов, вентиляторов и т.д. и т.п.), а ведь зачастую пульты от устаревшей техники валяются без дела … Что нужно чтоб заюзать пульт в качестве клавиатуры для ардуино? Этим вопросом я задавался достаточно давно и давно нашел на него ответ: ИК-приемник и «кусок кода» (доступный в виде библиотеки). Какой ИК-приемник и где его взять? Вариантов не так уж и много: купить или добыть (из техники к которой шел пульт например, если она не нужна). В моем случае тогда оказалось все проще – к компьютерному ТВ-тюнеру (плата в PCI-слот) ИК-приемник был выносным и подключался через стандартный jack-3.5 – помимо земли и питания всего одна линия интерфейса – просто сказочно! Тогда же мне удалось найти библиотеку IRremote, которая ныне входит уже в официальный репозиторий (доступный из Arduino IDE). Минимум кода – и вопрос решен и даже закрыт. Причем все настолько просто, что я даже не счел нужным создавать тогда материал на данную тему. Добавить можно лишь то, что в качестве ИК-приемников можно приобрести достаточно большое количество готовых компонентов, по сути сочетающих в одном корпусе фоточувствительный элемент (диод или транзистор) и операционный усилитель. По номенклатуре можно поискать TSOP312x, TSOP314x и пр.

Все это хорошо, но есть одно «но». Да, ИК-приемник расходует всего одну сигнальную ногу ардуины для своей работы – круто! Но «расплачиваться» за это приходится как минимум памятью программ под библиотеку, а в ардуино UNO мало не только ног но и памяти … Одна библиотечка, другая, плюс еще IRremote – под свой код уже места совсем негусто (если остается вообще). А вариант? А вариант переложить разборку низкоуровневого протокола с ардуины на другую «микросхему», и готовые решения (в виде модуля) существуют, стоят очень разумных денег (около 2 баксов), требуют минимум кода … вобщем встречайте!

YS-IRTM (далее мой вольный конспективный технический перевод с китайского документации на данный модуль).

Модуль декодирует команды (скан-коды нажатой на пульте клавиши) формата NEC (940нм, 38кГц) и транслирует в интерфейс UART, а также формирует пакеты и отправляет их обратно («эмулятор пульта»).

Подключается элементарно, пояснений не требуется (разумеется TX <-> RX крест-накрест). Работает с настройками «по-умолчанию» без какой-либо предварительной инициализации. В случае использования только на прием – можно обойтись одной интерфейсной линией.

При приеме и успешной дешифровки команды модуль выдает в интерфейс 3 байта. Из них два первых по задумке формата NEC кодируют модель, а последний, третий - код нажатой клавиши (хотя можно все 3 байта рассматривать как код клавиши). Также по задумке формата NEC должен быть еще и четвертый байт с инверсным содержимым кода третьего байта, возможно для контроля ошибок, но данный модуль будучи высокоуровневым устройством не выдает наружу излишнюю информацию (вероятно внутри себя учитывает ее). Так что нужно всего лишь проверять приемный буфер устройства работающего с модулем на наличие в нем информации и считывать ее.

Управляется модуль пакетами из 5-ти последовательно посылаемых байт предопределенного формата, а именно:

Управляющие слова

Байт 1

Адрес

Байт 2

Код операции

Байт 3

Данные

Байт 4

Данные

Байт 5

Данные

Посылка команды («эмуляция» нажатия кнопки на пульте)

0xA1 (0xFA)

0xF1

Три байта посылаемой команды: код пульта + код клавиши (т.е. те 3 байта, которые нам выдает модуль при приеме команды)

Смена базового адреса *

0xA1 (0xFA)

0xF2

0x?? {0x01 - 0xFF}

0x00

0x00

Смена скорости интерфейса **

0xA1 (0xFA)

0xF3

0x01 – 4800bps

0x02 – 9600bps

0x03 – 19200bps

0x04 – 57600bps

0x00

0x00

 

* По умолчанию модуль распознает управляющие слова, начинающиеся исключительно с байта, значение которого равно 0xA1 (или 0xFA). Причем первый адрес (0xA1) можно изменить на произвольный, а на адрес 0xFA модуль будет откликаться всегда (вероятно данный функционал предназначен для сожительства на одной линии интерфейса нескольких устройств). Например, для изменения адреса с 0xA1 на 0xA9 нужно передать управляющее слово A1F2A90000. Если мы не знаем какой адрес у нашего модуля – к нему всегда можно обратиться по адресу 0xFA (при условии что он единственный на линии интерфейса). После смены адреса все команды к модулю следует отправлять с соответствующим (новым) первым байтом.

** Позволяет изменить скорость интерфейса связи с модулем (по-умолчанию 9600bps).

В ответ на посылаемые управляющие слова модуль в качестве подтверждения успешного выполнения операции возвращает (дублирует) код запрошенной операции. Отсутствие возврата кода операции свидетельствует о возникновении ошибке в ее процессе.

Как то так – просто и удобно. Да еще прием команды индицируется миганием светодиода. Ну и до кучи (из фотки не видно) в данном модуле применен приемник CHQ1838, а в качестве интерфейсной части некая микросхема – «черный ящик» (с запиленной маркировкой, китайцы любят ауру таинственности: возможно контроллер с прошивкой или готовое изделие), кварц на 22.1184MHz никак напрямую не связан с параметрами обрабатываемых сигналов – от него тактируется «черный ящик».

PS. На написание данного материала сподвигла в первую очередь волна ажиотажа непонимания вокруг модуля YS-IRTM и его предназначения. Это не IrDA-интерфейс (всмысле как среда распространения RS232) – это более полезная и практичная в современном применение вещица ;-))

MiGeRA (октябрь 2019)

 

Заглавная » Радиоэлектроника » Arduino - Высокоуровневая платформа устройств на микроконтроллерах » ИК-пульты и модуль YS-IRTM