Eine Leuchtdiode, die im infraroten Bereich ausstrahlt. Je nach Eingangsspannung, werden Vorwiderstände benötigt.

Technische Daten

Vf 1,1V
If 20mA
Emittierende Wellenlänge 940nm (nicht sichtbares Licht)

Die Bezeichnungen (Vf und If) beziehen sich auf die Forward-Voltage und die Forward-Current der Leuchtdiode.

Vorwiderstände:

Rf (3,3V) 120Ω

[z.B. beim Einsatz mit ARM CPU-Kern basierten Mikrokontrollern wie Raspberry-Pi]

Rf (5V) 220Ω

[z.B. beim Einsatz mit Atmel Atmega basierten Mikrokontrollern wie Arduino]

Die Bezeichnung (Rf) bezieht sich hier auf den benötigten Vorwiderstand vor der Leuchtdiode basierend auf der anliegenden Spannung.

*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. In dem Falle kann dann der mittlere Pin genutzt werden, der dann den Widerstand beinhaltet.

Pin Belegung

Codebeispiel Arduino

Baudrate der seriellen Ausgabe sollte auf 115200 gestellt werden sonst funktioniert das Fernbedienungs Beispiel nicht

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

KY005-Arduino-ON-OFF.zip

Codebeispiel Fernbedienung

Anschlussbelegung Arduino

Arduino Empfänger
Pin 2 Signal
5V +V
Masse GND
Arduino Sender
Pin 3 Signal
Masse* GND+Widerstand
Masse GND
  • *Nur wenn der Vorwiderstand auf dem Modul verlötet wurde und nicht vor dem Modul geschaltet ist

Mit Hilfe der beiden Sensormodule KY-005 und KY-022 lässt sich ein Infrarot-Fernbedienung + Infrarot Receiver System aufbauen. Hierzu werden neben den zwei Modulen auch zwei Arduinos benötigt. Diese fungieren hierbei dann als Sender und als Empfänger der Signale. Dabei ist nur wichtig was der Empfänger der Signale in der seriellen Konsole ausgibt und was der Sender sendet denn dies sollte übereinstimmen.

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 mithilfe des modifizierten SimpleSender Beispiel und des modifizierten SimpleReceiver Beispiel - die verwendete Library "Arduino-IRremote" kümmert sich eigenständig um die Konvertierung in die richtige Datenfolge. Es gibt innerhalb der Library jedoch auch andere Protokolle/Kodierungen - diese sind in der Dokumentation/dem Code der Library gekennzeichnet. Dokumentation

Um den nun folgenden Code benutzen zu können, müssen ein paar wichtige Dinge beachtet werden. Zu aller erst muss man das bereits existierende Beispiel aus der Bibliothek öffnen, da eine sehr wichtige Datei mit geöffnet wird die zum Empfangen benötigt wird. Um dieses Beispiel zu öffnen, gehen Sie auf Datei -> Beispiele -> IRremote -> SimpleReceiver. Wenn Sie dies getan haben, brauchen Sie nun nurnoch den Code in dem Beispiel durch den unten stehenden Code für den Empfänger zu ersetzen. Danach müssen Sie nurnoch den Arduino auswählen, an dem Sie ihren Empfänger angeschlossen haben. Dies tun Sie, wie folgt, Sie gehen auf Werkzeuge -> Port -> COM. Hierbei ist wichtig das Sie den COM auswählen an dem ihr erster Arduino angeschlossen ist welcher später als Empfänger dienen soll. Bei diesem Beispiel, ist es möglich die Zeilen 88 bis 93 zu ändern.

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");
        }
    }
}

Auch hier müssen, um den nun folgenden Code benutzen zu können, ein paar wichtige Dinge beachtet werden. Zu aller erst muss man das bereits existierende Beispiel aus der Bibliothek öffnen, da eine sehr wichtige Datei mit geöffnet wird die zum Senden benötigt wird. Um dieses Beispiel zu öffnen, gehen Sie auf Datei -> Beispiele -> IRremote -> SimpleSender. Wenn Sie dies getan haben, brauchen Sie nun nurnoch den Code in dem Beispiel durch den unteren Code für den Sender zu ersetzen. Danach müssen Sie nurnoch den Arduino auswählen, an dem Sie ihren Sender angeschlossen haben. Dies tun Sie, wie folgt, Sie gehen auf Werkzeuge -> Port -> COM. Hierbei ist wichtig das Sie den COM auswählen an dem ihr zweiter Arduino angeschlossen ist welcher später als Sender dienen soll. Bei diesem Beispiel ist es möglich die Zeilen 49 bis 58 zu ändern.

Nachdem Sie ihren Sender dann eingerichtet haben ist es wichtig wieder zu dem COM mit dem richtigen Port zu wechseln um die serielle Ausgabe des Empfänger Arduinos zu erhalten.

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

KY005-Arduino-Remote.zip

Codebeispiel Raspberry Pi

Es sind zwei Anwendungsbeispiele für dieses Sensormodul hier 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, wo er als entweder Infrarot Receiver für Fernbedienungen zum Steuern von z.B. der Mediencenter-Software OpenElec oder als Infrarot-Transmitter zur Software-gesteuerten Fernbedienung programmiert werden kann.

Codebeispiel ON/OFF

Anschlussbelegung Raspberry Pi

Raspberry Pi Sensor
GPIO 15 [Pin 10] Signal
Masse* [Pin 6] +V
Masse [Pin 6] GND
  • *Nur wenn der Vorwiderstand auf dem Modul verlötet wurde und nicht vor dem Modul geschaltet ist
# 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

KY005-RPi-ON-OFF.zip

Zu starten mit dem Befehl:

sudo python3 KY005.py

Codebeispiel Fernbedienung

Anschlussbelegung Raspberry Pi:

Raspberry Pi Empfänger
GPIO15 [Pin 8] Signal
3,3V [Pin 1] +V
Masse [Pin 6] GND
Raspberry Pi Sender
GPIO14 [Pin 8] Signal
Masse* [Pin 6] GND+Widerstand
Masse [Pin 6] GND

Der Raspberry Pi besitzt mit seiner fortschrittlichen Prozessorarchitektur den Vorteil gegenüber dem Arduino, dass dieser ein komplettes Linux-Betriebssystem betreiben kann. Mit Hilfe eines Infrarot-Receivers können somit nicht nur einfache Datensignale ausgetauscht, sondern es können auch komplette Software-Programme wie z.B. die Mediencenter Software OpenElec per Fernbedienung bedient werden.

Zu diesem Zwecke werden die Module KY-005 als Infrarot-Transmitter und KY-022 als Infrarot Receiver angewendet.

Für die Einrichtung eines Infrarot-Steuerungssystem, werden Sie folgende Schritte befolgen.

Quelle der nun folgenden Schritte.

Als erstes werden Sie die config.txt bearbeiten indem Sie den Befehl...

sudo nano /boot/config.txt

...eingeben. Danach setzen Sie an das Ende dieser Datei folgendes.

dtoverlay=gpio-ir,gpio_pin=14
dtoverlay=gpio-ir-tx,gpio_pin=15

Mit der Tastenkombination [STRG+X] können Sie das Editieren beenden und mit [STRG+Y] abspeichern.

Nachdem Sie den Raspberry Pi mittels...

sudo reboot

... neugestartet haben, werden Sie nun folgende Befehle ausführen...

lsmod | grep gpio
cat /proc/bus/input/devices

... Sie sollten dann folgendes sehen.

I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="gpio_ir_recv"
P: Phys=gpio_ir_recv/input0
S: Sysfs=/devices/platform/ir-receiver@e/rc/rc0/input0
U: Uniq=
H: Handlers=kbd event0 
B: PROP=0
B: EV=100013
B: KEY=fff 0 0 4200 108fc32e 2376051 0 0 0 7 158000 4192 4001 8e9680 0 0 10000000
B: MSC=10

Das nächste was Sie dann noch machen müssen ist ir-keytable zu installieren...

sudo apt-get install ir-keytable -y

... zur Bestätigung einer geglückten Installation sollten Sie...

ir-keytable

... ausführen und dann auch folgende Ausgabe bekommen.

Found /sys/class/rc/rc0/ (/dev/input/event0) with:
	Name: gpio_ir_recv
	Driver: gpio_ir_recv, table: rc-rc6-mce
	LIRC device: /dev/lirc1
	Attached BPF protocols: Operation not permitted
	Supported kernel protocols: lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp imon 
	Enabled kernel protocols: lirc rc-6 
	bus: 25, vendor/product: 0001:0001, version: 0x0100
	Repeat delay = 500 ms, repeat period = 125 ms

Nach aldem folgen nun noch ein paar weitere Schritte...

sudo ir-keytable -p all

... wird benutzt um alle möglichen Protokolle anzuzeigen die Verwendet werden können.

Protocols changed to lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp imon 
sudo ir-keytable

Wird nun eingegeben um zu schauen welches Device benutzt wird zum Senden (hierbei gibt es die Möglichkeit das entweder rc0 oder rc1 benutzt wird (zu sehen anhand /sys/class/rc/rc0 oder rc1))...

Found /sys/class/rc/rc0/ (/dev/input/event0) with:
	Name: gpio_ir_recv
	Driver: gpio_ir_recv, table: rc-rc6-mce
	LIRC device: /dev/lirc1
	Attached BPF protocols: Operation not permitted
	Supported kernel protocols: lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp imon 
	Enabled kernel protocols: lirc rc-6 
	bus: 25, vendor/product: 0001:0001, version: 0x0100
	Repeat delay = 500 ms, repeat period = 125 ms

Je nachdem was der Fall ist wird der folgende Befehl nach Bedarf abgeändert.

ir-keytable -t -s rc0

Das schließt nun die Konfiguration unseres Empfängers ab, als nächstes werden wir unseren Sender benutzen um etwas an unseren Empfänger zu senden.

cat /etc/rc_keymaps/rc6_mce.toml | grep SLEEP

Als Ergebniss des zuvor ausgeführten Befehls sollte...

0x800f040c = "KEY_SLEEP"

... erscheinen. Danach müssen Sie nur noch einen letzten Befehl Ausführen...

ir-ctl -S rc6_mce:0x800f040c -d /dev/lirc1

... und Sie sind nun fertig und haben ein funktionierendes Setup.

Codebeispiel Micro:Bit

Codebeispiel ON/OFF

Anschlussbelegung Micro:Bit:

Micro:Bit Sender
Pin 0 Signal
- +V
Masse GND

Hierbei handelt es sich um ein MakeCode Beispiel für Micro:Bit welches essenziel das gleiche macht wie die Beispiele der anderen beiden Varianten. Jedoch ist dieses Beispiel eher näher an das Beispiel des Raspberry Pi angelehnt als an das Beispiel des Arduino.

Beispielprogramm Download

microbit-KY-005.zip

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

Hierbei handelt es sich um ein MakeCode Beispiel für Micro:Bit welches essenziel das gleiche macht wie die Beispiele der anderen beiden Varianten. Jedoch ist dieses Beispiel eher näher an das Beispiel des Raspberry Pi angelehnt als an das Beispiel des Arduino.

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.

Dies tun Sie indem Sie in ihrer IDE auf Erweiterungen gehen und, mit den folgenden 2 URLs https://github.com/1010Technologies/pxt-makerbit-ir-transmitter.git und https://github.com/1010Technologies/pxt-makerbit-ir-receiver.git, nach der Librarie suchen um diese dann hinzuzufügen. Hierbei sollte noch erwähnt werden das die Libraries manchmal erst erscheinen nachdem man die zweite Librarie hinzugefügt hat.

Beispielprogramm Download

microbit-KY-005-und-022-Remote.zip