Verkaufe funktionierende Ambilight-Clone-Komponenten

Nach dem Projekt ist vor dem Projekt! Die Funktionsweise des Ambilight-Clones mit dem Raspberry Pi hat mich so fasziniert, dass ich es einfach nachbauen musste.

news-478

news-444

Fazit – Es läuft Perfekt!

Da die Hintergrundbeleuchtung des TVs jedoch nie dauerhaft geplant war, möchte ich nun die einzelnen Komponenten verkaufen.

  • Video-Grabber mit Chinch-Adapter 10€
  • HDMI-Konverter 15€
  • HDMI-Splitter 10€
  • 46 LED-Kette WS2801 20€
  • Netzteil für LED-Kette inkl. Kabelbaum für Raspberry Pi 15€
  • Raspberry Pi (Modell B) mit Kühlkörpern, Netzteil und Cyntech-Gehäuse 20€
  • 2 HDMI-Kabel 5€

Alles komplett für 95€ inkl. Versand.

Ihr braucht nur noch eine SDHC. Das fertige Image bzw. die Hyperion-Config stelle ich gern zur Verfügung.

Die komplette Anleitung findet sich übrigens hier auf intux.de.

Interesse? Dann einfach melden!

Nachtrag

Die Komponenten wurden mittlerweile schon verkauft!

HDMI zu AV Konverter

Bei meinem Ambi-Projekt für den Raspberry Pi musste ich leider die Erfahrung machen, dass der von mir bestellte HDMI Konverter nicht 100%-ig für das was ich vorhatte geeignet war. Äußerlich gleichen sich alle in Frage kommenden Konverter zwar, doch liegen die Unterschiede im Inneren. Es sind zum Teil unterschiedliche Platinen mit diversen Chip-Anordnungen verbaut.

Hier der erwähnte Konverter, in zwei verschiedenen Ausführungen (weißes Gehäuse), der nicht optimal zum Projekt passt.

news-476

 

news-479

Das heißt jedoch nicht, dass dieser ungeeignet wäre, sondern nur nicht mit einem vorgeschaltetem HDMI-Splitter funktioniert. Ansonsten wandelt das Gerät trotzdem (ohne Splitter) das HDMI-Signal in ein AV-Signal um. Nutzt man z.B. als Quelle einen Blue-ray-Player und schließt diesen via Component an den TV und den HDMI an den Konverter, so wird dieser auch wie gewünscht arbeiten.

Hier nun der Konverter (schwarzes Gehäuse), welcher problemlos mit einem vorgeschaltetem Splitter funktioniert.

news-477

Wobei man aber nicht eindeutig von der Gehäusefarbe auf die verbaute Platine schließen kann. D.h. in einem weißen Gehäuse kann sich trotzdem ein fehlerfrei arbeitender Konverter befinden!

news-478

Hier eine Liste der von mir verwendeten Komponenten.

Hyperion, die Ambilight-Alternative – Teil 4

Heute im letzten Teil von „Hyperion, die Ambilight-Alternative“ möchte ich auf die Programmierung eingehen. Natürlich beschreibe ich hier auf intux.de den Linux-Weg, mit Zugang zum Raspberry Pi (Modell B)  via SSH und SFTP. Das Ganze funktioniert selbstverständlich auch mit anderen Systemen wie Windows. Hierzu empfehle ich Tools wie PuTTY und/oder FileZilla.

Da ich einen Fushicai-Grabber (Logilink) einsetze, konnte ich mit dem aktuellen Image von Raspbian arbeiten. Dieses kostenlose Image läd man von der Seite http://www.raspberrypi.org/downloads/ herrunter. Das Build habe ich in mein Home-Verzeichnis entpackt und wie folgt auf die SD-Karte für mein Hyperion-Steuergerät Raspberry Pi gespielt.

sudo dd if=/home/intux/2015-02-16-raspbian-wheezy.img of=/dev/mmcblk0 bs=1M

Hier muss natürlich der Name des Home-Verzeichnisses an das eigene System angepasst werden, will man das Projekt am heimischen Rechner ebenfalls so nachbauen.

Im Anschluss wird die SD in den Raspberry Pi eingelegt und dieser gestartet. Eine Tastatur muss natürlich für den ersten Start an den RasPI angeschlossen sein. Später kann man dann bequemer vom PC oder Notekook über SSH auf das Gerät zugreifen.

Beim ersten Start von Raspbian auf dem Pi kommt man in das Konfigurationsmenü. Hierbei ist das Dateisystem über Punkt 1 zu erweitern und über Punkt 8 SSH und SPI zu aktivieren.

news-460

news-464

news-465

news-466

Ist das erledigt bestätigt man mit Finish und startet den Pi neu.

Nach dem Neustart führt man ein

sudo apt-get update && sudo apt-get upgrade

durch, um das System zu aktualisieren. Sicherheitshalber startet man den Raspberry Pi mit

sudo reboot

nochmals neu. Nach der Eingabe

lsusb

erscheint der Fushicai-Grabber ID 1b71:3002 wie in der Abbildung zu sehen ist in der Auflistung.

news-459

Gibt man

ls /dev

ein, sollte nun spidev0.0 und video0 hier zu sehen sein.

news-467

Das Programm HyperCon ist nun auf den PC zu laden und auszuführen. Hierbei muss Java installiert sein um HyperCon ausführen zu können. Man stellt im Programm die Anzahl der LEDs, die Anordnung etc. ein. Auf der Abbildung sieht man nun meine Vorgaben für 46 Leuchten (42 Zoll). Diese Konfigurationsdatei wird auf dem PC vorzugsweise in Home gespeichert.

Hyperion

Nun wird das Gegenstück Hyperion, zur Steuerung der LEDs, auf dem Pi installiert.

cd /tmp
wget -N raw.github.com/tvdzwan/hyperion/master/bin/install_hyperion.sh
chmod +x install_hyperion.sh
sudo ./install_hyperion.sh
cd /home/pi

Alle Voraussetzungen sind nun geschaffen und man muss nur noch ein wenig konfigurieren!

Ein Screenshot des vom Grabber ausgegebenen Bildes, mit dem Hyperion arbeitet, muss nun erstellt werden.

sudo hyperion-v4l2 --width 720 --height 576 --screenshot

Die entsprechende screenshot.png liegt dann im Hauptverzeichnis /home/pi des Raspberry Pi. Um nun den Grabber richtig einzustellen, schaut man sich das Bild auf dem PC an. E ist es hilfreich den Screenshot via SFTP (z.B. mit Filezilla) auf den PC zu holen. Man beschneidet jetzt mit crop das Bild solange bis die schwarzen Streifen um das Bildschirmfoto verschwunden sind.

news-461

Bei mir sieht der Befehl dann wie folgt aus:

sudo hyperion-v4l2 --width 720 --height 576 --screenshot --frame-decimator 2 --size-decimator 0 --crop-left 18 --crop-right 5 --crop-top 90 --crop-bottom 0

news-462

Um den Raspberry Pi nicht in die Knie zu zwingen, wird mit einer kleineren Auflösung zur Steuerung gearbeitet. Der passende Befehl wäre dann:

sudo hyperion-v4l2 --width 720 --height 576 --screenshot --frame-decimator 2 --size-decimator 8 --crop-left 18 --crop-right 5 --crop-top 90 --crop-bottom 0

Diese Werte editiert man im nachfolgenden Text und fügt das Ganze dann entsprechend so in die Konfigurationsdatei hyperion.config.json nach

// 	"boblightServer" : 
// 	{
// 		"port" : 19333
// 	},

ein.

/// Configuration for the embedded V4L2 grabber
/// * device : V4L2 Device to use [default="/dev/video0"]
/// * input : V4L2 input to use [default=0]
/// * standard : Video standard (no-change/PAL/NTSC) [default="no-change"]
/// * width : V4L2 width to set [default=-1]
/// * height : V4L2 height to set [default=-1]
/// * frameDecimation : Frame decimation factor [default=2]
/// * sizeDecimation : Size decimation factor [default=8]
/// * priority : Hyperion priority channel [default=800]
/// * mode : 3D mode to use 2D/3DSBS/3DTAB (note: no autodetection) [default="2D"]
/// * cropLeft : Cropping from the left [default=0]
/// * cropRight : Cropping from the right [default=0]
/// * cropTop : Cropping from the top [default=0]
/// * cropBottom : Cropping from the bottom [default=0]
/// * redSignalThreshold : Signal threshold for the red channel between 0.0 and 1.0 [default=0.0]
/// * greenSignalThreshold : Signal threshold for the green channel between 0.0 and 1.0 [default=0.0]
/// * blueSignalThreshold : Signal threshold for the blue channel between 0.0 and 1.0 [default=0.0]
"grabber-v4l2" :
{
"device" : "/dev/video0",
"input" : 0,
"standard" : "PAL",
"width" : 720,
"height" : 576,
"frameDecimation" : 2,
"sizeDecimation" : 8,
"priority" : 1100,
"mode" : "2D",
"cropLeft" : 18,
"cropRight" : 5,
"cropTop" : 90,
"cropBottom" : 0,
"redSignalThreshold" : 0.1,
"greenSignalThreshold" : 0.1,
"blueSignalThreshold" : 0.1
},

Nun ist noch der framegrabber und der xbmcVideoChecker  auszukommentieren (mit ///).

Meine fertige Config sieht nun so aus:

// Automatically generated configuration file for 'Hyperion daemon'
// Generated by: HyperCon (The Hyperion deamon configuration file builder

{
	/// Device configuration contains the following fields: 
	/// * 'name'       : The user friendly name of the device (only used for display purposes)
	/// * 'type'       : The type of the device or leds (known types for now are 'ws2801', 'ldp8806',
	///                  'lpd6803', 'sedu', 'adalight', 'lightpack', 'test' and 'none')
	/// * 'output'     : The output specification depends on selected device. This can for example be the
	///                  device specifier, device serial number, or the output file name
	/// * 'rate'       : The baudrate of the output to the device
	/// * 'colorOrder' : The order of the color bytes ('rgb', 'rbg', 'bgr', etc.).
	"device" :
	{
		"name"       : "MyPi",
		"type"       : "ws2801",
		"output"     : "/dev/spidev0.0",
		"rate"       : 250000,
		"colorOrder" : "rgb"
	},

	/// Color manipulation configuration used to tune the output colors to specific surroundings. 
	/// The configuration contains a list of color-transforms. Each transform contains the 
	/// following fields:
	///  * 'id'   : The unique identifier of the color transformation (eg 'device_1')	///  * 'leds' : The indices (or index ranges) of the leds to which this color transform applies
	///             (eg '0-5, 9, 11, 12-17'). The indices are zero based.	///  * 'hsv' : The manipulation in the Hue-Saturation-Value color domain with the following 
	///            tuning parameters:
	///            - 'saturationGain'  The gain adjustement of the saturation
	///            - 'valueGain'       The gain adjustement of the value
	///  * 'red'/'green'/'blue' : The manipulation in the Red-Green-Blue color domain with the 
	///                           following tuning parameters for each channel:
	///            - 'threshold'       The minimum required input value for the channel to be on 
	///                                (else zero)
	///            - 'gamma'           The gamma-curve correction factor
	///            - 'blacklevel'      The lowest possible value (when the channel is black)
	///            - 'whitelevel'      The highest possible value (when the channel is white)
	///
	/// Next to the list with color transforms there is also a smoothing option.
	///  * 'smoothing' : Smoothing of the colors in the time-domain with the following tuning 
	///                  parameters:
	///            - 'type'            The type of smoothing algorithm ('linear' or 'none')
	///            - 'time_ms'         The time constant for smoothing algorithm in milliseconds
	///            - 'updateFrequency' The update frequency of the leds in Hz
	"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" : 1.0000
				},
				"blue" :
				{
					"threshold"  : 0.0000,
					"gamma"      : 1.0000,
					"blacklevel" : 0.0000,
					"whitelevel" : 1.0000
				}
			}
		],
		"smoothing" :
		{
			"type"            : "none",
			"time_ms"         : 200,
			"updateFrequency" : 20.0000
		}
	},

	///  The configuration for each individual led. This contains the specification of the area 
	///  averaged of an input image for each led to determine its color. Each item in the list 
	///  contains the following fields:
	///  * index: The index of the led. This determines its location in the string of leds; zero 
	///           being the first led.
	///  * hscan: The fractional part of the image along the horizontal used for the averaging 
	///           (minimum and maximum inclusive)
	///  * vscan: The fractional part of the image along the vertical used for the averaging 
	///           (minimum and maximum inclusive)
	"leds" : 
	[
		{
			"index" : 0,
			"hscan" : { "minimum" : 0.4286, "maximum" : 0.5000 },
			"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
		},
		{
			"index" : 1,
			"hscan" : { "minimum" : 0.3571, "maximum" : 0.4286 },
			"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
		},
		{
			"index" : 2,
			"hscan" : { "minimum" : 0.2857, "maximum" : 0.3571 },
			"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
		},
		{
			"index" : 3,
			"hscan" : { "minimum" : 0.2143, "maximum" : 0.2857 },
			"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
		},
		{
			"index" : 4,
			"hscan" : { "minimum" : 0.1429, "maximum" : 0.2143 },
			"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
		},
		{
			"index" : 5,
			"hscan" : { "minimum" : 0.0714, "maximum" : 0.1429 },
			"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
		},
		{
			"index" : 6,
			"hscan" : { "minimum" : 0.0000, "maximum" : 0.0714 },
			"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
		},
		{
			"index" : 7,
			"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
			"vscan" : { "minimum" : 0.8889, "maximum" : 1.0000 }
		},
		{
			"index" : 8,
			"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
			"vscan" : { "minimum" : 0.7778, "maximum" : 0.8889 }
		},
		{
			"index" : 9,
			"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
			"vscan" : { "minimum" : 0.6667, "maximum" : 0.7778 }
		},
		{
			"index" : 10,
			"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
			"vscan" : { "minimum" : 0.5556, "maximum" : 0.6667 }
		},
		{
			"index" : 11,
			"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
			"vscan" : { "minimum" : 0.4444, "maximum" : 0.5556 }
		},
		{
			"index" : 12,
			"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
			"vscan" : { "minimum" : 0.3333, "maximum" : 0.4444 }
		},
		{
			"index" : 13,
			"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
			"vscan" : { "minimum" : 0.2222, "maximum" : 0.3333 }
		},
		{
			"index" : 14,
			"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
			"vscan" : { "minimum" : 0.1111, "maximum" : 0.2222 }
		},
		{
			"index" : 15,
			"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 0.1111 }
		},
		{
			"index" : 16,
			"hscan" : { "minimum" : 0.0000, "maximum" : 0.0714 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
		},
		{
			"index" : 17,
			"hscan" : { "minimum" : 0.0714, "maximum" : 0.1429 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
		},
		{
			"index" : 18,
			"hscan" : { "minimum" : 0.1429, "maximum" : 0.2143 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
		},
		{
			"index" : 19,
			"hscan" : { "minimum" : 0.2143, "maximum" : 0.2857 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
		},
		{
			"index" : 20,
			"hscan" : { "minimum" : 0.2857, "maximum" : 0.3571 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
		},
		{
			"index" : 21,
			"hscan" : { "minimum" : 0.3571, "maximum" : 0.4286 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
		},
		{
			"index" : 22,
			"hscan" : { "minimum" : 0.4286, "maximum" : 0.5000 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
		},
		{
			"index" : 23,
			"hscan" : { "minimum" : 0.5000, "maximum" : 0.5714 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
		},
		{
			"index" : 24,
			"hscan" : { "minimum" : 0.5714, "maximum" : 0.6429 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
		},
		{
			"index" : 25,
			"hscan" : { "minimum" : 0.6429, "maximum" : 0.7143 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
		},
		{
			"index" : 26,
			"hscan" : { "minimum" : 0.7143, "maximum" : 0.7857 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
		},
		{
			"index" : 27,
			"hscan" : { "minimum" : 0.7857, "maximum" : 0.8571 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
		},
		{
			"index" : 28,
			"hscan" : { "minimum" : 0.8571, "maximum" : 0.9286 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
		},
		{
			"index" : 29,
			"hscan" : { "minimum" : 0.9286, "maximum" : 1.0000 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
		},
		{
			"index" : 30,
			"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 0.1111 }
		},
		{
			"index" : 31,
			"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
			"vscan" : { "minimum" : 0.1111, "maximum" : 0.2222 }
		},
		{
			"index" : 32,
			"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
			"vscan" : { "minimum" : 0.2222, "maximum" : 0.3333 }
		},
		{
			"index" : 33,
			"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
			"vscan" : { "minimum" : 0.3333, "maximum" : 0.4444 }
		},
		{
			"index" : 34,
			"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
			"vscan" : { "minimum" : 0.4444, "maximum" : 0.5556 }
		},
		{
			"index" : 35,
			"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
			"vscan" : { "minimum" : 0.5556, "maximum" : 0.6667 }
		},
		{
			"index" : 36,
			"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
			"vscan" : { "minimum" : 0.6667, "maximum" : 0.7778 }
		},
		{
			"index" : 37,
			"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
			"vscan" : { "minimum" : 0.7778, "maximum" : 0.8889 }
		},
		{
			"index" : 38,
			"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
			"vscan" : { "minimum" : 0.8889, "maximum" : 1.0000 }
		},
		{
			"index" : 39,
			"hscan" : { "minimum" : 0.9286, "maximum" : 1.0000 },
			"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
		},
		{
			"index" : 40,
			"hscan" : { "minimum" : 0.8571, "maximum" : 0.9286 },
			"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
		},
		{
			"index" : 41,
			"hscan" : { "minimum" : 0.7857, "maximum" : 0.8571 },
			"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
		},
		{
			"index" : 42,
			"hscan" : { "minimum" : 0.7143, "maximum" : 0.7857 },
			"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
		},
		{
			"index" : 43,
			"hscan" : { "minimum" : 0.6429, "maximum" : 0.7143 },
			"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
		},
		{
			"index" : 44,
			"hscan" : { "minimum" : 0.5714, "maximum" : 0.6429 },
			"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
		},
		{
			"index" : 45,
			"hscan" : { "minimum" : 0.5000, "maximum" : 0.5714 },
			"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
		}
	],

	/// The black border configuration, contains the following items: 
	///  * enable    : true if the detector should be activated
	///  * threshold : Value below which a pixel is regarded as black (value between 0.0 and 1.0)
	"blackborderdetector" : 
	{
		"enable" : true,
		"threshold" : 0.01
	},

	/// The configuration of the effect engine, contains the following items: 
	///  * paths        : An array with absolute location(s) of directories with effects 
	///  * bootsequence : The effect selected as 'boot sequence'
	"effects" : 
	{
		"paths" : 
		[
			"/opt/hyperion/effects"
		]
	},

	"bootsequence" : 
	{
		"effect" : "Rainbow swirl fast",
		"duration_ms" : 3000
	},

	///  The configuration for the frame-grabber, contains the following items: 
	///   * width        : The width of the grabbed frames [pixels]
	///   * height       : The height of the grabbed frames [pixels]
	///   * frequency_Hz : The frequency of the frame grab [Hz]
	///"framegrabber" : 
	///{
	///	"width" : 64,
	///	"height" : 64,
	///	"frequency_Hz" : 10.0
	///},

	/// The configuration of the XBMC connection used to enable and disable the frame-grabber. Contains the following fields: 
	///  * xbmcAddress       : The IP address of the XBMC-host
	///  * xbmcTcpPort       : The TCP-port of the XBMC-server
	///  * grabVideo         : Flag indicating that the frame-grabber is on(true) during video playback
	///  * grabPictures      : Flag indicating that the frame-grabber is on(true) during picture show
	///  * grabAudio         : Flag indicating that the frame-grabber is on(true) during audio playback
	///  * grabMenu          : Flag indicating that the frame-grabber is on(true) in the XBMC menu
	///  * grabScreensaver   : Flag indicating that the frame-grabber is on(true) when XBMC is on screensaver
	///  * enable3DDetection : Flag indicating that the frame-grabber should switch to a 3D compatible modus if a 3D video is playing
	///"xbmcVideoChecker" : 
	///{
	///	"xbmcAddress" : "127.0.0.1",
	///	"xbmcTcpPort" : 9090,
	///	"grabVideo" : true,
	///	"grabPictures" : true,
	///	"grabAudio" : true,
	///	"grabMenu" : false,
	///	"grabScreensaver" : true,
	///	"enable3DDetection" : true
	///},

	/// The configuration of the Json server which enables the json remote interface
	///  * port : Port at which the json server is started
	"jsonServer" : 
	{
		"port" : 19444
	},

	/// The configuration of the Proto server which enables the protobuffer remote interface
	///  * port : Port at which the protobuffer server is started
	"protoServer" : 
	{
		"port" : 19445
	},

	/// The configuration of the boblight server which enables the boblight remote interface
	///  * port : Port at which the boblight server is started
// 	"boblightServer" : 
// 	{
// 		"port" : 19333
// 	},

/// Configuration for the embedded V4L2 grabber
/// * device : V4L2 Device to use [default="/dev/video0"]
/// * input : V4L2 input to use [default=0]
/// * standard : Video standard (no-change/PAL/NTSC) [default="no-change"]
/// * width : V4L2 width to set [default=-1]
/// * height : V4L2 height to set [default=-1]
/// * frameDecimation : Frame decimation factor [default=2]
/// * sizeDecimation : Size decimation factor [default=8]
/// * priority : Hyperion priority channel [default=800]
/// * mode : 3D mode to use 2D/3DSBS/3DTAB (note: no autodetection) [default="2D"]
/// * cropLeft : Cropping from the left [default=0]
/// * cropRight : Cropping from the right [default=0]
/// * cropTop : Cropping from the top [default=0]
/// * cropBottom : Cropping from the bottom [default=0]
/// * redSignalThreshold : Signal threshold for the red channel between 0.0 and 1.0 [default=0.0]
/// * greenSignalThreshold : Signal threshold for the green channel between 0.0 and 1.0 [default=0.0]
/// * blueSignalThreshold : Signal threshold for the blue channel between 0.0 and 1.0 [default=0.0]
"grabber-v4l2" :
{
"device" : "/dev/video0",
"input" : 0,
"standard" : "PAL",
"width" : 720,
"height" : 576,
"frameDecimation" : 2,
"sizeDecimation" : 8,
"priority" : 1100,
"mode" : "2D",
"cropLeft" : 18,
"cropRight" : 5,
"cropTop" : 90,
"cropBottom" : 0,
"redSignalThreshold" : 0.1,
"greenSignalThreshold" : 0.1,
"blueSignalThreshold" : 0.1
},

	"endOfJson" : "endOfJson"
}

Die fertige Datei läd man dann via SFTP nach /home/pi. Von da wird sie via SSH nach /opt/hyperion/config in das entsprechende Config-Verzeichnis verschoben, da man mit SFTP standardmäßig keine root-Rechte hat, um in das System zu schreiben.

sudo mv /home/pi/hyperion.config.json /opt/hyperion/config

Jetzt startet man den RasPi neu und der Ambi-Clon nimmt seine Arbeit auf!

sudo reboot

Nachtrag

Um am laufenden System erneut einen Screenshot zu erstellen, muss der Daemon gestoppt werden. Dies erledigt man mit

sudo /etc/init.d/hyperion stop

Mit einem

sudo reboot

wird der Daemon wieder gestartet.

Nachtrag

Nachdem ich den HDMI-Konverter nochmals austauschen musste (HDMI zu AV Konverter), habe ich aufgrund eines neuen Screenshots mit folgenden Crop-Werten gearbeitet.

"cropLeft" : 20,
"cropRight" : 20,
"cropTop" : 5,
"cropBottom" : 5,

Viel Spaß!

Hyperion, die Ambilight-Alternative – Teil 3

Es ist vollbracht! Alle Teile sind am TV befestigt und der Raspberry Pi (Modell B) ist programmiert.

Die nötigen Schritte möchte ich nun kurz hier erläutern. Zuerst habe ich die LED-Steuerung an den GPIO und die Stromquelle angeschlossen. Hierbei muss man darauf achten ein entsprechendes Netzteil einzusetzen. Meine Lichterkette verfügte am Anfang über 50 LEDs. Jede LED hat eine Stromaufnahme von 0,06A (60mA). Das bedeutet unter Vollast wird ein Netzteil mind. 3A (50 x 0,06A) benötigt. Will man mehr LEDs verbauen, so muss also die Leistung entsprechend größer sein.

basic-gpio-layout
Quelle: http://raspberrypi.org

news-446

news-448

news-449

Die Netzteil-Buchse wurde mit drei Kabeln belegt, zwei schwarzen (Ground) und einem roten (5V). Ein schwarzes Kabel wird an den Pin 6 des GPIO angeschlossen, das andere schwarze und das rote Kabel kommt so wie auf der Abbildung an die Lichterkette. Nun werden noch CI von der Lichterkette mit einem grünen Kabel mit Pin 23 und DI mit einem gelben Kabel mit Pin 19 verbunden.

Da die Angelegenheit noch sehr wackelig war, habe ich den Kabelbaum mit Schrumpfschläuchen haltbarer gemacht.

news-453

Der Rest wurde dann wie auf der schematischen Darstellung abgebildet entsprechend verbunden. Dabei habe ich auf Grund noch ungelöster Probleme auf den HDMI-Splitter verzichtet. Der Blue-ray-Player liefert im Moment die alleinige Quelle. Component Video des Players wird an den TV und HDMI an den Konverter angeschlossen. Der Konverter wandelt dabei das digitale in ein analoges Signal und übergibt dieses an den Grabber, der wiederum das Bild an den Raspberry Pi zur weiteren Verarbeitung weiter leitet.

news-456

Übrigens, wenn das Ganze dann entsprechend programmiert, verbaut und angeschlossen ist, wird nicht zwangsläufig ein Schalter sowie ein Netzzugang für den Pi benötigt. Man muss sich aber im Klaren darüber sein, dass das Gerät in diesem Modus dann bis zu ca. 3,5 Watt verbraucht. Dies Ambilight-Alternative schaltet bei fehlendem HDMI-Signal die LEDs komplett aus. Wird ein Signal eingespeist, z.B. wenn der Blu-ray-Player eingeschaltet wird, nimmt die Hintergrundbeleuchtung automatisch ihre Arbeit auf.

Den Einsatz der verbauten Kühlkörper halte ich im Moment persönlich für unnötig, da der Raspberry Pi nicht übertaktet wird. Wer jedoch auf Nummer Sicher gehen will, sollte diese aber verbauen.

news-454

news-455

Verbaut (mit Heißkleber) sind jetzt 46 LEDs für einen 42 Zoll Flatscreen. Die vier nun überflüssigen Leuchtmittel wurden einfach abgeschnitten. Der Abstand der Dioden beträgt ca. 6cm.

Was für Software nötig ist und wie man den RasPi programmiert, darauf werde ich im nächsten Artikel näher eingehen.

Hyperion, die Ambilight-Alternative – Teil 1

Heute beginnt mein Hyperion Experiment.

Viele von Euch kennen Philips Ambilight. Eine tolle Sache die TV-Atmosphäre im heimischen Wohnzimmer zu steigern. Leider war dies  bisher von Hause aus nur Philips-TVs mit entsprechender Technik vergönnt. Mit dem Bastel-Computer Raspberry Pi ist es jedoch möglich dieses Feature auch älteren TV-Geräten zugänglich zu machen. Voraussetzung für die in den folgenden Artikeln beschriebene Lösung ist jedoch eine digitale TV-Quelle mit HDMI-Ausgang.

Ich werde hierzu alle Schritte auf intux.de in den nächsten Tagen genau beschreiben.

Bewusst habe ich mich entschieden die folgenden Artikel nicht auf den entsprechenden Planeten oder Netzwerken zu veröffentlichen!

Trotz alledem hoffe ich auf viele Kommentare zu diesem Thema.

Alle Teile sind inzwischen bei mir eingetroffen.

news-444

Die Kühlkörper sind aufgeklebt

news-445

und die Verbindungskabel angebracht.

news-446

Es geht los! Es werde Licht.

news-447

news-448

news-449


Einkaufsliste (Empfehlung)

Das Ganze kostet dann in etwa stolze 180€ ohne Versandkosten. Ein von der Größe entsprechendes Philips Ambilight TV-Gerät (Affiliate-Link) ist dabei schon für unter 800€ zu haben.

Die Einkaufsliste entspricht nicht exakt meiner, das ich einige der Komponenten auch bei eBay erworben habe.