Tučňák na dálkové ovládání

18. 12. 2002
Doba čtení: 7 minut

Sdílet

Chcete si z počítače udělat jukebox na přehrávání MP3? Máte připojenou CD-ROM k věži a chcete ji ovládat z postele? Nebo MPlayer komfortně ovládat jako DVD přehrávač? Pak není nic jednoduššího, než si postavit přijímač dálkového ovládání.

Jak funguje dálkové ovládání

Nejprve si vysvětlíme princip dálkového ovládání. Ovladač se skládá z klávesnice, integrovaného chipu (většinou jednoúčelového nebo zákaznického) a infračervené diody. Existují samozřejmě i složitější provedení například s LCD displayem, ale základní princip je stále stejný. Chip v ovladači čte klávesnici a převádí jednotlivá tlačítka na pevně dané číselné kódy, které následně vysílá vysílací diodou.

Až do tohoto momentu se všechna dálková ovládání shodují, odlišnosti nastávají v protokolu, kterým se komunikuje. Nosná frekvence je většinou 38kHz (infračervená dioda tedy bliká 38000krát za sekundu), „vysílání“ znamená jedničku, „ticho“ znamená nulu. To ovšem pro přenos nestačí, protože bychom například nebyli schopni přesně rozeznat, kolik jedniček, respektive nul, bylo v bloku stejných bitů za sebou. Proto se používá modulace, tzv. logická jednička se kóduje například jako 01 a logická nula jako 10 (tato modulace je velmi známá z Ethernetu a označuje se jako Manchester). Modulací existuje několik, každý výrobce používá svoji. Za zmínku stojí například: Sony, Philips (známá též jako RC-5), Nokia NRC17 nebo NEC. Kterou modulaci používá váš konkrétní ovladač, závisí na tom, od jakého výrobce je integrovaný obvod v ovládání. Já mám například ovládání od věže Yamaha a to má v sobě integrovaný obvod NEC – používá se tedy protokol NEC.

To by bylo stručně k nejnižší vrstvě přenosu. Jak jsem již uvedl, každé tlačítko má přiřazeno nějaký číselný kód. Ten se většinou skládá z adresy a čísla příkazu. Adresa slouží k rozlišení různých typů přístrojů, například pro rozlišení mezi videem a televizorem, příkaz pak určuje konkrétní „akci“, která se má provést, třeba přidání hlasitosti či přepnutí programu. Jak přesně vypadá formát kódu tlačítka (kolik bitů kód zabírá, časový interval mezi vysíláním jednotlivých kódů atd.) též upravuje konkrétní protokol.

Přijímáme data

Co tedy musíme udělat, abychom byli schopni přijímat dálkové ovládání počítačem? Jediné, co opravdu potřebujeme, je přijímací dioda. Tu koupíme asi za 20 Kč v obchodě s elektronickými součástkami. Diodu můžeme rovnou, „tak, jak je“, připojit do mikrofonního vstupu zvukové karty a zbytek zařizovat softwarově. Nemusíme vůbec rozumět tomu, co vysílač vyslal, stačí nám rozeznat jednotlivá tlačítka mezi sebou. Pro každé tlačítko tedy nasamplujeme nějaké číslo (které nemusí mít vůbec nic společného s číslem vyslaným vysílačem) a pak při přijímání porovnáváme nasamplovaný signál postupně se vzorky všech tlačítek. Je to sice hodně nečistá metoda, ale prakticky funguje, můj kamarád ji doma úspěšně používá.

UIR

Lepší je investovat do přijímače trochu více inteligence a připojit ho například na sériový port. Já jsem si postavil populárního IRMana (nebo též UIR – Universal Infrared Receiver), na jehož stavbu najdete návody na Webu, já jsem postupoval podle návodu od Ties Bose. IRMan se též prodává komerčně jako hotový výrobek. Má výhodu, že „umí“ spoustu dálkových ovládání. Na uvedených stránkách se můžete dočíst, že zapojení bylo testováno s více než 40 různými značkami dálkových ovladačů.

Zapojení je velice prosté, skládá se z mikrokontroleru PIC12C509 nebo PIC16F84 (který jsem použil já), 4MHz krystalu, přijímací diody SFH506–36 s vestavěným demodulátorem, čtyř diod, tří kondenzátorů a dvou odporů. Součástky vyjdou na cca 100 Kč s versí PIC12C509, nebo 200 Kč s versí PIC16F84. Mikrokontroler si ovšem můžete zdarma jako vzorek nechat poslat od výrobce, takže zaplatíte celkem jenom asi 50 Kč za zbylé součástky. Na stránkách Microchipu si objednáte a můžete i sledovat cestu zásilky. Za příjemných pár dní od objednávky u vás zazvoní chlápek od FedExů a předá vám velikánskou obálku poslanou odněkud z Thajska, v níž se bude krčit malá krabička s vaším chipem :).

Konstrukce je natolik jednoduchá, že ji zvládne každý, kdo aspoň jednou držel v ruce pájku. Ani snad nemá smysl kvůli tak malému zapojení vyrábět tištěný spoj, proto jsem ho sletoval na universální desku. PIC si lze nechat za mírný peníz naprogramovat ve specialisované firmě nebo v některých obchodech s elektronickými součástkami.

Zde je schema pro versi s PIC12C509, schema pro versi s PIC16F84 a program pro PIC v binární podobě pro programování (HEX) pro PIC12C509 a pro PIC16F84. Schemata i obsahy pamětí mikrokontrolerů jsou zkopírovány ze stránky pro případ, že by stránka s návodem zmizela. Veškerá práva k nim náleží vlastníkovi stránek s návodem na stavbu Universal Infrared Receiveru Martinusu Bosovi.

Celé zařízení je napájeno z linek DTR a RTS na sériovém portu. Mikrokontroler komunikuje s počítačem po sériovém portu rychlostí 9600 baudů, s parametry 8 bitů, žádná parita a 1 stop-bit. Když mu pošleme písmena „IR“, tak odpoví „OK“. Jinak posílá přijaté kódy tlačítek.

Tento přijímač chodí velice pěkně, mám ho umístěný na stole pod monitorem, není potřeba ovladačem mířit přímo na něj, stačí kamkoliv do místnosti, přijme bez problémů odraz od stropu, stěny pokoje, nábytku… Jak jsem již řekl, funguje mi s ovladačem typu NEC a zkoušel jsem ho úspěšně i se Sony.

Hotový přijímač
Takto vypadá hotový přijímač, zatím jsem ho ještě nedal do krabičky.

Spoje
Ze strany spojů je to trochu divočejší :)

Software

Přijímač máme hotový, teď ještě musíme donutit Linux data číst. V Linuxu je přijímání infračerveného dálkového ovládání podpořeno docela dobře. Existuje balík jménem LIRC, který umí pěknou řádku hardwaru, od nejjednoduššího řešení, kdy je připojena infračervená dioda do vstupu zvukové karty, přes různá podomácku vyrobená zařízení připojená na sériový či paralelní port, komerční zařízení až po přijímače vestavěné například v televizní kartě. Podporovaného hardwaru je opravdu hodně, celý seznam najdete na stránkách projektu.

Jak to celé nainstalovat? Stáhnete si tento balík, pustíte konfigurační skript, kde si v textových menu (podobných těm v konfiguraci linuxového kernelu) zvolíte váš hardware, případně nějaké další parametry (jako číslo sériového portu), které části se mají kompilovat, a nakonec pustíte klasické „make install“. Kompilace vytvoří daemony lircd a lircmd, několik utilit a případně, pokud bude potřeba, ještě kernelový modul pro konkrétní přijímač.

Po nainstalování je ještě nutné napsat konfigurační soubor s popisem vašeho ovladače. Pokud nemáte vyloženě exotický kousek, správný konfigurák s největší pravděpodobností naleznete v obsáhlém archivu remotes.tar.bz2 (najde se tam i ovladač k videu Tesla :) ) na stránkách projektu. Soubor obsahuje v podstatě popis celého protokolu, to je z toho důvodu, že LIRC umožňuje připojit i „hloupé“ přijímače, a v tom případě veškeré dekódování musí provádět daemon. V popisu najdeme nosnou frekvenci, počet bitů, délky bitů, mezer a v neposlední řadě též kódy jednotlivých tlačítek. Zde je příklad, jak vypadá konfigurační soubor od mého ovladače.

Nejdůležitější součástí LIRC je daemon lircd. Ten čte data z hardware na zařízení /dev/lirc, které je buďto symlinkem třeba na sériový port, nebo je zařízením speciálního kernelového driveru pro váš konkrétní hardware. Klienti – ovládané programy – se mohou připojovat na socket /dev/lircd, odkud čtou tlačítka nadefinovaná v /etc/lircd.conf. Podporu nalezneme například v přehrávačích videa MPlayer a Xine, v MP3 přehrávači XMMS (jako plugin), v programu pro sledování televize Xawtv a v mnoha dalších.

Součástí LIRC je i daemon lircmd, který je schopen převádět stisky tlačítek na pohyby myši. Stačí pustit tento daemon a použít jako zařízení pro myš /dev/lircmd (například v gpm nebo X). lircmd umí emulovat protokoly MouseSystems, IMPS/2 nebo IntelliMouse.

V balíku je dále distribuována řada užitečných utilit, které při zmáčknutí tlačítka například spustí program, pošlou X-event nebo napíšou nějaký text. Všechny klientské programy používají jednotný konfigurační soubor .lircrc umístěný v domovském adresáři uživatele. Soubor se skládá z bloků ohraničených klíčovými slovy „begin“ a „end“, mezi kterými je vždy několik řádek určujících program, tlačítko a „akci“, která se má provést. Jak vypadá příslušná „akce“, záleží na klientském programu. Takto vypadá část konfigurace pro program XMMS:

ict ve školství 24

  begin
    prog = xmms
    button = pause
    config = PAUSE
  end
  begin
    prog = xmms
    button = stop
    config = STOP
  end
  begin
    prog = xmms
    button = power
    config = QUIT
    flags = mode
  end

Některé programy, jako například již několikrát zmiňované XMMS, umožňují komunikovat přímo s IRManem, plugin je obsažen již v defaultní instalaci. Nicméně chcete-li ovládat více aplikací, je lepší nainstalovat si balík LIRC, který umožňuje přístup k přijímači více klientům současně. Jeho velikou výhodou je šikovný návrh, který nabízí téměř neomezené možnosti konfigurace.

K LIRC již asi není více co dodat, snad jen, že je to velmi pěkný software, který zase o krok posune kupředu uživatelský komfort vašeho linuxového stroje. Zaujal-li vás tento článek natolik, že jste se rozhodli postavit si vlastní přijímač, doufám, že se z dálkového ovládání budete těšit stejně, jako jsem se z něj těšil já.

Odkazy

Autor článku