Р/л технология

Приемник команд ИК ПДУ с интерфейсом USB

Радиолюбители, повторившие конструкцию А. Зотова , убедились, насколько удобно, не подходя к компьютеру, выполнять на нем простейшие, но порой очень необходимые операции. Взаимодействие приемника команд с компьютером происходило через СОМ-порт, что накладывало некоторые ограничения на другие устройства, подключаемые к тому же порту. Ведь в современных компьютерах производители оставляют всего один разъем СОМ-порта, а в будущем, вероятнее всего, его уберут совсем. На смену пришел более универсальный и быстрый интерфейс USB. Найти свободный разъем USB несложно, на современном компьютере их достаточно много. Кроме того, устройства, снабженные этим интерфейсом, могут работать, не создавая взаимных помех.

На рис. 1 изображена схема приемника команд ИК ПДУ, взаимодействующего с компьютером по USB. Его основной элемент - микроконтроллер AT90S2313 (DD1) - выполняет преобразование принятых от модуля ИК приемника В1 команд к виду, пригодному для передачи по интерфейсу USB в компьютер. К выходу модуля В1 подключен и светодиод HL1, который мигает во время приема команды. Резистор R3 необходим для того, чтобы при соединении вилки Х1 с розеткой USB компьютера последний автоматически опознал подключенное устройство.

Чертеж печатной платы приемника и расположение на ней деталей изображены на рис. 2. Для микроконтроллера DD1 на плате установлена 20-контактная панель, все остальные детали впаяны непосредственно в плату. ИК приемник TSOP1736 можно заменить также широко распространенным SFH506-36. Тип остальных деталей значения не имеет.

Для загрузки в микроконтроллер программы я воспользовался простейшим программатором, собранным по схеме, показанной на рис. 3. Конструктивно он состоит из вилки DB25M (Х1), подключаемой к розетке порта LPT компьютера, и панели для программируемого микроконтроллера. Резисторы R1-R3 и перемычки припаяны непосредственно к соответствующим контактам вилки и панели. Программатором управляет программа IC-Prog, работа с которой подробно описана в . В списке программаторов, обслуживаемых этой программой, необходимо выбрать Fun-Card Programmer.
Порядок использования изготовленного приемника совместно с программой Girder для управления компьютером аналогичен описанному в , за исключением того, что вместо плагина для СОМ-порта Igor SFH-56 device следует использовать его обновленную версию IgorPlug-USB с поддержкой USB устройств. Для этого, выполняя п. 7 предложенной А. Зотовым процедуры настройки, следует "щелкнуть" по строке "IgorPlug-UDP/IP and IgorPlug-USB and IgorPlug-COM for WinXP" списка плагинов, нажать на экранную кнопку "Настройки" и выбрать порт USB.
В заключение стоит сказать, что такое устройство можно использовать для ввода в компьютер не только команд, но и другой цифровой информации. Если, например, вместо модуля ИК приемника установить датчик температуры (например, DS18B20) и соответствующим образом изменить программу микроконтроллера, то можно вводить по интерфейсу USB в компьютер показания этого датчика.

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

Литература:

1. Зотов А. Управляем программами с помощью ПДУ. - Радио, 2004, № 8, с. 22, 23.
2. ATtiny2313 Product Card. - http:// atmel.com/dyn/products/product_card. asp?part_id=3229.
3. Долгий А. Модули приемников ИК сигналов. - Радио, 2005, № 1, с. 47-50.
4. Долгий А. Программаторы и программирование микроконтроллеров. - Радио, 2004, № 1- 12;


Дата публикации: 30.11.2009

Мнения читателей
  • Kennedy / 16.06.2012 - 01:12
    I"m iprmseesd you should think of something like that
  • Максим / 06.04.2012 - 12:10
    Не нужно дополнять прграмму. Нужно перепрограмировать фьюз бит CKDIV = 1 или снять с него галочку если шить понипрогом. Ну и переключить на внешний кварц.
  • waley / 05.02.2011 - 07:04
    Нужно ли дополнять программу при применении ATtiny2313-10 и каковы будут Конфигурации?

Что не говори, а человек существо ленивое. Иногда так не хочется вставать с кровати чтобы отрегулировать громкость во время просмотра фильма или еще чего. Сейчас конечно есть куча всяких девайсов вроде мышек и клавиатур соединенных с компом по радиоканалу, но меня дико душит жаба при виде негуманных цен. Да и зачем покупать все это если в доме есть не нужный ик пульт и в загашнике завалялся tiny2313. Итак, будем ваять usb ик приёмник.

Было решено не изобретать свой велосипед, а повторить довольно удачную разработку некого Игоря Чешко. Повторить решил главным образом из-за того, что этот приемник поддерживается несколькими удобными программами вроде IrLink. Схема в оригинальном варианте мне очень не понравилась и я ее немного допилил. Доработка заключается в добавлении стабилитронов в цепи D+ и D-. Это сделано для того чтоб не спалить USB порт. Логическая единица у usb порта около 3.6 вольт и превышение этого напряжения крайне не желательно.

Сигнал с пульта принимается ик приёмником демодулятором TSOP17xx или TSOP21хх. ХХ — это несущая частота пульта в килогерцах. Как правило это 36 или 38 кГц. У меня например дома пять пультов и все пять работают на частоте 36 кГц. У ик приёмника очень хорошая чувствительность. Уверенно принимается даже сигнал отраженный от стен комнаты. Хотя тут еще многое зависит от пульта. Например с моим самодельным результаты чуть похуже (стоит крошечный 3мм светодиод). Сам приёмник после сборки в настройке не нуждается, а вот с софтом придётся немного повозиться. Из всех программ для работы с этим приёмником, самая прикольная на мой взгляд — IrLink. Прога умеет распознавать всевозможные кодировки, а следовательно можно заюзать почти любой пульт! Разумеется IrLink не знает всевозможных кодов кнопок, поэтому программу нужно обучать. Для начала работы с программой нам нужно установить драйвера на ик приёмник. Их можно скачать с сайта автора или у меня. Драйвер есть двух версий — платная и бесплатная. У бесплатной версии есть один маленький неприятный момент. Когда какая либо программа начинает работать с ик приёмником — выпрыгивает окно с кнопкой ок в котором написано что мы используем бесплатную версию. Это почти не мешает, однако если кого-то это сильно будет раздражать, то можно купить полную версию за семь баксов у автора. Кроме этого окна ни каких различий в функциональности нет. Драйвер успешно заработал как на WinXP так и на Windows 7. После установки драйверов нужно скачать самую новую версию программы с сайта www.irlink.ru . При первом запуске появится окно настроек в котором нужно указать что у нас используется самодельный приёмник IgorPlugUSB. Если всё работает как надо то на вкладке «Ик приёмник» должно быть написано что «приёмник сигналов обнаружен и запущен». Теперь можно обучать программу. Начинается обучение с создания нового пульта. Для этого переходим на вкладку «Пульт ДУ» и на пульте слева расставляем кнопки точно так же как они расположены на вашем пульте. Когда кнопки расставлены тыкаем по очереди на каждую и нажимаем на пульте соответствующие кнопки. После завершения обучения можно легко проверить результат, жмем кнопки пульта и видим как они подсвечиваются в окне программы. Присвоить кнопкам действия дело не хитрое, но на всякий случай покажу как настроить две кнопки на управление громкостью в проигрывателе Winamp.

1) Выбрать кнопку пульта
2) Выбрать программу и действие
3) Добавить действие

Вот и всё. Кстати, программа начнет откликаться на команды с пульта только после закрытия главного окна. Напоследок хочу сказать, что большие полигоны на плате очень хорошо лудятся с использованием флюса СКФ:

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

1. Приемный модуль не совмещен с декодирующей частью. Декодирование ИК посылок осуществляется на ПК специальной программой. Как правило, схема приемника предельно проста. Подключение может быть реализовано через COM или LPT порты.

2. Прием и декодирование сигнала происходит в устройстве аппаратно. На ПК отправляется уже распознанная посылка. Распознавание может быть выполнено в виде реального кода, либо некого условного кода, который хоть и не является реальным для данного пульта, но обеспечивает однозначную идентификацию нажатой кнопки.

Обеим способам присущи достоинства и недостатки. Например, недостатки для первого типа: такие порты как COM и LPT встречаются в компьютерах все реже и реже, а в ноутбуках уже практически перевелись. Декодирование на ПК требует реалтаймового доступа к портам, что не гарантируется, в результате чего не всегда верно принимается посылка. Достоинства: простота, отсутствие необходимости программировать железо, существование программ способных распознать большинство протоколов. К плюсам второго подхода следует отнести возможность использовать интерфейс USB, не обязателен реалтайм. Недостатки – более сложная аппаратная часть, необходимость ее программирования.

Вашему вниманию предлагается приемник-декодер, подключаемый по интерфейсу USB, позволяющий управлять приложениями на ПК по инфракрасному каналу. В устройстве происходит распознавание реальных кодов, таких протоколов как: NEC, SAMSUNG, JVC, RC5, SONY SIRC (15 bit). Этого достаточно для подавляющего большинства используемых пультов. В компьютер отправляется последовательность вида:

(toogle,device_low,device_high,command:system). Например, в случае посылки по протоколу NEC, где младшая часть адреса устройства 134, старшая –107, код команды -18: в ПК будет отправлена строка (0,134,107,18:NEC_CODE).

Значение toogle будет либо 0, либо 1 – чередование от нажатия к нажатию. При удержании кнопки значение данного параметра не будет меняться. В стандарте RC5 это штатная функция. В других форматах этого нет, поэтому приемник программно определяет удержание для протоколов, отличных от RC5.

Приемник может работать используя один из классов USB устройств – CDC или HID, в зависимости от прошивки. Это сделано из-за того, что имеются определенные преимущества и недостатки в работе этих классов друг перед другом.

Преимущества 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_USERSoftwareIRServerCOM_PORT параметр Baud_Rate.

В ветке HKEY_CURRENT_USERSoftwareIRServerOther можно изменить 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 использован в малогабаритном исполнении. Обратите внимание, что цоколевка у него отличается от обычного.

В архиве проекта присутствуют все необходимые файлы и исходные коды: скачать

Проект предоставляется “как есть”. Все работы по подключению данного устройства к ПК проводятся на ваш риск. Автор ответственности не несет.

У меня нет телевизора. Совсем. На антресолях где-то лежит старый маленький пузатик, но кабель антенны давно свернут, а телевизор этот - скорее издевательство, разве что на кухне поставить и то маловат.
Поэтому в качестве музыкального центра и телевизора я использую свой ПК. И все бы хорошо, но лень - это не только двигатель прогресса, но и фактор, который портит удовольствие, заставляя встать с дивана, на котором уютно устроился с кружкой чая, чтобы запустить программу или выключить колонки после просмотра фильма перед сном.
Существует множество ИК приемников, практически все они могут управлять компьютером и даже могут его выключить, но не могут его включить . И вот в этот момент компьютер перестает быть столь же удобным сколь телевизор или музыкальный центр. Но и проект Igor HID не порадовал своим софтом. Вроде все умеет, а неудобно. И не влезешь в него, исходников нет. Вот поэтому я собрался и сделал свой проект, открытый и доступный всем.
Сделал я его с нуля до законченного комплекта. А поскольку мой опыт в разработке и программировании электронных девайсов до него можно сказать был нулевым, то я считаю, что повторить это сможет каждый, кому это интересно.

Называется он USB-IRPC (USB Infrared Remote Personal Computer Control - «Юэсби-ИРПиСи» или ИРПЦ, кому как больше нравится:). Буква R на самом девайсе - просто сокращение от моего ника.
Важным преимуществом девайса является то, что он программно совместим с Arduino и в случае отсутствия уверенности в своих силах в ЛУТ может быть сделан на основе Arduino на макетной плате . Это, конечно, не так компактно и аккуратно, не так дешево, но зато доступно практически всем, даже навыки пайки особые не потребуются.
Если стремление к комфорту вам не чуждо и идея превратить свой компьютер в медиацентр, а заодно поуправлять электророзетками с пульта вам интересна, тогда вперед.

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

Итак, идея устройства

Я хотел иметь следующие возможности:
  • Включать и выключать компьютер с пульта от телевизора или любого другого ИК пульта.
  • Включать и выключать розетки, в которые воткнуты настольная лампа и колонки (две розетки, управляются отдельно).
  • Управлять розетками с ПК программно, чтобы не искать пульт, оставленный на диване, когда сидишь перед компом или включать колонки для работы ПК в качестве будильника по расписанию с утра:)
  • Запускать программы на ПК по нажатию кнопки на пульте.
  • Выполнять custom задачи по нажатию кнопок - какие запрограммирую.
Все это на данный момент работает.
Функционал управляющей программы для ПК будет еще расширяться.
  • Устройство не требует драйверов , работает и под Win7 х86, Win7 x64, Win 8 x64.
  • Не требует прав администратора при подключении и использовании.
  • В системе определяется как HID устройство (USB Input Device).
  • Никаких дополнительных.dll типа lubusb тоже не потребуется.
  • Под Linux не проверял, но не думаю, что будут проблемы. Правда написать софт я не смогу - под Linux я этого не умею.
Также написан плагин для популярной программы настройки горячих и мультимедийных клавиш MKey , для тех, кто не хочет разбираться в моей программе, кто не хочет ставить еще одну программу или уже пользуется MKey. Плагин делает из ИК пульта набор мультимедийных кнопок. Назначайте им действия какие захотите. Как пользоваться, расскажу.

Недостатки
А куда без них:)
  • Пока на мой взгляд распознавание нажатий кнопок пультов не идеально. Можно сделать лучше, уверен. Но это исправляется программно.
  • Вшитые функции, работающие и без ПК, можно поменять только перекомпилировав прошивку, а для этого придется скачать AVR Toolchain - писать прошивку в Arduino IDE сплошное мучение для меня, поэтому я пользуюсь Code::Blocks. Но залить прошивку в Arduino не составляет никакой проблемы. Даже в консоль лезть не придется. Позже можно будет и программно назначить эти функции любым кнопкам пульта.
  • Программа на английском. Я знаю, что у подавляющего большинства проблемы с английским и знаю привычку все и вся русифицировать.
Я не люблю русифицированные интерфейсы по двум причинам:
  1. Русские надписи почти всегда длиннее английских либо имеют уродливые сокращения.
  2. В русском языке не сложилось однозначной терминологии для ИТ и надписи на элементах интерфейса часто больше путают чем проясняют.
Но, весь софт открытый, плагин к MKey вообще не требует ничего читать и настраивать в нем, а надписи в моей программе вы можете перевести, если 7 кнопок и 2 пункта меню вызывают проблемы с пониманием или запоминанием. Скомпилируйте и измените сами. Написано на Delphi 2010, проприетарных программных компонентов нет.

Я расскажу сначала как сделать на основе Arduino, затем расскажу как сделать самому с нуля, а если найдутся желающие, напишу отдельно как с этим устройством работать программно с ПК.

USB-IRPC на основе Arduino

На самом деле я и начинал устройство на основе Arduino. Я использовал дешевую Arduino Pro Mini и кусочек макетной платы:


«IRPC v1 »
Эта версия не имела связи с ПК, умела только управлять розетаками и питанием ПК, но проработала у меня больше 9 месяцев - с ноября 2011го.
Как обычно, начинаем с закупки деталей.
Нам понадобится:
1. Arduino (любая с питанием от 5В) - примерно от

Модуль управления розетками:
2. Плата с реле на 220В, управляемая сигналом 5В. Если хватает опыта, можете сделать сами. У меня была в хозяйстве вот такая, давно думал, куда ее приспособить:


Да, релешек на ней 4, а используется только 2, потому что во-первых - у меня был только 4проводный кабель под рукой, а для 4 реле жил нужно 6 (+- и 4 сигнальных), а во-вторых под рукой было только 2 одинарные розетки, а удлинителей не на общей шине, а с проводами к каждому гнезду отдельно я не нашел на рынке. Мне она досталась за дикие $17, но купил я ее давно. Сейчас она есть на ebay по $3.82 , более того, советую вам взять для этого проекта с двумя реле - дешевле и компактнее:


Недостаток реле в том, что они щелкают при переключении. И если бы у меня не валялись без дела, я бы сделал на симисторах BT138 с гальванической развязкой на MOC3063 примерно вот по такой схеме (не моя, дернул кусок из найденной гуглом картинки):


3. Кабель 4-проводный (можно использовать UTP, если есть, тогда розеток можно сделать больше). Длина - чтобы хватило от ПК до места где будет лежать блок розеток.
4. Коннектор PBS-4 для окончательного варианта или вилка PLS-4, если будете делать на Arduino.

5. Кабель медный для подключения розеток к реле - 2 куска примерно сантиметров по 20.
6. Кабель электрический с вилкой Schuko (CEE 7/4) или любой другой, имеющийся под рукой, который выдержит нагрузку:

7. Две настенные накладные розетки (или больше, если релешек больше и кабель UTP) - примерно 30 рублей штука.
8. Кусок фанеры и коробочка для крепления платы с реле и розеток.
Я смонтировал в обычную картонную коробку, прикрепил к куску пластика болтиками и закрепил кабели стяжками. получилось вот так:


« »
Под столом это смотрится довольно аккуратно. Розетки разные, да, других не было:) Одну купил, вторая осталась от апгрейда настенной розетки на двойную.


« »
Оформительские изыски оставляю на ваше усмотрение.

Модуль ИК приемника

9. ИК приемник TSOP1738, TSOP1736 или IRM_3638. Найдете аналог - попробуйте его. У меня IRM3638 работает лучше всего.


10. Резистор на 10кОм
11. Светодиод + резистор на 100-390 Ом (какой есть такой и берите), на крайний случай можно обойтись встроенным в Arduino на Pin 13 если под рукой ни резистора ни светодиода нет, будет без выносной индикации.
12. 2 Коннектора PBS-4 для окончательного варианта или вилка PLS-4, если будете делать на Arduino.

13. Четырехпроводный кабель такой длины, чтобы хватило от системного блока ПК (девайс установим внутрь) до места, где приемник удобно закрепить, чтобы он был на прямой видимости с дивана (я закрепил на ножке монитора).

Модуль управления питанием ПК

14. Коннектор PBS-2 для подключения к материнской плате вместо кнопки питания.

15. Коннектор PLS-2, для подключения кнопки питания от корпуса параллельно, чтобы не терять возможность ей пользоваться. (можно просто купить одну линейку пинов PLS-40 и откусить кусачками от нее куски с нужным количеством пинов).

16. Оптопара PC817 или ее аналог. По идее стоит 4-8 рублей, но на Царицынском радионыке барыги за нее потребовали 40 рублей.

Можно и реле использовать, но это совсем изврат получится, хотя работать будет:)
17. Токоограничительный резистор на 100-150 ом любой мощности, что найдется под рукой.

Интерфейс с ПК (V-USB)

18. USB кабель, нас интересует только USB A вилка для подключения к ПК, на другом конце может быть что угодно, мы его все равно отрежем. Так что можно использовать любой ненужный кабель. Лишь бы целый был со стороны компа.
19. 2 стабилитрона на 3.6В желательно 0.25 Вт, но можно больше.

20. 2 резистора на 68 Ом.
21. 1 резистор на 2.2 кОм. К мощности особых требований нет.

Паяльник, припой, флюс (канифоль сойдет), немного монтажного провода (да любые проводки, какие есть под рукой).
Какой-нибудь пульт с кодировкой RC-5 типа такого:

«IR RC »
У меня также отлично работает пульт от AverMedia.

Если будете собирать на макетной плате, то понадобятся она и немного проводов, нечто в этом роде:)


Это только кажется что всего много, но на самом деле затраты невелики. Разве что будете покупать все в Чип и Дипе:)

Разбираемся как собрать и как это работает

Если у вас Arduino Pro Mini или Arduino nano, устанавливаем ее на макетную плату типа Breadboard или как в моем случае на кусочек макетки с пятачками для пайки, припаяв ее туда напрямую или с помощью коннекторов, чтобы можно было снять:


Обычную придется подключать к макетной плате проводками.

Подключаем ИК приемник.
Сигнальную ножку напрямую к пину 8 (D8). Между сигнальной и ножкой питания включаем резистор на 10к, ну и оставшуюся ножку заземляем:


у TSOP 1738 сигнальная ножка на фото справа:


Средняя - питание (+5В), левая - земля (GND).
Это три провода, четвертый - для выносного светодиода, я его поставил рядом с приемником, чтобы показывать, что нажатие кнопки принято. Подключаем его через резистор анодом к пину D9, катодом к земле.
Подключаем плату с реле
Тут все предельно просто:
  • VCC к +5 Arduino
  • GND к GND Arduino (земля)
  • IN1 к пину 6
  • IN2 к пину 5
Вот для этого нам и понадобится 4проводный кабель, на конце кабеля припаиваем PBS-4, чтобы аккуратно надеть на вилку платы с реле, конец к макетной плате удобнее сделать с вилкой.
Теперь разбираем розетки. Если вы взяли кабель питания для компа, отрезаем конец силового кабеля, оставив только вилку Schuko и подключаем:
Коричневый провод - фаза - подаем на реле, на тот конец, что в нормальном состоянии разомкнут (на плате нарисовано).
Синий провод - ноль, подаем напрямую на розетки, на один из контактов.
Желто-зеленый - защитное заземление, подключаем к контуру заземления розеток.
(Расцветку поправил , у меня в описании коричневый и синий были перепутаны, хотя в данном случае это большой роли не играет).
Средний контакт реле, который будет замыкаться с фазой при переключении реле, выводите каждый к своей розетке (тут нам и понадобится тот медный провод из пункта 5) на второй контакт.
Можете прозвонить вилку - два штырька должны звониться на синий и коричневый провод, желтозеленый - на контакты заземления на корпусе вилки.
Помещаем все это в корпус (у меня просто коробочка):


« »
Подключаем управление питанием ПК
Кнопка питания на корпусе просто замыкает два контакта, мы сделаем то же самое с помощью оптопары PC817.
Когда подаешь 5В на вход светодиода, сопротивление между ножками фотодиода падает почти до нуля (на самом деле не до 0 но для наших целей сойдет). Для того, чтобы выход микроконтроллера не спалить, включаем последовательно токоограничивающий резистор.


Резистор подключаем к выходу А2 Arduino, второй контакт резистора к 1й ножке PC817 (отмечена точкой). Вторую ножку на землю. К 3й и 4й подключаем двумя проводами с двухконтактным разъемом те два пина на материнской плате, что обозначены как PWR + и PWR-, сюда же параллельно подключаем кнопку от корпуса ПК, чтобы она тоже могла замыкать эти контакты.
Подключаем к USB
В моем проекте используется программная реализация USB для AVR известная как V-USB.


Берем USB кабель, отрезаем конец, который подключался к устройству
Красный - VCC (пин 1 на схеме справа)
Черный - GND (пин 5 на схеме справа)
Зеленый - D+ (пин 3 на схеме справа)
Белый - D- (пин 2 на схеме справа)
D+ подключаем к пину 2 через резистор 68 Ом, D- подключаем к пину 4 через резистор 68 Ом.
резистором на 2.2 кОм соединяем ножки D3 и D4 (подтяжка).
Стабилитроны включаются в обратном направлении катоды (сторона с черной полоской на корпусе) к - D2 и D4 соотвественно, аноды - на землю.
VCC и GND подключаем соответственно к таким же пинам Arduino - питаться она будет от USB.

Все, наша схема собрана.
Внимательно проверьте все по шагам, чтобы не спалить при подключении ничего.
Если все проверили - прошиваем с помощью AvrDudeR . Дело в том, что писал я прошивку на С, компилировано с помощью AVRToolchain. Проект в Code::Blocks. Исходники проекта выложу чуть позже на странице проекта
Настройки такие:

COM порт указываем тот, который назначился для Arduino, для Duemillanove скорость 57600, для UNO 115200.
Файл прошивки берем этот .
Если прошилось все успешно, можно отключить Arduino от компа, подключаем теперь нашим USB проводом, который мы развели на плате через стабилитроны и резисторы. Одновременно лучше не подключать и хвостом самой Arduino и коннектором проекта.
Если все сделали правильно, в системе определится USB Input Device.

Управление с помощью плагина к MKey

Плагин позволяет назначать кнопкам пульта любые функции MKey.
Качаем MKey , устанавливаем, мой плагин к нему кладем в папку Plugins.
Запускаем MKey, на вкладке настроек включаем плагин R USB-IRPC.
Настройка простая. Жмем Add, открывается окошко, где предлагают нажать кнопку, жмем ее на пульте, даем ей название как на пульте и назначаем для нее действие.

Для того, чтобы управлять реле программно, понадобится моя программа:

Сейчас она позволяет:

  • управлять реле и выносным светодиодом
  • программно «нажать» кнопку питания на ПК
  • автоматически отключается от устройства при засыпании ПК
  • автоматически подключается при пробуждении ПК.
  • опрашивает устройство каждые 300 мс по умолчанию (настраивается)
  • выводит состояние реле и индиакторного светодиода, код последней нажатой с момента опроса кнопки пульта
  • включить/отключить прием нажатий кнопок ИК пульта.
  • сохранить в EEPROM состояние реле и считать его оттуда. При включении USB-IRPC считывает из EEPROM состояние реле и устанавливает их.
  • соответствие названий кодам кнопок пульта считывается из простого текстового файла, выбранный файл конфигурации пульта загружается при старте программы автоматически.
Чуть позже будет функционал:
  • запуска программ по нажатию кнопки
  • передачи нажатий кнопки в запущенную программу
  • назначения устройству самостоятельной реакции на выбранные кнопки пульта одной из встроенных функций: переключение реле, нажатие кнопки питания ПК. (сейчас такая функциональность в прошивке встроена для одного конкретного пульта).

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

Во второй части расскажу как сделать устройство, изображенное на самой первой фотографии самостоятельно с нуля, а не на основе Arduino.
Все исходники я немного причешу и выложу на страницу проекта, чтобы функционал можно было изменить под себя.
Если будут желающие, отдельно расскажу что и как работает с программной точки зрения.
Часть 2 - изготовление с нуля и программный интерфейс.

Теги:

  • diy
  • atmega168
  • electronics
  • ir rc
Добавить метки

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

1. Приемный модуль не совмещен с декодирующей частью. Декодирование ИК посылок осуществляется на ПК специальной программой. Как правило, схема приемника предельно проста. Подключение может быть реализовано через COM или LPT порты.
2. Прием и декодирование сигнала происходит в устройстве аппаратно. На ПК отправляется уже распознанная посылка. Распознавание может быть выполнено в виде реального кода, либо некого условного кода, который хоть и не является реальным для данного пульта, но обеспечивает однозначную идентификацию нажатой кнопки.

Обеим способам присущи достоинства и недостатки. Например, недостатки для первого типа: такие порты как COM и LPT встречаются в компьютерах все реже и реже, а в ноутбуках уже практически перевелись. Декодирование на ПК требует реалтаймового доступа к портам, что не гарантируется, в результате чего не всегда верно принимается посылка. Достоинства: простота, отсутствие необходимости программировать железо, существование программ способных распознать большинство протоколов. К плюсам второго подхода следует отнести возможность использовать интерфейс USB, не обязателен реалтайм. Недостатки – более сложная аппаратная часть, необходимость ее программирования.

Вашему вниманию предлагается приемник-декодер, подключаемый по интерфейсу USB, позволяющий управлять приложениями на ПК по инфракрасному каналу. В устройстве происходит распознавание реальных кодов, таких протоколов как: NEC, SAMSUNG, JVC, RC5, SONY SIRC (15 bit). Этого достаточно для подавляющего большинства используемых пультов. В компьютер отправляется последовательность вида:
(toogle,device_low,device_high,command:system). Например, в случае посылки по протоколу NEC, где младшая часть адреса устройства 134, старшая –107, код команды -18: в ПК будет отправлена строка (0,134,107,18:NEC_CODE).
Значение toogle будет либо 0, либо 1 – чередование от нажатия к нажатию. При удержании кнопки значение данного параметра не будет меняться. В стандарте RC5 это штатная функция. В других форматах этого нет, поэтому приемник программно определяет удержание для протоколов, отличных от RC5.
Приемник может работать используя один из классов USB устройств – CDC или HID, в зависимости от прошивки. Это сделано из-за того, что имеются определенные преимущества и недостатки в работе этих классов друг перед другом.

Преимущества 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 использован в малогабаритном исполнении. Обратите внимание, что цоколевка у него отличается от обычного.

В архиве проекта присутствуют все необходимые файлы и исходные коды

Проект предоставляется "как есть". Все работы по подключению данного устройства к ПК проводятся на ваш риск. Автор ответственности не несет.

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
U1 МК AVR 8-бит

ATmega8

1 В блокнот
D1 Светодиод 1 В блокнот
D2 Диод Шоттки 1 В блокнот
С1 Конденсатор 104 пФ 1 В блокнот
С2, С3 Конденсатор 22 пФ 2 В блокнот
С4 Электролитический конденсатор 4.7 мкФ 1 В блокнот
R1, R2 Резистор

68 Ом

2 В блокнот
R3 Резистор

1.5 кОм

1