Однажды, после кражи магнитолы из моего автомобиля я решил, что нужно сделать что-то такое, что будет неинтересно ворам, но очень функционально и удовлетворять мои потребности в мультимедии в машине. Поэтому я решил интегрировать в машину компьютер, в России это направление пока ещё слабо развито, а вот в США уже люди давно этим занимаются. Однако и у нас в стране не мало людей, серьёзно занимающихся этим делом. Есть несколько информативных форумов(например, pccar.ru), неплохих магазинов(carmonitor.ru), ну и студий, которые помогут вам, если вы хотите повторить это у себя в авто.
Одной из проблем при построении так называемого CarPC является безопасное управление компьютером во время движения автомобиля, в основном для этого используется сенсорный дисп.
Однажды, после кражи магнитолы из моего автомобиля я решил, что нужно сделать что-то такое, что будет неинтересно ворам, но очень функционально и удовлетворять мои потребности в мультимедии в машине. Поэтому я решил интегрировать в машину компьютер, в России это направление пока ещё слабо развито, а вот в США уже люди давно этим занимаются. Однако и у нас в стране не мало людей, серьёзно занимающихся этим делом. Есть несколько информативных форумов(например, pccar.ru), неплохих магазинов(carmonitor.ru), ну и студий, которые помогут вам, если вы хотите повторить это у себя в авто.
Одной из проблем при построении так называемого CarPC является безопасное управление компьютером во время движения автомобиля, в основном для этого используется сенсорный дисплей со специальным набором программ(я использую[url=» http://www.centrafuse.com/»]Centrafuse 3.1[/url]). Однако это всё-равно заставляет отвлекаться и переводить взгляд с дороги на монитор, намного удобней управлять часто используемыми функциями при помощи «нарульного» пульта от магнитолы. В 99% случаев это ИК пульты, поэтому в статье я расскажу как можно сделать(или приобрести и кастомизировать под свой пульт) ИК приёмник, который не требует драйверов и ПО после настройки, которую необходимо выполнить один раз.
Описанный мною ИК приёмник позволяет настроить его на приём сигналов от нарульного ИК пульта оставшегося от магнитолы: JVC RM-RK39 и управлять наиболее часто используемыми мною функциями программной оболочки Centrafuse 3.1(громкость, стоп/играть, следующий, предыдущий и т.д.) во время движения автомобиля, не отвлекаясь от дороги. Однако приёмник можно настроить на практически любой ИК пульт и выполнять практически любое управление, в ОС и программах, которые поддерживают горячие клавиши.
Конечно существуют и более простые способы ИК приёмников, но они имеют множество недостатков, я и сам ранее уже делал самодельный приёмник. [url=» http://www.pccar.ru/showthread.php?t=8458″]Тут[/url] описан мой проект по построению PCCar, там же есть и описание «старого» ИК приёмника, неудовлетворяющий моим сегодняшним требованиям.
Итак переходим описанию: Порывшись очередной раз в интернете, я набрёл, на уже известный мне сайт: http://www.mindrunway.ru/, пожалуй, это лучшее описание как сделать самому действительно хороший ИК приёмник. Сайт очень информативный, поэтому чтобы людям не разбираться в нём неделю-другую, я опишу алгоритм применения этой информации для CarPC.
Итак имеем нарульный пульт(или любой другой ИК пульт, я буду описывать, как делал, имея пульт JVC RM-RK39).
Это вторая версия статьи. На первую можно взглянуть вот тут.
Однажды нужно было проверить доисторический (русский еще) ПДУ. Средств никаких не было. Покопавшись в инете, нашел несколько идей. Поразила идея сделать простенький ИК порт из: мышки! Компьютерной, разумеется. С этого девайса мы и начнем.
1.ИК порт из шариковой СОМ мышки.
Вот и схема девайса:
После получаса паялинга и приклеинга получилось вот что:
2. Продвинутый ИК приемопередающий девайс.
Раз уж разбежались, надо рассказать и о более продвинутом девайсе.
Данный девайс хорошо принимает и передает на расстоянии до 5 м. Если хотите поэкспериментировать, то вот распиновка СОМ порта, распространенная в интернете:
3. Программы для работы с ИК портами.
Дальше нажимаем Raw Codes. Подносим пульт к приемнику и жмем кнопки. Если там начиняет рябить, типа: pulse 200, pulse 400, то все хокей. Если нет, смотрим девайс на наличие ошибок.
К настоящему времени разработано достаточно много самых разных решений для ДУ персональным компьютером. Все они имеют разную сложность и функциональность. Для радиолюбительских устройств можно условно провести разделение:
1. Приемный модуль не совмещен с декодирующей частью. Декодирование ИК посылок осуществляется на ПК специальной программой. Как правило, схема приемника предельно проста. Подключение может быть реализовано через COM или LPT порты. 2. Прием и декодирование сигнала происходит в устройстве аппаратно. На ПК отправляется уже распознанная посылка. Распознавание может быть выполнено в виде реального кода, либо некого условного кода, который хоть и не является реальным для данного пульта, но обеспечивает однозначную идентификацию нажатой кнопки.
Обеим способам присущи достоинства и недостатки. Например, недостатки для первого типа: такие порты как COM и LPT встречаются в компьютерах все реже и реже, а в ноутбуках уже практически перевелись. Декодирование на ПК требует реалтаймового доступа к портам, что не гарантируется, в результате чего не всегда верно принимается посылка. Достоинства: простота, отсутствие необходимости программировать железо, существование программ способных распознать большинство протоколов. К плюсам второго подхода следует отнести возможность использовать интерфейс USB, не обязателен реалтайм. Недостатки – более сложная аппаратная часть, необходимость ее программирования.
Преимущества CDC: Поскольку CDC это виртуальный COM порт, то принципы работы с ним простые и ничем не отличаются от работы с обычным COM портом. Не требуются специальные драйвера со стороны ПК (используются inf-файлы для разных ОС). Работает в XP, Vista, Win7. Можно увидеть посылки устройства обычным терминалом, в случае необходимости. Не загружает процессор – посылки отрабатываются только во время приема.
Недостатки CDC: Как и с реальным портом, требуется постоянное соединение устройства. Отсоединенное устройство придется вручную присоединять в приложении на ПК (переоткрывать порт) – в некоторых случаях это может быть неудобно.
Преимущества HID: Можно отсоединять и присоединять устройство «на горячую», программа на ПК будет автоматически его отслеживать и по цвету значка в трее, возможно определять состояние подключения.
Недостатки HID: Для работы приложения требуется специальный драйвер. Был использован драйвер libusb-win32-filter-bin-0.1.12.1, который работает пока только на WinXP 32 bit. Если у вас другая операционная система, то остается CDC. Программа периодически опрашивает устройство, поэтому мизерная загрузка процессора в простое все же есть.
Контроллер – Atmega8 16AI (без индекса V, это важно). Светодиод D1 применен для снижения напряжения питания контроллера (5В), чтобы улучшить согласование уровней напряжения от МК с интерфейсными линиями USB (3.3В). Его переход обладает также стабилизирующими свойствами. Я применил яркий смд светодиод, выпаянный из ленты. Падение напряжения на диоде должно быть около 1.5В. В тоже время ИК приемник IR1 питается от 5В, поэтому диод D2 (лучше взять германиевый или Шоттки – с малым падением напряжения на переходе) защищает вход контроллера от перенапряжения. Переключатель SW1 применяется для переключения в режим программирования устройства. Об этом ниже.
Монтаж выполнен преимущественно смд элементами, вариант конструкции:
Для того, чтобы в последующем было удобно перепрограммировать устройство, в первый раз следует прошить бутлоадер (см. архив проекта, папка tools) по интерфейсу ISP любым удобным программатором. Прошивка рабочей программой далее выполняется по USB. Для этого следует замкнуть переключателем SW1 пин PB1 микроконтроллера на землю и присоединить устройство к порту USB. После этого запустить программу Upload.exe (оболочка для BootloadHID.exe) из папки default (или папки в которой находится hex-файл) соответствующего проекта. Откроется окно:
В строчку Firmware необходимо внести имя файла прошивки (без расширения). После этого нажать CMD Flash и подтвердить выбор. В окне:
Нажать кнопку CONFIRM и начнется процесс загрузки прошивки в контроллер. Остается только извлечь устройство, отключить PB1 от земли выключателем SW1и подключить снова к USB порту. Если был выбран класс устройства HID, то запроса на установку драйверов не последует. В диспетчере устройств можно увидеть новое оборудование. Для CDC класса в запросе на установку драйвера, необходимо указать нужный inf файл из папки inf (см. проект), в зависимости от ОС. После этого в системе появится виртуальный COM порт, в который будут приходить распознанные посылки.
Приложение для ПК находится в папке IRServer_WinLircCompatible. Выходные данные этой программы идентичны данным известной программы WinLirc. Поскольку являются, де-факто, стандартом для управляемых посредством сокетов приложений. Это означает, что с помощью данной программы можно управлять всеми приложениями, которыми позволяет управлять WinLirc. Многие из мультимедийных программ имеют встроенные средства или плагины для работы – LightAlloy, Aimp, KMPlayer, WinAmp и др. Остальными приложениями или функциями ПК можно управлять с помощью программ, которые также являются клиентами WinLirc, но реализуют отсылку управляемым приложениям WM-сообщений или посылку горячих клавиш (Girder, Device Control, MKey и многие другие).
Рассмотрим настройку программы, которая, в отличие от других приложений, достаточно проста. Главное окно программы:
Номер COM порта выбирается в зависимости от того, какой номер был присвоен устройству CDC. TCP порт установлен по умолчанию стандартным для WinLirc. Его можно изменять. Соответствующими кнопками можно управлять портами и сервером. Чекбокс «Use HID…» предназначен для устройства класса HID. В этом случае параметр Time HID Rq задает время опроса устройства в миллисекундах. В группе Info будут видны пришедшие и отправленные посылки, последнюю из которых (либо введенную вручную) можно отправить кнопкой Send. Также видно количество присоединенных к серверу клиентов (не более 16). Строки отправляются клиентам в виде Hash Counter Command Name. Где Hash составлен, для уникальности из кодов адреса и команды данного пульта и его вид нельзя изменить. Counter – переменная отражающая порядковый номер посылки при удержании. После прихода следующей посылки счетчик сбрасывается. Остальные два параметра задают команду (не обязательно в числовой форме) и имя пульта.
Для того чтобы в клиенте было удобней задавать соответствие команд управляющим воздействиям, предусматривается задание командам и имени пульта информативных имен.
Для этого устанавливаем переключатель в положение Naming (Именование) и нажимаем любую кнопку на пульте. Если для этого пульта (его адреса) нет соответствующего файла настроек, то появится запрос на введение имени пульта:
Вводим имя (например, MSI) и жмем ОК. После вторичного нажатия на кнопку, программа определит, что имя данного пульта уже ассоциировано и предложит поименовать команду:
Вводим имя команды и жмем ОК (или Enter). Таким образом, можно ассоциировать все нужные кнопки пульта. Настройки сохраняются в папку с исполняемым файлом сервера. Имя файла состоит из частей адреса устройства, расширение irs. При необходимости файл ассоциаций можно редактировать блокнотом. В итоге, получается следующее:
В данном случае видно, как отличается принятая и отправленная строки, а также реакцию управляемого клиента (Mkey), настроенного на команду right от пульта MSI (регулировка громкости).
Остальные настройки: -Use only named: Передаваться клиентам будут только именованные команды от именованного пульта. Сделано для исключения реакции на посторонние пульты или ненастроенные/ненужные команды. -Unnamed enable: помимо именованных команд будут переданы и неименованные (если таковые примет приемник). -Naming disable: будут передаваться посылки напрямую, без именования. Как правило, наиболее комфортна работа с включенной опцией Use only named после задания соответствия имен. Кнопка ОК сворачивает приложение в трей, Cancel – закрывает приложение.
Общие замечания: -По умолчанию COM порт настроен на скорость 9600 бод. Изменить, в случае необходимости, можно в ветке реестра: HKEY_CURRENT_USER\Software\IRServer\COM_PORT параметр Baud_Rate. -В ветке HKEY_CURRENT_USER\Software\IRServer\Other можно изменить VID/PID для устройства (класс HID) с которым работает сервер. Данные идентификаторы предоставляются разработчиком драйвера V-USB (AVR-USB) OBJECTIVE DEVELOPMENT Software GmbH бесплатно для некоммерческих устройств. Подробнее читайте в лицензионном соглашении. -При использовании класса HID, необходимо установить библиотеку libusb-win32-filter-bin-0.1.12.1 из папки tools. -Фьюзы МК следует настроить для работы от внешнего кварцевого резонатора 12 МГц, с включенным BOD на 2.7В (иначе возможно периодическое повреждение бутлоадера), с включенным загрузчиком размером 1024 байта (конфигурация фьюзов приведена в архиве) -Переключатель SW1 на линии PB0 может быть использован для дополнительной конфигурации устройства (при соответствующем изменении программы). Либо на вывод PB0 можно подключить светодиод, индицирующий прием посылку. Для этого в файле nec_ir_module.h нужно раскомментировать строку #define LED_USE и пересобрать проект. После этого, разумеется, не следует устанавливать на пин PB0 переключатель, с риском повреждения МК. Переключатель на PB1 при этом следует сохранить. -Приемник ИК излучения TSOP1736 использован в малогабаритном исполнении. Обратите внимание, что цоколевка у него отличается от обычного.
В архиве проекта присутствуют все необходимые файлы и исходные коды
Проект предоставляется «как есть». Все работы по подключению данного устройства к ПК проводятся на ваш риск. Автор ответственности не несет.
Для получения сомнительного удовольствия пользования пультом вам придется собрать небольшую схему. Схема такая:
Еще вам потребуется сам сервер WinLIRC: http://winlirc.sourceforge.net/ Там же лежит плюгин к WinAMP, чтобы и его можно было пользовать с кровати.
Установить его не сложно, довольно проблематично его настроить. Показателем настроенности программы будет служить помигивание зеленым индикатором в трэе при нажатии кнопок на пульте.
1. В окне «Config» пишем MY_REMOTE.CF (ну или типа того).
2. Нажимаем «Raw codes». Тыкаем любые кнопки на пульте. Должны бежать цифры в окне. Значит, всё пучком. Закрываем крестиком и переходим к
3. Learn. Вас спросят
This will record the signals from your remote control and create a config file for WinLIRC. Please enter a name for this remote.
Надо ввести название Вашего пульта. Здесь и далее названия лучше давать латинскими (английскими) буквами, без пробелов.
When learning and analyzing signals, a margin of error is used in order to handle the normal variations in the received signal. The margin of error ranges from 1% to 99%. The default is 25%, but larger values might be necessary depending on your hardware and software. If you are having trouble using your remote, try increasing this value. You may enter the allowable margin of error now, or press ENTER to use the default. Desired margin of error for this remote? (1-99, enter=25)
Очень много слов, просто нажимаем «Enter»
Step One: Determine signal gap, signal length, and repeat codes. ———————————————————————————— You will be asked to press an arbitrary button a number of times. Please hold it in for at least one s second each time, and wait at least one second between keypresses. If you want to manually enter a signal gap and signal length, you may do so now (ie, «31000 52»). Otherwise, just hit ENTER. Gap and length?
Опять очень много слов, просто нажимаем «Enter»
Press a button. Please wait a second and press it again.
Нажмите и отпустите любую кнопку (на пульте). Подождите секунду и нажмите и отпустите её опять. Появится строчка
После этого давим ЁТУ ЖЕ кнопку десять (или чуть больше раз), пока не дойдём до нуля.
Please wait a second and press a button again (10 left) Please wait a second and press a button again (9 left) Please wait a second and press a button again (8 left) Press a button.
7. Получаем сообщение:
This is a signal-repeating remote with no special repeat code. Holding down the button can quickly yield many copies of that button`s code. Therefore, 64 samples of each button will be taken. You will be prompted to enter each button`s name in turn. To finish recording buttons, enter a blank button name.
8. Теперь обучаем программу ВСЕМ кнопкам пульта. Порядок такой: Вас спрашивают
(имя первой кнопки)? Пишем название. Латинскими буквами или цифрами, без пробелов, лучше заглавными то слово, которое есть на пульте на кнопке. Ну типа «1», «2», «PLAY», «FFWD», «STOP», «VOL+». После этого давим на кнопку несколько секунд. В окне будут бежать цифры, примерно вот так:
Baseline initialized. matches=64, faults=19
Давим, пока matches не дойдёт до 64. Чем меньше будет faults, тем лучше.
9. Появляется слово «Stop» и «Button 2 name (blank to stop)». Пишем имя второй кнопки. Повторяем п.8 до тех пор, пока не кончатся все кнопки.
10. По окончании всех кнопок, нажимаем «Enter», не вводя название. Выдаётся сообщение «Configuration written сукесфули, не забудь analyze». Что мы и делаем.
11. Тыкаем мышой в «Analyze» получаем в ответ «analysis successfully»
После этого смело запускайте ваш любимый Light Alloy, идите в настройки, включайте поддержку WinLIRC, настраивайте кнопки и бросайтесь на диван с пультом в руках.