Dieses Modul kann Infrarotsignale empfangen und gibt diese am Signalausgang als digitale Abfolge aus.

Zusätzlich blinkt die auf dem Modul integrierte LED kurz auf, wenn ein Infrarot-Signal detektiert wurde.

Technische Daten

Trägerfrequenz 38kHz

Pin Belegung

Codebeispiel Arduino

Anschlussbelegung Arduino

Arduino Empfänger
Pin 2 Signal
5V +V
Masse GND

Mithilfe des Sensormodules KY-022 lässt sich ein Infrarot Receiver aufbauen. Hierzu werden nur das Infrarot Receiver Modul und ein einzelner Arduino benötigt. Dieser fungiert hierbei dann als empfänger der Signale und gibt diese dann in der seriellen Konsole aus.

Für das folgende Codebeispiel wird eine zusätzliche Library benötigt:

Arduino-IRremote von Ken Shirriff | veröffentlicht unter der MIT Lizenz

Das unten stehende Beispiel verwendet diese besagte Library - hierzu empfehlen wir diese von Github herunterzuladen, zu entpacken und im Arduino-Library-Ordner, welcher sich standardmäßig unter (C:\Benutzer\[Benutzername]\Dokumente\Arduino\libraries) befindet, zu kopieren, damit diese für dieses Codebeispiel und folgende Projekte zur Verfügung steht. Alternativ ist diese auch im unten stehenden Download Paket ebenfalls enthalten.

Bei Infrarot-Sende- und Empfängersystemen, gibt es verschiedene Protokolle, in denen die Daten versendet und empfangen werden können. In dem folgenden Beispiel wird für das Empfangen das modifizierte SimpleReceiver Beispiel verwendet - 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 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");
        }
    }
}

Beispielprogramm Download

KY022-Arduino.zip

Codebeispiel Raspberry Pi

Anschlussbelegung Raspberry Pi:

Raspberry Pi Empfänger
GPIO15 [Pin 8] Signal
3,3V [Pin 1] +V
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 ausgetaucht, sondern es können auch komplette Software-Programme wie z.B. die Mediencenter Software OpenElec per Fernbedienung bedient werden.

Für die Einrichtung eines Infrarot-Steuerungssystem, werden wir folgendes tun. LINK

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 (hier bei 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.

Codebeispiel Micro:Bit

Anschlussbelegung Micro:Bit:

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 wird eine zusätzliche Librarie benötigt:

pxt-makerbit-ir-receiver von 1010Technologies | veröffentlicht unter der MIT License

Diese Librarie 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 der folgenden URL 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 Librarie manchmal erst erscheint nachdem man die IDE neugestartet hat.

Beispielprogramm Download

microbit-KY-022-Remote.zip