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.

Der Infrarotempfänger ist die in der Abbildung unten gezeigte Komponente.

1.Das Projekt

Erforderliche Teile

Um dieses Projekt durchführen zu können, benötigen Sie die folgenden Teile:

  • Microcontroller
  • 1x Steckbrett
  • 1x Fernbedienung
  • 1x IR-EMpfänger 
  • 3x LEDs
  • 3x 220 Ohm Widerstände
  • Überbrückungdrähte

Pins des Infrarot-Empfängers:

  • Erster Pin: GND
  • Zweiter Pin: Vcc
  • Dritter Pin: Pin 7

In diesem Projekt verwenden Sie einen Infrarot-Empfänger (IR) und einen Arduino, um 3 LEDs mit einer Fernbedienung zu steuern. Dies ist nützlich, um alte Fernbedienungen wiederzuverwenden oder einigen Tasten Ihrer Fernbedienung neue Funktionen zu verleihen.

Dieses Projekt gliedert sich in zwei Teile:

1.Sie dekodieren die von Ihrer Fernbedienung gesendeten IR-Signale

2.Sie verwenden diese Informationen, um eine Aufgabe mit Ihrem Arduino auszuführen (3 LEDs steuern)

1.1.Dekodierung der IR-Signale

Wenn Sie Ihre Fernbedienung drücken, sendet sie infrarotmodulierte Signale. Diese Signale enthalten Informationen, die Ihr Empfänger sammelt.Jeder Button sendet bestimmte Informationen. Daher können wir diese Informationen einem bestimmten Button zuordnen. In diesem Teil des Projekts müssen Sie die mit jeder Taste verknüpften IR-Signale dekodieren.

1.1.1 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.



 1.1.2.Der Programmcode

Um den IR-Empfänger zu steuern, müssen Sie die IRremote-Bibliothek   in der Arduino IDE installieren. 

Installieren der IRremote-Bibliothek

  1. Klicken Sie hier, um die IRremote-Bibliothek herunterzuladen . Sie sollten einen .zip-Ordner in Ihren Downloads haben
  2. Entpacken Sie den .zip-Ordner und Sie sollten  den Ordner  IRremote-master erhalten.
  3. Benennen Sie Ihren Ordner um von IRremote-Master zu  IRremote
  4. Verschieben Sie den  Ordner IRremote  in den Ordner mit den Installationsbibliotheken der Arduino IDE.
  5. Öffnen Sie abschließend Ihre Arduino IDE erneut

Kopieren Sie den folgenden Code in Ihre Arduino IDE und laden Sie ihn auf Ihr Arduino-Board hoch. Stellen Sie sicher, dass Sie das richtige Board und den richtigen COM-Port ausgewählt haben.

oder 

 

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.


/*
 * IRremote: IRrecvDemo - demonstriert das Empfangen von IR-Codes mit IRrecv
 * Ein IR-Detektor/Demodulator muss mit dem Eingangs-Pin RECV_PIN verbunden sein.
 * Version 0.1 Juli, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */

#include 

int RECV_PIN = 11; // IR-Empfangs-Pin

IRrecv irrecv(RECV_PIN); // Initialisierung des IR-Empfängers

decode_results results; // Variable für die Ergebnisse des IR-Empfängers

void setup()
{
  Serial.begin(9600); // Serielle Kommunikation mit 9600 Baud starten
  irrecv.enableIRIn(); // Empfänger aktivieren
}

void loop() {
  if (irrecv.decode(&results)) { // Wenn ein IR-Signal empfangen wird
    Serial.println(results.value, HEX); // Signalwert im HEX-Format ausgeben
    irrecv.resume(); // Nächstes Signal empfangen
  }
  delay(100); // 100 ms Verzögerung
}

Öffnen Sie den seriellen Monitor mit einer Baudrate von 9600.

In diesem Projekt möchten Sie 3 LEDs steuern. Wählen Sie 6 Tasten für die folgenden Aufgaben:

  1. LED1 – EIN
  2. LED1 – AUS
  3. LED2 – EIN
  4. LED2 – AUS
  5. LED3 – EIN
  6. LED3 – AUS

Drücken Sie beispielsweise die Taste 1 Ihrer Fernbedienung. Sie sollten einen Code auf dem seriellen Monitor sehen. Drücken Sie dieselbe Taste mehrmals, um sicherzustellen, dass Sie den richtigen Code für diese Taste haben. Wenn Sie etwas wie FFFFFFFF sehen, ignorieren Sie es, es ist Müll.

Machen Sie dasselbe für die anderen Schaltflächen.

Notieren Sie sich den Code, der den einzelnen Schaltflächen zugeordnet ist, da Sie diese Information später benötigen.

1.2. Aufbau der endgültigen Schaltung

In diesem Teil bauen Sie den Schaltkreis mit drei LEDs, die mit Ihrer Fernbedienung gesteuert werden.

1.2.1. Schaltplan



1.2.2.Der Programmcode

Nehmen Sie nun die Codes zur Hand, die Sie im vorherigen Schritt erfasst haben. Sie müssen Ihre Codes von Hex in Dezimal umwandeln.

 

Dazu können Sie die folgende Website verwenden:  www.binaryhexconverter.com/hex-to-decimal-converter

Hier ist ein Konvertierungsbeispiel für einen meiner Codes:

Wiederholen Sie diesen Vorgang für alle Ihre Hex-Werte und speichern Sie die  Dezimalwerte  . Diese müssen Sie im folgenden Code ersetzen.

Laden Sie die folgende Skizze herunter oder kopieren Sie sie in Ihre Arduino IDE.  Schreiben Sie Ihre eigenen Dezimalwerte in die Skizze in den Fallzeilen und laden Sie sie auf Ihr Arduino -  Board hoch. Stellen Sie sicher, dass Sie das richtige Board und den richtigen COM-Port ausgewählt haben.


/*
 * Geändert von Rui Santos, http://randomnerdtutorials.com
 * Basierend auf der IRremote-Bibliothek - Ken Shirriff
*/

#include 
 
int IR_Recv = 11;   // IR-Empfänger-Pin 11
int bluePin = 10;   // Pin für blaue LED
int greenPin = 9;   // Pin für grüne LED
int yellowPin = 8;  // Pin für gelbe LED
 
IRrecv irrecv(IR_Recv); // Initialisierung des IR-Empfängers
decode_results results; // Variable für die Ergebnisse des IR-Empfängers
 
void setup(){
  Serial.begin(9600);  // Startet die serielle Kommunikation
  irrecv.enableIRIn(); // Aktiviert den IR-Empfänger
  pinMode(bluePin, OUTPUT);      // Legt den digitalen Pin als Ausgang fest
  pinMode(greenPin, OUTPUT);     // Legt den digitalen Pin als Ausgang fest
  pinMode(yellowPin, OUTPUT);    // Legt den digitalen Pin als Ausgang fest
}
 
void loop(){
  // Dekodiert die Infraroteingabe
  if (irrecv.decode(&results)){
    long int decCode = results.value; // Speichert den Wert des Signals
    Serial.println(results.value);   // Gibt den Signalwert aus
    // switch-case-Struktur für die Nutzung der ausgewählten Fernbedienungstaste
    switch (results.value){
      case 551520375: // Wenn die Taste 1 gedrückt wird
        digitalWrite(bluePin, HIGH); // Schaltet die blaue LED ein
        break;   
      case 551495895: // Wenn die Taste 4 gedrückt wird
        digitalWrite(bluePin, LOW);  // Schaltet die blaue LED aus
        break;
       case 551504055: // Wenn die Taste 2 gedrückt wird
        digitalWrite(greenPin, HIGH); // Schaltet die grüne LED ein
        break;           
       case 551528535: // Wenn die Taste 5 gedrückt wird
        digitalWrite(greenPin, LOW);  // Schaltet die grüne LED aus
        break;       
       case 551536695: // Wenn die Taste 3 gedrückt wird
        digitalWrite(yellowPin, HIGH); // Schaltet die gelbe LED ein
        break;       
       case 551512215: // Wenn die Taste 6 gedrückt wird
        digitalWrite(yellowPin, LOW);  // Schaltet die gelbe LED aus
        break;
    }
    irrecv.resume(); // Empfängt den nächsten Wert von der gedrückten Taste
  }
  delay(10); // Kleine Verzögerung, um die Stabilität zu gewährleisten
}