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
- Klicken Sie hier, um die IRremote-Bibliothek herunterzuladen . Sie sollten einen .zip-Ordner in Ihren Downloads haben
- Entpacken Sie den .zip-Ordner und Sie sollten den Ordner IRremote-master erhalten.
- Benennen Sie Ihren Ordner um von
IRremote-Masterzu IRremote - Verschieben Sie den Ordner IRremote in den Ordner mit den Installationsbibliotheken der Arduino IDE.
- Ö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:
- LED1 – EIN
- LED1 – AUS
- LED2 – EIN
- LED2 – AUS
- LED3 – EIN
- 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
}