KY-005 Infrarot Transmitter Modul: Unterschied zwischen den Versionen

Aus Linkerkit.de

Wechseln zu: Navigation, Suche
(Codebeispiel Fernbedienung)
(Codebeispiel Raspberry Pi)
Zeile 177: Zeile 177:
  
 
==Codebeispiel Raspberry Pi==
 
==Codebeispiel Raspberry Pi==
Programmierbeispiel in der Programmiersprache Python
+
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.
  
<pre class="brush:py"># coding=utf-8
+
Für die Einrichtung eines Infrarot-Steuerungssystem, bietet sich unter Linux bietet die Software "lirc" an (veröffentlicht unter der LGPL - [http://www.lirc.org/ Website]).
# Benoetigte Module werden importiert und eingerichtet
+
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.
 +
 
 +
 
 +
 
 +
===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:
 +
 
 +
<pre class="brush:bash">sudo apt-get install lirc -y
 +
</pre>
 +
 
 +
[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:
 +
 
 +
<pre class="brush:bash">dtoverlay=lirc-rpi,gpio_in_pin=18,gpio_out_pin=17,gpio_in_pull=up
 +
</pre>
 +
 
 +
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:
 +
 
 +
<pre class="brush:bash">sudo nano /boot/config.txt
 +
</pre>
 +
 
 +
Mit der Tastenfolge [Strg+X -> Y -> Enter] kann die Datei, nach dem hinzufügen der Zeile am unteren Ende, gespeichert und geschlossen werden.
 +
 
 +
Danach starten wir den Raspberry Pi mit dem folgenden Befehl neu:
 +
 
 +
<pre class="brush:bash">sudo reboot
 +
</pre>
 +
 
 +
 
 +
===IR-Receiver Test===
 +
 
 +
Um den angeschlossenen Receiver zu testen, muss vorab lirc mit dem Befehl...
 +
 
 +
<pre class="brush:bash">sudo /etc/init.d/lirc stop
 +
</pre>
 +
 
 +
beendet werden. Danach kann mit...
 +
 
 +
<pre class="brush:bash">mode2 -d /dev/lirc0
 +
</pre>
 +
 
 +
...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:
 +
 
 +
<pre class="brush:bash">
 +
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
 +
...
 +
 
 +
</pre>
 +
 
 +
 
 +
 
 +
# coding=utf-8
 +
 
 +
<pre class="brush:py"># Benoetigte Module werden importiert und eingerichtet
 
import glob
 
import glob
 
import time
 
import time

Version vom 27. April 2016, 15:07 Uhr

Bild

ky-005.jpg

Technische Daten / Kurzbeschreibung

Eine Leuchtdiode, die im infraroten Bereich ausstrahlt. Je nach Eingangsspannung, werden Vorwiderstände benötigt


Vf= 1,1V


If= 20mA


emittierende Wellenlänge: 940nm (nicht sichtbares Licht)


Vorwiderstände:

Rf (3,3V) = 120Ω

[z.B. beim Einsatz mit ARM CPU-Kern basierten Mikrokontrollern wie Raspberry-Pi]


Rf (5V) = 220Ω 

[z.B. beim Einsatz mit Atmel Atmega basierten Mikrokontrollern wie Arduino]

Pin-Belegung

3 G V+R S.png


  • *Auf der Platine gibt es die Möglichkeit den jeweils benötigten Widerstand direkt aufzulöten. In dem Falle kann dann der mittlere Pin genutz werden, der dann den Widerstand beihnaltet.

Codebeispiel Arduino

Codebeispiel ON/OFF

Diese 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 = 13;

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:

LedTestArduino_4On_2Off.zip



Codebeispiel Fernbedienung


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]:

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

Anschlussbelegung Arduino 2 [Sender]:

Signal = [Pin 3 (Arduino Uno) | Pin 9 (Arduino Mega)]
GND+Widerstand = [Nur wenn Widerstand eingelötet; anstatt dritter Verbindung | GND]
GND = [Pin GND]

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.


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.

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
...


  1. coding=utf-8
# Benoetigte Module werden importiert und eingerichtet
import glob
import time
from time import sleep
import RPi.GPIO as GPIO

# An dieser Stelle kann die Pause zwischen den einzelnen Messungen eingestellt werden
sleeptime = 1

# Der One-Wire EingangsPin wird deklariert und der integrierte PullUp-Widerstand aktiviert
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# Nach Aktivierung des Pull-UP Widerstandes wird gewartet,
# bis die Kommunikation mit dem DS18B20 Sensor aufgebaut ist
print 'Warte auf Initialisierung...'

base_dir = '/sys/bus/w1/devices/'
while True:
    try:
        device_folder = glob.glob(base_dir + '28*')[0]
        break
    except IndexError:
        sleep(0.5)
        continue
device_file = device_folder + '/w1_slave'


# Funktion wird definiert, mit dem der aktuelle Messwert am Sensor ausgelesen werden kann
def TemperaturMessung():
    f = open(device_file, 'r')
    lines = f.readlines()
    f.close()
    return lines

# Zur Initialisierung, wird der Sensor einmal "blind" ausgelesen
TemperaturMessung()

# Die Temperaturauswertung: Beim Raspberry Pi werden erkennte one-Wire Slaves im Ordner
# /sys/bus/w1/devices/ einem eigenen Unterordner zugeordnet. In diesem Ordner befindet sich die Datei w1-slave
# in dem Die Daten, die über dem One-Wire Bus gesendet wurden gespeichert.
# In dieser Funktion werden diese Daten analysiert und die Temperatur herausgelesen und ausgegeben
def TemperaturAuswertung():
    lines = TemperaturMessung()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = TemperaturMessung()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        return temp_c

# Hauptprogrammschleife
# Die gemessene Temperatur wird in die Konsole ausgegeben - zwischen den einzelnen Messungen
# ist eine Pause, deren Länge mit der Variable "sleeptime" eingestellt werden kann
try:
    while True:
        print '---------------------------------------'
        print "Temperatur:", TemperaturAuswertung(), "°C"
        time.sleep(sleeptime)

except KeyboardInterrupt:
    GPIO.cleanup()

Anschlussbelegung Raspberry Pi:

Signal = GPIO4 [Pin 7]
+V = 3,3V [Pin 1]
GND = Masse [Pin 6]

Beispielprogramm Download

KY-001_RPi_TemperaturSensor.zip

Zu starten mit dem Befehl:

sudo python KY-001_RPi_TemperaturSensor.py