This module can receive infrared signals and outputs them at the signal output as a digital sequence.

In addition, the LED integrated on the module flashes briefly when an infrared signal is detected.

Technical data

Operating voltage 3,3 V - 5 V
Operating current 0,4 - 1,5 mA
Reception range 18 m
Reception angle ± 45 °
Carrier frequency 38 kHz

Pin assignment

Code example Arduino

Pin assignment Arduino

Arduino Receiver
Pin 2 signal
5 V +V
ground GND

With the help of the sensor module KY-022 an infrared receiver can be built. For this only the infrared receiver module and a single Arduino are needed. The Arduino acts as a receiver and outputs the signals to the serial console.

For the following code example an additional library is needed:

Arduino-IRremote by Ken Shirriff | published under the MIT license.

Download the library and unzip it to your Arduino library folder. This is located by default under: C:\User[username]\Documents\Arduino\libraries. Alternatively, it is also included in the download package below.

With infrared transmitter and receiver systems, there are different protocols in which the data can be sent and received. In the following example the modified SimpleReceiver example is used for receiving - the used library "Arduino-IRremote" takes care of the conversion to the correct data sequence on its own. However, there are also other protocols/encodings within the library - these are marked in the documentation/code of the library. Documentation.

Please note: For the execution of the code example an additional file is necessary. This opens automatically as soon as you open the sample code from the Arduino IRremote library. Therefore, first open the example code via the following path: File -> Examples -> IRremote -> SimpleReceiver. Now you can replace the example code with our modified example. Now you have to select the Arduino you connected your transmitter to: Tools -> Port -> COM.

Code for the receiver

/*
 * SimpleReceiver.cpp
 *
 * Demonstriert den Empfang von NEC-IR-Codes mit IRrecv
 *
 * Copyright (C) 2020-2021 Armin Joachimsmeyer
 * armin.joachimsmeyer@gmail.com
 *
 * Diese Datei ist Teil von Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote.
 *
 * MIT-Lizenz
 */

/*
 * Geben Sie an, welche(s) Protokoll(e) für die Dekodierung verwendet werden soll(en).
 * * Wenn kein Protokoll definiert ist, sind alle Protokolle aktiv.
 */
//#define DECODE_DENON // Enthält Sharp
//#define DECODE_JVC
//#define DECODE_KASEIKYO
//#define DECODE_PANASONIC // dasselbe wie DECODE_KASEIKYO
//#define DECODE_LG
#define DECODE_NEC // Beinhaltet Apple und 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 // Universaldecoder für Impulsbreiten- oder Impulsabstandsprotokolle
//#define DECODE_HASH // Spezialdecoder für alle Protokolle

#include <Arduino.h>

/*
 * Makros für Eingangs- und Ausgangspin definieren etc.
 */
#include "PinDefinitionsAndMore.h"

#include <IRremote.h>

void setup() {
    Serial.begin(115200);
    // Nur um zu wissen, welches Programm auf meinem Arduino läuft
    Serial.println(F("START " __FILE__ " von " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE));

    /*
     * Starten des Empfängers, Aktivieren der Feedback-LED und Abgreifen des LED-Feedback-Pins von der internen Kartendefinition
     */
    IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN);

    Serial.print(F("Bereit zum Empfang von IR-Signalen an Pin "));
    Serial.println(IR_RECEIVE_PIN);
}

void loop() {
    /*
     * Prüfen, ob empfangene Daten vorhanden sind und wenn ja, versuchen, diese zu dekodieren.
     * Dekodiertes Ergebnis steht in der Struktur IrReceiver.decodedIRData.
     *
     * Z.B. Befehl ist in IrReceiver.decodedIRData.command
     * Adresse ist in Befehl ist in IrReceiver.decodedIRData.address
     * und bis zu 32 Bit Rohdaten in IrReceiver.decodedIRData.decodedRawData
     */
    if (IrReceiver.decode()) {

        // Drucken einer kurzen Zusammenfassung der empfangenen Daten
        IrReceiver.printIRResultShort(&Serial);
        if (IrReceiver.decodedIRData.protocol == UNKNOWN) {
            // Wir haben hier ein unbekanntes Protokoll, drucken Sie weitere Informationen
            IrReceiver.printIRResultRawFormatted(&Serial, true);
        }
        Serial.println();

        /*
         * !!!Wichtig!!! Aktivieren Sie den Empfang des nächsten Wertes,
         * da der Empfang nach dem Ende des aktuell empfangenen Datenpakets gestoppt wurde.
         */
        IrReceiver.resume(); // Empfang des nächsten Wertes freigeben

        /*
         * Abschließend prüfen Sie die empfangenen Daten und führen Aktionen entsprechend dem empfangenen Befehl aus
         */
        if (IrReceiver.decodedIRData.command == 0x34) {
            Serial.println("Signal empfangen");
        } else if (IrReceiver.decodedIRData.command == 0x36) {
            Serial.println("Signal empfangen und dieses Mal ist es ein anderes");
        } else {
            Serial.println("Signal empfangen, aber leider nicht das richtige");
        }
    }
}

Beispielprogramm Download

KY022-Arduino.zip

Codebeispiel Raspberry Pi

Anschlussbelegung Raspberry Pi:

Raspberry Pi Empfänger
GPIO15 [Pin 8] Signal
3,3 V [Pin 17] +V
Masse [Pin 25] GND

For the initial setup, first open your config.txt file using the following command:

sudo nano /boot/config.txt

Add the following configurations to the end of the file here:

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

With the key combination [CTRL+O] you can save the file. Confirm this with [Enter] and exit the editor with the combination [CTRL+X]. Now restart your Raspberry Pi with the following command:

sudo reboot

Now install the ir-keytable module:

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:

ir-keytable

The first line of the output should look something like this:

Found /sys/class/rc/rc0/ (/dev/input/event0) with:

Here it can be read that we can address our receiver via the identification rc0. Therefore we start the reception now via the following command:

ir-keytable -t -s rc0

Code example Micro:Bit

Port assignment Micro:Bit:

Micro:Bit Receiver
Pin 1 Signal
3 V +V
Ground GND

For the following code example an additional library is needed:

pxt-makerbit-ir-receiver from 1010Technologies | published under the MIT License.

You must add this library to your IDE before using the code.

Add the library to your IDE by clicking on "Extensions" and entering the following URL in the search box: **https://github.com/1010Technologies/pxt-makerbit-ir-receiver.git**. Confirm the search with Enter.

Sample program download

microbit-KY-022-Remote.zip