LIRC - Infrarood ontvanger
|
Tegenwoordig komt bijna ieder apparaat met zijn eigen
infrarood afstandsbediening: CD-Speler, TV, video en zelfs garage deuren.
Zou een computer worden gemist op deze lijst...? |
Save money
Zelfs PCs herkennen nu infrarood signalen. Vrijwel alle moderne
laptops/notebooks hebben een IR-poort waarmee ze data kunnen overzetten
naar een ander apparaat (GSM, printers, enz.) of zelfs een andere
laptop.
Bij sommige TV-tuner-kaarten wordt ook een IR-afstandsbediening geleverd.
Meestal betaal je meer (soms VEEL meer) voor deze handige add-on.
Daar de typische Linux gebruiker zuinig is en wat handwerk zeker niet
erg vindt, is het weinig verassend dat er hard- en software oplossingen
voor Doe-Het-Zelf op het Internet te vinden zijn.
Ten slotte heb je waarschijnlijk al veel te veel afstandsbedieningen thuis
liggen. Met een computer kun je trouwens ook de functie toetsen instellen.
Naar de volgende MP3 springen, het volume aanpassen of zelfs zappen in
kwintv met je vinger? Geen probleem! De mogelijkheden zijn - zoals
gewoonlijk - oneindig. Maar je kunt niet alleen programma's starten, je
kunt ook muis-gebeurtenissen simuleren met je AB om zo je browser te
gebruiken ("Browsen met je vingertoppen" ;).
Iets nuttiger zou een AB zijn voor presentaties: verander de slide die op
de muur wordt geprojecteerd door een beamer die is aangesloten op een
laptop met je AB. Het publiek zou onder de indruk zijn...
Drivers voor het gebruik van een AB met een Linux computer zijn er al langere tijd, het zal dus weinig verassen dat veel multimedia programma's ondersteuning voor een AB bieden. Die programma's kennen speciale commando's die gebruikt kunnen worden zonder dat de gebruiker zich druk hoeft te maken over de details.
De hardware verzamelen
Voordat je de AB kunt gebruiken, heb je een infrarood-ontvanger nodig.
Je kunt er een kopen die je aansluit op de seriële poort, maar dat
kost je een klein fortuin (meestal vanaf EUR 35,-) en ze werken niet beter
dan een DIY (Do It Yourself) versie die je ongeveer EUR 8,- kost.
Verder worden deze producten geleverd met windows-software (indien aanwezig) en waarom zou je daarvoor betalen?
De gebruikte onderdelen zijn niet bijzonder of duur en zou je zelfs bij de meest chaotische leverancier nog moeten kunnen vinden. In geval van nood: alle onderdelen zijn te bestellen via "Conrad Electronic". De artikelnummers kun je in onderstaande tabel vinden.
| onderdeel | artikelnummer |
| weerstand 4,7 kOhm | bijv. 41 83 31 |
| Condensator 10 µF | bijv. 46 82 31 |
| Condensator 100nF | bijv. 45 33 58 |
| IR-ontvanger module 78L05 | 17 10 77 |
| Diode 78L05 | 16 22 80 |
| Potentiaal omvormer 78L05 | 18 30 24 |
| 9-polige seriële connector (vrouwelijk) (Eventueel met kabel, zie tekst) | |
| soldeer plaat |
Als je een beetje handig bent zou je zonder veel moeite de schakeling
moeten kunnen maken, zoals weergegeven in het diagram. Hoewel er maar 3
pennen van de seriële poort gebruikt worden, is het aan te raden een
seriële kabel (met 9 pennen) aan te schaffen en in het midden door te
snijden. Denk er aan: gebruik een kabeltester om te achterhalen welke ader
bij welke pen hoort. Ga ze niet willekeurig gebruiken ;).
De pennen zijn meestal bij de connector genummerd. In feite weet niet
iedereen (vooral de fabrikanten) dat... :( .
De gebruikte pennen zijn
| 9-Pin (Sub-D Jack) |
|
RTS 7 Request To Send (Power supply) GND 5 Ground DCD 1 Data Carrier Detect (IR-Signal) |
Het onvanger-circuit ziet er zo uit:

(download EPS-File)
en eenmaal opgebouwd, ziet er zo uit:
Het gebouwde circuit kan erg compact zijn, afhankelijk van je technische kennis. Het is aan te raden om de printplaat in een kleine behuizing te plaatsen, maar vergeet het gat voor de ontvanger-module niet. Je kunt er ook een geïntegreerd apparaat van maken, door het in je computer te plaatsen.
De ontvanger die te zien is op de LIRC-Homepage is erg compact. De ontvanger zelf bevindt zich in een seriële stekker.

Software installeren
Als de ontvanger klaar is, wil je natuurlijk zeker weten dat hij werkt. Eerst moet je de nodige software installeren, deze is te vinden op de homepage van het LIRC Project (Linux Infrared Remote Control) op http://www.lirc.org. De huidige versie is 0.6.3. In het geval van problemen kun je de nieuwste CVS-versie of (als je niet weet hoe CVS werkt) het nieuwste snapshot (is te vinden op http://www.lirc.org/software/snapshots/).
Na uitpakken in de /tmp-directory:
>> tar zxvf lirc-0.6.3.tar.gz -C /tmpcompileer je het:
>> cd /tmp/lirc-0.6.3 >> ./configureEr zou nu een configuratie venster moeten verschijnen waarin je je configuratie werk kunt doen:
![[PIC] LIRC Configuratie](../share/issue6/lirc_config.jpg)
Met het eerste menu-item, "driver configuration", stel je in (wie had DAT gedacht?) welk type IR-ontvanger je hebt. Voor ons DHZ-type zou het type "Home-brew.." moeten volstaan ;). Na deze lastige beslissing kies je de seriële poort en de interrupt waarop de ontvanger gevonden kan worden. Nu wil LIRC weten of we IR-signalen willen sturen. Omdat onze schakeling geen IR zender diode heeft laten we "With transmitter diode" leeg. Het tweede item "Software generated carrier" kan ingeschakeld blijven.
Daarna komen we (hopelijk) terug in het hoofdmenu om verder te gaan met punt 2, genaamd "software configuration". Omdat we X-applicaties willen bedienen met onze afstandsbediening, moet de optie "Compile tools for X-Windows" geactiveerd worden. Alle andere opties kunnen leeg blijven.

En daar zijn we weer: terug in het hoofdmenu. Deze keer kiezen we voor "Save configuration & run configure", dat is het derde item in het menu.
Als het configure-script klaar is zonder foutmeldingen (mogelijk krijg je een waarschuwing dat de seriële poorten niet als module zijn geïplementeerd maar direct in de kernel zijn gecompileerd) kun je de software gaan compileren:
>> makeAls alles compileerde zonder fouten, kun je ze installeren (als root):
>> su [wachtwoord] >> make installDaar LIRC kernel modules gebruikt en dicht op de hardware werkt, kan het lastig te compileren zijn op gepachte kernels. LIRC werkt niet direct met de kernel van SuSE 7.0 (2.2.16) die in feite een gepatchte versie is.
LIRC gebruikt zijn eigen device om te communiceren met de hardware. Mogelijk bestaat deze (afhankelijk van je distributie) /dev/lirc al, anders moet je het (als root) zelf maken:
>> mknod /dev/lirc c 60 0De "c" betekend dat dit een character-device is (dit is belangrijk voor de communicatie met de hardware). De twee nummers definiëren het major- en minor-nummer dat de kernel intern gebruikt voor de communicatie met het apparaat.
Na al dit werk kun je de ontvanger testen. De makkelijkste manier hiervoor is het gebruik van xmode2 onder X, deze is te vinden in lirc's tools-directory.
>> xmode2Nu zou er een venster op je X-server moeten verschijnen waarin je de signalen kunt zien zoals die worden ontvangen door de IR-ontvanger. Wijs met de afstandsbediening naar de ontvanger en bekijk de ontvangen signalen:
Als er pieken voorkomen zonder dat je een knop indrukt zijn die waarschijnlijk afkomstig van het omgevingslicht in de kamer.
Tip: probeer alle afstandsbedieningen eens die je kunt vinden en je zult zien hoeveel verschillende soorten signalen (eigenlijk: protocollen) er zijn.
leer-sessies
Hoewel er veel verschillende afstandsbedieningen zijn, kent geen enkel
programma ze allemaal. Eeen aantal configuratie bestanden voor
verschillende soorten afstandsbedieningen kun je vinden op de LIRC
website,
http://www.lirc.org/remotes/, maar het is een gok of de jouwe er wel
of niet bij staat.
Daarom zit er een programma bij LIRC om configuratiebestanden voor jouw
afstandsbediening te maken. Dit programma is irrecord en is te
vinden in lirc's daemons subdirectory. Voor iedere
afstandsbediening die je wilt gebruiken met lirc heb je een
configuratiebestand nodig. Volgens de licentie dien je vervolgens je
configuratiebestand naar de auteur te mailen om hem in staat te stellen
meer afstandsbedieningen te ondersteunen.
Om fouten door andere lichtbronnen dan de IR signalen te voorkomen, raadt de auteur aan om het leerproces in een donkere ruimte uit te voeren.
Je start het programma met:
>> irrecord /tmp/remote1.configNa de eerste informatie voor de gebruikers probeert de software om het type afstandsbediening vast te stellen (het probeert het protocol te achterhalen). Daarvoor is het nodig om bijna iedere toets van je afstandsbediening in te drukken (irrecord geeft zelf verdere informatie).
De volgende stap is om iedere knop te benoemen (zonder spaties). Deze naam wordt als referentie gebruikt in het configuratie bestand dat we later gaan maken. Na het benoemen van een knop moet je hem meerdere malen indrukken.
Als alle knoppen zijn benoemd, kun je het programma afsluiten met een
druk op de "Enter"-toets zonder eerst een naam op te geven.
Het resulterende configuratiebestand kun je vinden in
/tmp/remote1.config en moet je kopiëren naar
/usr/local/etc/lircd.conf.
Als je meerdere afstandsbedieningen wil gebruiken moet je meerdere confiugratie bestanden maken en er vervolgens een bestand van maken:
>> cat config1 config2 >config
Hieronder volgt wat informatie over de afstandsbediening, de zogenoemde "codes" kun je in het configuratiebestand /usr/local/etc/lircd.conf vinden. Ook kun je daar de namen vinden zoals je die had toegewezen aan de AB knoppen:
| /usr/local/etc/lircd.conf |
[...]
begin codes
Volume_down 0x000000000000601F
Volume_up 0x000000000000205F
Audio_Mute 0x000000000000502F
Class 0x0000000000002956
Tuner_Next 0x000000000000007F
Tuner_Prev 0x000000000000403F
CD_Next 0x0000000000005C23
CD_Prev 0x0000000000003C43
CD_Stop 0x0000000000001C63
CD_Disc 0x0000000000001D62
CD_Pause 0x0000000000007C03
CD_Play 0x0000000000006C13
DeckA_Rew 0x000000000000255A
DeckA_Forw 0x000000000000453A
DeckA_Stop 0x0000000000005926
DeckA_Rec 0x000000000000057A
DeckA_Play 0x0000000000003946
DeckA_PlayRev 0x0000000000007906
DeckB_Play 0x000000000000542B
DeckB_PlayRev 0x000000000000344B
DeckB_Stop 0x000000000000641B
DeckB_Rec 0x0000000000000C73
DeckB_Forw 0x0000000000004C33
DeckB_Rev 0x0000000000002C53
Phono 0x0000000000002857
CD 0x0000000000004837
Tuner 0x0000000000006817
Tape1 0x0000000000000877
Tape2 0x000000000000700F
Sleep 0x0000000000005D22
Power 0x000000000000106F
end codes
end remote
|
Configuratie
Het benoemen en aankondigen van een (of meer) afstandsbediening(en) gebeurt systeem-breed in ons gloednieuwe configuratiebstand /usr/local/etc/lircd.conf. De instellingen voor wat welke toets moet doen, kun je voor iedere gebruiker apart instellen (beter nog: kunnen ze zelf doen). Hiervoor maak je een bestand genaamd .lircrc in de homedirectory van de user. Hier is een voorbeeld van hoe een ~/.lircrc bestand eruit kan zien (de knop-namen kunnen verschillen van de jouwe):
| ~/.lircrc |
begin
prog = irexec
button = CD
config = xmms &
mode = xmms
end
begin
prog = irexec
button = Sleep
config = xterm &
end
|
Ten slotte moeten nog wat programma's worden gestart:
Eerst wordt de lircd daemon gestart (te vinden de
lirc-0.6.3/daemons/lircd subdirectory). Dit gebeurt als de root
gebruiker.
De IR-ontvanger kan op een andere computer worden aangesloten dan degene waarop de programma's zullen draaien. Deze hardware-software-communicatie kan over een netwerk lopen.
De software voor het lezen van het configuratiebestand en het uitvoeren van de commando's die aan de knoppen waren toegewezen, kun je vinden in in lirc-0.6.3/contrib. In deze directory gebruik je (als user met een .lircrc bestand in je homedirectory):
>> ./lircs -cVanaf nu zouden alle programma's moeten lopen zoals je had ingesteld en een druk op de knop "CD" zou xmms moeten starten en de "Sleep" knop een terminal venster moeten openen.
Fine Tuning
De belangrijkste programma's om aan te sturen met een afstandsbediening
zouden een MP3-speler en TV-applicaties zijn.
Zo is er een plugin voor xmms beschikbaar op
http://sourceforge.net/project/showfiles.php?group_id=5444"
Na het compileren van de libraries, kopieer je deze naar de .libs directory in xmms's globale plug-in directory of naar de lokale plugin-directory (~/.xmms/Plugins). Na het herstarten van xmms kun je de nieuwe plugin activeren in het preferences-menu:

XMMS begrijpt nu de volgende commando's die je direct in het LIRC-configuratie bestand kunt gebruiken:
| LIRC-XMMS Plugin commando's |
PLAY ONE
STOP TWO
PAUSE THREE
PLAYPAUSE FOUR
NEXT [<tracks>] FIVE
PREV [<tracks>] SIX
SHUFFLE SEVEN
REPEAT EIGHT
FWD [<sec>] NINE
BWD [<sec>] ZERO
VOL_UP [<procent>] SETPOS
VOL_DOWN [<procent>] QUIT
BAL_LEFT [<procent>] LIST
BAL_RIGHT [<procent>] SELECT <chars>
BAL_CENTER PLAYLIST_CLEAR
PLAYLIST_ADD <bestand>
|
Xawtv ondersteund zelf IR-afstandsbedieningen (recente
versies) en heeft geen plugins nodig.
De nieuwste xawtv versie is te vinden op
http://bytesex.org/xawtv/.
De commando's voor xawtv zijn dezelfde als die het programma
xawtv-remote (onderdeel van xawtv) naar een draaiende xawtv kan
sturen. De meest interessantste commando's voor de afstandsbediening zijn:
| xawtv-commando's |
setstation [ <naam> | <nr> | next | prev | back ] setchannel [ <naam> | next | prev ] setinput [ <invoer> | next ] capture [ on | off | overlay | grabdisplay ] volume [ inc | dec | mute | <n> ] snap [ jpeg | ppm ] [ full | win | widthxheight ] <bestandsnaam> ] movie file <bestandsnaam> | start | stop fullscreen msg text quit keypad n |
Verder informatie kun je vinden in de xawtv-remote manpage.
Een ~/.lircrc bestand zou er als volgt uit kunnen zien (gedeeltelijk gepubliceerd):
| ~/.lircrc |
begin
prog = irexec
button = CD
config = xmms &
mode = xmms
flags = once
end
begin
prog = irexec
button = Tuner
config = xawtv &
mode = xawtv
flags = once
end
begin
prog = irexec
button = Sleep
config = xlock &
end
begin xmms
begin
prog = xmms
button = CD_Play
config = PLAY
end
begin
prog = xmms
button = CD_Pause
config = PAUSE
end
begin
prog = xmms
button = CD_Stop
config = STOP
end
[...]
end xmms
begin xawtv
begin
prog = xawtv
button = DeckA_Play
config = setstation next
end
begin
prog = xawtv
button = DeckA_PlayRev
config = setstation prev
end
begin
prog = xawtv
button = DeckA_Rec
config = fullscreen toggle
end
[..]
end xawtv
|
Iedere afstandsbediening komt tenminste 1 knop tekort. Met LIRC is het mogelijk meer dan 1 knop tegelijk te gebruiken. De entry
mode = xmms
zorgt ervoor dat LIRC naar de xmms-mode springt als de CD-knop wordt
ingedrukt.Vervolgens zal LIRC de commando's in de sectie
begin xmms [... define keys here ...] end xmmsuitvoeren.
Dezelfde knop kan ook worden gedefinieerd voor een ander mode om zo andere commando's uit te voeren. Maar je moet altijd eerst op de knop drukken om een andere mode te activeren!
automatisch starten
Het gebruik van een init-script om de daemon automatisch te starten is -zoals gebruikelijk- aangeraden. Voorbeelden van init-scripts zijn te vinden in de contrib subdirectory, maar hoewel deez bestanden niet alleen afhankelijk zijn van de distributie, zijn ze ook afhankelijk van de gebruikte versies. Wij raden dan ook om een bestaand init-script van je distributie te kopiëren en die aan te passen.
Dit init-script zorgt ervoor dat de lirc-daemon tijdens het booten wordt gestart. Verder moeten de gebruikers irxevent en irexec --daemon starten om de commando's van de afstandsbediening te gebruiken. Dit gebeurd meestal via het lircs script dat ook in de contrib subdirectory staat.
Dit script zou niet als root moeten worden gestart, maar als een
gebuiker met een .lircrc bestand in zijn homedirectory.
Of het commando
lircs -cuitgevoerd moet worden tijdens het booten of tijdens het starten van de X-Server is afhankelijk van de afstandsbediening en of de computer een multi-user-systeem is of een single-user-systeem (of de PC door 1 of meerdere mensen wordt gebruikt, dus).
Als je dit commando in het init-bestand zet, moet je het zonder root-rechten starten, dit gaat met het commando:
su nonrootuser -c "umask 022; /path/to/lircs -c".
Anders voeg je het commando lircs -c toe aan de ~/.xinitrc zodat het wordt uitgevoerd bij het starten van de GUI.
Het samenstellen van X-events zoals muisklikken is lastiger met LIRC en zullen we in issue 7 van Linux NetMag bespreken.
Links
LIRC homepage: http://www.lirc.org
LIRC in c't-Magazine (Duits): http://www.heise.de/ct/00/18/208/