F02 Das digitale IR-Empfangsmodul
Digital IR Receiver Module

Kommunikation

Wir wollen es nutzen, aber nicht sehen. Das IR- oder Infrarot-Licht ist dem sichtbaren Licht sehr ähnlich, nur dass es eine etwas längere Wellenlänge hat. Das bedeutet, dass IR für das menschliche Auge nicht wahrnehmbar ist - perfekt für die drahtlose Kommunikation. Sie ist eine weit verbreitete, kostengünstige und einfach zu verwendende drahtlose Kommunikationstechnologie. Sie besteht aus zwei Komponenten: aus dem IR-Sendemodul und dem IR-Empfängermodul.

 

Spezifikationen
- Signalart: digital
- Spannung: 3,3V – 5V
- Pinabstand: 2,54mm

Es gibt noch viele andere Quellen für Infrarotlicht. Alles, was Wärme ausstrahlt, strahlt auch das unsichtbare Infrarotlicht aus. Die Sonne ist die hellste IR-Quelle von allen. Es gibt aber noch viele andere: z.B. Lampen, Kerzen, Zentralheizungen oder sogar der menschliche Körper. Daher müssen einige technische Vorkehrungen getroffen werden, um zu gewährleisten, dass die IR-Botschaft fehlerfrei beim Empfänger ankommt. Die sogenannte Modulation des Signals auf einer Trägerfrequenz ist die Lösung, um das Signal aus dem Rauschen herauszuheben. Bei der Modulation lassen wir die IR-Lichtquelle auf einer bestimmten Frequenz blinken und vergeben ihm somit eine eindeutige Identität. Der IR-Empfänger wird auf diese Frequenz abgestimmt, sodass er alles andere ignorieren kann.

Ein gängiges Modulationsverfahren für die IR-Kommunikation ist die sogenannte 38-kHz-Modulation. Es gibt nur sehr wenige natürliche Quellen, die die Regelmäßigkeit eines 38-kHz-Signals aufweisen, sodass ein IR-Sender, der Daten mit dieser Frequenz sendet, aus der IR-Umgebung heraussticht. Daten-Modulierungen mit 38-kHz sind am gebräuchlichsten. Es können aber auch andere Frequenzen verwendet werden.

 

Wir brauchen eine Bibliothek

Manche Elektronik-Module benötigen eine oder mehrere Bibliotheken, um zu funktionieren. Was ist eine Bibliothek und wozu brauchen wir sie? Eine Bibliothek reduziert für uns den Programmieraufwand. Dadurch sparen wir uns sehr viel Zeit. Außerdem wird unser Sketch weitaus übersichtlicher und im Ablauf stabiler. Du kannst dir eine Bibliothek so vorstellen, dass sie zusätzlicher Code ist, der vor uns versteckt wird und im Hintergrund arbeitet. Die Bibliothek kann sehr komplex aufgebaut sein, aber das ist kein Problem für uns, da wir auf die einzelnen Funktionen mit Schlüsselwörtern zugreifen. Wir müssen den komplizierten Programmablauf nicht verstehen, sondern für uns relevante Funktionen aufrufen. Das ist das Tolle an Bibliotheken. In der Programmierung kommen Wiederholungen von Programmteilen häufig vor. Um nicht jedes Mal das Rad von neuen zu erfinden, wird Programmcode in Bibliotheken ausgelagert, um sie wiederzuverwenden. Für das IR-Empfangmodule benötigen wir eine Library. Die Installation folgt weiter unten.

 

Der Aufbau

Für den Testaufbau benötigst du einen IR-Sender z.B. eine Fernbedienung für den Fernseher oder der Musikanlage. Mit dem unteren Sketch werden wir die IR-Signale aus der Fernbedienung auslesen. Wenn du eine Taste auf deiner Fernbedienung drückst, blinkt die IR-Sende-LED für den Bruchteil einer Sekunde sehr schnell und überträgt kodierte Daten an das IR-Empfangsmodul.

 
 

Der minimal Sketch

Bevor du den Sketch auf dem Arduino nutzen kannst, musst du zunächst die Bibliothek für den IR-Empfangsmodul installieren. Andernfalls wird die Kompilierung fehlschlagen. Diese Bibliothek ist in der Lage, die modulierten IR-Signal zu decodieren und genau zu bestimmten, welche der Tasten gedrückt wurde. Das Ergebnis wird an den seriellen Monitor gesendet. Die Steuerung für dieses Modul ist aufwendig und die Bibliothek reduziert für uns den Programmieraufwand. Die Bibliothek heißt IRremote und wurde von Armin Joachimsmeyer geschrieben. Du kannst die Bibliothek innerhalb der Arduino IDE herunterladen. Öffne hierzu die Arduino IDE, gehe zu Werkzeuge, dann auf Bibliotheken verwalten.

 

Es öffnet sich der Bibliotheksverwalter, in der du nach der Datei suchen musst. Tippe in das obere rechte Textfeld das Wort irremote ein. Sobald der Eintrag auftaucht, installiere die Bibliothek mit dem Namen IRremote (siehe Abb. unten). Nach der Installation wird es im Arduinoverzeichnis unter Libraries ein Ordner mit gleichem Namen abgelegt. Darin findest du auch weitere Beispiel-Sketche.

 
 

SEHR WICHTIG: Leider kann ich aufgrund meines Highlight-Programms den Sketch nicht korrekt anzeigen. Damit der Code in der Arduino IDE funktioniert, musst du unbedingt beim Aufrufen der beiden Bibliotheken das Leerzeichen zwischen dem Pfeil links und dem Wort IRremote.h entfernen. Das ganze sollte folgendermaßen aussehen:

#include <IRremote.h>

Kopiere den unteren Sketch, füge ihn in die Arduino IDE ein und lade ihn auf das Arduino-Board rauf.

/********************************************************
F02 Das digitale IR-Empfangsmodul
Der Minimal Sketch
Mr Robot UXSD / www.mrrobotuxsd.com
*********************************************************/

#include < IRremote.h>  //rufe die IR-Bibliothek auf
const int irPin = 11;   //das Empfängermodul wird an Pin 11 angeschlossen
IRrecv irrecv(irPin);   //Erzeugt eine Variable vom Typ IRrecv
decode_results results; //Funktion zum dekodieren des empfangenen IR-Signals

void setup()
{
  Serial.begin(9600);  //Initialisiere Serielle Kommunikation mit 9600 Bits pro Sekunde:
  irrecv.enableIRIn(); //das IR-Empfangsmodul aktivieren
}

void loop() 
{
  if (irrecv.decode(&results)) //sobald das IR-Empfangsmodul Daten empfängt
  {  
    Serial.print("Der IR-Code: "); //sende Text    
    Serial.println(results.value, HEX); //sende das Lese-Ergebnis in Hexadezimal 
    irrecv.resume();    //Empfangen des nächsten Wertes 
  }  
  
  delay(500); //kleine Verzögerung, um das Mehrfachlesen zu reduzieren
}
 

Schalte den seriellen Monitor ein, indem du in der Arduino IDE in der Menüleiste auf Werkzeuge > Serieller Monitor gehst. Du solltest nun die folgende Anzeige sehen:

 

Der Sketch im Detail

Mit der Zeile #include <IRremote.h> bekommen wir Zugriff auf die IR-Library.

#include < IRremote.h>  //rufe die IR-Bibliothek auf
 

In der Variable irPin speichern wir den Pin 11, der mit dem Empfängermodul verbunden ist und geben ihm mit der Funktion IRrecv irrecv Zugang zur Bibliothek.

const int irPin = 11;   //das Empfängermodul wird an Pin 11 angeschlossen
IRrecv irrecv(irPin);   //Erzeugt eine Variable vom Typ IRrecv
 

Die Funktion decode_results sorgt für die Dekodierung des empfangenen IR-Signals und speichert das Ergebnis in die Variable results.

decode_results results; //Funktion zum dekodieren des empfangenen IR-Signals
 

In void setup wird zum einen mit Serial.begin(9600) der serielle Monitor eingerichtet und zum anderen wird mit irrecv.enableIRIn() die Initialisierung zum Empfang von IR-Signalen vorbereitet.

Serial.begin(9600);  //Initialisiere Serielle Kommunikation mit 9600 Bits pro Sekunde:
irrecv.enableIRIn(); //das IR-Empfangsmodul aktivieren
 

Die Funktion irrecv.decode(&results) dekodiert das empfangene IR-Signal und speichert es in der Variablen results. Sie gibt 0 zurück, wenn nichts empfangen wurde. Der entscheidende Code-Teil ist results.value. Diese Variable enthält das Leseergebnis des IR-Signals. Mit der HEX-Angabe wird ein 6-stelliger Hexcode auf dem seriellen Monitor ausgegeben. Die Library dekodiert automatisch den Typ der Fernbedienung, die du verwendest, und erkennt, welche Taste auf der Fernbedienung gedrückt wird. Öffne den seriellen Monitor in der Arduino IDE bei 9600bps und drücke verschiedene Tasten auf deiner Fernbedienung. Pro Taste wird ein eindeutiger Code ausgegeben. Die letzte Zeile innerhalb der if-Abfrage irrecv.resume() sorgt für das Empfangen des nächsten Wertes.

if (irrecv.decode(&results)) //sobald das IR-Empfangsmodul Daten empfängt
  {  
    Serial.print("Der IR-Code: "); //sende Text    
    Serial.println(results.value, HEX); //sende das Lese-Ergebnis in Hexadezimal 
    irrecv.resume();    //Empfangen des nächsten Wertes 
  }

Mit der Variable results.value kannst du in deinen Projekten bestimmen, welcher Taster gedrückt wurde und damit andere Module ansteuern. Zum Beispiel kannst du mit den Zahlen 0-9 die Geschwindigkeit eines Motors verändern.

 

Die delay-Funktion sorgt dafür, dass eine Mehrfachauslösung der gedrückten Taste auf der Fernbedienung reduziert wird.

delay(500); //kleine Verzögerung, um das Mehrfachlesen zu reduzieren
 
 

Falls du die hier beschriebenen Elektronik-Module nicht hast kannst du sie in meiner Einkaufsliste finden. Warum ich selber hauptsächlich mit Modulen der Marke Keyestudio arbeite erläutere ich unter diesem Blog-Artikel.

In dieser Übersicht äußere ich Empfehlungen aller Art.

Hier kommst du wieder zur Übersicht aller Module.