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

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
GND 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 Sender
Pin 3 Signal
GND* GND+Widerstand
GND+Widerstand GND
  • *Nur wenn der serielle Widerstand an das Modul gelötet wurde und nicht vor dem Modul angeschlossen ist.

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 -> SimpleSender. Nun können Sie den Beispielcode durch unser modifiziertes Beispiel ersetzen.

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

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 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
GND [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

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 10] Signal
3.3 V [Pin 1] +V
GND [Pin 6] GND
Raspberry Pi Sender
GPIO14 [Pin 8] Signal
GND [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=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 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

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 Micro:Bit

Codebeispiel ON/OFF

Anschlussbelegung Micro:Bit:

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

Beispielprogramm Download

microbit-KY-005.zip

Codebeispiel Fernbedienung

Anschlussbelegung Micro:Bit:

Micro:Bit Sender
Pin 0 Signal
- +V
GND GND
Micro:Bit Empfänger
Pin 1 Signal
3V +V
GND 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.

Beispielprogramm Download

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

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 Raspberry Pi Pico

Anschlussbelegung Raspbery Pi Pico

Raspberry Pi Pico Sender
GPIO17 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 Sender mit einem Pico verwenden. Dieser fungiert hierbei dann als Sender der Signale.

Für das folgende Codebeispiel werden 4 zusätzliche Librarys benötigt:

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

micropython-async 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 Sender

# Implementiert eine 2-Tasten-Fernbedienung auf einem Pico mit automatischer Wiederholung.
# Bibliotheken laden
from machine import Pin
import uasyncio as asyncio
from primitives.switch import Switch
from primitives.delay_ms import Delay_ms

# Alle implementierten Klassen importieren
from ir_tx.nec import NEC
from ir_tx.sony import SONY_12, SONY_15, SONY_20
from ir_tx.philips import RC5, RC6_M0

######## **** DISPLAY GREETING **** ############################
s = '''Test for IR transmitter.
test() for NEC protocol
test(1) for Sony SIRC 12 bit
test(2) for Sony SIRC 15 bit
test(3) for Sony SIRC 20 bit
test(4) for Philips RC-5 protocol
test(5) for Philips RC-6 mode 0.
'''

srp2 = '''
IR LED gate on pin 17
Connect pin 18 to a ground pin to send addr 1 data 54
Connect pin 19 to a ground pin to send addr 0x10 data 0x34.'''
################################################################

loop = asyncio.get_event_loop()

# Wenn die "Taste" gedrückt gehalten wird, werden die Daten normalerweise
# erneut übertragen, aber die meisten NEC-Modelle senden einen REPEAT-Code.
class Rbutton:
    toggle = 1  # Toggle wird im NEC-Modus ignoriert
    def __init__(self, irb, pin, addr, data, proto):
        self.irb = irb
        self.sw = Switch(pin)
        self.addr = addr
        self.data = data
        self.proto = proto

        self.sw.close_func(self.cfunc)
        self.sw.open_func(self.ofunc)
        self.tim = Delay_ms(self.repeat)

    def cfunc(self):  # Taste drücken: Daten senden
        tog = 0 if self.proto < 3 else Rbutton.toggle  # NEC, sony 12, 15: toggle==0
        self.irb.transmit(self.addr, self.data, tog, True)  # Validierung der Tests
        # Automatische Wiederholung. Das Sony-Protokoll sieht 45 ms vor, aber das ist knapp bemessen.
        # Im 20-Bit-Modus kann ein Datenburst bis zu 39 ms lang sein.
        self.tim.trigger(108)

    def ofunc(self):  # Taste loslassen: Wiederholungstimer abbrechen
        self.tim.stop()
        Rbutton.toggle ^= 1  # Umschaltbare Steuerung

    async def repeat(self):
        await asyncio.sleep(0)  # Timer stoppen lassen, bevor er erneut ausgelöst wird.
        if not self.sw():  # Taste ist noch gedrückt: Retrigger
            self.tim.trigger(108)
            if self.proto == 0:
                self.irb.repeat()  # NEC-Sonderfall: REPEAT-Code senden
            else:
                tog = 0 if self.proto < 3 else Rbutton.toggle  # NEC, sony 12, 15: toggle==0
                self.irb.transmit(self.addr, self.data, tog, True)  # Validierung der Tests

async def main(proto):
    # Der Test verwendet einen 38KHz-Träger.
    # Pin für das IR-LED-Tor
    pin = Pin(17, Pin.OUT, value = 0)
    # Liste mit allen möglichen Protokollen
    classes = (NEC, SONY_12, SONY_15, SONY_20, RC5, RC6_M0)
    irb = classes[proto](pin, 38000)
    # Kommentieren Sie Folgendes aus, um das Sendetiming zu drucken
    # irb.timeit = True

    b = []  # Rbutton-Instanzen
    px3 = Pin(18, Pin.IN, Pin.PULL_UP)
    px4 = Pin(19, Pin.IN, Pin.PULL_UP)
    # Diese beiden für den gewünschten Effekt/Daten/Befehl bearbeiten #
    b.append(Rbutton(irb, px3, 0x1, 0x36, proto))
    b.append(Rbutton(irb, px4, 0x10, 0x34, proto))
    ###################################################################
    led = Pin(25, Pin.OUT)
    while True:
        await asyncio.sleep_ms(500)  # Obligatorisch blinkende LED.
        led(not led())

# Funktion, die aufgerufen wird, um das Senden der IR-Daten zu starten
def SendIRData(proto=0):
    loop.run_until_complete(main(proto))

print(''.join((s, srp2)))

# Endlosschleife für Dauerbetrieb
while True:
    SendIRData()

Beispielprogramm Download

KY005-Pico.zip