В данном проекте представлено дешевое решение, настраиваемое под нужды пользователя, по управлению персональным компьютером с помощью инфракрасного пульта дистанционного управления. Если вы имеете подходящие комплектующие для инфракрасного пульта управления, тогда вы сможете его собрать, потратив не более 4 фунтов. Это устройство позволит использовать основные команды дистанционного управления для имитации вводимых с клавиатуры команд (одиночных символов или строк) на вашем ПК. Данное решение может использоваться в качестве дешевого удаленного управления медиацентром с XBMC (функциями Xbox Media Center) или для скрытого управления чужим персональным компьютером. Устройство было протестировано на нескольких машинах под управлением ОС Linux, Windows и Mac, и показало отличные результаты.
Сердцем устройства является 8-выводной микроконтроллер ATtiny85, работающий на частоте 16 МГц, который использует внутренний тактовый генератор. Также в устройстве используется инфракрасный датчик Vishay TSOP31238, управляющий инфракрасным приемом и порт USB, с применением программной библиотеки V-USB. Каждая кнопка пульта дистанционного управления может запустить только одиночный клавиатурный символ или серию символов, а также имитирует нажатие специальных кнопок, таких как «shift» и «alt».
Я не смог найти руководство по использованию V-USB на микроконтроллере ATtiny85 в среде Arduino, поэтому решил самостоятельно представить всю необходимую информацию в данном проекте. Чтобы не менять параметры по умолчанию для порта PIND, выводов и таймера при использовании внутреннего тактового генератора, необходимо провести его калибровку для любого чипа микроконтроллера, поскольку это является критическим моментом для синхронизации во времени для USB соединения.
Электрическая схема и макетная плата
На рисунке ниже представлена электрическая схема для USB инфракрасного приемника:
и макетная плата:
Программный код
Вы можете загрузить код проекта TinyPCRemote для микроконтроллера ATtiny85 на веб-сервисе Github здесь.
Вам также понадобится: vusb-для-arduino и Tiny-tuner.
Получение кодовых комбинаций пульта дистанционного управления
Для получения кодовых комбинаций с выбранного пульта дистанционного управления, я предоставил вариант программного кода (скетч) на депозитарии, который можно запустить на Arduino или совместимой плате. При его выполнении кодовая комбинация будет выводиться на встроенный монитор последовательного интерфейса (serial monitor) при каждом нажатии кнопки; плата спроектирована так, чтобы вы могли подключить инфракрасный датчик напрямую в разъем на контакты Ground, D13 и D11, как показано ниже:
Как только программный код будет загружен в Arduino, откройте встроенный монитор последовательного интерфейса на скорости 9600 бод и нажмите каждую кнопку пульта дистанционного управления по очереди. Вы должны увидеть соответствующий выходной код на встроенном мониторе; не беспокойтесь, если код повторяется при каждом нажатии кнопки. Просто скопируйте и вставьте код в скетч TinyPCRemote и определите кнопку/кнопки, которую вы хотите детектировать при нажатии, заменяя существующие описания кнопки и дублируя при необходимости для такого количества кнопок, как вам потребуется. Для данного процесса существуют ограничения по количеству конфигураций из-за объема флэш-памяти и ОЗУ. Я не исследовал подобные ограничения, но подозреваю, что можно внести очень большое количество кодовых комбинаций.
Конфигурация V-USB
USB подключение управляется с помощью программной библиотеки V-USB, которая представляет собой полезное программное обеспечение с открытым исходным кодом стандарта USB 1.1 для контроллеров Atmel AVR, созданное компанией Objective Development. Я использовал вариант vusb-для-arduino.
Распакуйте файл и скопируйте директорий UsbKeyboard в место размещения библиотеки Arduino и перезапустите среду разработки Arduino IDE, если она была запущена. Теперь необходимо отредактировать несколько файлов для изменения количества портов и выводов для совместимости с микроконтроллером ATtiny85.
Сначала отредактируйте файл usbconfig.h и под заголовком “Hardware Config” измените
#define USB_CFG_IOPORTNAME D
на
#define USB_CFG_IOPORTNAME B
и
#define USB_CFG_DMINUS_BIT 4
на
#define USB_CFG_DMINUS_BIT 0
и под заголовком “Optional Hardware Config” измените:
#define USB_CFG_PULLUP_IOPORTNAME D
на
#define USB_CFG_PULLUP_IOPORTNAME B
Примите во внимание, что мы фактически не подключаем подтягивающий резистор через вывод, но нам необходимо установить действительный порт, чтобы выполнить компиляцию.
Опционально, вы можете изменить имя производителя и прибора в следующих выражениях:
#define USB_CFG_VENDOR_NAME
#define USB_CFG_DEVICE_NAME
В конце концов, в файле UsbKeyboard.h измените:
PORTD = 0; // TODO: Только для выводов USB?
DDRD |= ~USBMASK;
на
PORTB = 0; // TODO: Только для выводов USB?
DDRB |= ~USBMASK;
Программирование микроконтроллера ATtiny85
Программирование микроконтроллера ATtiny85 может быть выполнено с помощью Arduino и программного кода ArduinoISP sketch, который включен в раздел примеров среды разработки Arduino IDE или через выделенное ICSP соединение.
Для программирования микроконтроллера ATtiny85 через Arduino, подсоедините его как указано ниже:
Arduino ATtiny85
D13 Вывод 7
D12 Вывод 6
D11 Вывод 5
D10 Вывод 1
5V Вывод 8
GND Вывод 4
Калибровка тактового генератора
Синхронизация для USB соединения является критическим моментом. Поэтому в большинстве случаев тактовый генератор для каждого чипа микроконтроллера ATtiny85 необходимо откалибровать. Для этого загрузите TinyTuner отсюда и поместите в директорий библиотек Arduino. Вам также понадобится адаптер FTDI или какой-либо другой последовательный преобразователь, чтобы вы могли считать выходные данные.
Подключите микроконтроллер ATtiny85 к Arduino и используйте функцию burn bootloader среды разработки Arduino IDE для запуска на тактовой частоте 8 МГц, выбрав настройку платы “ATtiny85 @ 8MHz (внутренний генератор; BOD отключен)” под Tools > board (Инструменты > плата) и затем используйте опцию Tools > Burn Bootloader (Инструменты > Записать загрузчик). Примите во внимание, что с микроконтроллером ATtiny84 мы фактически не записываем загрузчик; все что мы выполняем, так это настраиваем соответствующие фьюзы для конфигурирования микроконтроллера. В этом случае мы выставляем его работу на частоте 8 МГц, поскольку tiny-tuner не работает на крайней частоте величиной 16 МГц.
Загрузите скетч “Interactive_to_Serial_with_Details” TinyTuner из примеров tiny-tuner в микроконтроллер ATtiny85, подсоедините PB3 (вывод 2) к RXD на адаптере FTDI и PB4 (вывод 3) к TXD, а также напряжение питания 5В и землю.
Теперь откройте терминальное приложение на вашем ПК и подключите порт последовательного адаптера, напр., на операционной системе linux “miniterm.py /dev/ttyUSB1“, сбросьте ATtiny85. При этом вы должны получить приветственное сообщение. Теперь многократно медленно нажимайте «x» (один раз в секунду или около этого), пока не получите следующий результат:
Copy-and-paste the following line of code at the top of setup…(Скопируйте и вставьте следующую строку кода в верхнюю часть настройки…)
OSCCAL = 0x9C
Скопируйте результат из tiny-tuner в скетч TinyPCRemote, заменяя OSCCAL = 0x9C; строка в настройке (), в случае необходимости.
Окончательная настройка
После ввода калибровочной константы OSCCAL и программного кода пульта дистанционного управления вместе с результирующими кнопками, которые вы задействовали, вы можете загрузить скетч TinyPCRemote в микроконтроллер ATtiny85.
Сначала используйте функцию burn bootloader для установки тактовой частоты микроконтроллера ATtiny 85 на 16 МГц, используя настройку платы “ATtiny85 @ 16MHz (internal PLL;4.3V BOD)”, затем загрузите скетч обычным способом.
Если вы тестируете устройство на макетной плате на стадии проектирования, тогда необходимо отключить соединения к Arduino для правильной работы USB; я отключил только SCK соединение (проводник от Arduino D13 к выводу ATtiny 7/PB2).
Если вы подключите TinyPCRemote к USB порту, нажимая кнопки пульта дистанционного управления, вы в результате увидите соответствующие символы на экране так же, как они вводились бы с клавиатуры.
Если не запустить dmesg и просмотреть наличие каких-либо ошибок при работающей системе, то вы должны видеть что-либо подобное (я не знаю, как вы сможете просмотреть подобные логи на Windows или Mac):
input: zorg.org TinyPCRemote as /devices/pci0000:00/0000:00:13.5/usb1/1-9/1-9.2/1-9.2.1/1-9.2.1:1.0/input/input18
generic-usb 0003:4242:E131.0006: input,hidraw2: USB HID v1.01 Keyboard [zorg.org TinyPCRemote] on usb-0000:00:13.5-9.2.1/input0
Примите во внимание, что я изменил имя производителя и прибора в файле usbconfig.h на zorg.org и TinyPCRemote соответственно.
Если вы получите ошибки чтения дескриптора устройства подобного вида:
usb 1-9.2.1: new low-speed USB device number 28 using ehci_hcd
usb 1-9.2.1: device descriptor read/64, error -32
то это означает, что компьютер видит устройство, но вероятно существует проблема с синхронизацией. Убедитесь в том, что микроконтроллер ATtiny работает на тактовой частоте 16 МГц, используя внутренний тактовый генератор internal PLL, и что калибровка с помощью tiny-tuner выполнена правильно.
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
U1 | МК AVR 8-бит | ATtiny85 | 1 | Поиск в магазине Отрон | ||
U2 | ИК сенсор | Vishay TSOP31238 | 1 | Поиск в магазине Отрон | ||
U3, U4 | Стабилитрон | 3.6В 0.5Вт | 1 | Поиск в магазине Отрон | ||
C1 | Конденсатор | 100 нФ | 1 | Керамический | Поиск в магазине Отрон | |
R1, R2 | Резистор | 68 Ом | 1 | Поиск в магазине Отрон | ||
R3 | Резистор | 2.2 кОм | 1 | Поиск в магазине Отрон | ||
DIP-панель | 8-выводная | 1 | Поиск в магазине Отрон | |||
Коннектор | USB A | 1 | Штырькового типа | Поиск в магазине Отрон | ||
Скачать список элементов (PDF)
- TinyPCRemote-master.zip (19 Кб)
Комментарии (1) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация