ИК пультиков сейчас производят превеликое множество и с их помощью можно управлять практически всем, и даже кошками.
Мы тоже не остались в стороне, и установили на нашей платке Марсоход разъем для ИК приемника, чтобы платкой можно было удаленно управлять.
Для начала, давайте разберемся как все работает. ИК приемник - это специальная микросхема, предназначенная для приема светового сигнала ИК диапазона, модулированного определенной частотой. У микросхемы три вывода: земля , питание и выход. На выходе, при отсутствии светового сигнала - логическая единица, а при наличии - логический ноль. Более подробную информацию можно прочесть в документации на конкретную микросхему.
Для наших тестов мы взяли приемник ILMS5360:
Еще мы взяли восемь пультиков от разных устройств - телевизоров SAMSUNG, VESTEL, CARTV, плеера BBK, спутникового ресивера DRE-5000, компьютерного тюнера, проектора SANYO и фоторамки TEXET:
Итак, устанавливаем в разъем платы Марсоход ИК приемник и подаем питание. После подачи питания он сразу находится в рабочем состоянии и готов принимать сигналы. При нажатии какой-нибудь кнопки на каком-нибудь пультике на выходе ИК приемника можно увидеть такую осциллограмму:
Анализируем увиденное - первый длинный нолик, а затем длинная единичка это префикс, он не несет информативной нагрузки и нужен для настройки самого приемника в рабочий режим. Далее идет определенное количество импульсов, причем все отрицательные импульсы одинаковой длительности, а положительные бывают короткие и длинные - это собственно данные. Будем считать короткие импульсы ноликами а длинные - единичками. Мы протестировали все имеющиеся у нас пультики и измерили ряд параметров.
пульт | префикс | импульс | биты | on/off | повтор |
sanyo | 320/160 | 18/58 | 32 | 0CF300FF | * |
BBK RC-15 | 325/160 | 17/55 | 32 | 926DE01F | - |
DRE | 328/158 | 17/56 | 32 | 000800FF | - |
SAMSUNG | 160/160 | 19/60 | 32 | E0E040BF | + |
TV-Station | 323/161 | 19/58 | 32 | 40BF00FF | - |
TEXET | 325/159 | 17/57 | 32 | 84FBC03F | - |
CARTV | 326/158 | 16/56 | 32 | 00FD28D7 | - |
VESTEL | ---------- | 28/60 | 11 | 00000004 | + |
Для наших экспериментов мы использовали ИК приемник на 36кГц, поэтому временные параметры префикса и информационного импульса мы измеряли в периодах этой частоты. Далее в нашей таблице количество бит в пакете и код клавиши on/off или STANDBY.
Отдельно следует остановиться на параметре "повтор".
Большинство наших пультиков при нажатии и удержании кнопки посылали полный код только один раз (отмечены "-"), затем они посылали короткий пакет, который судя по всему означает повтор последней нажатой кнопки.
Некоторые пультики все время повторяют полный код ("+"). Исключением стал пульт SANYO ("*"), который на on/off повторял полный код всего два раза ,а на остальные - один раз полный код, далее короткий пакет.
Еще одним исключением из всех общих правил стал пульт от старого советского телевизора VESTEL.
Пакет от этого пультика не содержит префикса, более короткий и информативными в нем являются не только положительные, но и отрицательные импульсы. Наш проект различает не все кнопки от этого пульта, но мы не будем на этом заморачиваться.
Теперь о проекте. Его можно взять здесь:
Часть схемы для приема пакета от ИК приемника мы оформили в виде отдельного компонента IR-receiver для того чтобы иметь возможность использовать его в других проектах.
Работает он следующим образом. Первыми триггерами схемы из входного потока выделяется два события - фронт и спад. По фронту начинается подсчет количества периодов 36кГц, по спаду это количество сравнивается с пороговым и в зависимости от этого в регистр сдвига заносится 0 или 1.
Исходя из результатов наших изысканий (табл.1) мы выбрали пороговое значение - 37. Если длинна импульса превышает 256, то мы считаем что это конец пакета и вырабатываем сигнал data_ready.
Далее, уже в основном проекте, в момент data_ready, можно сравнить принятый код с ожидаемым и предпринять какие-либо действия. В нашем случае мы разрешаем изменить состояние триггера, выход которого выведен на светодиод led0.
Даже такой простой проект может найти практическое применение. Например на пультике
от телевизора (или еще чего-нибудь) можно найти неиспользуемую кнопку и использовать ее для включения/выключения освещения (или еще чего нибудь). Есть только пара нюансов:
- Как узнать код нужной нам кнопки? Для этого мы добавили в проект возможность просмотра принятого кода на светодиодах. При нажатии на key0 на них будут высвечиваться младшие восемь бит кода, при нажатии на key1 следующие восемь и так далее.
- В случае если при удержании клавиши пульт повторяет полный код, то пользоваться предложенной нами логикой меняющего состояние триггера будет невозможно, поскольку при достаточно длительном удержании кнопки он переключится несколько раз. Чтобы выйти из этой ситуации нужно узнать посылает ли пульт код повтора или код целиком. Для этого мы добавили в проект сравнение принятого кода с кодом повтора (у нас это 00000001) и если при удержании кнопки он есть - загорается led1.
Если кода повтора все-таки нет, то можно пытаться использовать две разные кнопки -
одну для включения, другую для выключения.
Вот так мы устанавливаем ИР приемник на плату Марсоход:
Вот небольшое видео, которое показывает как нажатие на пульте кнопки зажигает или гасит светодиод на платке. Это просто демо, но на самом деле часть этого проекта может быть использована в управляемых игрушках.
Подробнее...