Arduino Multifunction-Shield: Infrarot-Fernbedienung als Steuerung

Seite 2: IR-Protokoll und IR-Codes herausfinden

Inhaltsverzeichnis

Da zu der von Pollin angebotenen Fernbedienung keine technischen Daten verfügbar sind, muss man das IR-Protokoll experimentell herausfinden. Für den Arduino gibt es Bibliotheken, die eine Reihe von gängigen IR-Protokollen unterstützen. Zwei solcher Bibliotheken sind:

Mit diesen Bibliotheken kann auch das IR-Protokoll von unbekannten Fernbedienungen ermittelt werden, sofern ein gängiges Protokoll verwendet wird. Hat man also noch eine ältere Fernbedienung übrig, zum Beispiel von einem ausgemusterten Fernseher, kann man diese weiterhin für Bastelzwecke verwenden.

Wir verwenden hier IRremote. In dieser Bibliothek wird über einen Timer alle 50μs ein Interrupt ausgelöst und der IR-Eingangspin abgesampelt. Deshalb ist es wichtig, dass falls im Sketch irgendwo temporär die Interrupts gesperrt werden müssen oder andere Interruptserviceroutinen aktiv sind, dies nicht länger als einige Mikrosekunden dauert. Ansonsten funktioniert die IR-Dekodierung nicht mehr korrekt.

In den Beispielen wird ein Sketch IRrecvDumpV2.ino mitgeliefert, der die empfangenen IRDaten dekodiert und die entsprechenden Informationen zum Protokoll auf der seriellen Schnittstelle ausgibt. In diesem Sketch muss ganz oben der Receive-Pin angepasst werden auf den Arduino-Pin 2, der beim MFS verwendet wird:

int recvPin = 2;

Im von uns angepassten Sketch mfs_IRrecvDumpV2.ino sind die notwendigen Änderungen bereits enthalten.

Nun kann dieser Sketch auf den Arduino übertragen und das Arduino Terminal mit der Baudrate 9600 Bd geöffnet werden.

Screenshot der Arduino-Ausgabe

(Bild: Köhnlein/Gaus)

Ein Tastendruck auf OK auf der IR Fernbedienung liefert die oben gezeigte Ausgabe. Somit verwendet diese Fernbedienung das bekannte RC5 Protokoll von Philips. Der Code der OKTaste ist hier D4F (hex) und setzt sich aus 12 Bits zusammen: 1 Toggle-Bit, 5 Bits Adresse und 6 Bits Befehl. Genau genommen werden vor diesen 12 Bits noch 2 Startbits mit konstantem Wert gesendet, die jedoch in der Ausgabe im Sketch nicht berücksichtigt werden.

Das Toggle-Bit ändert seinen Zustand bei jedem neuen Tastendruck. Wird also OK ein weiteres Mal gedrückt, ergibt sich statt D4F der Wert 54F. Bei einer länger gedrückten Taste werden die IR-Daten zyklisch ca. alle 114 ms gesendet, wobei das Toggle-Bit seinen Wert nicht ändert. Somit kann dadurch unterschieden werden, ob eine Taste länger gedrückt wird oder mehrfach kurz hintereinander. Man kann sich auch weiter in die Detailinfos zum RC5 Protokoll einlesen.

Die beiden Codes für die OK-Taste setzen sich folgendermaßen zusammen:

Tog. Adresse (5-bit) Befehl (6-bit)
1 1 0 1 0 1 0 0 1 1 1 1
D 4 F
Tog. Adresse (5-bit) Befehl (6-bit)
0 1 0 1 0 1 0 0 1 1 1 1
5 4 F

Die Adresse ist 10101, also 15 (hex), was der Gerätekennung „Phono“ beim RC5 Protokoll entspricht. Dieser Wert bleibt für alle Tasten gleich, es ändert sich nur der Befehlscode. Der Befehl der OK-Taste ist 001111, also 0F (hex).

Möchte man anstatt der hier gezeigten Fernbedienung ein anderes Modell verwenden, kann man mit dem beschriebenen Verfahren das IR-Protokoll sowie die entsprechenden Tastencodes herausfinden.

In der Tabelle sind die ermittelten Befehlscodes aller Tasten der „Siemens Gigaset RC 20“ Fernbedienung von Pollin aufgelistet.

RC5 Protokoll, Address code (hex): 15

Taste Command code (hex)
i 27
TV/Radio 1A
Standby 1
EPG 21
rechts/links 12
FAV 22
rot 14
EXIT 13
grün 15
Pfeil hoch 0D
Pfeil links 0E
OK 0F
Pfeil rechts 10
Pfeil runter 11
gelb 16
Text 19
blau 17
P+ 23
VOL+ 25
P- 24
VOL- 26
1 3
2 4
3 5
4 6
5 7
6 8
7 9
8 0A
9 0B
Mute 2
0 0C
Menu 18