Пульт дистанційного керування ПК на мікроконтролері ATtiny85

  • Час 17-12-2014, 14:20
  • Автор admin
  • Коментарів 0 Комент.
  • Силка url

В даному проекті представлено дешеве рішення, що настроюється під потреби користувача, з управління персональним комп'ютером за допомогою інфрачервоного пульта дистанційного керування. Якщо ви маєте відповідні комплектуючі для інфрачервоного пульта управління, тоді ви зможете його зібрати, витративши не більше 4 фунтів. Це пристрій дозволить використовувати основні команди дистанційного керування для імітації вводяться з клавіатури команд (одиночних символів або рядків) на вашому ПК. Дане рішення може використовуватися в якості дешевого віддаленого управління медіацентром з XBMC (функціями Xbox Media Center) або для прихованого управління чужим персональним комп'ютером. Пристрій було протестовано на декількох машинах під управлінням ОС Linux, Windows і Mac, і показав відмінні результати.

Пульт дистанційного керування ПК на мікроконтролері ATtiny85

Серцем пристрою є 8-вивідний мікроконтролер ATtiny85, що працює на частоті 16 МГц, який використовує внутрішній тактовий генератор. Також в пристрої використовується інфрачервоний датчик Vishay TSOP31238, керуючий інфрачервоним прийомом і порт USB, з застосуванням програмної бібліотеки V-USB. Кожна кнопка пульта дистанційного керування може запустити тільки одиночний клавіатурний символ або серію символів, а також імітує натискання спеціальних кнопок, таких як «shift» і «alt».

Я не зміг знайти керівництво по використанню V-USB на мікроконтролері ATtiny85 в середовищі Arduino, тому вирішив самостійно представити всю необхідну інформацію в даному проекті. Щоб не змінювати параметри за замовчуванням для порту PIND, висновків і таймера при використанні внутрішнього тактового генератора, необхідно провести його калібрування для будь-якого чіпа мікроконтролера, оскільки це є критичним моментом для синхронізації у часі для USB з'єднання.

Електрична схема і макетна плата

На малюнку нижче представлена електрична схема для USB інфрачервоного приймача:

Пульт дистанційного керування ПК на мікроконтролері ATtiny85

і макетна плата:

Пульт дистанційного керування ПК на мікроконтролері ATtiny85

Програмний код

Ви можете завантажити код проекту TinyPCRemote для мікроконтролера ATtiny85 на веб-сервісі Github тут.

Вам також знадобиться: vusb-для-arduino і Tiny-tuner.

Отримання кодових комбінацій пульта дистанційного управління

Для отримання кодових комбінацій з обраного пульта дистанційного керування, я надав варіант програмного коду (скретч) на депозитарії, який можна запустити на Arduino або сумісної платі. При його виконанні кодова комбінація буде виводитися на вбудований монітор послідовного інтерфейсу (serial monitor) при кожному натисканні кнопки; плата спроектована так, щоб ви могли підключити інфрачервоний датчик безпосередньо в роз'єм на контакти Ground, D13 і D11, як показано нижче:

Пульт дистанційного керування ПК на мікроконтролері ATtiny85

Як тільки програмний код буде завантажений 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

Для програмування мікроконтролера 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 gt; board (Інструменти gt; плата) і потім використовуйте опцію Tools gt; Burn Bootloader (Інструменти gt; Записати завантажувач). Прийміть до уваги, що з мікроконтролером ATtiny84 ми фактично не записуємо завантажувач; все що ми виконуємо, так це налаштовуємо відповідні фьюзы для конфігурації мікроконтролера. У цьому випадку ми виставляємо його роботу на частоті 8 МГц, оскільки tiny-tuner не працює на крайній частоті величиною 16 МГц.

Завантажте скетч "Interactive_to_Serial_with_Details" TinyTuner з прикладів tiny-tuner в мікроконтроллер ATtiny85, приєднайте PB3 (висновок 2) до RXD на адаптері FTDI і PB4 (висновок 3) до TXD, а також напруга живлення 5В і землю.

Пульт дистанційного керування ПК на мікроконтролері ATtiny85

Тепер відкрийте термінальне додаток на вашому ПК і підключіть порт послідовного адаптера, напр., на операційній системі 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 завантажувач для установки тактової частоти мікроконтролера ATtiny 85 на 16 МГц, використовуючи налаштування плати “ATtiny85 @ 16MHz (internal PLL;4.3 V 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 U2 U3, U4 C1 R1, R2 R3
МК AVR 8-бітATtiny851
ІНФРАЧЕРВОНИЙ сенсорVishay TSOP312381
Стабілітрон3.6 У 0.5 Вт1
Конденсатор100 нФ1 Керамічний
Резистор68 Ом1
Резистор2.2 кОм1
DIP-панель8-вивідна1
КонекторUSB A1 Штырькового типу
Прикріплені файли:
  • TinyPCRemote-master.zip (19 Кб)
Tags

Коментарі до новини