Inhalt
Infrarot-Fernbedienung und Empfänger
Infrarotes Licht und Fernbedienungen
Infrarot-Fernbedienungen senden ein für uns unsichtbares Licht „durch die Luft“. Der Empfänger nimmt die Lichtsignale auf und wandelt sie in einen Zahlencode um. Dieser Zahlencode kann viele Geräte steuern.
Beispiele für die Verwendung von Infrarot-Fernbedienungen
- Lautstärke ändern und Programme bei Fernsehern wechseln
- Temperatur bei Heizkörperthermostaten ändern
- Garagentore öffnen und schließen
- Steckdosen ein- und ausschalten
Infrarotempfänger und Fernbedienung
Der Schaltplan für den Infrarot-Empfänger
Pinbelegung des Empfängers VS1838B
Auswertung der Zahlencodes des Infrarot-Empfängers VS1838B
Das infrarote Licht wird vom Empfänger erkannt. Der Empfänger enthält eine Fotodiode, das aufgefangene Licht wird in einen Zahlencode umgewandelt.
Dieser Zahlencode wird abgefragt und kann dann anschließend eine Aktion auslösen.
Das Programm
Bibliothek IRremote installieren
Bevor du mit der eigentlichen Programmierung beginnen kannst, musst du eine Bibliothek installieren.
Für die Programmierung wird die Bibliothek IRremote verwendet.Sie muss über den Bibliotheksverwalter installiert werden:
Sketch -> Bibliothek einbinden -> Bibliotheken verwalten
Tastencodes abfragen und im Seriellen Monitor anzeigen
Wird eine Taste auf der Fernbedienung gedrückt, zeigt der Seriellen Monitor den Tastencode an.
Vorher musst du den Seriellen Monitor starten:
Entweder über das Menü …
… oder über das Icon in der oberen Leiste:
Ausgabe im Seriellen Monitor
Das Programm für die Abfrage der Tastencodes
// benötigte Bibliothek einbinden
# include
// der Pin, an dem der Infrarot-Empfänger angeschlossen ist
int EmpfaengerPin = 11;
void setup()
{
// Seriellen Monitor starten
Serial.begin(9600);
// Infrarot-Empfänger starten
IrReceiver.begin(EmpfaengerPin);
}
void loop()
{
// decode() -> Daten lesen
if (IrReceiver.decode())
{
// kurzes delay, damit nur ein Tastendruck gelesen wird
delay(200);
// resume -> nächsten Wert lesen
IrReceiver.resume();
/*
der Empfänger empfängt zwischendurch Signale,
die nicht ausgewertet werden können
es sollen dehalb nur die korrekt erkannten Tasten ausgewertet werden
die Dezimalwerte der korrekten erkannten Tasten liegen zwischen > 0 und < 95
es wird abgefragt, ob das empfangene Kommando decodedIRData.command
zwischen 0 und (&&) 95 liegt
*/
if (IrReceiver.decodedIRData.command > 0 && IrReceiver.decodedIRData.command < 95)
{
Serial.print("Dezimalwert: ");
// IrReceiver.decodedIRData.command = Wert der gedrückten Taste
Serial.print(IrReceiver.decodedIRData.command);
Serial.print(" -> ");
// Werte abfragen und anzeigen
if (IrReceiver.decodedIRData.command == 69) Serial.println("A");
if (IrReceiver.decodedIRData.command == 70) Serial.println("Pfeil oben");
if (IrReceiver.decodedIRData.command == 71) Serial.println("B");
if (IrReceiver.decodedIRData.command == 68) Serial.println("Pfeil links");
if (IrReceiver.decodedIRData.command == 64) Serial.println("X");
if (IrReceiver.decodedIRData.command == 67) Serial.println("Pfeil rechts");
if (IrReceiver.decodedIRData.command == 7) Serial.println("0");
if (IrReceiver.decodedIRData.command == 21) Serial.println("Pfeil unten");
if (IrReceiver.decodedIRData.command == 9) Serial.println("C");
if (IrReceiver.decodedIRData.command == 22) Serial.println("1");
if (IrReceiver.decodedIRData.command == 25) Serial.println("2");
if (IrReceiver.decodedIRData.command == 13) Serial.println("3");
if (IrReceiver.decodedIRData.command == 12) Serial.println("4");
if (IrReceiver.decodedIRData.command == 24) Serial.println("5");
if (IrReceiver.decodedIRData.command == 94) Serial.println("6");
if (IrReceiver.decodedIRData.command == 8) Serial.println("7");
if (IrReceiver.decodedIRData.command == 28) Serial.println("8");
if (IrReceiver.decodedIRData.command == 90) Serial.println("9");
}
}
}
LED mit der Fernbedienung steuern
Die Schaltung wird mit einer LED an Pin 7 erweitert.
Die LED wird eingeschaltet, wenn die Taste 1 der Fernbedienung gedrückt wird, Taste 2 schaltet die LED wieder aus.
Der Schaltplan
Das Programm im Film
Der Programmcode
# include
int EmpfaengerPin = 11;
// Pin der LED
int LED = 7;
void setup() {
IrReceiver.begin(EmpfaengerPin);
pinMode(LED, OUTPUT);
}
void loop()
{
// Daten lesen
if (IrReceiver.decode())
{
// nächsten Wert lesen
IrReceiver.resume();
if (IrReceiver.decodedIRData.address == 0)
{
// Taste 1 -> gelesener Deizimalwert 22 -> LED einschalten
if (IrReceiver.decodedIRData.command == 22) digitalWrite(LED, HIGH);
// Taste 2 -> gelesener Deizimalwert 25 -> LED ausschalten
if (IrReceiver.decodedIRData.command == 25) digitalWrite(LED, LOW);
}
}
}
Funduino - Dein Onlineshop für Mikroelektronik
-
Dauerhaft bis zu 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.