1.Einführung

Eine Infrarotfernbedienung zur Ansteuerung von Arduino Mikrocontrollern verwenden

Ein Arduinoboard kann mithilfe eines Infrarotempfängers die Signale einer Infrarotfernbedienung verstehen. Diese Signale werden in Form von unsichtbarem Infrarotlicht von der Fernbedienung zum Empfänger gesendet.

Es gibt einen einfachen Trick, um zu testen, ob eine Fernbedienung Infrarotsignale sendet. Man kann eine Digitalkamera verwenden, zum Beispiel die Kamera eines Smartphones. Wenn man die Infrarotdiode der Fernbedienung durch das Display der Kamera betrachtet und dann die Fernbedienung benutzt, kann man sehen, wie die Infrarotdiode aufleuchtet. Das liegt daran, dass die Sensoren der Digitalkamera das Infrarotlicht erkennen und anzeigen können. Das Licht flackert leicht, weil die Infrarotdiode schnell ein- und ausschaltet. Dieser Wechsel zwischen An- und Ausschalten hat einen bestimmten Rhythmus, den der Infrarotempfänger später verwenden kann, um zu erkennen, welche Taste auf der Fernbedienung gedrückt wurde.

 

2.Der Schaltplan

Hinweis: Die folgende Fritzing-Skizze ist speziell für den Infrarotsensor VS1838B konzipiert. Die Bezeichnung deines vorliegenden Sensors kannst du auf der Rückseite des Sensors ablesen.



Verkabelung mit dem Infrarotsensor Typ VS1838B (Sensor → UNO R3)

Pin S: Pin D11
Mittlerer Pin: 5V
Pin –: GND

Für die Programmierung wird die Bibliothek "iRremote" von Ken Shirriff in der Version 2.2.3 benötigt. Bitte beachten Sie, dass die entsprechende Version im Bibliotheksverwalter ausgewählt werden muss, bevor Sie mit der Installation fortfahren. Andernfalls wird automatisch die neueste Version installiert, was zu Inkompatibilitäten mit den Befehlen in unserer Anleitung führen kann. Die Befehle in unseren Anleitungen basieren speziell auf der Version 2.2.3. Die Programmbibliothek kann im Bibliotheksverwalter mithilfe des Suchbegriffs "irremote" gefunden und installiert werden.

Eine detaillierte Anleitung zur Installation einer Bibliothek über den Bibliotheksverwalter finden Sie im Theorieteil unserer Anleitungen. Dieser Sketch basiert auf einer leichten Abwandlung des Sketches "IRrecvDemo", der nach der Installation der Bibliothek in der Arduino-Software unter den Beispielprojekten zu finden ist.

Dieser Sketch ist bewusst kurz gehalten und eignet sich daher optimal für erste Versuche und Experimente.

 

 3.Der Programmcode


/*
* IRremote: IRrecvDemo - demonstrates
receiving IR codes with IRrecv
* An IR detector/demodulator must be
connected to the input RECV_PIN.
* Version 0.1 July, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/   
//Infromationen über das ursprüngliche Programm „IrrecvDemo“.

#include    // Das Programm greift an dieser Stelle auf eine „Library“ zurück. Das erleichtert einem viel Arbeit. Denn das Infrarotlicht wird mit einem Code verschlüsselt gesendet. Um diesen Code selber auszulesen und in passende Werte umzuwandeln, wären sehr viele Zeilen Code erforderlich.


int RECV_PIN = 11;  //  Der Kontakt der am Infrarotsensor die Daten ausgibt, wird mit Pin 11 des Arduinoboards verbunden.

IRrecv irrecv(RECV_PIN);   // An dieser Stelle wird ein Objekt definiert, dass den Infrarotsensor an Pin 11 ausliest.

decode_results results;  // Dieser Befehl sorgt dafür, dass die Daten, die per Infrarot eingelesen werden unter „results“ abgespeichert werden.

void setup()
{

Serial.begin(9600);    //Im Setup wird die Serielle Verbindung gestartet, damit man sich die Empfangenen Daten der Fernbedienung per seriellen Monitor ansehen kann.

pinMode (13, OUTPUT);

irrecv.enableIRIn();   //Dieser Befehl initialisiert den Infrarotempfänger.

}

void loop()

{   //Der loop-Teil fällt durch den Rückgriff auf die „library“ sehr kurz aus. 

if (irrecv.decode(&results)) {    //Wenn Daten empfangen wurden,

Serial.println(results.value, DEC); //werden sie als Dezimalzahl (DEC) an den Serial-Monitor ausgegeben.

irrecv.resume();  //Der nächste Wert soll vom IR-Empfänger eingelesen werden
}
}

 

3.1.Zusätzliche Erklärungen des Programmcodes

- Wenn die Taste "1" auf der Infrarotfernbedienung gedrückt wird, wird die Zahl "16724175" auf dem Seriellen Monitor ausgegeben. Dies ist der entschlüsselte Zahlencode, der dieser Taste zugeordnet ist.

- Wenn eine Taste dauerhaft gedrückt wird, wird permanent die Zahl "4294967295" angezeigt. Dieser Code zeigt an, dass eine Taste dauerhaft gedrückt wird. Die spezifische Taste ist dabei unabhängig.

- Es können auch andere Zahlen auftreten, wenn eine Taste nur sehr kurz oder pulsierend gedrückt wird. In diesem Fall kann der Sensor keinen eindeutigen Wert erkennen.

Hinweis von unserem Forenbenutzer "HL":

Die Codes der Fernbedienung können variieren. Die aktuell im Lernset enthaltene Fernbedienung verwendet folgende Codes:

- "null": 16730805, 16769055

- "eins": 16738455, 16738455

- "zwei": 16750695, 16750695

- "drei": 16756815, 16756815

- "vier": 16724175, 16724175

- "fünf": 16724175, 16718055

- "sechs": 16743045, 16743045

- "sieben": 16716015, 16716015

- "acht": 16726215, 16726215

- "neun": 16726215, 16734885

- "ok": 16712445

- "*": 16728765

- "#": 16728765

- "Pfeil hoch": 16736925, 16736925

- "Pfeil runter": 16754775, 16754775

- "Pfeil rechts >": 16761405, 16761405

- "Pfeil links <": 16720605, 16720605

- "A": 16753245

- "B": 16769565

- "C": 16748655

 

4.Erweiterung: LED-Steuerung mit Tastendruck

Aufgabe: Beim Drücken der Taste “1“ soll eine LED angehen und beim Drücken der Taste “2“ soll die LED ausgehen.

 

4.1. Der Programmcode


Serial.begin(9600);  // Die serielle Kommunikation wird mit einer Baudrate von 9600 gestartet.

pinMode(13, OUTPUT);  // An Pin 13 wird eine LED angeschlossen.

digitalWrite(13, LOW);  // Die LED wird zunächst ausgeschaltet.

irrecv.enableIRIn();  // Der Infrarotempfänger wird aktiviert.

}

void loop() {

if (irrecv.decode(&results)) {  // Wenn Daten vom Infrarotempfänger empfangen wurden,

Serial.println(results.value, DEC);  // wird der empfangene Wert als Dezimalzahl auf dem Seriellen Monitor ausgegeben.

if (results.value == 16724175) {  // Wenn der empfangene Wert 16724175 entspricht (was der Taste "1" auf der Fernbedienung entspricht),

digitalWrite(13, HIGH);  // wird die LED eingeschaltet.

}

if (results.value == 16718055) {  // Wenn der empfangene Wert 16718055 entspricht (was der Taste "2" auf der Fernbedienung entspricht),

digitalWrite(13, LOW);  // wird die LED ausgeschaltet.

}

irrecv.resume();  // Der Infrarotempfänger wird für den Empfang des nächsten Signals vorbereitet.

}

}