Änderungen

KY-005 Infrarot Transmitter Modul

3.704 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:
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>
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.
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: <pre class="brush:cppbash">sudo nano ~mv /MeineFernbedienungetc/lirc/lircd.conf/etc/lirc/lircd.conf.bak
</pre>
und mit dem Befehl... <pre class="brush:cppbash">sudo nano cp ~/MeineFernbedienung.conf /etc/lirc/lircd.conf
</pre>
...wird die vorab neu erstellte Konfigurationsdatei für das lirc-System eingesetzt.
# coding=utf-8Nun kann mit...
<pre class="brush:pybash"># Benoetigte Module werden importiert und eingerichtetsudo /etc/init.d/lirc startimport globimport timefrom time import sleepimport RPi.GPIO as GPIO</pre>
# An dieser Stelle kann die Pause zwischen den einzelnen Messungen eingestellt ...das lirc System wieder gestartet werdensleeptime = 1.
# Der One-Wire EingangsPin wird deklariert Ab nun ist die neu angelernte Fernbedienung im System registriert und der integrierte PullUp-Widerstand aktiviertGPIOkann in kompatibler Software , wie z.setmode(GPIOB.BCM)GPIOdem Mediencenter OpenElec verwendet werden. Alternativ kann mit dem Befehl.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# Nach Aktivierung des Pull-UP Widerstandes wird gewartet,<pre class="brush:bash">irw# bis die Kommunikation mit dem DS18B20 Sensor aufgebaut istprint 'Warte auf Initialisierung...'</pre>
base_dir = '/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'.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.
# Funktion wird definiert, ----===Befehle senden mit dem der aktuelle Messwert am Sensor ausgelesen werden kanndef TemperaturMessung(): f Infrarot Transmitter== open(device_file, 'r') lines = f.readlines() fMö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.close() return lines
# Zur Initialisierung, wird der Sensor einmal "blind" ausgelesenTemperaturMessung()Zuerst überprüfen wir mit folgendem Befehl...
# Die Temperaturauswertung<pre class="brush: Beim Raspberry Pi werden erkennte one-Wire Slaves im Ordner# bash">irsend LIST MeineFernbedienung ""</sys/bus/w1/devices/ einem eigenen Unterordner zugeordnet. In diesem Ordner befindet sich die Datei w1-slavepre># 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(0welche Zuordnungen für die jeweilige gespeicherte Fernbedienung verfügbar sind.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 KeyboardInterruptNun können wir z.B. den Befehl [KEY_0] versenden, indem wir den folgenden Befehl verwenden: GPIO.cleanup()<pre class="brush:bash">irsend SEND_ONCE MeineFernbedienung KEY_0
</pre>
'''Anschlussbelegung Raspberry Pi:'''
{| style="height: 58px; paddingAuf dem Fernseher bzw. dem entsprechenden Empfänger-left: 30px;" width="228"|-||Endgerät, sollte sich nun eine Reaktion zeigen. Zu dem o.g. Befehl gibt es auch die Variation, dass das Signal||=||GPIO4||[Pin 7]|-||+V||=||3,3V||[Pin 1]|-||GND||=||Masse||[Pin 6]|}wiederholend ausgegeben wird
'''Beispielprogramm Download'''<pre class="brush:bash">irsend SEND_START MeineFernbedienung KEY_0</pre>
Hier nach wird der gesendete Code [[Medium:KY-001_RPi_TemperaturSensorKEY_0] so oft wiederholt bis mit..zip|KY-001_RPi_TemperaturSensor.zip]]
Zu starten mit dem Befehl<pre class="brush:bash">irsend SEND_STOP MeineFernbedienung KEY_0</pre>
<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