home   artikelen   forum   colofon  
Gepubliceerd op 12.10.2001
Auteur: Ronny Ziegler
Vertaald door: Guus Snijders
Languages: en de
Help Ons!
 

LIRC - Infrarood ontvanger

Infrarood 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.

boodschappen lijst
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:

oeps, hier zou het ontvanger-ciruit moeten staan
(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 /tmp
  
compileer je het:
  >> cd /tmp/lirc-0.6.3
  >> ./configure
  
Er zou nu een configuratie venster moeten verschijnen waarin je je configuratie werk kunt doen:

[PIC] LIRC Configuratie

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.

LIRC Software Configuratie

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:

  >> make
  
Als alles compileerde zonder fouten, kun je ze installeren (als root):
  >> su 
  [wachtwoord]
  >> make install
  
Daar 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 0
  
De "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.

  >> xmode2
  
Nu 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:

xmode2 venster

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.config
  
Na 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
configuratie bestand voor Okyo RC-223S
  [...]
        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 -c
  
Vanaf 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-Plugin configuratie

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 xmms
  
uitvoeren.
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 -c
  
uitgevoerd 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/