KY-005 Infrarot-Transmitter
Eine Leuchtdiode, die im infraroten Bereich ausstrahlt. Je nach Eingangsspannung, werden Vorwiderstände benötigt.

Eine Leuchtdiode, die im infraroten Bereich ausstrahlt. Je nach Eingangsspannung, werden Vorwiderstände benötigt.
Technische Daten
Durchlassspannung (Vf) | 1,1 V |
Durchlassstrom (If) | 20 mA |
Emittierende Wellenlänge | 940 nm (nicht sichtbares Licht) |
Vorwiderstände:
Vorwiderstand bei 3,3 V | 120 Ω |
Vorwiderstand bei 5 V | 220 Ω |
Auf der Platine gibt es die Möglichkeit, den jeweils benötigten Widerstand direkt aufzulöten. Die Stelle zum Auflöten des Widerstandes befindet sich direkt über den Anschlusspins auf dem PCB.
Pin Belegung
Codebeispiel Arduino
Die Baudrate der seriellen Ausgabe sollte hierbei auf 115200 gestellt werden.
Codebeispiel ON/OFF
Anschlussbelegung Arduino
Arduino | Empfänger |
---|---|
Pin 3 | Signal |
5V | +V |
Masse | GND |
Dieses Codebeispiel zeigt auf, wie eine LED mittels eines definierbaren Ausgangspins abwechselnd für Vier Sekunden ein- und danach zwei Sekunden ausgeschaltet werden kann.
int Led = 3;
void setup ()
{
pinMode (Led, OUTPUT); // Initialisierung Ausgangspin für die LED
}
void loop () //Hauptprogrammschleife
{
digitalWrite (Led, HIGH); // LED wird eingeschaltet
delay (4000); // Wartemodus für 4 Sekunden
digitalWrite (Led, LOW); // LED wird ausgeschaltet
delay (2000); // Wartemodus für weitere zwei Sekunden in denen die LED dann ausgeschaltet ist
}
Beispielprogramm Download
Codebeispiel Fernbedienung
Anschlussbelegung Arduino
Arduino | Empfänger |
---|---|
Pin 2 | Signal |
5V | +V |
Masse | GND |
Arduino | Sender |
---|---|
Pin 3 | Signal |
Masse | GND |
Mit Hilfe der beiden Sensormodule KY-005 und KY-022 lässt sich ein System mit Infrarot-Fernbedienung und Infrarot-Empfänger aufbauen. Hierzu werden neben den beiden Modulen auch zwei Arduinos benötigt. Diese fungieren hierbei dann jeweils als Sender und als Empfänger der Signale.
Für das folgende Codebeispiel wird eine zusätzliche Library benötigt:
Arduino-IRremote von Ken Shirriff | veröffentlicht unter der MIT Lizenz
Die Library ist nicht im Paket enthalten und muss vor dem Start der Arduino IDE in den "library"-Ordner kopiert werden.
Diesen finden Sie standardmäßig unter dem folgenden Pfad Ihrer Windows-Installation:
C:\Benutzer\[Benutzername]\Dokumente\Arduino\libraries
Bei Infrarot-Sendesystemen gibt es verschiedene Protokolle, in denen die Daten versendet werden können. In dem folgenden Beispiel wird für das Versenden das NEC-Protokoll verwendet. Dokumentation
Bitte beachten Sie: Für die Ausführung des Codebeispiels ist eine zusätzliche Datei notwendig. Diese öffnet sich automatisch, sobald Sie den Beispielcode aus der Arduino-IRremote-Bibliothek öffnen. Öffnen Sie daher zunächst den Beispielcode über den folgenden Weg: Datei -> Beispiele -> IRremote -> SimpleReceiver. Nun können Sie den Beispielcode durch unser modifiziertes Beispiel ersetzen. Nun muss der Arduino ausgewählt werden, an dem Sie Ihren Empfänger angeschlossen haben: Werkzeuge -> Port -> COM.
Code für den Empfänger
/*
* SimpleReceiver.cpp
*
* Demonstrates receiving NEC IR codes with IRrecv
*
* Copyright (C) 2020-2021 Armin Joachimsmeyer
* armin.joachimsmeyer@gmail.com
*
* This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote.
*
* MIT License
*/
/*
* Specify which protocol(s) should be used for decoding.
* If no protocol is defined, all protocols are active.
*/
//#define DECODE_DENON // Includes Sharp
//#define DECODE_JVC
//#define DECODE_KASEIKYO
//#define DECODE_PANASONIC // the same as DECODE_KASEIKYO
//#define DECODE_LG
#define DECODE_NEC // Includes Apple and Onkyo
//#define DECODE_SAMSUNG
//#define DECODE_SONY
//#define DECODE_RC5
//#define DECODE_RC6
//#define DECODE_BOSEWAVE
//#define DECODE_LEGO_PF
//#define DECODE_MAGIQUEST
//#define DECODE_WHYNTER
//#define DECODE_DISTANCE // universal decoder for pulse width or pulse distance protocols
//#define DECODE_HASH // special decoder for all protocols
#include <Arduino.h>
/*
* Define macros for input and output pin etc.
*/
#include "PinDefinitionsAndMore.h"
#include <IRremote.h>
void setup() {
Serial.begin(115200);
// Just to know which program is running on my Arduino
Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE));
/*
* Start the receiver, enable feedback LED and take LED feedback pin from the internal boards definition
*/
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN);
Serial.print(F("Ready to receive IR signals at pin "));
Serial.println(IR_RECEIVE_PIN);
}
void loop() {
/*
* Check if received data is available and if yes, try to decode it.
* Decoded result is in the IrReceiver.decodedIRData structure.
*
* E.g. command is in IrReceiver.decodedIRData.command
* address is in command is in IrReceiver.decodedIRData.address
* and up to 32 bit raw data in IrReceiver.decodedIRData.decodedRawData
*/
if (IrReceiver.decode()) {
// Print a short summary of received data
IrReceiver.printIRResultShort(&Serial);
if (IrReceiver.decodedIRData.protocol == UNKNOWN) {
// We have an unknown protocol here, print more info
IrReceiver.printIRResultRawFormatted(&Serial, true);
}
Serial.println();
/*
* !!!Important!!! Enable receiving of the next value,
* since receiving has stopped after the end of the current received data packet.
*/
IrReceiver.resume(); // Enable receiving of the next value
/*
* Finally, check the received data and perform actions according to the received command
*/
if (IrReceiver.decodedIRData.command == 0x34) {
Serial.println("Signal received");
} else if (IrReceiver.decodedIRData.command == 0x36) {
Serial.println("Signal received and it is a different one this time around");
} else {
Serial.println("Signal received but sadly not the correct one");
}
}
}
Bitte beachten Sie: Für die Ausführung des Codebeispiels ist eine zusätzliche Datei notwendig. Diese öffnet sich automatisch, sobald Sie den Beispielcode aus der Arduino-IRremote-Bibliothek öffnen. Öffnen Sie daher zunächst den Beispielcode über den folgenden Weg: Datei -> Beispiele -> IRremote -> SimpleSender. Nun können Sie den Beispielcode durch unser modifiziertes Beispiel ersetzen. Nun muss der Arduino ausgewählt werden, an dem Sie Ihren Sender angeschlossen haben: Werkzeuge -> Port -> COM.
Nachdem Sie den Code für Ihren Sender übertragen haben, muss der COM-Port wieder auf den Port Ihres Empfängers gestellt werden, damit Sie die entsprechenden Ausgaben Ihres Empfängers in der seriellen Ausgabe angezeigt bekommen.
Code für den Sender
/*
SimpleSender.cpp
Demonstrates sending IR codes in standard format with address and command
An extended example for sending can be found as SendDemo.
Copyright (C) 2020-2021 Armin Joachimsmeyer
armin.joachimsmeyer@gmail.com
This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote.
MIT License
*/
#include <Arduino.h>
/*
Define macros for input and output pin etc.
*/
#include "PinDefinitionsAndMore.h"
//#define SEND_PWM_BY_TIMER
//#define USE_NO_SEND_PWM
#include <IRremote.h>
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
// Just to know which program is running on my Arduino
Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE));
/*
The IR library setup. That's all!
*/
IrSender.begin(IR_SEND_PIN, ENABLE_LED_FEEDBACK); // Specify send pin and enable feedback LED at default feedback LED pin
Serial.print(F("Ready to send IR signals at pin "));
Serial.println(IR_SEND_PIN);
}
/*
Set up the data to be sent.
For most protocols, the data is build up with a constant 8 (or 16 byte) address
and a variable 8 bit command.
There are exceptions like Sony and Denon, which have 5 bit address.
*/
uint16_t sAddress = 0x0102;
uint8_t sCommand = 0x34;
uint16_t sAddress1 = 0x0101;
uint8_t sCommand1 = 0x35;
uint16_t sAddress2 = 0x0103;
uint8_t sCommand2 = 0x36;
uint8_t sRepeats = 0;
void loop() {
Serial.println(F("Send NEC with 16 bit address"));
Serial.flush();
// Results for the first loop to: Protocol=NEC Address=0x102 Command=0x34 Raw-Data=0xCB340102 (32 bits)
IrSender.sendNEC(sAddress, sCommand, sRepeats);
delay(1000);
IrSender.sendNEC(sAddress1, sCommand1, sRepeats);
delay(1000);
IrSender.sendNEC(sAddress2, sCommand2, sRepeats);
/*
If you cannot avoid to send a raw value directly like e.g. 0xCB340102 you must use sendNECRaw()
*/
// Serial.println(F("Send NECRaw 0xCB340102"));
// IrSender.sendNECRaw(0xCB340102, sRepeats);
delay(1000); // delay must be greater than 5 ms (RECORD_GAP_MICROS), otherwise the receiver sees it as one long signal
}
Beispielprogramm Download
Codebeispiel Raspberry Pi
Es werden hier zwei Anwendungsbeispiele vorgestellt. Eines, welches die Infrarot-Transmitter Diode kurz ein- und wieder ausschaltet (emittierendes Licht nicht sichtbar - kann z.B. durch eine Handykamera gesehen werden), sowie ein direktes Anwendungsbeispiel für den Raspberry Pi, bei dem dieser als Empfänger eingesetzt wird.
Codebeispiel ON/OFF
Anschlussbelegung Raspberry Pi
Raspberry Pi | Sensor |
---|---|
GPIO 15 [Pin 10] | Signal |
Masse [Pin 6] | GND |
# Benoetigte Module werden importiert und eingerichtet
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
# Hier wird der Eingangs-Pin deklariert, an dem der Sensor angeschlossen ist. Zusaetzlich wird auch der PullUP Widerstand am Eingang aktiviert
LED_PIN = 15
GPIO.setup(LED_PIN, GPIO.OUT, initial= GPIO.LOW)
print "LED-Test [druecken Sie STRG+C, um den Test zu beenden]"
# Hauptprogrammschleife
try:
while True:
print("LED 4 Sekunden an")
GPIO.output(LED_PIN,GPIO.HIGH) #LED wird eingeschaltet
time.sleep(4) #Wartemodus fuer 4 Sekunden
print("LED 2 Sekunden aus")
GPIO.output(LED_PIN,GPIO.LOW) #LED wird ausgeschaltet
time.sleep(2) #Wartemodus fuer weitere zwei Sekunden, in denen die LED Dann ausgeschaltet ist
# Aufraeumarbeiten nachdem das Programm beendet wurde
except KeyboardInterrupt:
GPIO.cleanup()
Beispielprogramm Download
Zu starten mit dem Befehl:
sudo python3 KY005.py
Codebeispiel Fernbedienung
Anschlussbelegung Raspberry Pi:
Raspberry Pi | Sender |
---|---|
GPIO14 [Pin 8] | Signal |
Masse [Pin 6] | GND |
Quelle der nun folgenden Schritte.
Öffnen Sie zunächst die config.txt-Datei mit Hilfe des folgenden Befehls:
sudo nano /boot/config.txt
Fügen Sie nun den folgenden Inhalt an das Ende der Datei an:
dtoverlay=gpio-ir,gpio_pin=14
dtoverlay=gpio-ir-tx,gpio_pin=15
Mit der Tastenkombination [STRG+O] können Sie die Datei speichern. Bestätigen Sie dies mit [Enter] und verlassen Sie den Editor mit der Tastenkombination [STRG+X]. Starten Sie Ihren Raspberry Pi nun mit dem folgenden Befehl neu:
sudo reboot
Installieren Sie nun das ir-keytable Modul:
sudo apt-get install ir-keytable -y
Mit dem folgenden Befehl können Sie die Geräte-Identifikation ermitteln. Dies ist notwendig, um den Empfänger im weiteren Verlauf ansprechen zu können:
sudo ir-keytable
Die erste Zeile der Ausgabe sollte etwa so aussehen:
Found /sys/class/rc/rc0/ (/dev/input/event0) with:
Hier kann abgelesen werden, dass wir unseren Empfänger über die Identifikation rc0 ansprechen können. Daher starten wir den Empfang nun über den folgenden Befehl:
ir-keytable -t -s rc0
Codebeispiel Micro:Bit
Codebeispiel ON/OFF
Anschlussbelegung Micro:Bit:
Micro:Bit | Sender |
---|---|
Pin 0 | Signal |
- | +V |
Masse | GND |

Beispielprogramm Download
Codebeispiel Fernbedienung
Anschlussbelegung Micro:Bit:
Micro:Bit | Sender |
---|---|
Pin 0 | Signal |
- | +V |
Masse | GND |
Micro:Bit | Empfänger |
---|---|
Pin 1 | Signal |
3V | +V |
Masse | GND |
Für das folgende Codebeispiel werden zwei zusätzliche Libraries benötigt:
pxt-makerbit-ir-transmitter von 1010Technologies | veröffentlicht unter der MIT License
pxt-makerbit-ir-receiver von 1010Technologies | veröffentlicht unter der MIT License
Diese Libraries müssen Sie vor der Benutzung des Codes erst zu Ihrer IDE hinzufügen.
Fügen Sie die Library zu Ihrer IDE hinzu, indem Sie auf "Erweiterungen" klicken und jeweils die folgenden URLs in das Suchfeld eingeben: https://github.com/1010Technologies/pxt-makerbit-ir-transmitter.git und https://github.com/1010Technologies/pxt-makerbit-ir-receiver.git. Bestätigen Sie die Suche jeweils mit Enter.
