receiver remote Fork me on GitHub
Русский

IRin by Helius

IRin - "IR input". Устройство (usb-брелок) для приема сигналов ИК пульта и пересылки кодов кнопок в операционную систему через USB виртуальный com-порт (usb-cdc-class). Построен девайс на базе микроконтроллера Atmel ARM7 AT91SAM7S64. В проекте использован Atmel USB framework.

Цель

Основной идеей было создать простое в использовании устройство, которое бы принимало сигналы с ИК пульта и отправляло их в ОС, при этом не использовало com-порт, который все реже встречается в современных ПК, не требовало сложной конфигурации и настройки на пульт (намучался с lirc). Решено использовать Communication Device Class USB, по сути виртуальный com-порт, не требующий специальных драйверов в большинстве ОС, а так же позволяющий работать с ним без специальных программных средств. Просто подключаем устройство, открываем VCP на чтение, жмем кнопки пульта и видим как сыплются коды кнопок. В Linux это сделать проще простого используя утилиту cat:
$ cat /dev/ttyUSB0
NEC 5916E
NEC 6916E	
Строки которые вы видите в терминале - коды кнопок предваренные протоколом пульта (мой пульт работает по NEC протоколу)

Если устройство не подхватится автоматически, загрузите драйвер руками, уазав код устройства (можно посмотреть в выводе lsusb)
# modprobe usbserial vendor=0x03eb  product=0x6119
Имя устройства может отличаться (/dev/ttyUSB0, /dev/USB0 итд, смотрите syslog).
Пример простого bash скрипта позволяющиего автоматически обрабатывать события нажатия кнопок пульта. В 6 строке мы читаем коды кнопок пульта с /dev/ttyUSB0 - наше устройство. В 7 строке мы свитчимся в зависимости от кода кнопки в обработчик и выполняем необходимы действия (рулим громкостью).
 1 #!/bin/bash
 2 
 3 KEY_VOL_UP="NEC 00000"
 4 KEY_VOL_DOWN="NEC 11111"
 5 
 6 cat /dev/ttyUSB0 | while read line; do
 7   case "$line" in
 8 
 9 #--- volume up action ----
10     ($KEY_VOL_UP)
11       echo "--volume up--"
12       amixer set Master 2+ > /dev/null
13     ;;
14 
15 #--- volume down action ---
16     ($KEY_VOL_DOWN)
17       echo "--volume down--"
18       amixer set Master 2+ > /dev/null
19     ;;
20 
21 #--- template to you action ---
22   # (YOUR KEY)
23   #   echo "--you action--"
24   # ;;
25 
26 #--- default action, if key not matched ---
27     (*)
28       echo "--unknown key $line"
29     ;;
30   esac
31 done
Если вы откроете файл устройства (виртуальный com-порт) терминалом типа minicom под linux или putty под вендой, нажмите "Enter" на клавиатуре и вы увидите приглашение командной строки. Это командная оболочка реализованная в устройстве, позволяет конфигурировать и задавать псевдонимы для кодов кнопок.
$ minicom -D /dev/ttyUSB0 -c on -b 115200
IRin>
Нажмите кнопку на пульте ее код появится в консоли, теперь выполните 'setname' с ASCI псевдонимом:
NEC_DD916E       
IRin> setname VOLUME_UP
saving name: 'VOLUME_UP' for key 'NEC_DD916E'
IRin>
Теперь если вы нажмете ту же кнопку, вы увидете VOLUME_UP вместо NEC_DD916E. Кроме того вы можете задать время повтора зажатой кнопки (в мс)
IRin> 
IRin> rep_delay 
500 ms           
IRin> rep_delay 350
IRin> rep_delay 
350 ms           
IRin> 
После конфигурирования можно посмотреть сохраненные в памяти записи для кнопок:
IRin> eeprom print 
key  0: NEC_14916E POWER
key  1: NEC_DD916E VOLUME_UP
...
IRin>

Плата

Плата разведена в Eagle для домашнего изготовления по ЛУТ технологии. Получилась с первой попытки с хорошим качеством дорожек.
begin black print board eagle board
кликабельно
step 1 step 2 step 3
Как то так получилось, что я прибил последнюю версию платы, восстановлю и выложу позже.

Схема

Схема очень простая, она содержит

Прошивка

Cкачать intell-hex файл прошивки.

Как прошить микроконтроллер

Я использую sam_i_am, спасибо Andrew Sterian за классную утилиту. Она очень проста и удобна в использовании. Утилита использует встроенный в АТ91SAM usb загрузчик Samba, на плате есть джампер TST с помощью которого можно скопировать загрузчик из скрытой области памяти во Flash.

Сборка проекта

Вам потребуется кросс-компилятор, собирающий исходники под ARM платформу, я использую скрипт summon-arm-toolchain который автоматически подтягивает нужные (свежие?) версии всех необходимых исходников (gcc, libc, build-utils) и собирает вам тулчейн (toolchain) (набор инструментов для сборки ARM проектов).
Теперь когда у вас есть тулчейн, зайдите в директорию проекта, поправьте Makefile, указав нужный чип, конфигурацию (кол-во отладочных сообщений) итд по своему вкусу и собирайте проект:
$cd src/usb-device-cdc-serial-project/
$make

ТоДу

Лицензия

GPL

Скачать

Можете скачать проект в архиве zip или tar.

Также вы можете клонировать проект c github Git командой:

$ git clone git://github.com/Helius/IRin