Nr.12 Fernbedienung

Inhaltsverzeichnis

Eine Infrarotfernbedienung zur Ansteuerung von Arduino Mikrocontrollern verwenden

Funduino Infrarotfernbedienung
Funduino Infrarotfernbedienung

Mithilfe eines Infrarotempfängers kann das Arduinoboard die Befehle einer Infrarotfernbedienung auswerten. Die Daten werden dabei in Form von Infrarotlicht von der Fernbedienung zum Empfänger gesendet. Da unser Auge dieses Licht nicht wahrnehmen kann, können wir dieses Licht nicht sehen.

Mit einem kleinen Trick kann man jedoch testen, ob bspw. eine Fernbedienung ein Infrarotsignal sendet. Dazu nimmt man eine Digitalkamera (etwa die vom Smartphone) und betrachtet über das Display die Infrarotdiode. Wenn nun die Fernbedienung betätigt wird, kann man die Infrarotdiode leuchten sehen. Das liegt daran, dass die Sensoren von Digitalkameras das Infrarotlicht wahrnehmen und darstellen können. Das Licht flackert leicht, da die Infrarotdiode rasant an- und ausgeht. Dahinter verbirgt sich ein ganz bestimmter Rhythmus, anhand dessen der Infrarotempfänger später auswerten kann, welche Taste an der Fernbedienung gedrückt wurde.

Der Schaltplan

HINWEIS: Die nachfolgende Fritzing-Skizze ist ausschließlich für den Infrarotsensor VS1838B vorgesehen. Du kannst den Typ des deines vorliegenden Sensors 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 Library „iRremote“ von Ken Shirriff in der Version 2.2.3 benötigt. Die passende Version muss im Bibliotheksverwalter vor der Installation ausgewählt werden, da ansonsten die aktuellste Version installiert wird. Die Befehle in unserer Anleitung basieren jedoch auf die Version 2.2.3. Die Programmbibliothek kann im Bibliotheksverwalter mit dem Suchbegriff „irremote“ gefunden und installiert werden.

Eine Anleitung zur Installation einer Bibliothek über den Bibliotheksverwalter befindet sich im Theorieteil zu unseren Anleitungen. Dieser Sketch ist eine leichte Abwandlung des Sketches „IRrecvDemo“, welcher sich nach Installation der Library in der Arduino Software unter den Beispielen finden lässt.

Dieser Sketch ist sehr kurz gehalten und bietet sich daher optimal für die ersten Versuche an.

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 <IRremote.h>   // 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
}
}

Zusätzliche Erklärungen des Programmcodes

  • 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 gerückt wird. In dem Fall kann der Sensor keinen eindeutigen Wert auslesen.

Anmerkung unseres Forenbenutzers „HL“ :

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

  • 16730805, 16769055: null           
  • 16738455, 16738455: eins
  • 16750695, 16750695: zwei          
  • 16756815, 16756815: drei
  • 16724175, 16724175: vier           
  • 16724175, 16718055: fünf
  • 16743045, 16743045: sechs       
  • 16716015, 16716015: sieben
  • 16726215, 16726215: acht         
  • 16726215, 16734885: neun
  • 16712445, 16712445: ok
  • 16728765: *
  • 16728765: 
  • 16736925, 16736925: Pfeil hoch   
  • 16754775, 16754775: Pfeil runter  
  • 16761405, 16761405: Pfeil rechts >
  • 16720605, 16720605: Pfeil links <
  • 16753245: A
  • 16769565: B
  • 16748655: C

Erweiterung: LED-Steuerung mit Tastendruck

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

Der Programmcode

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()

{

Serial.begin(9600);

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

digitalWrite(13, LOW);    //Diese soll zunächst aus sein

irrecv.enableIRIn();

}

void loop() {

if (irrecv.decode(&results)) {

Serial.println(results.value, DEC);

if (results.value == 16724175)   //Wenn der Infrarotempfänger die Zahl 
//„16724175“ ausgelesen hat (Entsprechend der Taste“1“ der Fernbedienung)


{digitalWrite (13, HIGH);}   //soll die LED an gehen.

if (results.value == 16718055)   //Wenn der Infrarotempfänger die Zahl 
//„16718055“ ausgelesen hat (Entsprechend der Taste“2“ der Fernbedienung), 

{digitalWrite (13, LOW);}  //soll die LED aus gehen.

irrecv.resume();

}

}

Funduino - Dein Onlineshop für Mikroelektronik

  • Dauerhaft 10% Rabatt für Schüler, Studenten und Lehrkräfte
  • Mehr als 3.500 Artikel sofort verfügbar!
  • Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.
SALE