081-Управление компьютером при помощи любого IR-пульта.

Автор: | 17.12.2011

1 Сомнения.

Я долго сомневался в необходимости написания программы для управления компьютером от IR-пульта. С одной стороны, существует много аналогичных устройств/программ (как платных, так и бесплатных) с хорошей функциональностью и ничего нового в эту область я добавить не смогу.
С другой стороны, раз уж аппаратная часть нами собрана (преобразователь IR-to-UART) почему бы не использовать ее еще и для управления компьютером? Мелочь, а приятно :). Кроме того, в разрезе развития 1W-IR сети и управления «умным домом» / «рабочим_столом», будет полезно обкатать некоторые идеи в жизни. В итоге решил написать небольшую программку и посмотреть, как она будет работать с различными пультами.

2 Задачи.

Итак, у нас есть готовая плата (даже несколько вариантов) преобразователя посылок бытовых IR-пультов в сообщения UART. Сигнал UART через преобразователь (для COM-порта это может быть MAX232, для USB — сделанный нами ранее USB-to-UART преобразователь или, если есть, готовый преобразователь, например шнурок от мобильного) нужно отправить в компьютер. Далее программная часть, в зависимости от поступившего сообщения (нажатой на пульте кнопки), должна выполнять заданные действия. Действия могут быть различными, например: управление мышью, запуск определенных программ, регулировка громкости и т.д. Вот так это должно работать в комплексе. Теперь разберем по частям.

3 Железо.

Как я уже писал выше, главная идея этой реализации использовать уже готовую плату преобразователя IR-UART. Я буду использовать преобразователь, собранный на ATtiny13,
Готовая плата IR driver
хотя можно взять и на ATtiny2313 – любая из плат или прошивок для них (а их уже скопилось достаточно, здесь и на форуме) будет работать корректно. У кого такой платки еще нет, быстренько ее делаем – статья >здесь<. Кстати, специально для этого устройства сделал апдейт однобайтовой прошивки, изменив алгоритм работы. Поэтому если есть какие проблемы со старой — попробуйте новую (или наоборот).

Идем дальше. У нас есть сигнал UART как нам его принять на компьютере? Тут вариантов несколько:
— первый, который напрашивается, отправлять сообщения через COM порт компьютера. Для этого нужно будет использовать преобразователь UART-to-COM (не забываем, напрямую UART к COM-порту не подключается – сгорит микроконтроллер). Можно купить уже готовый или собрать самому, например на MAX232 (смотрим даташит, там есть схемка как подключать).
— второй вариант немного посложней, но предпочтительней – подключиться через USB. Достоинства очевидны: в отличии от COM, USB порт есть в любом компе, кроме того, питание для преобразователя IR-UART можно брать прямо с USB порта (с COM порта тоже можно ухитриться взять 5в, но это будет намного сложней). Для подключения через USB можно купить готовый преобразователь UART-to-USB (они довольно дешевы) или собрать самому, например, на микросхеме PL-2303 или FT232, или на микроконтроллере (статья про преобразователь UART-to-USB), или, как сделал я для этой статьи, взять старый шнурок от мобильного и «прицепить» к нему платку IR-UART преобразователя – выбирайте сами.  Для подключения через USB в систему не забудьте поставить драйвер, который создаст виртуальный COM порт при подключении устройства.
С железом – все. Посмотрите что получилось:

Устройство в сборе
Проверить работоспособность выше описанной конструкции можно запустив программу терминала, открыв соответствующий порт и понажимав клавиши на пульте. Каждое нажатие должно сопровождаться принятыми символами в окне принятых сообщений.

4 Софт.

Вот теперь переходим к самой виновнице данной статьи – программе для управления компьютером при помощи IR пульта. Назначение программы — сопоставить любой клавише пульта действие на клавиатуре (нажатие клавиш или их сочетаний), действия мыши (движения указателя, нажатия кнопок, прокрутку колесика) или действия системы (запустить программу, отключить компьютер, регулировать громкость и т.д.). Программа умеет автоматически загружаться при запуске Windows и подключатся к нашему устройству. Достоинством программы считаю возможность работы с любыми пультами (причем можно работать одновременно с разными пультами). Прием сообщения от IR-to-UART в программе организован по особенному. Для того чтобы не привязываться к какому-то определенному типу или длине посылки программа из любой посылки вычисляет хэш-сумму и работает уже с ней. Это дает возможность работать с различными способами передачи сообщений как уже готовых устройств, так и тех которые будут сделаны позже.
IRControll.zip - Программа для управления компьютером IR-пультом
IRControll.sha - Исходник IRControll (HiAsm)

5 Работа.

Окно программы

Принцип работы программы очень простой.
— Для начала, в закладке «Работа с СОМ» выбираем COM-порт к которому подсоединено наше устройство (это может быть виртуальный COM-порт созданный при подключении через USB – разницы нет), нажимаем «Открыть» — теперь программа может принимать сообщения от нашего устройства. Если все нормально, то в области «Статус», при нажатии на кнопки пульта должен загораться зелененький значок «ОК» и появляться хеш-сумма принятого сообщения.
— Теперь открываем нужную нам закладку «Клавиши», «Мышка», «Система» заполняем поля и добавляем в таблицу действие (кнопочка с зеленым плюсиком). В окошко «IR-код» значения будут заноситься автоматически при нажатии клавиш пульта. После добавления в таблицу действия, оно автоматически становиться активным. Удалите из таблицы строчку и действие не будет производиться (возможно, стоит добавить переключатель активности в строчках таблицы?). На каждый код можно «вешать» любое количество действий (например, выбранное действие, Вы можете подтверждать звуковым сообщением, поставив на этот же IR-код запуск звукового файла с сообщением). Таблицы автоматически сохраняются при выходе из программы и загружаются при повторном входе.
Более детальное описание всех функций есть в хелпе программы. Вот отдельно файл помощи:
IRCHelp.pdf - Файл помощи программы IRControll

Видео по настройке и работе с IRControll:

 

Что еще можно сделать с программой?
1 Если Вам нужно управлять функциями различных программ (проигрыватели, презентации и т.д.) просто присвойте кнопке пульта комбинацию клавиш принятой в выбранной программе для нужного вам действия;
2 Если Вам нужны дополнительные действия в системе, как и в первом случае, назначьте кнопке соответствующее сочетание клавиш;
3 Если нужны более сложные действия, тогда в  закладке «Система» есть действие «02 Открыть файл» которое поддерживает bat-файлы;
4 Нетрадиционное применение! Я назвал это действие «Начальник идет!». Суть в следующем. На дверь кабинета ставиться концевичек, который «нажимает» кнопку пульта, по этой кнопке задействуется  команда «04 Закрыть активное окно/приложение». Догадываетесь зачем это нужно? 🙂 . Если тема будет востребована, сделаю маленький передатчик на одну-две IR-команды с питанием от батареек-таблеток который можно будет «поселить» на двери навсегда;
5 Еще одно нетрадиционное применение —  «Чревовещание». В  закладке «Система» есть действие «09 Проигрывание звука». Оно делает то-же что и «02 Открыть файл» со звуковыми файлами с одним отличием, звук проигрывается без открытия проигрывателя и без потери фокуса (переключения) активного окна. Применений несколько, например, можно подшучивать над друзьями, которые увлеченно рубяться в любимую игру, незаметно от них запуская звуки которые они не ожидают (записанные заранее звуки приближающихся врагов или смерти союзников, думаю, тут должна поработать Ваша фантазия…). Еще, если Ваше чадо нацепило наушники и валит фрагов налево и направо, потеряв связь с реальностью, можно ему отсылать сообщения , типа: » Милый, если ты не очень занят, можешь прийти к нам с Папой и покушать вместе с нами?», или такое —  «Бросай комп, лоботряс, иди учить уроки. Через пять минут не увижу тебя за уроками, полетишь с балкона вслед за компом!», ну Вы поняли о чем я :).

6 Выводы.

Программа не сможет Вас удивить чем-то оригинальным. Если Вы уже имели опыт работы с подобными вещами, то ничего нового для себя не откроете. В противовес к этому, программа позволяет себя гибко настраивать и, если Вам чего не хватает, Вы всегда можете попросить меня это добавить (в пределах моих возможностей, конечно :). Большим плюсом, считаю, возможность работы программы не только с преобразователем IR-to-UART, а с любым, Вами собранным устройством — это открывает новые возможности для использования уже готовых устройств. Для вновь создаваемых устройств нет необходимости придерживаться правил отправки сообщений.

7 Аналогичные устройства.

Не могу не дать ссылки на подобные устройства (не коммерческие варианты). Их существует довольно много, вот некоторые, наиболее удачные:
http://www.ir-max.ru
http://winlirc.sourceforge.net
http://www.mediatexx.com
http://www.pcremotecontrol.com

(Visited 4 392 times, 9 visits today)

081-Управление компьютером при помощи любого IR-пульта.: 112 комментариев

  1. Zalognik

    Опа, а я уже практически догородил ємуляцию клавиатуры для USB с приемом по UART-у. Как у вас все быстро получаетса (я про реализацию устройств), а для меня каждый шаг — новое открытие (не так давно начал увлекатса темой радиолюбительства). Спасибо.

  2. ProgrammerForever

    Зачёт, конечно, большая работа проделана, но есть более элегантное решение. Сам собирал, притом неоднократно. Преподаю информатику; в прошлом году с учеником выиграли конкурс «Будущее Алтая» благодаря этому девайсу.
    Устанавливается в систему как обычный джойстик (т.е. не требует драйверов. plug-and-play)
    Работает через USB.
    Софт для этого устройства — бесплатная программа Mkey. Обладает ОГРОМНЫМ функционалом.

    Ну и на сайте все расписано-разжёвано по 100 раз. Есть и схема, и плата, и прошивка.

    сайт — http://www.mindrunway.ru
    описание — http://www.mindrunway.ru/IgorPlug2.html
    схема — http://www.mindrunway.ru/IgorPlug2/IgorPlug_A4.pdf
    прошивка — http://www.mindrunway.ru/IgorPlHex/GCuJoyFB.zip
    варианты плат — http://www.mindrunway.ru/Layot.html
    Я делал этот вариант платы: http://www.mindrunway.ru/Layot/PlataA.zip
    Только выкинул все фильтрующие керамические конденсаторы, кроме одного.

    Не сочтите за рекламу, сайт не мой =)

  3. GetChiper Автор записи

    ProgrammerForever :

    Зачёт, конечно, большая работа проделана, но есть более элегантное решение….

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

    При написании своей программы я изначально не ставил за цель делать что-то революционное — это всего лишь дополнительная «плюшка» для платки «IR драйвера». На базе этой платки собрано уже не одно устройство и в дальнейшем я планирую расширять сферу ее применения.

  4. aleksunches

    Проверил. По началу было нормально, но потом начались глюки. Команды стали повторяться по 100 раз даже если кнопка не нажата. Если нажать другую кнопку — то другая кнопка будет повторятся. Пробовал разные прошивки — не помогло. Девайсов для создания помех нет, кроме лампочки накаливания, но я думаю она не будет точь в точь повторять только что нажатую клавишу.

  5. GetChiper Автор записи

    Если подключить просто к программе-терминалу, что выдает?
    Какая прошивка на платке?
    Что в качестве моста UART-USB?
    Питание от USB? если да попробовать от батареек.
    Создается такое впечатление, что где-то помехи на линии. Что там с проводом? ноль не отпал?
    Если ничего не помогло попробовать закоротить выход TSOP на платке. что будет?

    Нет, от лампы накаливания ничего не будет (как и от лампы дневного света или экономки).

  6. aleksunches

    Программа-терминал выдаёт иероглифы.
    Пробовал разные прошивки — не помогло.
    Преобразователь с Вашего сайта.
    Да, питание от ЮСБ.
    Какой ноль отпал?

    Я нашёл генератор помех — мышка. Если её подвигать команда повторится.

  7. GetChiper Автор записи

    А мышка USB?
    Странный эффект — такого не наблюдал.
    Попробуй переключить мышку в другой порт или мост устройства в другой порт.

  8. Gauss

    а все это дело будет работать на Win7?

  9. GetChiper Автор записи

    Теоретически должно — разницы нет. Нет возможности проверить.

  10. geovas

    Хорошая штуковина получилась! У меня вот уже давно есть идея сделать нечто-подобное, но с другой аппаратной частью: у меня есть ТВ-тюнер beholder, у него естественно есть пульт, уже давно есть мысль сделать программу способную работать с этим пультом так, как вы описываете. Может когда-нибудь реализую 🙂 Теперь есть мотивация!

  11. Arcanum

    А можно исходники IRControll?

  12. GetChiper Автор записи

    Можно, только я пока жду отзывов для окончательной доводки. Хотелось бы выложить максимально работоспособную версию.

  13. Gauss

    сдесь можно сделать гибрид — по юарту связь с компом + пара каналов для управления нагрузкой — например, включить комп (для стационарного идеально). а по программной части — просто нужно максимальное управление компом (и кстати вполне неплохо — выбрал бы даже вместо игорьплагина). в варианте на тини2313 жирновато на чисто приемник — на нем нельзяли сделать вместе юарт-юсб + ик приемник?

  14. GetChiper Автор записи

    Нужно крепко подумать…

  15. Gauss

    насчет связь с компом + пара каналов для управления нагрузкой или ини2313 юарт-юсб + ик приемник? =)

  16. Mihail 2

    вещь замечательная огромное спасибо. а вот на счет управления нагрузками тоже можно как то пристыковать а то порой чтобы свет выключить рядом с компом приходиться вставать и идти выключать

  17. Gauss

    мм, еще в программку можно сделать функцию ввода паролей — в программе забить пароль и при нажатии кнопки он вводится (жаль скорее всего оно тоько не выйдет для входа в систему)

  18. Ghjuhfvvf

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

  19. Ghjuhfvvf

    Следует отметить, что нажатие одной и той же клавиши пульта генерирует в программе IRControl несколько различных кодов, хотя Terminal выдает один и тот же код хоть при однократном нажатии, хоть с повтором.

  20. GetChiper Автор записи

    Ghjuhfvvf :

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

    По поводу автоповтора — это правильная мысль! Действительно можно такое приделать.
    По поводу нескольких команд на одном коде пульта — это в программе уже есть. Заносите в таблицу столько команд сколько Вам нужно с одним и тем же IR-кодом и они все последовательно (начиная сверху таблицы) выполнятся.

    Ghjuhfvvf :

    Следует отметить, что нажатие одной и той же клавиши пульта генерирует в программе IRControl несколько различных кодов, хотя Terminal выдает один и тот же код хоть при однократном нажатии, хоть с повтором.

    Это эффект связан с тем, что в некоторых случаях (когда, например, винда не может сразу отдать управление программе) в буфер UART COM порта (или виртуального COM порта) до чтения программой успевает записаться автоповтор с пульта (т.е две одинаковые команды). А так как сама идея программы работать не с определенной командой а хеш-суммой любого сообщения, то эти две одинаковые команды воспринимаются как другой IR-код. Это не создает никаких проблем так как случается редко и на эту команду программа никак не реагирует.

  21. Ghjuhfvvf

    Выложите, пожалуйста, исходник IRControl. Пусть даже не «максимально работоспособную версию»

  22. GetChiper Автор записи

    ОК, добавлю.

  23. demmax2004

    Добавлю поддержку данного ИК приемника в своей программе.
    http://www.ir-max.ru

  24. GetChiper Автор записи

    Извините, зазевался. Уже добавил.

  25. Gauss

    Такой вопрос: если моргает светодиод без нажатия кнопок пульта — это помехи, как от них избавиться или минимизировать?

  26. Gauss

    Походу надо сам TSOP экранировать. Количество помех меняется от положения приемника в пространстве и почемуто (помоему странно) в темноте дает в 5 раз больше помех, чем в светлое время суток или просто включить лампочку О_о

  27. GetChiper Автор записи

    Да, ТСОП нежное существо, в этом его плюс… и в этом его минус. Старайтесь делать выводы поменьше, поставьте дополнительные керамические конденсаторы поближе к ТСОПу (ну и экранировать тоже можно).

    Увеличение помех в темноте логично, так как TSOP автоматически подстраивается к окружающей освещенности (при ярком свете срабатывает ООС, а в темноте ее действие невелико)

  28. Gauss

    Спасибо за пояснение!

  29. iamstreetstyle

    Неработает ! Шлет одни нули по уарт Ж(((((((((((((

  30. iamstreetstyle

    На передачу светодиод неморгает на прием моргает в такт пульту и шлет нули ! При разводке ошибся и вместо кандера на 10мкф поместил кандер на 0,01 мкф.

    http://photoshare.ru/photo8562214.html

  31. iamstreetstyle

    В чем может быть проблема ???

  32. iamstreetstyle

    конденсатор ничего недает, другой ик приемник тоже ничего не дал ! МК Атtiny 13A-PU. UART на FT232BL, тоже самое и на уарте с max232n.

  33. iamstreetstyle

    Блин вспомнил что фюзы невыставил при програмировании !

  34. iamstreetstyle

    Все ОК бит CKDIV8 был невыставлен :))))))))))))))))))

  35. GetChiper Автор записи

    Стремление к результату всегда поможет 🙂 Сам иногда забываю фьюзы выставить, а потом долго не могу понять, где в программе накосячил.

  36. evgen79

    Собрал данное устройство с преобразователем USB в UART. Всё работает, но с интервалом в 5, 10с в uart выдаётся код последний нажатой клавиши пульта, хотя сама клавиша не нажимается. Перепробовал все прошивки, не помогает. Как будто при возникновении помех на TSOP, Attiny выдает этот последний код. В чём может быть дело??

  37. GetChiper Автор записи

    Это, действительно, могут быть помехи. Нужно попробовать экранировать ТСОП.

  38. evgen79

    @GetChiper
    Каким образом? Я понимаю, что TSOP ловит всё подряд и некоторые помехи рассматривает как нажатую клавишу пульта. Мне интересно почему Attiny выдаёт не код этой помехи, а именно последнюю нажатую клавишу. Помехи ещё можно в своей программе исключить (принимать только известные коды), а вот когда приходит нужный код из за помехи то это проблематично. Может в прошивке очищать буфер выданных кодов? (что то типа этого)

  39. GetChiper Автор записи

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

  40. aleksunches

    evgen79 :
    Собрал данное устройство с преобразователем USB в UART. Всё работает, но с интервалом в 5, 10с в uart выдаётся код последний нажатой клавиши пульта, хотя сама клавиша не нажимается. Перепробовал все прошивки, не помогает. Как будто при возникновении помех на TSOP, Attiny выдает этот последний код. В чём может быть дело??

    У меня тоже такое! =(

  41. GetChiper Автор записи

    Буду думать, что это может быть

  42. mick63

    Всё работает, и девайс и программа. Только вот управление звуком не привязать никак. В микшере, отдельный бегунок программы появляется, не связанный с другими. Как это побороть?

  43. GetChiper Автор записи

    Не работает и уменьшение и увеличение звука? Насчет нового бегунка — вроде не должен появляться. На другом компе нет возможности поверить?

  44. renault

    На Win7 регулировка звука однозначно не работает,при IRControl в микшере бегунок IRControl молчит,но идет попытка обратится к устройству динамики,громкость не регулируется.Еще пробовал старую версию ПерехватЪ-тоже громкость не регулируется,в микшере перемещается бегунок громкости самой программы ПерехватЪ-бегунок устойство динамики молчит,в последней версии Перехвата с поддержкой win7 все работает.По всей видимости это особенность звукового драйвера Win7 который регулирует звук раздельно для каждого приложения.

  45. mick63

    Привязал пульт к горячим клавишам, в программах, всё нормально, таким образом звук регулируется.

  46. GetChiper Автор записи

    mick63 :

    Привязал пульт к горячим клавишам, в программах, всё нормально, таким образом звук регулируется.

    Кстати, вариант! Горячих клавиш в винде море — можно пойти таким путем.

    Если буду делать апдейт, постараюсь больше погонять на семерке.

  47. nikolyan

    Как всегда все отлично.Собрал со вторым вариантом первой прошивки, винда7, звук к горячим клавишам.Пока особо не тестил, заметил что при коротком нажатии на кнопку пульта-код один, при длительном он меняется.Хотя может особенность пульта, завтра попробую другие.

Добавить комментарий