Änderungen

KY-005 Infrarot Transmitter Modul

2.436 Byte hinzugefügt, 09:34, 28. Apr. 2016
/* Codebeispiel Fernbedienung */
==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.
'''[[Medium:LedTestArduino_4On_2Off.zip|LedTestArduino_4On_2Off.zip]]'''
 
----
======Codebeispiel Fernbedienung======
<br />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.<br /><br />
'''Anschlussbelegung Arduino 1 [Empfänger]:'''
 
''KY-022''
{| style="height: 58px; padding-left: 30px;" width="228"
'''Anschlussbelegung Arduino 2 [Sender]:'''
KY-005 {| style="height: 70px67px; padding-left: 30px;" width="775462"
|-
||Signal
||GND+Widerstand
||=
||[Nur wenn Widerstand eingelötet; anstatt dritter Verbindung | Pin GND*]
|-
||GND
||[Pin GND]
|}
* *Nur wenn Vorwiderstand auf dem Modul verlötet wurde und nicht vor dem Modul geschaltet ist
==Codebeispiel Raspberry Pi==
Es sind zwei Anwendungsbeispiele für dieses Sensormodul hier 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, wo er als entweder Infrarot Receiver für Fernbedienungen zum Steuern von z.B. der Mediencenter-Software OpenElec oder als Infrarot-Transmitter zur Software-gesteuerten Fernbedienung programmiert werden kann.
 
===Codebeispiel ON/OFF===
Programmierbeispiel in der Programmiersprache Python
 
<pre class="brush:py"># 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 = 24
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()
 
 
</pre>
'''Anschlussbelegung Raspberry Pi:'''
 
{| style="height: 75px; padding-left: 30px;" width="263"
|-
||Sensor Signal
||=
||GPIO24
||[Pin 18]
|-
||GND+Widerstand
||=
||GND*
||[Pin 9]
|-
||Sensor GND
||=
||Masse
||[Pin 6]
|}
* *Nur wenn Vorwiderstand auf dem Modul verlötet wurde und nicht vor dem Modul geschaltet ist
 
'''Beispielprogramm Download'''
 
[[Medium:LedTest_RPi_4On_2Off.zip|LedTest_RPi_4On_2Off.zip]]
 
Zu starten mit dem Befehl:
 
<pre class="brush:bash">sudo python LedTest_RPi_4On_2Off.py
</pre>
 
----
===Codebeispiel Fernbedienung===
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.
Zu diesem Zwecke werden die Module KY-005 als Infrarot-Transmitter und KY-022 als Infrarot Receiver angewendet.
'''<br />Anschlussbelegung Raspberry Pi:'''
 
''KY-005''
 
{| style="height: 63px; padding-left: 30px;" width="275"
|-
||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
 
''<br />KY-022''
 
{| style="height: 58px; padding-left: 30px;" width="228"
|-
||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:
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>
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...
 
<pre class="brush:bash">sudo nano /etc/lirc/hardware.conf
</pre>
... 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:
 
<pre class="brush:py"># /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=""
 
</pre>
Danach starten wir den Raspberry Pi mit dem folgenden Befehl neu:
<pre class="brush:bash">sudo reboot
</pre>
 
----
===IR-Receiver Test===
... 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.
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:
...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...
<pre class="brush:bash">irsend LIST MeineFernbedienung ""</pre>
...welche Zuordnungen für die jeweilige gespeicherte Fernbedienung verfügbar sind.
# coding=utf-8Nun können wir z.B. den Befehl [KEY_0] versenden, indem wir den folgenden Befehl verwenden:
<pre class="brush:pybash"># Benoetigte Module werden importiert und eingerichtetirsend SEND_ONCE MeineFernbedienung KEY_0import globimport timefrom time import sleepimport RPi.GPIO as GPIO</pre>
# An dieser Stelle kann 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 Pause zwischen den einzelnen Messungen eingestellt werdensleeptime = 1Variation, dass das Signal wiederholend ausgegeben wird
# Der One-Wire EingangsPin wird deklariert und der integrierte PullUp-Widerstand aktiviert<pre class="brush:bash">irsend SEND_START MeineFernbedienung KEY_0GPIO.setmode(GPIO.BCM)GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP)</pre>
# Nach Aktivierung des Pull-UP Widerstandes Hier nach wird gewartet,# der gesendete Code [KEY_0] so oft wiederholt bis die Kommunikation mit dem DS18B20 Sensor aufgebaut istprint 'Warte auf Initialisierung...'
base_dir <pre class= '/sys/bus/w1/devices/'while True: try: device_folder = glob.glob(base_dir + '28*')[0] break except IndexError: sleep(0.5) continuedevice_file = device_folder + '/w1_slave'  # Funktion wird definiert, mit dem der aktuelle Messwert am Sensor ausgelesen werden kanndef TemperaturMessung(): f = open(device_file, 'r') lines = f.readlines() f.close() return lines # Zur Initialisierung, wird der Sensor einmal "blind" ausgelesenTemperaturMessung() # Die Temperaturauswertungbrush: 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 ausgegebendef 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 bash"sleeptime" eingestellt werden kanntry: while True: print '---------------------------------------' print "Temperatur:", TemperaturAuswertung(), "°C" time.sleep(sleeptime) except KeyboardInterrupt: GPIO.cleanup()>irsend SEND_STOP MeineFernbedienung KEY_0
</pre>
'''Anschlussbelegung Raspberry Pi:'''
{| style="height: 58px; padding-left: 30px;" width="228"|-||Signal||=||GPIO4||[Pin 7]|-||+V||=||3,3V||[Pin 1]|-||GND||=||Masse||[Pin 6]|} '''Beispielprogramm Download''' [[Medium:KY-001_RPi_TemperaturSensor.zip|KY-001_RPi_TemperaturSensor.zip]] Zu starten mit dem Befehl: <pre class=.wieder beendet wird. Dies wird z.B. bei Befehlen wie "Lautstärke Hoch" oder "brush:bashHelligkeit runter">sudo python KY-001_RPi_TemperaturSensorangewendet.py</pre>
Bürokrat, Administrator
611
Bearbeitungen