Liebes Forum,
ich habe für meinen behinderten Sohn eine Musikanlage (siehe Foto) gebaut, die Musik von der SD Karte abspielt, einen Ein/Aus Schalter hat und einen Bewegungsmelder zum Weiterschalten des Musikstückes.So kann er das Gerät steuern (Tastendruck, Hand an Bewegungsmelder halten).
Bisheriger Aufbau:
Raspi 3B+ mit Hifiberry DAC+ im Holzgehäuse
Taste für Ein/Aus per python scrypt realisiert
Bewegungsmelder auf dem Gehäusedeckel, durch Nagellack auf einen engen Erfassungskegel reduziert (reagiert leider trotzdem manchmal auch auf entfernte Bewegungen, der Radius lässt sich nur auf minmal 3m verkleinern per Poti)
Aktivlautsprecher 2.1
Ohne Monitor, Tastatur, Maus
Raspbian Strech
Kodi mit addon für Bewegungsmelder (python service script), Kodi startet automatisch im Modus Abspielen einer automatischen playlist von Musiktiteln auf der SD Karte
Remotezugriff per Teamviewer und Yatse
Dies will ich nun
ausbauen für Video und suche Erfahrungen, vielleicht sogar Beispiele für das folgende Projekt:
Zusätzlich:
Monitor ca 22 Zoll, Wandbefestigung, Halterung vorhanden
Der Monitor sollte vom Raspi aus automatisch ein/aus geschaltet werden. Der vorhandene Schalter am Monitor muss deaktiviert werden. Alternativ Schalten des raspberry durch Betätigen des vorhandenen Schalters am Monitor.
Der Raspi muß fest montiert werden, am besten unterhalb des Monitors, z.B. an der Wandhalterung. Der Bewegungsmelder kann dann hinter dem Monitor angebracht werden und richtet den Erkennungskegel zur Seite weg.
Dann braucht es einen zweiten Bewegungsmelder und einen zweiten Ein/Aus Schalter, der über Funk / WLAN / Bluetooth mit dem raspi kommuniziert und ebenfalls das Skippen / Schalten ermöglicht. Das braucht mein Sohn, wenn er auf dem Bett sitzt und Musik hören will.
Ein weiterer Bewegungsmelder, der von Musik auf Video schaltet, wenn mein Sohn sich vor den Monitor setzt.Und auf Musik schaltet, wenn er wieder weg geht.
Die Aktivlautsprecher bleiben einfach immer eingeschaltet (vielleicht kann man eine Funksteckdose nehmen, die der raspi ansteuert? Dafür suche ich auch Erfahrungen, Beispiele, ist aber zweitrangig.)
Alle Kabel müssen vor dem Herausziehen gesichert sein, am besten hinter einer Abdeckung.
Lautstärkeregler (kann nur von Helfern bedient werden)
Tastatur und Maus sollen zu Wartungszwecken bei Bedarf anschliessbar sein (Buchsen im Gehäuse oder per Funk).
Musik läuft per Zufallsplaylist von der SD Karte
Video analog, ich lade dazu passende Videos von Youtube etc. runter.
Ich hoffe, es wird einigermassen klar, was ich will und ihr habt Ideen und Beispiele dazu.
LG Ernestopheles
Quellcodes:
Python-Quellcode: pir.py
- import xbmc
- import xbmcaddon
- import RPi.GPIO as GPIO
- import time
- class MyPlayer(xbmc.Player):
- def __init__ (self):
- xbmc.Player.__init__(self)
- SENSOR_PIN = 23
- GPIO.setmode(GPIO.BCM)
- GPIO.setup(SENSOR_PIN, GPIO.IN,pull_up_down=GPIO.PUD_UP)
- def mein_callback(channel):
- xbmc.executebuiltin("PlayerControl(Next)")
- GPIO.add_event_detect(SENSOR_PIN , GPIO.FALLING, callback=mein_callback)
- fobj_out = open('skipped.txt', 'a')
- fobj_out.write('Start am ' + time.strftime("%d.%m.%Y %H:%M:%S") + '\n')
- fobj_out.close()
- monitor = xbmc.Monitor()
- player = MyPlayer()
- try:
- fobj_out = open('skipped.txt', 'a')
- while True:
- if GPIO.event_detected(SENSOR_PIN):
- if player.isPlayingAudio():
- text = 'Skipped: ' + time.strftime("%d.%m.%Y %H:%M:%S") + xbmc.getInfoLabel("player.Title").decode('utf-8','ignore')
- fobj_out.write(text + '\n')
- time.sleep(1)
- except KeyboardInterrupt:
- print("Keyboard Interruption issued, Stopping...")
- except:
- print("Exception")
- finally:
-
-
-
- fobj_out.write('Ende am ' + time.strftime("%d.%m.%Y %H:%M:%S") + '\n')
- fobj_out.close()
- GPIO.cleanup()
Alles anzeigen
XML-Quellcode: addon.xml
- <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
- <addon id="script.service.playnext" name="play-next" version="0.0.1" provider-name="ej">
- <requires>
- <import addon="xbmc.python" version="2.20.0"/>
- </requires>
- <extension point="xbmc.service" library="pir.py" />
- <extension point="xbmc.addon.metadata">
- <summary lang="en_GB">Bewegungsmelder script</summary>
- <description lang="en_GB">a script to skip playback to the next titel when movement detected</description>
- <language></language>
- <platform>all</platform>
- </extension>
- </addon>
Alles anzeigen
Python-Quellcode: pishutdown.py
- import RPi.GPIO as GPIO
- from subprocess import call
- from datetime import datetime
- import time
- shutdownPin = 27
- debounceSeconds = 0.01
- GPIO.setmode(GPIO.BCM)
- GPIO.setup(shutdownPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
- buttonPressedTime = datetime.now()
- def buttonStateChanged(pin):
- print("button pressed")
- global buttonPressedTime
- if not (GPIO.input(pin)):
-
- print("not GPIO.input(pin)")
-
- buttonPressedTime = datetime.now()
- else:
- print("GPIO.input(pin):")
- print(pin)
-
-
- elapsed = (datetime.now() - buttonPressedTime).total_seconds()
- buttonPressedTime = datetime.now()
- if elapsed >= debounceSeconds:
-
- call(['shutdown', '-h', 'now'], shell=False)
- GPIO.add_event_detect(shutdownPin, GPIO.BOTH, callback=buttonStateChanged)
- while True:
-
- time.sleep(5)
- GPIO.cleanup()
Alles anzeigen