Raspberry Pi als Infrarot Sender und Empfänger nutzen, aber warum? Nun ja, mir fällt da sofort ein Beispiel ein: Wenn man sein Smart Home bereits mit einer Anwesenheitserkennung ausgestattet hat, ist es nur eine Frage der Zeit bis man (oder die Freundin) auf die Idee kommt, den Fernseher automatisch aus oder einschalten zu lassen.
Da man nicht jeden Fernseher, Receiver oder Stereoanlage über das Netzwerk an- oder ausschalten kann, ist IR die alternative um die vorhandenen Geräte ins Smart Home zu Integrieren. Wenn man diesem Tutorial folgt lässt sich fast jedes gerät das eine Fernbedienung hat über den Raspberry steuern, ob Klimaanlage, LED-Stripes oder wie bereits erwähnt Multimedia Systeme. Eurer Kreativität sind keine Grenzen gesetzt.
Benötigte Hardware für dieses Tutorial
Raspberry Pi
Optionale Raspberry Hardware
Werkzeuge und Zubehör
Es wird natürlich entweder ein Lötkolben oder eine Lötstation benötigt. Ob Steckbrückenkabel oder Drahtbrücken ist Geschmacksache, ich habe beides 😉
Erforderliche Elektro-Bauteile
Amazon | leider nicht verfügbar | TSOP4838* | Infrarotdiode leider nicht verfügbar | Kohleschichtwiderstand 1/4W, 5%, 220 Ohm* |
Reichelt | Transistor NPN TO-92 45V 0,1A 0,5W* | IR-Empfänger-Module TSOP4838 38 kHz* | Infrarotdiode, 950 nm, 10°, 5 mm, T1 3/4* | Kohleschichtwiderstand 1/4W, 5%, 220 Ohm* |
Anschließen der Bauteile
Sieht alles furchtbar kompliziert aus, ist es aber nicht 😉
Empfangseinheit
TSOP4838
Sendeeinheit
BC 547B + Kohleschichtwiderstand 1/4W, 5%, 220 Ohm
LD 274-3
Bei der LED ist darauf zu achten, dass die Stromzufuhr an den Pluspol angeschlossen wird. Der Pluspol ist meist das längere der beiden Beinchen der LED.
Gesamter Schaltplan
Nicht verwirren lassen, der Transistor ist hier spiegelverkehrt wie auf dem Foto zu sehen.
Raspberry Pi als Infrarot Sender – Installation
Die Grundinstallation eines Raspberry Pi habe ich bereits hier im Blog erklärt. Ich verwende hierfür den Raspberry Pi, den ich auch für die Homebridge verwende. Zum Senden und Empfangen der Signale verwende ich die Software lirc. Beginnen wird mit der Installation des Empfängers
Empfänger-Installation
sudo apt-get install lirc -y
sudo nano /boot/config.txt
# For more options and information see # http://www.raspberrypi.org/documentation/configuration/config-txt.md # Some settings may impact device functionality. See link above for details # uncomment if you get no picture on HDMI for a default "safe" mode #hdmi_safe=1 # uncomment this if your display has a black border of unused pixels visible # and your display can output without overscan #disable_overscan=1 # uncomment the following to adjust overscan. Use positive numbers if console # goes off screen, and negative if there is too much border #overscan_left=16 #overscan_right=16 #overscan_top=16 #overscan_bottom=16 # uncomment to force a console size. By default it will be display's size minus # overscan. #framebuffer_width=1280 #framebuffer_height=720 # uncomment if hdmi display is not detected and composite is being output #hdmi_force_hotplug=1 # uncomment to force a specific HDMI mode (this will force VGA) #hdmi_group=1 #hdmi_mode=1 # uncomment to force a HDMI mode rather than DVI. This can make audio work in # DMT (computer monitor) modes #hdmi_drive=2 # uncomment to increase signal to HDMI, if you have interference, blanking, or # no display #config_hdmi_boost=4 # uncomment for composite PAL #sdtv_mode=2 #uncomment to overclock the arm. 700 MHz is the default. #arm_freq=800 # Uncomment some or all of these to enable the optional hardware interfaces #dtparam=i2c_arm=on #dtparam=i2s=on #dtparam=spi=on # Uncomment this to enable the lirc-rpi module dtoverlay=lirc-rpi,gpio_in_pin=23,gpio_out_pin=22 # Additional overlays and parameters are documented /boot/overlays/README # Enable audio (loads snd_bcm2835) dtparam=audio=on
sudo nano /etc/lirc/hardware.conf
# /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=""
sudo /etc/init.d/lirc restart
sudo reboot now
Testen von lirc
sudo /etc/init.d/lirc stop
mode2 -d /dev/lirc0
Die Ausgabe sollte wie folgt aussehen
Falls keine Codes zu sehen sind, bedeutet das, dass der Empfänger nicht richtig angeschlossen oder falsch gelötet wurde.
Hat allerdings alles bis hier funktioniert, können wir das Sniffen mit STRG+C abbrechen.
Erstellen der Fernbedienungskonfiguration
Nun müssen wird die Fernbedienung des Gerätes anlernen, das wir später steuern möchten. In meinem Fall die Fernbedienung meines Phillips Sound Systems.
Die interne Namensgebung der Tasten einer anzulernenden Fernbedienung ist durch lirc vorgegeben. Mit dem Kommando
irrecord –list-namespace kann man sich die aktuell verfügbaren Tastennamen anzeigen lassen. Die Einschalttaste der Fernbedienung sollte man also, damit die Namensgebung halbwegs sinnvoll ist, mit dem von lirc vorgegebenen Tastennamen KEY_POWER belegen. Man könnte der Einschalttaste aber theoretisch auch jeden anderen Namen zuweisen… Unten sieht man wie ich dein Einschaltknopf meine Fernbedienung angelernt habe. Dies funktioniert für jede Fernbedienung nach dem gleichen Schema.
sudo su -
/etc/init.d/lirc stop
irrecord -d /dev/lirc0 ~/NAMEDERFERNBEDIENUNG.conf
Fernbedienungs-Konfiguration in lircd.conf einfügen
Nun muss die Standardkonfigurationsdatei lircd.conf durch eure eben erstellte ersetzt werden, da der dienst sonst nicht fehlerfrei startet. Dazu gebt ihr folgende Befehle ein
rm /etc/lirc/lircd.conf
cp NAMEDERFERNBEDIENUNG.conf /etc/lirc/lircd.conf
# Please make this file available to others # by sending it to <lirc@bartelmus.de> # # this config file was automatically generated # using lirc-0.9.0-pre1(default) on Tue Apr 18 21:32:58 2017 # # contributed by # # brand: /root/NAMEDERFERNBEDIENUNG.conf # model no. of remote control: # devices being controlled by this remote: # begin remote name Phillips bits 21 flags RC6|CONST_LENGTH eps 30 aeps 100 header 2702 841 one 484 409 zero 484 409 gap 107818 toggle_bit_mask 0x10000 rc6_mask 0x10000 begin codes KEY_POWER 0x0EEFF3 end codes end remote
2Te Fernbedienungskonfiguration an lircd.conf anfügen
Falls ihr mehr als eine Konfigurationsdatei hab, könnt ihr diese mit folgendem Befehl an die bestehende Konfigurationsdatei lircd.conf anfügen
cat NAMEDERFERNBEDIENUNG2.conf >> /etc/lirc/lircd.conf
Testen der Infrarot Kommandos
Zuerst den anfänglich beendeten Dienst lirc wieder starten
/etc/init.d/lirc start
Nun können wir mit dem Kommando
irsend SEND_ONCE NAMEDERFERNBEDIENUNG KEY_POWER
einmalig den befehl zum An/Ausschalten des Gerätes schicken. In meinem Fall gebe ich also ein irsend SEND_ONCE Phillips KEY_POWER
Hinweis: Zum Testen sollte man die Infrarot-LED des Raspberrys am besten direkt auf das Gerät richten.
Fehlerbehebung
Falls sich bei euch nach dem erfolgreichen ausführen des Kommandos irsend SEND_ONCE NAMEDERFERNBEDIENUNG KEY_POWER nichts tut, hier eine kleine Guide zur Fehlerbehebung.
Sendet die Infrarot-LED Signale?
Dies testet ihr am besten, indem ihr den Raum abdunkelt euch eine Digitalkamera oder ein Smartphone nehmt, und die Diode der Fernbedienung durch die Kamera anguckt und auf der Fernbedienung tasten drückt. Wenn ihr auf dem Kameradisplay die Diode leuchten seht, wisst ihr sicher dass der Sensor eurer Kamera Infrarot sensibel ist.
Nun richtet ihr die Kamera auf die IR-Diode des Raspberry und führt das Kommando irsend SEND_START NAMEDERFERNBEDIENUNG KEY_POWER aus. Dieses Kommando sendet über einen bestimmten Zeitraum dauerhaft das IR Signal, die LED sollte, durch eure Kamera betrachtet, schwach leuchten.
- Falls die IR-LED nicht leuchtet, ist beim verlöten etwas schiefgegangen
- Falls die IR-LED leuchtet, nimmt euer Gerät die Befehle nicht an (dann bitte die Fernbedienungskonfiguration neu erstellen) oder ist außer Reichweite.
Hallo Simon,
Danke für die Anleitung. Ich habe vor den RB als Controller für einen AVR einen TV (via IR) und als WOL (Alexa gesteuert) aufzubauen. Wie ist die Sendeleistung bzw. der Winkel des IR-Senders, habe vor den RB3 unter den Fernseher zu stellen, der AVR steht im Lowboard 2. Etagen tiefer. Kann ich mit dem Sender beide Geräte ohne Probleme erreichen oder muss der Sender auf die Geräte ausgerichtet sein ?
Danke und
Gruß
Nin-
Hi Nin,
Infrarot-Dioden haben einen ziemlich engen Sende/Abstrahlwinkel. Ich denke, für dein Projekt wirst du mindestens eine zweite Diode an deinem Raspberry Pi brauche. Könnte auch mit einer funktionieren, ist aber meiner Einschätzung nach mehr als unwahrscheinlich. Bei mir klappt es am besten, wenn die Diode zumindest in die Richtung des Gerätes zeigt. Genau wie ein Laserpointer muss es zwar nicht sein, aber die Richtung muss schon in etwa stimmen.
Ich hoffe das hilft dir weiter 🙂
Hallo Simon,
schade eigentlich, da muss ich dann wohl den Sender irgendwo zwischen die Geräte verlängeren und montieren. Der RB soll später auch für ein DIY Ambilight benutzt werden und ist daher dann relativ dicht am Fernseher dran. Aber immerhin weiß ich dann schon einmal bescheid, hätte ja sein können das der Sender um sich herum in Kugelform strahlen kann. 🙂
Danke
Gruß Nin-
Hallo Simon,
Zur Info!
habe das ganze gerade mal einfach mit der Fernbedienung des AVR ausgetestet. Fernbedienung funktioniert auch im winkel von 110° von der Front nach hinten weg (Abstand 60cm) einwandfrei, denke damit hat sich die wichtigste Frage dann auch erübrigt. Vielleicht ist das für dich ja auch noch einmal interessant 🙂
LG Nin-
Vielen Dank nochmal an dich für die Info Nin- 💡
RPi 3 empfehlen und als optionale Hardware ein Wifi Dongle???
Klar… ist ja nicht so als hätte der RPi 3 ein eingebautes Wifi Modul o_O
Vielen Dank für den Hinweis, habe beim kopieren der Tabellen den Text in den Klammern vergessen 😳