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

ПДК для комп'ютера

Отже, постановка завдання: потрібно навчити комп'ютер "слухати" [будь-який] пульт ДК. В принципі, ІЧ пакети, що генеруються пультами мають невелику частоту - близько 30-40кГц (виняток становлять лише деякі пульти Panasonic, де частоти посилок досягають 400кГц). Це перше. Друге – змусити його запускати програми, "натискати" на кнопки тощо. Це вже суто софтова частина.

Що маємо: посилки будь-якого пульта є послідовними за своїм принципом і якимось чином закодовані. Логічніше було б і приймати їх послідовно. І тому є послідовний порт. Підійде, зрозуміло, практично будь-який [телевізійний] IR приймач.

Потім усі пакети має вивчити програма, яка впізнатиме натискання різних клавіш пульта. Ця ж програма може керувати рештою (натискати кнопки, регулювати гучність і т.п.).

А можна її продати у вигляді драйвера (сервісу), а верхній рівень управління віддати іншим розробкам.

Саме для таких завдань існує проект для Linux"a LIRC (linux infrared control), який був успішно портований для Windows. Так і називається - WinLIRC.

WinLIRC є лише демоном і нічим сама не керує. Для керування потрібні надбудови. Є ще плагін для Winamp, який розроблений і заточений безпосередньо під WinLIRC, але він управляє лише Winamp-ом.

Після запуску програма скаже, що необхідно конфігурувати. У рядку config можна спочатку підставити рідний файлик sample.cf, який йде з нею, потім вибрати COM порт і натискати кнопку Raw Codes. Далі вивалиться віконце і програма чекатиме сигналів із послідовного порту. Далі тисніть кнопки на пульті - дивіться, що відбувається у віконці. Там програма показуватиме самі пакети. Ну,RAW-дата і є raw-дата.

Ок. Тепер треба відволіктися на складання ІЧ приймача.

Puc.1 Підключення ІЧ-приймача до COM порту

Puc.2 TK1833 опуклістю до себе, ліворуч-направо: DCD (сигнал), GND (загальний), RTS (харчування +)

Час збирати. Хоча збирати особливо нічого. Єдине, що може ще знадобиться – female роз'єм для COM-порту. Діод я взяв КД521 (можна і 522 та інші подібні кремнієві), конденсатор 10мкф,16v.

комп
Puc.3

Розведення по роз'єму female - відповідно до цифр, які є на схемі. Втім, на фотці я ще продублював візуально (перший (1) – ліворуч угорі, п'ятий (5) – праворуч, червоний (7) – внизу). Сам фотоприймач, мабуть, вже так зроблено, що ніякого червоного скла не треба, жодних екранів.

Усі, із залізом та пайкою закінчили. Тепер повернемося до WinLIRC, причому його освоєння - це ще півдорозі. Не найскладнішого, але дуже відповідального.

Після того, як підключіть ІЧ приймач до будь-якого COM порту (1 або 2), необхідно перевірити працездатність схеми і деталей взагалі. Для цього й ліземо в пункт меню RAW data в LIRC. Тисніть кнопки на пульті - дивіться пакети. Якщо все ок, у вікні чогось там бігає, схему можна вважати робочою. Тепер необхідно навчити програму LIRC розпізнавати усі кнопки вашого пульта. У рядку config прописуємо нове ім'я файлу (де буде описаний ваш пульт) і йде до Learn. Далі - читаємо, що пишуть і дотримуємося інструкцій. У мене практично на всіх кнопках було 100% розпізнавання пакетів. Після навчання необхідно проаналізувати файл, що вийшов, з RAW даними від пульта. Тиснемо кнопку Analyze. Програма перебудує CFG файл, де зберігаються значення всіх кнопок, які ви натискали. Більше в програмі LIRC робити нічого, поверніть її – нехай висить у треї.Потикайте пульт – WinLIRC у треї має відгукуватися зеленим світлом на відомі кнопки. Для ходових випробувань програми встановіть плагін для Winamp, який дозволяє керувати плеєром. Плагін необхідно налаштувати. Взагалі, доведеться лазити постійно у файл. Прописати треба ручками. Втім, розібратися нескладно. Я для проби налаштував гучність (туди/сюди) та пересування prev-next по пісеньках у плейлисті. Все запрацювало одразу. Проблем не було.

Тепер добре б підібрати програму, яка могла б керувати віндузою, програмами, будь-які кнопки натискати тощо. Загалом, щоб потужність перла :)

На сайті WinLIRC можете знайти посилання на "компатіблі" програми, які сумісні з WinLIRC. Тобто. програми верхнього рівня. Що пропонується:

- IREX - Працює з WinLIRC як клієнтська частина. Занадто простенька програма. Всі налаштування дій прописуються ручками в окремому файлі cfg. Як проста запускалка – може й піде.

- IRAssistant - відстій повний - до ладу змусити працювати мені його так і не вдалося. Налаштування є які завгодно (кольори, шрифти всякі - два меню цілих), а для налаштування інтерфейсу з LIRC - практично нічого. Не зрозумів її. Коротше, можете навіть не качати.

- Odtwarzacz Filmow – якась прилада для окремого завдання (я її не скачував).

- uICE - ось це саме те, що треба. Кльова штука. Ледве мені функціональності в ній не вистачило, але це я після 2 годин ковупань вже чіплятися почав до неї :)

Ось на uICE ми зупинимося. Повна назва програми – universal Infrared Control Engine. Розуміє хмару будь-яких пристроїв (як залізнихі системних). У тому числі й LIRC. Причому є як сам LIRC, так і залізячка, яка називається Basic LIRC device - це якраз те, що паяється з 5-ти деталей :)

Так ось. Сам uICE може працювати самостійно і без жодного LIRC – його треба тільки навчити всім кнопкам. Там є великий розділ для цього. Але. Цінність LIRC у тому, що він дуже розумно аналізує пакети та не дає помилок. uICE я довго намагався навчити кнопкам пульта (так, до речі, пульт я використав від старого телевізора SONY) - він начебто навчався, але натискаючи на пульті на кнопку Volume+ я міг отримати зворотний результат ("Volume-") і ще щось, і взагалі, все, що завгодно. Просто у програми uICE поганий навчальний та аналізуючий блок. Мені єдиний раз вдалося навчити розпізнавати дві різні безпомилково. Всі. Далі я втомився, запустив WinLIRC, прописав у uICE, що відтепер він працюватиме з демоном WinLICR як джерелом сигналів. Прописується це нескладно – достатньо вказати IP машини, порт залишаємо за замовчуванням. Як індикатор, що я законнектився правильно, мені AtGuard відразу сказав, що хтось ломиться по порту 8765 і назад.

Всі. Після цього необхідно в розділі налаштувань прописати пульт, кнопки (імена знову доведеться дивитися в .CF WinLIRC)

комп
Puc.4 це вже створені події-відгуки на кнопки

та визначити дії на них. Набір дій досить широкий, щоб можна було робити з віндузою та програмами практично всі (набори layout дозволяють виконувати послідовність дій над програмами).

дистанційного
Puc.5

Для TV тюнера я прописував дії у вигляді Keystroke "у вікно" - просто у ATI TV у її рідній софтинці є "шустрые кнопки", якими можна перемикати канали, змінювати розмір вікна та ін. Ось їх і штовхав туди. Все працює чудово. А гучність міняюсистемну - в uICE у налаштуваннях є спеціальний роздільник для цього. Причому можна дозволити спеціальну фічу, коли буде показуватися типу "меню на екрані" - як у звичайному телевізорі - коли тиснеш на пульті гучність - з'являється "прогрес-бар" і чогось там рухає. Коротше, все як треба :)

комп
Puc.6

Таким чином, як нижній драйвер використовується WinLIRC, який вміє дуже добре працювати з розпізнаванням пакетів (навчанням будь-якого пульта), а як програма верхнього рівня використовується програма uICE. Це гарний комплект для керування комп'ютером.

Втім, за допомогою пульта можна не лише плеєра та телевізори запускати. Наприклад, можна організувати систему персонального доступу – тобто. до твого компа ніхто не підійде, а ти будь-якої миті натиснув кнопку на пульті - і зберігач екрану припинив роботу, натиснув - увійшов у сітку і т.п.

Коротше, нафантазувати можна все, що хочеш. Адже є дуже маленькі пульти - їх можна з собою носити як брелок для ключів :)

Розпакуйте файл winlirc.exe в якусь папку (наприклад у C: Program Files WinLIRC) і запустіть його. Встановити WinLIRC легко, складніше його налаштувати.

WinLIRC працює за IP-протоколом. Тому за допомогою одного ПДУ та одного приймача керувати хоч сотнею комп'ютерів. Програми, які працюють з WinLIRC, підключаються через 8765 порт. Сигнали, що посилаються WinLIRC іншим програмам надзвичайно малі – від 20 до 30 байт.

Імперичним шляхом встановлено, що розпізнавання сигналів, що йдуть від приймача, краще працює на Windows 2000, XP (тобто NT-платформах), ніж на Windows 9x і ME. Ймовірно, це пов'язано з різним механізмом роботи COM-портів та з різним алгоритмом розподілу обчислювальних здібностей комп'ютера. Для прикладу – ефективністьрозпізнавання на Windows 98 становила близько 40-50%, за ідеальних умов (мінімальна відстань від ПДК до приймача, нові батарейки в ПДК і т.д.), на Windows XP цей показник прагнув зі 100% за будь-яких умов.

Спочатку перевірте, чи існує файл конфігурації для вашого пульта. Для цього йдемо на http://lirc.sourceforge.net/remotes/. Шукаємо там свій пульт. Якщо не вдалося знайти точно вашої моделі, скачайте кілька конфігурацій для подібних за назвою моделей пультів. Цілком можливо, що вам пощастить.

WinLIRC сидить у треї. Двічі клацніть по значку WinLIRC у треї та натисніть кнопку "Reconfigure".

Вкажіть порт, на який ви підключили приймач (COM1, COM2 тощо). Для схеми, яка вказана у мене на сайті, опція "Receiver type" має бути "DCD". "Speed" - "115200" (за замовчуванням) "Sense" - "autodetect" (за замовчуванням).

Для початку перевіримо, чи працює зібраний вами аксесуар. Для цього натисніть кнопку "Raw Codes" і натисніть на приймач кнопкою пульта. Побігли написи із цифрами? Тоді все працює! Якщо не побігли, то у вас щось не так. Можливо ви щось перегріли, не так спаяли, можливо відійшов контакт. Коротше, перевірте правильність зібраного вами приймача.

Сподіваюся, цифри у вас побігли? Тоді натисніть кнопку "Browse.", вибирайте файл конфігурації вашого пульта. Натисніть "OK", потім "Hide window". Тепер усе готове. Наступні кілька абзаців не для вас, але прочитати їх все ж таки варто.

Якщо готовий файл конфігурації знайти не вдалося, доведеться навчити програму свого пульта самостійно. Робимо ось що:

1. У рядку "Config" пишете "my_tv_remote.cf" (це для прикладу в ідеалі вкажіть модель свого пульта, наприклад "vm201.cf"). У цей конфігураційний файл буде записуватися налаштування вашоїдистанційні.

.2. Натискаєте кнопку "Learn". З'явиться повідомлення: Це буде записувати сигнали від вашого керування керуванням і створити config file for WinLIRC. Please enter a name for this remote. Це WinLIRC запитує назву вашого пульта. Вказуйте всі дані у програмі цифрами або латинськими літерами без пробілів.

4. Step One: Determine signal gap, signal length, and repeat codes.

Натисніть "Enter", не парьтесь. 8)

5. Press a button. Натисніть та відпустіть будь-яку кнопку на пульті. Please wait a second and press it again. Через секунду натисніть і відпустіть її знову. З'явиться рядок Baseline initialized. Тепер натискаємо цю ж кнопку десять разів, у дужках вказано, скільки разів залишилося. Please wait 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.

6. У результаті з'явиться такий напис: Це сигнальний-репітуючий remote with no special repeat code. Holding down the button can quickly yield many copies of that button's code. Therefore, 64 сamples of each button will be taken. Ви будете спрямовані на введення всіх кнопок name in turn. Для finish recording buttons, enter a blank button name.

7. Тепер треба навчити WinLIRC усім кнопкам дистанційної роботи. Робиться це так – вас запитують Button 1 name? (ім'я першої кнопки)? Пишете назву. Як я вже казав, пишете цифрами або латинськими літерами без прогалин, краще за великі літери. Вказуйте слово або цифру, які є на пульті. Наприклад: "1", "STOP", "REW", "CH+", "VOL-", "MUTE" і т.д. і т.п.. Після цього тиснете на кнопку протягом кількох секунд. У віконці будуть бігти цифри, приблизно так: Baseline initialized. matches=64, faults=19 Натисніть, доки matches несягне 64. Чим менше буде faults (помилок), краще, зрозуміло.

8. WinLIRC запитає ім'я другої кнопки - пишемо ім'я другої кнопки. І так працюємо, поки не закінчаться всі кнопки на пульті. Коли кнопки закінчаться, не вводячи назву, натисніть "Enter". З'явиться повідомлення "Configuration written successfully, don't forget to analyze".

9. Тиснете кнопку "Analyze", на що отримуєте "analysis successfully". Тепер усе готове. Натискаєте "OK", потім "Hide window". Налаштування WinLIRC завершено