• Arduino
  • Raspberry Pi
  • Raspberry Pi Pico
  • Micro:Bit

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

Betriebsspannung 3,3 V - 5 V
Betriebsstrom 0,4 - 1,5 mA
Empfangsreichweite 18 m
Empfangswinkel ± 45 °
Trägerfrequenz 38 kHz

Pin Belegung

Codebeispiel Arduino

Anschlussbelegung Arduino

Arduino Empfänger
Pin 2 Signal
5 V +V
GND 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 und gibt die Signale 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

Laden Sie die Library herunter und entpacken Sie diese in Ihren Arduino-Library-Ordner. Dieser befindet sich standardmäßig unter: C:\Benutzer\[Benutzername]\Dokumente\Arduino\libraries. Alternativ ist diese auch im unten stehenden Download-Paket 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

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.

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

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

Betriebsspannung 3,3 V - 5 V
Betriebsstrom 0,4 - 1,5 mA
Empfangsreichweite 18 m
Empfangswinkel ± 45 °
Trägerfrequenz 38 kHz

Pin Belegung

Codebeispiel Raspberry Pi

Anschlussbelegung Raspberry Pi:

Raspberry Pi Empfänger
GPIO15 [Pin 10] Signal
3,3 V [Pin 1] +V
GND [Pin 6] GND

Öffnen Sie für die Ersteinrichtung zunächst Ihre config.txt-Datei mit Hilfe des folgenden Befehls:

sudo nano /boot/config.txt

Fügen Sie hier die folgenden Konfigurationen an das Ende der Datei an:

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

Mit der Tastenkombination [STRG+O] können Sie die Datei speichern. Bestätigen Sie dies mit [Enter] und verlassen Sie den Editor mit der Kombination [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

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

Betriebsspannung 3,3 V - 5 V
Betriebsstrom 0,4 - 1,5 mA
Empfangsreichweite 18 m
Empfangswinkel ± 45 °
Trägerfrequenz 38 kHz

Pin Belegung

Codebeispiel Micro:Bit

Anschlussbelegung Micro:Bit:

Micro:Bit Empfänger
Pin 1 Signal
3V +V
GND GND

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

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

Diese Library müssen Sie vor der Benutzung des Codes zu Ihrer IDE hinzufügen.

Fügen Sie die Library zu Ihrer IDE hinzu, indem Sie auf "Erweiterungen" klicken und die folgende URL in das Suchfeld eingeben: https://github.com/1010Technologies/pxt-makerbit-ir-receiver.git. Bestätigen Sie die Suche mit Enter.

Beispielprogramm Download

microbit-KY-022-Remote.zip

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

Betriebsspannung 3,3 V - 5 V
Betriebsstrom 0,4 - 1,5 mA
Empfangsreichweite 18 m
Empfangswinkel ± 45 °
Trägerfrequenz 38 kHz

Pin Belegung

Codebeispiel Raspberry Pi Pico

Anschlussbelegung Raspberry Pi Pico

Raspberry Pi Pico Empfänger
GPIO16 Signal
3.3V +V
GND GND

Mit Hilfe der beiden Sensormodule KY-005 und KY-022 lässt sich ein System mit Infrarot-Fernbedienung und Infrarot-Empfänger aufbauen. Hier werden wir aber nur den Empfänger mit einem Pico verwenden. Dieser fungiert hierbei dann als Sender der Signale.

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

micropython-ir von Peter Hinch | veröffentlicht unter der MIT Lizenz

Bei Infrarot-Sendesystemen gibt es verschiedene Protokolle, in denen die Daten versendet werden können. In dem folgenden Beispiel werden für das Versenden verschiedene Protokolle verwendet. Dokumentation

Code für den Empfänger

# Führen Sie dies aus, um eine Fernbedienung zu charakterisieren.
# Bibliotheken laden
from sys import platform
import time
import gc
from machine import Pin, freq
from ir_rx.print_error import print_error  # Optionale Ausgabe von Fehlercodes

# Alle implementierten Klassen importieren
from ir_rx.nec import NEC_8, NEC_16, SAMSUNG
from ir_rx.sony import SONY_12, SONY_15, SONY_20
from ir_rx.philips import RC5_IR, RC6_M0
from ir_rx.mce import MCE

# Definiert den Pin, der alle Daten empfängt.
p = Pin(16, Pin.IN)

# **** DISPLAY GREETING ****
s = """Test for IR receiver.
CheckIRData() for NEC 8 bit protocol,
CheckIRData(1) for NEC 16 bit,
CheckIRData(2) for Sony SIRC 12 bit,
CheckIRData(3) for Sony SIRC 15 bit,
CheckIRData(4) for Sony SIRC 20 bit,
CheckIRData(5) for Philips RC-5 protocol,
CheckIRData(6) for RC6 mode 0.
CheckIRData(7) for Microsoft Vista MCE.
CheckIRData(8) for Samsung.

Hit ctrl-c to stop, then disconnect and reconnect your Pico board. Press Stop/Restart afterwards."""

# Benutzer-Callback (Funktion zum ausgeben der empfangenen Daten)
def cb(data, addr, ctrl):
    if data < 0:  # Für den Fall, dass die empfangenen Daten dem NEC-Protokoll entsprechen.
        print("Repeat code.")
    else:
        print(f"Data 0x{data:02x} Addr 0x{addr:04x} Ctrl 0x{ctrl:02x}")
        
    # Die empfangenen Daten können hier verwendet werden, um zu entscheiden, was z.B. gedruckt werden soll
    if data == 0x16:
        print("Taste 0 wurde gedrückt")
    elif data == 0x0c:
        print("Taste 1 wurde gedrückt")
    elif data == 0x18:
        print("Taste 2 wurde gedrückt")
    elif data == 0x5e:
        print("Taste 3 wurde gedrückt")
    elif data == 0x08:
        print("Taste 4 wurde gedrückt")
    elif data == 0x1c:
        print("Taste 5 wurde gedrückt")
    elif data == 0x5a:
        print("Taste 6 wurde gedrückt")
    elif data == 0x42:
        print("Taste 7 wurde gedrückt")
    elif data == 0x52:
        print("Taste 8 wurde gedrückt")
    elif data == 0x4a:
        print("Taste 9 wurde gedrückt")
        
def CheckIRData(proto=0):
    # Liste mit allen möglichen Protokollen
    classes = (NEC_8, NEC_16, SONY_12, SONY_15, SONY_20, RC5_IR, RC6_M0, MCE, SAMSUNG)
    ir = classes[proto](p, cb)  # Empfänger instanziieren
    ir.error_function(print_error)  # Debug-Informationen anzeigen
    # ir.verbose = True
    try:
        while True:
            print("running")
            time.sleep(5)
            gc.collect()
    except KeyboardInterrupt:
        ir.close()

print(s)

# Endlosschleife für kontinuierlichen Betrieb
while True:
    CheckIRData()

Beispielprogramm Download

KY022-Pico.zip