Ein Experiment, inwieweit man den Raspberry Pi mittels Infrarot-Fernbedienung steuern kann oder gar als Universal-Fernbedienung nutzen kann.
![Der fertige Aufbau](http://joergnapp.de/wp-content/uploads/2016/02/IR-300x247.jpg)
1. Schritt: LIRC installieren
LIRC – Linux Infrared Remote Control – ist eine Bibliothek zum Zugriff auf Infrarot-Empfänger und -Sender. Auf dem Raspberry Pi installiert man LIRC mittels
sudo apt-get install lirc
Vor der Nutzung müssen noch zwei Dateien bearbeitet werden:
Die Datei /etc/lirc/hardware.conf
muss wie folgt geändert werden:
# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS="--uinput"
# Don't start lircmd even if there seems to be a good config file
# START_LIRCMD=false
# Don't start irexec, even if a good config file seems to exist.
# START_IREXEC=false
# Try to load appropriate kernel modules
LOAD_MODULES=true
# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="default"
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"
# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""
(Es werden also Werte LIRCD_ARGS
, DRIVER
, DEVICE
und MODULES
geändert)
In der Datei /boot/config.txt
die folgende Zeile einfügen:
dtoverlay=lirc-rpi,gpio_in_pin=23,gpio_out_pin=22
Anschließend den Raspberry Pi einmal neustarten.
2. Infrarot-Empfänger anschließen
Jetzt kann (bei ausgeschaltetem Raspberry Pi!) ein IR-Empfänger angeschlossen werden. Ich habe einen TSOP4838 (Conrad) für unter 2 EUR genommen. Den Empfänger kann man gemäß dem folgenden Bild direkt an die Pins des Raspberry Pi anschließen. Achtung: Dabei die Anschlüsse des konkreten Modells beachten – das zugehörige Datenblatt hilft!
Der Ausgang des IR-Empfängers kommt in diesem Fall an GPIO 23, das ist der Wert, den wir oben in den Dateien /etc/modules
und /boot/config.txt
eingetragen haben.
Jetzt kann der Empfänger ausprobiert werden. Zunächst wird der lircd
gestoppt, anschließend kann man sich die empfangenen Rohdaten anschauen:
sudo service lirc stop
mode2 -d /dev/lirc0
Jetzt kann man auf einer beliebigen Fernbedienung irgendwelche Tasten drücken. Im Terminal müsste nun eine Ausgabe ähnlich der folgenden erscheinen:
space 2206719
pulse 9085
space 4409
pulse 694
space 436
pulse 617
space 514
pulse 651
space 462
pulse 688
space 439
pulse 618
space 516
Falls nicht, ist irgendwas schief gelaufen – nochmals alles überprüfen, ob alles richtig verkabelt ist.
Wenn wir irgendwas mit einer bestehenden Fernbedienung steuern wollen, benötigen wir eine Datei, die diese Rohdaten in Tasten „übersetzt“. Dazu kann man in der LIRC-Aufstellung schauen, ob es bereits eine fertige Config-Datei gibt. Wenn nicht, muss man eine eigene Datei erstellen. Das tut man, indem man
irrecord -d /dev/lirc0 fernbedienung.conf
startet und den Anweisungen folgt. Die Tastenbezeichnungen sind dabei vorgegeben, diese erfährt man hier oder über
irrecord -l
Das Ganze ist ein relativ langwieriger Prozess; zum Schluss hat man jedoch eine Datei, in der alle Tasten der Fernbedienung enthalten sind. Um diese Datei verfügbar zu machen, müssen wir sie (nach dem Anpassen der Angaben im Kopf) an die bestehende /etc/lirc/lircd.conf
anhängen:
sudo cp fernbedienung.conf /etc/lirc/lircd.conf
Nur beim ersten Mal sollte man die mitgelieferte lircd.conf
wirklich überschreiben, weitere Konfigurationen für zusätzliche Fernbedienungen fügt man mit
cat fernbedienung.conf | sudo tee -a /etc/lirc/lircd.conf
hinzu.
Jetzt kann man auch schauen, ob die Tasten korrekt erkannt werden. Der Befehl
irw
zeigt die jeweils an der Fernbedienung erkannten Tasten an.
Wenn das klappt, kann der Raspberry Pi bereits ferngesteuert werden. Dazu legt man eine Datei /etc/lirc/lircrc
oder – für den aktuellen Benutzer – eine Datei ~/.lircrc
an, in der steht, was beim Tastendruck passieren soll. Ein Beispiel:
begin
prog = irexec
button = KEY_1
config = ls -l
end
Startet man nun
irexec
so wird beim Druck auf die Taste „1“ der Fernbedienung das Verzeichnis aufgelistet. Nicht sehr sinnvoll, zeigt aber das Prinzip.
3. IR-Sendediode integrieren
Wir haben Infrarot-Befehle empfangen, jetzt wollen wir sie auch senden. Hierfür brauchen wir ein paar mehr Teile, die zusammen knapp über 1 EUR kosten:
- IR-Diode TSAL 6200 (Conrad)
- Transistor BC547C NPN (Conrad)
- Widerstand 20 Ω (Conrad) (Achtung: vermutlich besser einen Wert zwischen 34 und 39 Ω wählen, siehe Kommentar unten!)
- Widerstand 220 Ω (Conrad) (Achtung: vermutlich besser einen Wert um 2,6KΩ wählen, siehe Kommentar unten!)
Die Schaltung nach dem folgenden Schema aufbauen:
Mit diesem Aufbau kann man nun mittels des Befehls
irsend SEND_ONCE Samsung_BN59-00861A KEY_VOLUMEUP
beispielsweise die „lauter“-Taste der entsprechenden Samsung-Fernbedienung an das Gerät senden.
4. Fazit
Damit sind die Grundlagen für eine universelle Fernbedienung geschaffen. Mit Hilfe einer Software wie lirc_web (Link, Beschreibung) kann damit eine Web-basierte Fernbedienung erreicht werden.
Dear Joerg,
I was looking into your project and i wanted to ask how did you determinated the values for the resistance.
From my point of view both R1 but also R2 have wrong values but i also be wrong.
According to the documentation, TSAL6200 have Vf=1.35-1.6V and Ifmax=100mA.
You connected the LED to the 3.3V power supply which can only deliever max 50mA if you don’t want to break it( This type of projects are usually connected to the 5 V supply because can deliever more than 50mA.)
Having those said the voltage drop will be 3.3V-1.35V=1.95V or 3.3V -1.6V=1.7V.
Using R=V/I and knowing that I cannot be higher then 50mA(limitation on the 3.3V as presented earlier) results:
R can be between 39Ohm and 34Ohm
Because of that i find your value of 20ohm way to little and even if it’s working right now it can do damages.
Regarding R2 where the value is 200Ohm i found this value also too littlte.
For BC547 we have Icmax=100mA and Vbeon=500-700mV. Since GPIO will supply 3.3V then resitance will need to cover 3.3V-0.7V=2.6V. We know that Hfe(B)=Ic/Ib -> Ib=0.1/100=0.001A
Using R=V/I we will have a resistance of 2.6/0.001=2600ohm=2.6Kohm
Because of that i find your resistance of 220ohm way too little.
Best regards,
Iulian
Iulian,
thank you for your thoughts on the resistors. I have to admit that I didn’t do any calculations, but copied the values found elsewhere and tried it with these resistors.
I will add your corrections to the article.
Jörg
Hallo Jörg
Danke für die fantastische Hilfe, allerdings habe ich eine Frage.
Meine Fernbedienung ist leider kaputt gegangen, deshalb wollte ich nun meine Soundanlage mit dem Raspberry Pi steuern. Da meine Fernbedienung aber Kaputt ist, kann ich nicht zuerst die Signale durch die Fernbedienung aufnehmen. Hast du eine Idee, wie ich sonst an die Signale, ohne Fernbedienung komme?
http://lirc-remotes.sourceforge.net/remotes-table.html
@Patrick Schöpfer
Schau mal auf http://lirc.sourceforge.net/remotes/ ob es vielleicht schon eine config für deine Soundanlage gibt.
Hallo Jörg,
vielen Dank für die Schaltung. Habe das ganze auf eine kleine Platine gelötet und als Wiederstände 36Ω und 2,67kΩ verwendet. Hat auf Anhieb geklappt.
Hey ,
ich habe alles so gemacht wie du es gesagt hast. Das senden klappt aber leider nicht. Und ich weis nicht wieso .Es kommt auch keine Fehlermeldung. aber wenn ich einen irsend Befehl absende passiert nichts.(Lampe leuchtete nicht ,hab es ausprobiert und mit meiner handycamera nachgeshen ).
Hat sich geklärt habe einen anderen Schaltplan benutzt Jetzt funktioniert es.
Trozdem sehr gute Erklärung