Labortagebuch - Arduino - Raspberry Pi
20.12.2020 - Die IR Fernbedienung
Infrarot ist eine optische Übertragung, die heute noch vielfach in Fernsteuerungen und Fernbedienungen verwendet wird. Bevor Bluetooth auf den Markt kam, war ein IR-Modul in vielen Smartphones, PDAs und Notebooks verbaut.

IR Frequenzbereich
Am Spektrum befindet sich (nahes) Infrarot zwischen der Wellenlänge 780 nm und 1400 nm. Dieses schließt sich an den sichtbaren (roten) Bereich des Lichtes an. Grundsätzlich ist Infrarot für das menschliche Auge nicht sichtbar. Da sich das exakte IR-Licht, was für Datenübertragungen verwendet wird, im Bereich des "nahen Infrarots" befindet, ist es für eine Kamera oft sichtbar.
1. Sketch
Mit Hilfe eines Infrarotempfängers kann das Arduinoboard die Befehle einer IR-Fernbedienung auswerten. Die Daten werden dabei in Form von Infrarotlicht von der Fernbedienung zum Empfänger gesendet.
Um sich die Programmierung zu vereinfachen, gibt es eine Library IRremote.h von Ken Shirriff (2009), die einem die Arbeit erleichtert, denn das Infrarotlicht wird mit einem Code verschlüssselt gesendet. Um diesen Code selber auszulesen und in passende Werte umzuwandeln, wären sehr viele Zeilen Code erforderlich.
Mit dem folgenden Sketch kann man die Signalfrequenz jeder beliebigen Fernbedienung auslesen. Diese Informationen benötigt man, um nachher auf die verschiedenen Signale reagieren zu können.
Es ist zu beachten, dass unterschiedliche IR-Steuerungen auch unterschiedlichen Codes übertragen. Das bedeutet daher, dass man, bevor man die IR-Steuerung einsetzt, wissen muss, welcher Code hinter welcher Taste steckt.
Der Code für diesen Sketch bezieht sich auf das obige Schaltbild.

#include <IRremote.h > // Die IRremote- Library wird hier installiert
int RECV_PIN = 2;
// An Pin 2 werden die empfangenen Daten vom Infrarotsensor gesammelt
IRrecv irrecv(RECV_PIN);
// Ein IRrecv- Objekt wird definiert, das die Datenauswertung an Pin 2 möglich macht
decode_results results; // Die dekodierten Daten werden in Results gespeichert

void setup(){
Serial.begin(9600); // Die Verbindung mit dem seriellen Monitor wird möglich gemacht
irrecv.enableIRIn(); // Der Infrarotsensor wird hier initialisiert
}

void loop(){
if(irrecv.decode(&results)) {// Wenn Daten empfangen wurden
Serial.println(results.value,DEC);
// gibt den Code in Dezimalzahlen aus
irrecv.resume(); // Warte auf nächsten Wert
} }
Anzeige der Tastaturbelegungen
Ein Druck auf die Taste 1 der Infrarotfernbedienung bewirkt, dass am Serialmonitor die Zahl 16724175 ausgegeben wird. Dies ist der entschlüsselte Zahlencode, der sich hinter dieser Taste verbirgt. Wenn man die Taste dauerhaft gedrückt hält, erscheint permanent die Zahl 4294967295. Dies ist der Code, der angibt, dass eine Taste dauerhaft gedrückt wird. Diese Zahl ist unabhängig davon, welche Taste gedrückt wird. Es können aber auch noch andere Zahlen auftauchen, falls eine Taste nur ganz kurz oder pulsierend gedrückt wird. In dem Fall kann der Sensor keinen eindeutigen Wert auslesen.
Tastatur Zahlencode
0 16738455
1 16724175
2 16718055
3 16716045
4 16716015
5 16726215
6 16734885
7 16728765
8 16730805
9 16732845
Tastatur Zahlencode
0 16750695
1 16753245
2 16736925
3 16769565
4 16720605
5 16712445
6 16761405
7 16769055
8 16754775
9 16748655
Pfeil nach oben 16718055
Pfeil nach links 16716015
Pfeil nach rechts 16734885
Pfeil nach unten 16730805
ok 16726215
2. Sketch
Mit diesem Sketch wird eine LED ein- bzw. ausgeschaltet.

#include
int RECV_PIN = 2;
Irrecv irrecv(RECV_PIN);
decode_results results;

void setup(){
pinMode(13,OUTPUT);
//Pin 13 als Ausgang definieren für die LED
irrecv.enableIRIn();}

void loop() {
if(irrecv.decode(&results)) {
if(results.value == 16718055)
// Wenn der Sensor die Zahl 16718055 empfängt - entspricht Pfeil hoch
{digitalWrite(13,HIGH);} // mache LED an
if(results.value == 16730805)
// Wenn der Sensor die Zahl 16730805 empfängt - entspricht Pfeil runter
{digitalWrite(13,LOW);} // mache LED aus
irrecv.resume(); // Warte auf nächsten Wert
} }