KY-022 Infrarot Receiver Modul

Aus SensorKit X40 Wiki

Wechseln zu: Navigation, Suche

Bild

ky-022.jpg

Technische Daten / Kurzbeschreibung

Trägerfrequenz: 38kHz 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.

Pin-Belegung

3 S V G.png

Codebeispiel Arduino

Mithilfe 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 einzelne Arduinos benötigt. Der eine fungiert hierbei dann als Sender und der andere empfängt die 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 LGPL

Die Library ist 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 RC5 Protokoll 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/Code der Library gekennzeichnet.


Code für den Empfänger:

// Arduino-IRremote Iibrary wird hinzugefuegt
#include <IRremote.h>

// Hier kann der entsprechende Eingangspin für den Signalausgang
// des KY-022 deklariert werden
int RECV_PIN = 11;

// Arduino-IRremote Library wird initialisiert
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Infrarot-Receiver wird gestartet
}

// Hauptprogrammschleife
void loop() {
  
  // Es wird geprüft ob am Recveiver ein Signal eingegangen ist
  if (irrecv.decode(&results)) {
    //Bei Signaleingang wird das empfangene und dekodierte Signal in der serriellen Konsole ausgegeben
    Serial.println(results.value, HEX);
    irrecv.resume(); 
  }
}


Code für den Sender:

//Arduino-IRremote Library wird hinzugefügt...
#include <IRremote.h>

//...und hier initialisiert
IRsend irsend;

// Die Einstellungen für den Ausgang werden von der Library übernommen
// Die entsprechenden Ausgänge unterscheiden sich je nach verwendeten Arduino
// Arduino UNO:  Ausgang = D3
// Arduino MEGA: Ausgang = D9
// Eine komplette Auflistung der entsprechenden Ausgänge finden Sie unter
// http://z3t0.github.io/Arduino-IRremote/
void setup()
{
}

// Hauptprogrammschleife
void loop() {
        // Der Sender verschickt in diesem Beispiel das Signal A90 (in hexdezimaler Form) in der Kodierung "RC5"
        // Dieses wird dreimal hintereinander gesendet und danach eine Pause für 5 Sekunden eingelegt
	for (int i = 0; i < 3; i++) {
		irsend.sendRC5(0xA90, 12); // [0xA90] zu versendetes Signal | [12] Bit-Länge des zu versendeten Signals (hex A90=1010 1001 0000)
		delay(40);
	}
	delay(5000); //Zwischen den Sendeimpulsen gibt es eine Pause von 5 Sekunden
}

Beispielprogramm Download:

Arduino_Fernbedienung.zip


Anschlussbelegung Arduino 1 [Empfänger]:

KY-022

Signal = [Pin 11]
+V = [Pin 5V]
GND = [Pin GND]

Anschlussbelegung Arduino 2 [Sender]:

KY-005

Signal = [Pin 3 (Arduino Uno) | Pin 9 (Arduino Mega)]
GND+Widerstand = [Pin GND*]
GND = [Pin GND]
  • *Nur wenn Vorwiderstand auf dem Modul verlötet wurde und nicht vor dem Modul geschaltet ist

Codebeispiel Raspberry Pi

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, bietet sich unter Linux bietet die Software "lirc" an (veröffentlicht unter der LGPL - Website). Im Folgenden zeigen wir auf, wie lirc eingerichtet, eine Fernbedienung angelernt werden kann und per Infrarotdiode die erlernten Signale per Infrarot versendet werden können (um z.B. aus dem Raspberry Pi eine per Software steuerbare Infrarot Fernbedienung zu machen).

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


Anschlussbelegung Raspberry Pi:

KY-005

Signal = GPIO17 [Pin 11]
GND+Widerstand = GND* [Pin 9]
GND = GND [Pin 6]
  • *Nur wenn Vorwiderstand auf dem Modul verlötet wurde und nicht vor dem Modul geschaltet ist


KY-022

Signal = GPI18 [Pin 12]
+V = 3,3V [Pin 17]
GND = GND [Pin 25]

Lirc Installation

Als erstes öffnen wir auf dem Desktop ein Terminal oder verbinden wir uns per SSH mit dem Raspberry Pi. Dort geben Sie den folgenden Befehl ein, um lirc auf den Raspberry Pi zu installieren:

sudo apt-get install lirc -y

[Hierzu muss der Raspberry Pi mit dem Internet verbunden sein]

Damit das lirc Modul direkt zum Start des Betriebssystem verfügbar ist, müssen folgende Zeilen am Ende der Datei "/boot/config.txt" hinzugefügt werden:

    dtoverlay=lirc-rpi,gpio_in_pin=18,gpio_out_pin=17,gpio_in_pull=up

Hierbei definiert "gpio_in_pin=18" den Eingangspin für den IR-Receiver, sowie "gpio_out_pin=17" den Ausgangspin für den IR-Transmitter.


Die Datei kann mit folgenden Befehl editiert werden:

sudo nano /boot/config.txt

Mit der Tastenfolge [Strg+X -> Y -> Enter] kann die Datei, nach dem hinzufügen der Zeile am unteren Ende, gespeichert und geschlossen werden.

Auch die Datei "/etc/lirc/hardware.conf" muss modifiziert werden. Hierbei ist der Befehl...

sudo nano /etc/lirc/hardware.conf

... zu verwenden. Hier müssen die die folgenden Zeilen modifiziert werden. An den entsprechenden Stellen muss dann ...

    DRIVER="UNCONFIGURED" 
    --->>  
    DRIVER="default"
    DEVICE=""
    --->>
    DEVICE="/dev/lirc0"
    MODULES=""
    --->>  
    MODULES="lirc_rpi"

...geändert werden.

Die modifizierte Datei muss dann wie folgt aussehen:

# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS=""

#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD=false

#Don't start irexec, even if a good config file seems to exist.
#START_IREXEC=false

#Try to load appropriate kernel modules
LOAD_MODULES=true

# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="default"
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"

# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""

Danach starten wir den Raspberry Pi mit dem folgenden Befehl neu:

sudo reboot

IR-Receiver Test

Um den angeschlossenen Receiver zu testen, muss vorab lirc mit dem Befehl...

sudo /etc/init.d/lirc stop

beendet werden. Danach kann mit...

mode2 -d /dev/lirc0

...getestet werden, ob am Raspberry Pi Signale detektiert werden können. Hierzu nehmen Sie eine Infrarot Fernbedienung und drücken eine beliebige Taste - es sollten Zeilen in der folgenden Form auftauchen:

space 95253
pulse 9022
space 2210
pulse 604
space 95246
pulse 9019
space 2211
pulse 601
space 95252
pulse 9019
space 2210
pulse 603
space 95239
pulse 9020
space 2208
pulse 603
...

Mit dem Befehl...

sudo /etc/init.d/lirc start

... kann der lirc-Dienst wieder gestartet werden.


Fernbedienung anlernen

Um eine Infrarot-Fernbedienung im lirc System zu registrieren, muss für die Fernbedienung die Datei "/etc/lirc/lircd.conf" konfiguriert werden. In dieser sind die jeweiligen Zuordnungen von Befehl zu empfangenen Infrarot-Codes gespeichert.

Um eine entsprechend richtig formatierte lircd.conf erstellen zu können, gibt es in der lirc-Software einen Assistenten, der die Datei automatisch erstellt. Die Vorgehensweise für diese Konfiguration ist wie folgt:

Zu aller erst, muss der lirc-Service beendet werden

sudo /etc/init.d/lirc stop

Mit dem folgenden Befehl starten wir dann den Assistenten:

irrecord -d /dev/lirc0 ~/MeineFernbedienung.conf

Dieser Assistent führt vorab eine erste Initialisierung der Fernbedienung durch - in dieser müssen mehrere Tasten abwechselnd gedrückt werden, damit das lirc System die entsprechende Kodierung der Fernbedienung erlernen kann. Bitte folgen Sie dazu die entsprechenden Anweisungen des Assistenten. Nach der Initialisierung fragt dann der Assistent nach dem Namen der Knopfzuordnung, die mit einem neuen Infrarotcode aufgezeichnet werden soll. Sie können sich hierzu die Knopfzuordnungen aus der folgenden Datei auswählen

FernbedienungsCodes.txt

Diese müssen dann in den Assistenten eingegeben und mit Enter bestätigt werden. Hiernach startet dann die Aufzeichnung des Infrarot-Codes, für die ausgewählte Taste.

Beispiel: [KEY_0] eingeben -> mit Enter bestätigen -> Taste "0" auf der Fernbedienung drücken -> warten bis der Assistent die Aufnahme bestätigt.

Sollen keine weiteren Tasten angelernt werden, so kann der Assistent mit der Enter-Taste beendet werden. Hiernach ist die Konfigurationsdatei erstellt, jedoch muss noch ein Name für die aufgezeichnete Fernbedienung vergeben werden. Hierzu öffnen wir die Datei im Editor mit:

sudo nano ~/MeineFernbedienung.conf

Hier kann dann die Zeile 17 von

    name  /home/pi/MeineFernbedienung.conf

in

    name  MeineFernbedienung

geändert werden. Beachten Sie hierbei keine Leerzeichen und Sonderzeichen innerhalb des Namens zu verwenden. Mit der Tastenfolge [Strg+X -> Y -> Enter] kann die Datei, nach dem hinzufügen der Zeile am unteren Ende, gespeichert und geschlossen werden.

Nach erstellen der Konfigurationsdatei können Sie vorab für die original lircd.conf mit folgenden Befehl ein Backup erstellen:

sudo mv /etc/lirc/lircd.conf /etc/lirc/lircd.conf.bak

und mit dem Befehl...

sudo cp ~/MeineFernbedienung.conf /etc/lirc/lircd.conf

...wird die vorab neu erstellte Konfigurationsdatei für das lirc-System eingesetzt.

Nun kann mit...

sudo /etc/init.d/lirc start

...das lirc System wieder gestartet werden.

Ab nun ist die neu angelernte Fernbedienung im System registriert und kann in kompatibler Software , wie z.B. dem Mediencenter OpenElec verwendet werden. Alternativ kann mit dem Befehl...

irw

...die Zuordnungen und die Funktion der Fernbedienung getestet werden.

Will man die Fernbedienung nun z.B. in OpenElec verwenden, kann es je nach Konfiguration der Mediensoftware sein, dass lirc in den Optionen von OpenElec vorab noch aktiviert werden muss.


Befehle senden mit dem Infrarot Transmitter

Möchte man mit dem Raspberry Pi nun Geräte wie z.B. den Fernseher per Infrarot steuern, so können nun die vorab angelernten Befehle mit Hilfe des Infrarot Transmitters wieder versendet werden. So lässt sich z.B. eine Software gesteuerte Infrarot-Steuerung aufbauen oder einzelne Geräte mittels Netzwerk/Internet ein und Ausschalten.

Zuerst überprüfen wir mit folgendem Befehl...

irsend LIST MeineFernbedienung ""

...welche Zuordnungen für die jeweilige gespeicherte Fernbedienung verfügbar sind.


Nun können wir z.B. den Befehl [KEY_0] versenden, indem wir den folgenden Befehl verwenden:

irsend SEND_ONCE MeineFernbedienung KEY_0

Auf dem Fernseher bzw. dem entsprechenden Empfänger-Endgerät, sollte sich nun eine Reaktion zeigen. Zu dem o.g. Befehl gibt es auch die Variation, dass das Signal wiederholend ausgegeben wird

irsend SEND_START MeineFernbedienung KEY_0

Hier nach wird der gesendete Code [KEY_0] so oft wiederholt bis mit...

irsend SEND_STOP MeineFernbedienung KEY_0

...wieder beendet wird. Dies wird z.B. bei Befehlen wie "Lautstärke Hoch" oder "Helligkeit runter" angewendet.