Hallo liebe Raspberry Pi Freunde,
hier möchte ich Euch zeigen, wie sich auch mit standard LED Strips ein einfarbiges Ambilight mit Hyperion in Kombination mit Pi-Blaster umsetzen lässt.
Alternativ könnt ihr hiermit auch den RPi dazu nutzen, Eure LED Strips mit dem Smartphone zu steuern (IOS/Android).
Für dieses Tutorial setze ich kleinere Grundkenntnisse voraus. Ihr solltet zumindest wissen, wie ihr OSMC installiert und Euch per SFTP und ggf. per SSH mit Eurem RPi verbindet und configs bearbeiten könnt.
Ebenfalls solltet ihr halbwegs mit einem Lötkolben umgehen können...
Viel Spaß beim schmöckern und basteln...
1. Was wird benötigt / was geht / was geht nicht? (Stand: April 2015)
"was geht / was geht nicht ?"
Wie oben schon steht, ist mit dieser Variante "nur" ein einfarbiges Ambilight möglich.
Heißt also, Hyperion wertet das Bild aus, berechnet eine Farbe aus dem gesamten Bild und gibt dieses an die LED's weiter.
Auch Philips hat mal so angefangen...
Software:
Als Plattform habe ich OSMC verwendet.
OpenElec wäre mir zwar lieber, aber hier scheint es Probleme mit der aktuellen Version von Hyperion zu geben.
Der v4l2-Grabber ließ sich bei mir nicht starten. Beim Aufruf von hyperion-v4l2 hatte ich einige Fehlermeldungen.
pi-blaster ist NICHT zwischen den RPi B/B+ und RPi2 kompatibel.
Es gibt für die beiden Modelle unterschiedliche pi-blaster Versionen, die ich hier, fertig kompiliert, zur Verfügung stellen werde.
RPi B, B+ :
Auf meinem B und B+ Modell habe ich es leider nicht geschafft, Hyperion mit einer externen Quelle zum laufen zu bekommen.
Mir steht nur ein Grabber mit STK1160 Chipsatz zur Verfügung und hatte mit dem leidigen "Frame too small" Fehler zu kämpfen.
Im Kodi funktioniert das ganz gut.
Lediglich bei einem Film in 1080p mit DTSHD-MA (!) Audio hatte ich einige Ruckler bei der Wiedergabe.
RPi2 :
Auf meinem RPi2 war das alles kein Problem.
Ich konnte Hyperion auch mit externen Quellen befeuern und Ruckler hatte ich auch keine.
"was wird benötigt ?"
- RaspberryPi B, B+ oder RPi2, ggf. USB Grabber + HDMI Splitter und HDMI2AV Konverter (siehe andere Ambilight Threads),
Netzteil, HDMI Kabel, MicroSD Karte, Gehäuse und ggf Kühlrippen (eben alles was zum Betrieb für einen RPi benötigt wird)
- LED Strips + passendes Netzteil und optional ein passender RGB-Controller
Diese gibt es im 5m Set bei ebay oder Amazon [Anzeige] für ca. 15 Euro
- Elektronik Kleinteile zum Aufbau einer einfachen Schaltung, wenn kein RGB-Controller vorhanden ist
2. Technische Umsetzung bzw. Modifikation des vorhandenen RGB Controllers
"Aufbau einer einfachen Schaltung :"
Hierfür werden drei Transistoren (TIP120) benötigt und sieht folgendermassen aus :
In einem Blog habe ich gelesen, dass auch IRLZ34N MOSFETs funktionieren sollen, habe ich selber jedoch nicht getestet.
Wie ihr das ganze Aufbaut, bleibt euch überlassen.
“Fliegende” Verkabelung, Steckbrett oder Lochraster sind einige Möglichkeiten.
Ich habe mich für die Lochraster Variante entschieden und dabei Pin-Header und Schraubklemmen verwendet um etwas flexibler zu sein :
Auf die GPIO Belegung am RPi werde ich später noch näher eingehen.
oder alternativ :
"Modifikation des vorhandenen RGB Controllers :"
In den Gängigen Sets von ebay oder Amazon ist meistens folgender Controller mit dabei :
Ansonsten gibt es den auch für ca. 2,50 Euro bei unseren Chinesichen Freunden bei ebay
Dieser lässt sich mit einem kleinen Schraubendreher sehr leicht aufhebeln.
Hier kommt nun die Platine zum vorschein.
Die drei weißen Kabel rechts gehen zum Infrarot Empfänger und die Farbigen zum LED-Strip Connector
Um für Euch alles etwas übersichtlicher zu machen, habe ich alle kabel entfernt.
Auf der linken Seite sieht man nun die drei Transistoren in SMD Bauweise.
Des Weiteren müssen die beiden IC's entfernt werden, da es sonst zu sehr unschönem flackern der LEDs kommt.
Entweder ablöten oder mit einem Seitenschneider die ICs von den Beinchen abknipsen.
Es gibt nun je nach Lötskill drei Mögliche Varianten die Kabel in Richtung RPi auf die Platine zu löten. Ich habe die Stellen in den RGB Farben markiert und sind dann jeweils von oben nach unten zu verwenden.
Für Masse (GND) eignet sich der Lötpunkt ganz links (schwarz markiert)
Variante 1: die Kabel werden direkt an den jeweiligen Transistor gelötet (Punkte links)
Variante 2: die Kabel werden an den Beinchen von dem abgeknipsten IC gelötet (Punkte rechts)
Variante 3: an den drei mittleren Markierungen den grünen Schutzlack etwas abkratzen bis die Kupferleitung sichtbar wird und die Kabel dann direkt auf die freigekratzen Stellen auf die Platine löten.
Ich habe mich für die Variante 3 entschieden, da diese für mich die einfachste war.
Da der Controller in seiner ursprünglichen Funktion nicht mehr verwendet werden kann, habe ich den Infrarot-Empfänger abgelassen und das Loch im Gehäuse dazu benutzt, die Kabel zum RPi durchzuführen.
Auch hier habe ich wieder Kabel mit Steckverbinder aus meiner Bastelkiste benutzt.
Der übriggebliebene IR-Empfänger kann übrigens dann auch gleich an den RPi angebracht werden und ist mit Kodi und einer MCE Remote kompatibel
3. Der Anschluss des Controllers bzw. der einfachen Schaltung an den RPi
"Funktionalität von pi-blaster und GPIOs :"
Damit Hyperion die LED-Strips ansteuern kann, wird pi-blaster benötigt.
Weitere Infos zu pi-blaster sowie den Quellcode gibt es bei github
Pi-Blaster "reserviert" sich beim Start die folgenden GPIOs :
Channel GPIO Nr. Pin in P1 header
--- 0 ------ 4 ---------- P1- 7
--- 1 ------ 17 --------- P1-11
--- 2 ------ 18 --------- P1-12
--- 3 ------ 21 --------- P1-13
--- 4 ------ 24 --------- P1-18 (GPIO hab ich bewusst doppelt eingetragen!)
--- 5 ------ 22 --------- P1-15
--- 6 ------ 23 --------- P1-16
--- 7 ------ 24 --------- P1-18
--- 8 ------ 25 --------- P1-22
Welche GPIOs ihr benutzt, bleibt Euch überlassen.
Ihr müsst euch lediglich merken, welche Farbe an welchen Pin angeschlossen ist.
Den dazugehörigen "Channel" benötigen wir später für die hyperion.config.json
Ich verwende diese hier :
GPIO17 für Rot (Channel 1)
GPIO22 für Grün (Channel 5)
GPIO24 für Blau (Channel 7)
Für Masse könnt ihr euch einen der GND Pins aussuchen.
Hier ist nochmal ein komplettes Pin-Out in dem ich meine drei Farben markiert habe :
4. alles rund um die Software
"Installation und Funktionstest von pi-blaster unter OSMC :"
Zunächst möchte ich euch hier den kompilierten pi-blaster zur Verfügung stellen:
pi-blaster für RPi B(+) und RPi2
Aus dem Archiv wählt ihr den entsprechenden pi-blaster für euren RPi aus.
Diese Datei kopiert ihr dann per SFTP auf den RPi in das Verzeichnis : /home/osmc/
Anschließend muss diese noch ausführbar gemacht werden :
Nun kann schon der erste Funktionstest erfolgen.
Solltet ihr die Verkabelung nach meinem Beispiel vorgenommen haben, schaut das dann so aus :
Als erstes starten wir pi-blaster
Die GPIOs können jetzt direkt angesprochen werden.
Nun sollten die LEDs rot leuchten
Die 17 steht für den GPIO der angesprochen werden soll und der Wert dahinter muss immer zwischen 0 (aus) und 1 (an) sein.
Es sind auch nachkomma stellen möglich:
Jetzt sollten die roten LEDs dunkler geworden sein
schaltet die roten LEDs wieder aus
Das ganze könnt ihr nun auch mit den GPIO 22 (Grün) und GPIO 24 (Blau) testen.
Oder eben mit den von Euch gewählten GPIOs.
Ihr könnt auch die Farben nach belieben mischen und damit ein bisschen herumspielen.
"Installation von Hyperion:"
Da es hierzu schon diverse Themen gibt, werde ich das im Schnelldurchgang machen und dafür näher auf die Config eingehen.
Weitere Infos und den Quellcode von Hyperion gibt es auf github
cd /home/osmc
sudo apt-get update
sudo apt-get install libqtcore4 libqtgui4 libqt4-network libusb-1.0-0 ca-certificates
wget -N https://raw.github.com/tvdzwan/hyperion/master/bin/install_hyperion.sh
chmod +x /home/osmc/install_hyperion.sh
sudo sh ./install_hyperion.sh
Damit ist Hyperion installiert
"unsere hyperion.config.json"
Im Pfad /opt/hyperion/config befindet sich die Datei hyperion.config.json
Am besten ersetzt ihr den Inhalt dieser Config mit folgendem code :
{
"device" :
{
"name" : "MyPi",
"type" : "piblaster",
"output" : "/dev/pi-blaster",
"assignment" : " r g b "
},
"color" :
{
"transform" :
[
{
"id" : "default",
"leds" : "*",
"hsv" :
{
"saturationGain" : 1.0000,
"valueGain" : 1.0000
},
"red" :
{
"threshold" : 0.0000,
"gamma" : 1.0000,
"blacklevel" : 0.0000,
"whitelevel" : 1.0000
},
"green" :
{
"threshold" : 0.0000,
"gamma" : 1.0000,
"blacklevel" : 0.0000,
"whitelevel" : 0.7500
},
"blue" :
{
"threshold" : 0.0000,
"gamma" : 1.0000,
"blacklevel" : 0.0000,
"whitelevel" : 0.7500
}
}
],
"smoothing" :
{
"type" : "linear",
"time_ms" : 200,
"updateFrequency" : 40.0000
}
},
"leds" :
[
{
"index" : 0,
"hscan" : { "minimum" : 0.0000, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.0000, "maximum" : 1.0000 }
},
{
"index" : 1,
"hscan" : { "minimum" : 0.0000, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.0000, "maximum" : 1.0000 }
},
{
"index" : 2,
"hscan" : { "minimum" : 0.0000, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.0000, "maximum" : 1.0000 }
}
],
"blackborderdetector" :
{
"enable" : true,
"threshold" : 0.05
},
"effects" :
{
"paths" :
[
"/opt/hyperion/effects"
]
},
"bootsequence" :
{
"effect" : "Rainbow mood",
"duration_ms" : 1000
},
"framegrabber" :
{
"width" : 80,
"height" : 60,
"frequency_Hz" : 5.0
},
"xbmcVideoChecker" :
{
"xbmcAddress" : "127.0.0.1",
"xbmcTcpPort" : 9090,
"grabVideo" : true,
"grabPictures" : true,
"grabAudio" : true,
"grabMenu" : true,
"grabScreensaver" : true,
"enable3DDetection" : true
},
"jsonServer" :
{
"port" : 19444
},
"protoServer" :
{
"port" : 19445
},
"endOfJson" : "endOfJson"
}
Alles anzeigen
"Erläuterung der hyperion.config.json"
Im Gegensatz zu den anderen Hyperion Threads bleibt unsere Config sehr überschaubar
Ein wichtiger Bestandteil ist die Zeile "assignment" und der Wert mit den dazugehörigen Leerzeichen !
Hier kommen die Channels von pi-blaster ins Spiel.
Jedes (Leer-)Zeichen im Wert, steht für den entpsrechenden Kanal bei 0 beginnend
Zur Erinnerung :
Channel GPIO Nr. Pin in P1 header
--- 0 ------ 4 ---------- P1- 7
--- 1 ------ 17 --------- P1-11
--- 2 ------ 18 --------- P1-12
--- 3 ------ 21 --------- P1-13
--- 4 ------ 24 --------- P1-18 (GPIO hab ich bewusst doppelt eingetragen!)
--- 5 ------ 22 --------- P1-15
--- 6 ------ 23 --------- P1-16
--- 7 ------ 24 --------- P1-18
--- 8 ------ 25 --------- P1-22
und zum Vergleich die Zeile aus der Config
und hier nochmal meine Gewählten GPIOs
GPIO17 für Rot
GPIO22 für Grün
GPIO24 für Blau
Das r steht an zweiter Stelle und somit für Kanal 1 welcher GPIO 17 (Rot) entspricht
Das g steht an sechster Stelle und somit für Kanal 5 welcher GPIO 22 (Grün) entspricht
Das b steht an achter Stelle und somit für Kanal 7 welcher GPIO 24 (Blau) entspricht
Des Weiteren waren mir die Farben insgesamt zu weiß.
Ich habe deswegen den "whitelevel" bei "green" und "blue" etwas herabgesetzt.
Das kann aber auch individuell angepasst werden.
"hyperion.config.json für die Verwendung des v4l2 grabbers"
{
"device" :
{
"name" : "MyPi",
"type" : "piblaster",
"output" : "/dev/pi-blaster",
"assignment" : " r g b "
},
"color" :
{
"transform" :
[
{
"id" : "default",
"leds" : "*",
"hsv" :
{
"saturationGain" : 1.0000,
"valueGain" : 1.0000
},
"red" :
{
"threshold" : 0.0000,
"gamma" : 1.0000,
"blacklevel" : 0.0000,
"whitelevel" : 1.0000
},
"green" :
{
"threshold" : 0.0000,
"gamma" : 1.0000,
"blacklevel" : 0.0000,
"whitelevel" : 0.7500
},
"blue" :
{
"threshold" : 0.0000,
"gamma" : 1.0000,
"blacklevel" : 0.0000,
"whitelevel" : 0.7500
}
}
],
"smoothing" :
{
"type" : "linear",
"time_ms" : 200,
"updateFrequency" : 20.0000
}
},
"leds" :
[
{
"index" : 0,
"hscan" : { "minimum" : 0.0000, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.0000, "maximum" : 1.0000 }
},
{
"index" : 1,
"hscan" : { "minimum" : 0.0000, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.0000, "maximum" : 1.0000 }
},
{
"index" : 2,
"hscan" : { "minimum" : 0.0000, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.0000, "maximum" : 1.0000 }
}
],
"blackborderdetector" :
{
"enable" : true,
"threshold" : 0.05
},
"effects" :
{
"paths" :
[
"/opt/hyperion/effects"
]
},
"bootsequence" :
{
"effect" : "Rainbow mood",
"duration_ms" : 1000
},
"grabber-v4l2" :
{
"device" : "/dev/video0",
"input" : 0,
"standard" : "PAL",
"width" : 640,
"height" : 480,
"frameDecimation" : 2,
"sizeDecimation" : 8,
"priority" : 1000,
"mode" : "2D",
"cropLeft" : 20,
"cropRight" : 20,
"cropTop" : 0,
"cropBottom" : 0,
"redSignalThreshold" : 0.0,
"greenSignalThreshold" : 0.0,
"blueSignalThreshold" : 0.0
},
"jsonServer" :
{
"port" : 19444
},
"protoServer" :
{
"port" : 19445
},
"endOfJson" : "endOfJson"
}
Alles anzeigen
"hyperion.config.json für die reine WLan Steuerung ohne Grabber"
{
"device" :
{
"name" : "MyPi",
"type" : "piblaster",
"output" : "/dev/pi-blaster",
"assignment" : " r g b "
},
"color" :
{
"transform" :
[
{
"id" : "default",
"leds" : "*",
"hsv" :
{
"saturationGain" : 1.0000,
"valueGain" : 1.0000
},
"red" :
{
"threshold" : 0.0000,
"gamma" : 1.0000,
"blacklevel" : 0.0000,
"whitelevel" : 1.0000
},
"green" :
{
"threshold" : 0.0000,
"gamma" : 1.0000,
"blacklevel" : 0.0000,
"whitelevel" : 0.7500
},
"blue" :
{
"threshold" : 0.0000,
"gamma" : 1.0000,
"blacklevel" : 0.0000,
"whitelevel" : 0.7500
}
}
],
"smoothing" :
{
"type" : "linear",
"time_ms" : 200,
"updateFrequency" : 20.0000
}
},
"leds" :
[
{
"index" : 0,
"hscan" : { "minimum" : 0.0000, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.0000, "maximum" : 1.0000 }
},
{
"index" : 1,
"hscan" : { "minimum" : 0.0000, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.0000, "maximum" : 1.0000 }
},
{
"index" : 2,
"hscan" : { "minimum" : 0.0000, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.0000, "maximum" : 1.0000 }
}
],
"blackborderdetector" :
{
"enable" : true,
"threshold" : 0.05
},
"effects" :
{
"paths" :
[
"/opt/hyperion/effects"
]
},
"bootsequence" :
{
"effect" : "Rainbow mood",
"duration_ms" : 1000
},
"jsonServer" :
{
"port" : 19444
},
"protoServer" :
{
"port" : 19445
},
"endOfJson" : "endOfJson"
}
Alles anzeigen
"abschließende Schritte"
damit pi-blaster zusammen mit Hyperion startet, editieren wir die Datei /opt/hyperion/init.d/hyperion.init.sh und fügen oben folgendes ein :
der obere Teil der Config sollte nun so aussehen :
#!/bin/bash
# Hyperion daemon
# description: Hyperion daemon
# processname: hyperiond
/home/osmc/pi-blaster
DAEMON=hyperiond
DAEMONOPTS="/etc/hyperion.config.json"
DAEMON_PATH="/usr/bin"
Alles anzeigen
Da die LEDs nicht alle Effekte wiedergeben können, empfiehlt es sich diese zu löschen.
Die Dateien liegen im Ordner /opt/hyperion/effects
Bis auf die beiden rainbow-mood und die strobe Dateien kann alles weg.
Jetzt nur noch den RPi neustarten und dann kann es losgehen
Wer seine LEDs mit dem Smartphone steuern möchte kann über den App/Play Store die Hyperion App auf dem Smartphone installieren.
In der App muss dann noch die Adresse des RPis eingetragen werden.
"einige Beispielfotos und ein Video"
Hier sind einige Beispielfotos.
Die LED Strips sind nur provisorisch hinter dem TV gelegt, deswegen die schlechte Ausleuchtung.
Changelog
"Changelog"
21.01.2016 - Downloadlink für pi-blaster aktualisiert
12.04.2015 - Downloadlink für pi-blaster aktualisiert -> flackern bei RPi1 B/B+ gefixt
06.04.2015 - Beispielfotos hinzugefügt
02.04.2015 - Release des Tutorials