Arduino Multifunction-Shield: Infrarot-Fernbedienung als Steuerung
Seite 2: IR-Protokoll und IR-Codes herausfinden
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.
IRremote
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.
Sketch übertragen
Nun kann dieser Sketch auf den Arduino übertragen und das Arduino Terminal mit der Baudrate 9600 Bd geöffnet werden.
(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.
Codes für die OK-Taste
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.
Übersicht der IR-Codes der Tasten
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 |