Дистанционное
управление компьютером за 1$...
По материалам журнала Cooler
Часть
I
Итак, постановка задачи: необходимо
научить комп "слушать" [любой] пульт ДУ. В принципе, ИК
пакеты, генерируемые пультами имеют небольшую частоту - порядка
30-40кГц (исключение составляют лишь некоторые пульты Panasonic, где частоты посылок достигают 400кГц). Это первое.
Второе - заставить его запускать программы, "нажимать" на кнопки и
т.п. Это уже чисто софтовая часть.
Что имеем: посылки любого пульта последовательны по своему принципу и каким-то
образом закодированы. Логичнее всего было бы и принимать
их последовательно. Для этого есть последовательный порт. Подойдет, разумеется,
практически любой [телевизионный] IR приемник.
Потом все пакеты должна выучить программа, которая будет узнавать нажатия разных
клавиш пульта. Эта же программа может и управлять всем остальным (нажимать кнопки,
регулировать громкость и т.п.).
А можно ее реализовать в виде драйвера (сервиса), а верхний уровень управления
отдать другим разработкам.
Как раз для такаих
задач существует проект для Linux"a
LIRC (linux infrared control), который был успешно портирован
для Windows. Так и называется - WinLIRC.
Программа цепляет на себя не только функции управления последовательным портом
(чтобы читать оттуда ИК пакеты), но и работает в качестве демона по IP протоколу
и отдает команды на определенный порт. Это очень удобно. Т.е. можно приемник
поставить на одной тачке, а управлять программа будет другой (отдаленной) тачкой
(или даже несколькими). Как это сделать - об этом позже.
Программу WinLIRC
можно скачать на оригинальном
сайте, но весь софт я выложу в отдельной директории у себя "для комплекту". Сылки в конце
статьи.
WinLIRC является только демоном и ничем сама не управляет.
Для управления необходимы надстройки. Есть на сайте еще плагин для Winamp, который разработан
и заточен конкретно под WinLIRC, но он управляет только
Winamp-ом.
После запуска программа скажет,
что ее необходимо сконфигурировать. В строчке 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
выпуклостью к себе, слева-направо:
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) команды
ДУ плохо обрабатываются (всётаки декодер ИК пакетов - софтовый!)....