Was ist IR (Infrarot) und wie funktioniert es?
Infrarot (IR) ist eine Art von unsichtbarem Licht, das für das menschliche Auge nicht sichtbar ist. Es hat eine Wellenlänge, die länger als sichtbares Licht, aber kürzer als Mikrowellen ist. IR wird häufig in der Kommunikation verwendet, zum Beispiel in Fernbedienungen.
Wie funktioniert IR mit Arduino?
In Arduino-Projekten wird ein IR-Empfänger verwendet, um Infrarot-Signale zu empfangen, die von einer Fernbedienung gesendet werden. Diese Signale werden dann dekodiert und die entsprechenden Aktionen ausgeführt, wie das Ein- oder Ausschalten einer LED oder das Steuern von Motoren.
Ein IR-Empfänger liest die von einer Fernbedienung ausgestrahlten IR-Codes, die Informationen in Form von Lichtimpulsen enthalten. Arduino kann diese Codes verarbeiten und darauf reagieren.
Wo findet man IR im Alltag?
- Fernbedienungen: Die gängigste Verwendung von IR im Alltag ist in Fernbedienungen, die Geräte wie Fernseher und Klimaanlagen steuern.
- Sensoren: Infrarot wird auch in Bewegungssensoren oder Abstandsmessgeräten verwendet.
IR bietet eine einfache Möglichkeit, Geräte ohne Kabel oder sichtbare Verbindungen zu steuern, was es zu einer beliebten Technologie in vielen Geräten des täglichen Lebens macht.
Die Schaltung
Die Code:
#include
IRrecv irrecv(7); // IR-Empfänger-Objekt, an Pin 7 angeschlossen
void setup() {
Serial.begin(9600); // Seriellen Monitor starten
irrecv.enableIRIn(); // IR-Empfänger aktivieren
}
void loop() {
if (irrecv.decode()) { // Wenn ein IR-Signal empfangen wird
Serial.println(irrecv.decodedIRData.decodedRawData, HEX); // Den IR-Code im Hexadezimalformat ausgeben
irrecv.resume(); // Bereit für das nächste Signal
delay(1500); // 1,5 Sekunden warten, bevor das nächste Signal verarbeitet wird
}
}
Um ein IR-Signal von einer Fernbedienung zu lesen, müssen wir den Arduino so programmieren, dass er das Infrarotsignal empfängt und dekodiert. Der folgende Code wird verwendet, um das IR-Signal von einer Fernbedienung zu empfangen und den Hexadezimalwert des Signals auf dem seriellen Monitor anzuzeigen. Dies hilft uns, den Code für die Steuerung des Arduino zu erhalten.
Code Erklärung:
1.IRremote Bibliothek einbinden: Zuerst müssen wir die IRremote-Bibliothek in unseren Arduino-Code einfügen. Diese Bibliothek hilft uns, die IR-Signale zu empfangen und zu dekodieren.
2.IR-Empfänger konfigurieren: Wir verbinden den IR-Empfänger mit einem bestimmten Pin des Arduinos (z.B. Pin 7) und konfigurieren ihn im Code.
3.Serielle Kommunikation einrichten: Wir aktivieren die serielle Kommunikation, um die empfangenen IR-Codes im Hexadezimalformat an den seriellen Monitor zu senden. Dies hilft uns zu sehen, welche Tasten auf der Fernbedienung gedrückt werden.
4.Signal empfangen und dekodieren: Wenn das IR-Signal empfangen wird, wird es dekodiert und der Hexadezimalwert des Signals wird auf dem seriellen Monitor angezeigt. So können wir die spezifischen Codes für jede Taste auf der Fernbedienung ermitteln.
Funktionsweise:
- Bibliothek einbinden: Die IRremote-Bibliothek wird eingebunden, um IR-Signale zu empfangen und zu dekodieren.
- Pin definieren: Der Pin, an den der IR-Empfänger angeschlossen ist, wird im Code definiert (hier Pin 7).
- Signal dekodieren: Der Arduino wartet auf ein Signal vom IR-Empfänger. Wenn ein Signal empfangen wird, wird es dekodiert und auf dem seriellen Monitor im Hexadezimalformat angezeigt.
- Serielle Ausgabe: Auf dem seriellen Monitor können wir sehen, welcher Hexadezimalwert für die gedrückte Taste auf der Fernbedienung empfangen wurde.
Anwendung:
- Wenn wir diesen Code ausführen und eine Taste auf der Fernbedienung drücken, zeigt der serielle Monitor den entsprechenden Hexadezimalwert des Signals an.
- Diese Werte können dann verwendet werden, um spezifische Aktionen im Arduino-Programm auszulösen, wie das Ein- oder Ausschalten von LEDs oder das Steuern anderer Komponenten.
Erklärung des Codes zum Empfangen von IR-Signalen
Dieser Arduino-Code zeigt, wie man mit einem IR-Empfänger Infrarot-Signale (IR) von einer Fernbedienung empfängt und die empfangenen Daten im Hexadezimalformat auf dem seriellen Monitor ausgibt.
1. Bibliothek einbinden:
Zuerst wird die IRremote-Bibliothek eingebunden. Diese Bibliothek hilft dabei, IR-Signale zu empfangen, zu dekodieren und die entsprechenden Daten zu extrahieren.
#include
2. IR-Empfänger definieren:
Der IR-Empfänger wird als Objekt mit dem Namen irrecv
erstellt. Der Pin 7 des Arduinos wird für den Anschluss des IR-Empfängers verwendet.
IRrecv irrecv(7); // IR-Empfänger an Pin 7
3. Setup-Funktion:
In der setup()
-Funktion wird die serielle Kommunikation gestartet (mit einer Baudrate von 9600), sodass wir die empfangenen IR-Daten im seriellen Monitor anzeigen können. Außerdem wird der IR-Empfänger aktiviert.
void setup() {
Serial.begin(9600); // Seriellen Monitor starten
irrecv.enableIRIn(); // IR-Empfänger aktivieren
}
4. Loop-Funktion:
In der loop()
-Funktion wartet der Arduino kontinuierlich auf ein IR-Signal. Wenn ein Signal empfangen wird, wird der Hexadezimalwert des Signals auf dem seriellen Monitor ausgegeben.
irrecv.decode()
: Diese Funktion überprüft, ob ein IR-Signal empfangen wurde.irrecv.decodedIRData.decodedRawData
: Dies gibt den empfangenen Hexadezimalcode des IR-Signals zurück.Serial.println()
: Gibt den empfangenen Hex-Code auf dem seriellen Monitor aus.irrecv.resume()
: Bereitet den IR-Empfänger auf den Empfang des nächsten Signals vor.delay(1500)
: Es wird eine kurze Pause von 1,5 Sekunden eingefügt, um sicherzustellen, dass der Empfänger genügend Zeit hat, das Signal zu verarbeiten.
void loop() {
if (irrecv.decode()) { // Wenn ein IR-Signal empfangen wird
Serial.println(irrecv.decodedIRData.decodedRawData, HEX); // Den Hexadezimalwert des Signals ausgeben
irrecv.resume(); // IR-Empfänger für das nächste Signal vorbereiten
delay(1500); // 1,5 Sekunden warten, bevor das nächste Signal verarbeitet wird
}
}
5. Funktionsweise im Detail:
- IR-Signal empfangen: Wenn ein IR-Signal von einer Fernbedienung empfangen wird, wird es vom IR-Empfänger decodiert.
- Hexadezimalausgabe: Der Code des empfangenen Signals wird im Hexadezimalformat auf dem seriellen Monitor angezeigt. Dadurch können wir genau sehen, welche Taste auf der Fernbedienung gedrückt wurde.
- Warten für das nächste Signal: Nach dem Empfangen eines Signals wartet der Arduino 1,5 Sekunden, bevor er das nächste IR-Signal verarbeitet.
Zusammenfassung:
Dieser Code ermöglicht es, IR-Signale von einer Fernbedienung zu empfangen und die empfangenen Hexadezimalcodes auf dem seriellen Monitor anzuzeigen. Mit diesem Code können Sie herausfinden, welche Tasten auf der Fernbedienung die entsprechenden Codes senden, die später für die Steuerung von Geräten oder Aktionen verwendet werden können.
Erklärung des Codes für das Steuern einer Lampe mit einer Fernbedienung
Dieser Code zeigt, wie man eine Lampe (hier eine LED, die an Pin 13 angeschlossen ist) basierend auf den IR-Codes einer Fernbedienung ein- und ausschaltet. Der Arduino empfängt das IR-Signal von der Fernbedienung und führt die entsprechenden Aktionen aus.
1. Bibliothek und Pin-Konfiguration
Zuerst wird die IRremote-Bibliothek eingebunden, die für die Kommunikation mit dem IR-Empfänger notwendig ist. Der IR-Empfänger ist an Pin 7 des Arduino angeschlossen. Die LED wird an Pin 13 angeschlossen.
#include
int LED = 13; // Pin für die LED
IRrecv irrecv(7); // IR-Empfänger-Objekt, angeschlossen an Pin 7
2. Setup-Funktion
In der setup()-Funktion wird die serielle Kommunikation initialisiert, sodass wir die empfangenen IR-Codes im seriellen Monitor sehen können. Der IR-Empfänger wird aktiviert und die LED wird als Ausgang konfiguriert.
void setup() {
Serial.begin(9600); // Seriellen Monitor starten
irrecv.enableIRIn(); // IR-Empfänger aktivieren
pinMode(LED, OUTPUT); // LED-Pin als Ausgang definieren
}
3. Loop-Funktion
In der loop()-Funktion wird fortlaufend auf ein IR-Signal gewartet. Wenn ein IR-Signal empfangen wird, wird es dekodiert und der Hexadezimalwert auf dem seriellen Monitor ausgegeben. Danach wird der Empfänger für das nächste Signal bereit gemacht.
void loop() {
if (irrecv.decode()) { // Wenn ein IR-Signal empfangen wird
Serial.println(irrecv.decodedIRData.decodedRawData, HEX); // Den IR-Code im Hex-Format anzeigen
irrecv.resume(); // Für das nächste Signal bereit machen
}
4. Steuerung der LED mit switch-case
Im switch-case
-Block wird überprüft, welcher IR-Code empfangen wurde. Wenn der Code mit einem bestimmten Hex-Code übereinstimmt, wird die LED eingeschaltet (HIGH) oder ausgeschaltet (LOW).
case 4077715200
: Wenn dieser Code empfangen wird (z. B. eine Taste der Fernbedienung), wird die LED eingeschaltet.case 3877175040
: Wenn dieser Code empfangen wird (z. B. eine andere Taste), wird die LED ausgeschaltet.
switch (irrecv.decodedIRData.decodedRawData) {
case 4077715200: // Hex-Code für das Einschalten der LED
digitalWrite(LED, HIGH); // LED einschalten
break;
case 3877175040: // Hex-Code für das Ausschalten der LED
digitalWrite(LED, LOW); // LED ausschalten
break;
}
}
5. Funktionsweise im Detail
- Der IR-Empfänger empfängt das Signal von der Fernbedienung.
- Der Hex-Code des empfangenen Signals wird auf dem seriellen Monitor angezeigt, damit wir wissen, welche Taste der Fernbedienung gedrückt wurde.
- Abhängig vom empfangenen Code wird die LED entweder eingeschaltet (
HIGH
) oder ausgeschaltet (LOW
).
Fazit:
Dieser Code zeigt, wie man mit einer IR-Fernbedienung und einem IR-Empfänger auf einem Arduino eine LED steuern kann. Die IR-Codes der Fernbedienung werden im seriellen Monitor angezeigt und durch den switch-case
-Block kann auf diese Codes reagiert werden, um die LED ein- oder auszuschalten.
#include
int LED=13;
IRrecv irrecv(7); // IR alıcı nesnesi
void setup() {
Serial.begin(9600); // Seri haberleşmeyi başlatıyoruz
irrecv.enableIRIn(); // IR alıcıyı aktifleştiriyoruz
pinMode(LED, OUTPUT);
}
void loop() {
if (irrecv.decode()) { // IR sinyali alındığında
Serial.println(irrecv.decodedIRData.decodedRawData, HEX); // IR kodunu hexadecimal formatta yazdırıyoruz
irrecv.resume();
}
switch (irrecv.decodedIRData.decodedRawData) {
case 4077715200: // Kumanda tuş kodu 0xFF30CF (örnek)
digitalWrite(LED, HIGH); // LED'i yakıyoruz
break;
case 3877175040 : // Kumanda tuş kodu 0xFF30CF (örnek)
digitalWrite(LED, LOW); // LED'i yakıyoruz
break;
}
}