Дистанционное управление компьютером за 1$...

По материалам журнала Cooler

Часть I

Итак, постановка задачи: необходимо научить комп "слушать" [любой] пульт ДУ. В принципе, ИК пакеты, генерируемые пультами имеют небольшую частоту - порядка 30-40кГц (исключение составляют лишь некоторые пульты Panasonic, где частоты посылок достигают 400кГц). Это первое. Второе - заставить его запускать программы, "нажимать" на кнопки и т.п. Это уже чисто софтовая часть.
Что имеем: посылки любого пульта последовательны по своему принципу и каким-то образом закодированы. Логичнее всего было бы и принимать их последовательно. Для этого есть последовательный порт. Подойдет, разумеется, практически любой [телевизионный] IR приемник.
Потом все пакеты должна выучить программа, которая будет узнавать нажатия разных клавиш пульта. Эта же программа может и управлять всем остальным (нажимать кнопки, регулировать громкость и т.п.).
А можно ее реализовать в виде драйвера (сервиса), а верхний уровень управления отдать другим разработкам.

Как раз для такаих задач существует проект для Linux"a LIRC (linux infrared control), который был успешно портирован для Windows. Так и называется - WinLIRC.
Программа цепляет на себя не только функции управления последовательным портом (чтобы читать оттуда ИК пакеты), но и работает в качестве демона по IP протоколу и отдает команды на определенный порт. Это очень удобно. Т.е. можно приемник поставить на одной тачке, а управлять программа будет другой (отдаленной) тачкой (или даже несколькими). Как это сделать - об этом позже.

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

WinLIRC

После запуска программа скажет, что ее необходимо сконфигурировать. В строчке config можно на первое время подставить родной файлик sample.cf, который идет с ней, потом выбрать COM порт и жать кнопку Raw Codes. Дальше вывалится окошко и программа будет ждать сигналов из последовательного порта. Дальше жмите кнопки на пульте - смотрите, что происходит в окошке. Там программа будет показывать сами пакеты. Ну, RAW-дата и есть raw-дата.

Теперь надо отвлечься на сборку ИК приемника. Одн из читателей прислал мне простую схемку... Впрочем, вот письмо:

From: Александр Маслов
Subj: IR remote control

WinLIRC, про которую я писал (http://winlirc.sourceforge.net/) есть в исходниках с плагином под WinAmp, довольно интелектуальна, она пытается разобрать поток, и если у нее не получается работает с RAW (из всех проверенных мной пультов разных фирм (около 7), только один работал с RAW, остальные красиво с кодом, просто у этого одного Panasonic несущая была около 400 кГц (очень короткие импульсы), а приемник IR расчитан на 38 кГц (в пределе 36-40 кГц)).
Схемку железки я использовал еще проще, отлично работает (использовать стабилизатор 7805 не вижу смысла т.к. ток потребления самой 7805 и IR модуля соизмеримы). Используемая ОС Windows NT 4.0/2000, хотя работаь будет под любой Windows (95/98/ME).

подключение ИК-приемника к COM порту TK18 '>xx

По этой схеме следует подключать TSOP

Это схема, которую и прислал Александр. Огромная ему благодарность. Проще, наверное, и не бывает. Вопрос в том, какой ИК приемник выбрать и где его купить?
Я решил просто пойти в ближайший магазин радиодеталей и купить все детали до единой. ИК приемников было всего два вида - я попросил первый попавшийся, удостоверившись, что он "от телевизора". Попался какой-то TK1833. Слышал я о нем первый раз в жизни. Решил посмотреть в интернете - что за зверь. Абсолютно ничего, кроме мелкого упоминания на каком-то складе не нашел нужна была хотя бы разводка ножек.

TK1833


TK1833

выпуклостью к себе, слева-направо:
DCD (сигнал), GND (общий), RTS (питание +)

Ладно, не буду углубляться в разные мелочи. Разводку я дал, схему тоже. Пора собирать. Хотя собирать-то особо нечего. Единственно, что может еще понадобится - female разъем для COM-порта. Диод я взял КД521 (можно и 522 и др. подобные кремниевые), конденсатор 10мкф,16v. Обошлись все детали по Иркутским ценам в 54 рубля ровно. Самым дорогим оказался ИК приемник (51 руб.)

Получилась у меня вот такая штука. Разводка по разъему female - в соответствии с цифрами, которые есть на схеме. Впрочем, на фотке я еще продублировал визуально (первый (1) - слева вверху, пятый (5) - справа, красный (7) - внизу). Сам фотоприемник, видимо, уже так сделан, что никаких красных стекол не надо, никаких экранов тоже - у меня помех не было никаких.

Можно запихнуть его вот так красиво в разъем - хотя я не понимаю, чего фотоприемнику делать сзади компа? Или вот интересный вариант - встроить в мышь. Только весь фокус в том, что в большинстве случаев не удастся использовать стандартный шнур от мышки (поэтому разъем у меня самодельным оказался) - в мышке не используется одна из линий, необходимых ИК приемнику в этой схеме. Т.е. придется брать шнур от модема - там линии все на месте и уже его пристраивать для мышки. Неплохое решение, но просверлить небольшое отверстие в передней стенке корпуса и спрятать все провода внутрь - еще лучше. Я так и поступлю :)
Все, с железом и пайкой закончили. Теперь вернемся к WinLIRC, причем, его освоение - это еще полпути. Не самого сложного, но очень ответственного.
После того, как подключите ИК приемник к любому COM порту (1-му или 2-му), необходимо проверить работоспособность схемы и деталей вообще. Для этого-то и лезем в пункт меню RAW data в LIRC. Давите кнопки на пульте - смотрите пакеты. Если все ок, в окошке чего-то там бегает, схему можно считать рабочей. Теперь необходимо научить программу LIRC распознавать все кнопки вашего пульта. В строчке config прописываем новое имя файла (где будет описан ваш пульт) и идет в пункт Learn. Далее - читаем, что пишут и следуем инструкциям. У меня практически на всех кнопках было 100% распознавание пакетов. После обучения необходимо проанализировать получившийся файл с RAW данными от пульта. Жмем кнопку Analyze. Программа перестроит CFG файл, где будут хранится значения всех кнопок, которые вы нажимали. Больше в программе LIRC делать нечего, сверните ее - пусть висит в трее. Потыкайте пульт - WinLIRC в трее должен отзываться зеленым светом на известные кнопки. Далее, для ходовых испытаний программы установите плагин для Winamp, который позволяет управлять плейером. Плагин необходимо сконфигурировать. Вообще, придется лазить постоянно в файлик .CF, который WinLIRC создал для вашего пульта - там находятся названия кнопок (которые вы же и давали) - вот их необходимо и прописать в свойствах плагина. Прописать надо ручками. Впрочем, разобраться несложно. Я для пробы сконфигурировал громкость (туда/сюда) и передвижение prev-next по песенкам в плейлисте. Все заработало сразу. Проблем не было.
Теперь хорошо бы подобрать программу, которая могла бы управлять виндузой, программами, кнопки всякие нажимать и пр. В общем, чтобы моща перла :)

На сайте WinLIRC можете найти ссылки на "компатИбле" программы, которые совместимы с WinLIRC. Т.е. программы верхнего уровня. Что предлагается:
- IREX - Работает с WinLIRC, как клиентская часть. Слишком простенькая программка. Все настройки действий прописываются ручками в отдельном cfg файле. Как простая запускалка - может и пойдет...
- IRAssistant - отстой полный - толком заставить работать мне его так и не удалось. Настройки есть какие угодно (цвета, шрифты всякие - две менюшки целых), а для настройки интерфейса с LIRC - практически ничего. Не понял я ее. Короче, можете даже не качать.
- Odtwarzacz Filmow - какая-то прилада для отдельной задачи (я ее не скачивал).
- uICE - вот это самое то что надо. Клевая штука. Чуть-чуть мне функциональности в ней не хватило, но это я после 2 часов колупаний уже придираться начал к ней :)

Вот на uICE мы и остановимся. Полное название программы - universal Infrared Control Engine. >Понимает тучу всяких устройств (как железных так и системных). В том числе и LIRC. Причем, есть как сам LIRC, так и железячка, которая называется Basic LIRC device - это как раз то, что паяется из 5-ти деталек :)

Так вот. Сам uICE может работать самостоятельно и без всякого LIRC - его надо только научить всем кнопкам. Там есть большой раздел для этого. Но. Ценность LIRC в том, что он очень умно анализирует пакеты и не дает ошибок. uICE я долго пытался обучить кнопкам пульта (да, кстати, пульт я использовал от старого телевизора SONY) - он вроде обучался, но нажимая на пульте на кнопку Volume+ я мог получить обратный результат ("Volume-") и еще что-то, и вообще, все что угодно. Просто у программы uICE плохой обучающий и анализирующий блок. Мне единственный раз удалось обучить распознавать две разных безошибочно. Все. Дальше я устал, запустил WinLIRC, прописал в uICE, что отныне он будет работать с демоном WinLICR, как источником сигналов. Прописывается это несложно - достаточно указать IP машины, порт оставляем по умолчанию. Как индикатор, что я законнектился правильно, мне AtGuard сразу сказал, что кто-то ломится по порту 8765 и обратно.
Все. После этого необходимо в разделе настроек прописать пульт, кнопки (имена опять придется смотреть в .CF от WinLIRC)


это уже созданные события-отклики на кнопки

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

Для TV тюнера я прописывал действия в виде Keystroke "в окно" - просто у ATI TV в ее родной софтинке есть "шустрые кнопки", которыми можно переключать каналы, менять размер окна и пр. Вот их и пихал туда. Все работает отлично. А громкость меняю системную - в uICE в настройках есть специальный раздельчик для этого. Причем, можно разрешить специальную фичу, когда будет показываться типа "меню на экране" - как в обычном телевизоре - когда жмешь на пульте громкость - появляесть "прогресс-бар" и чего-то там двигает. Короче, все как надо :)

Таким образом, как нижний драйвер используеся WinLIRC, который умеет очень хорошо работать с распознаванием пакетов (обучением любому пульту), а в качестве программы верхнего уровня используется программа uICE. Это хороший копмлект для управления компьютером.
Впрочем, с помощью пульта можно не только плейера и телевизоры запускать. Например, можно организовать систему персонального доступа - т.е. к твоему компу никто не подойдет, а ты в любой момент нажал кнопку на пульте - и хранитель экрана прекратил работу, нажал - вошел в сетку и т.п.
Короче, нафантазировать можно все что хочешь. Есть ведь очень маленькие пульты - их можно с собой носить как брелок для ключей :)

Вроде все описал, что надо было.
Теперь, еще раз ссылки по теме:

http://winlirc.sourceforge.net/> - виндузая версия LIRC (Linix IR control). Т. ;
http://www.lirc.org/receivers.html> - описание LIRC со схемами и списком IR приемников;
http://gware.virtualave.net/index.htm - сайт программы uICE (The universal Infrared Control Engine);
http://www.pcremotecontrol.com/info.html - еще один клиент для WinLIRC;

Файлы:
WinLIRC [90kb] - внутри еще есть и исходники, запускать WINLIRC.EXE ;
GEN_IR [80kb] - из всего пака (там исходники еще) необходим только GEN_IR.DLL;
uICE [1Mb], 1Mb - без runtime файлов. с ними - на оригинальном сайте. Для Win98 все идет и так;

Еще одна программа. Называется Girder (v3.0.21) - в принципе, похожа на uICE, но гораздо менее функциональна. Тоже работает с TCP/IP сервером (WinLIRC) и есть блок самообучения.

Часть II

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

Как раз есть Vishay-евске TSOP-ы, Agilent-овские приемопередатчики HSDLxxxx (почти всех серий) и др. оптоэлектроника. Выложил у себя [450kb], PDF (и еще - здесь). Крутейшая крутотень! :)

огромное спасибо Александру

Едем дальше. На самом деле, связка WinLIRC и Girder несколько тяжеловата и давно есть хороший "hardware" плагин для простых ИК устройств типа вышеуказанных TSOP, SFH и др.

Брать здесь [200kb] (или у меня). Софтинка прекрасно распознает коды пульта, не требует никакого обучения - все работает сразу и без всяких обзываний кнопочек и пр. Кнопки просто представлены большим числовым кодом. Да в общем, это ведь без разницы - как там они обзываться у Girder-a будут.

Настройки плагина просты: указание порта и даже разводка сигнального вывода. На тех схемах, которые я давал - он на DCD, по умолчанию стоит другой - поэтому обратите внимание. Больше ничего менять не нужно, плагин должен заработать сразу. Для тех, у кого вообще и схемы-то нету, есть кнопочка "about HW" - там как раз и схемка показана. Так что, остается один Girder, а Winlirc уже не нужен.
Кстати, не забывайте следить за обновлениями Girder http://www.girder.nl/

P.S.( Добавление от Martina ) Я всё это дело собрал по схеме со стабилитроном и IR-ресивером TSOP1136 (правда первый блин на TK2836 был комом - с этим датчиком устройство не работает), затрачено около 30 руб. - отсюда и название статьи. Для управления использовал Gider и плагин к нему "Igor SFH-56 device". Всё отлично работает и обучается (любые пульты). Хочется предупредить, что на слабых ситемах с запущенными тяжёлыми задачами (типа просмотр DivX) команды ДУ плохо обрабатываются (всётаки декодер ИК пакетов - софтовый!)....

Hosted by uCoz