DIY Ambilight voor je XBMC HTPC

Door mrwolf op zaterdag 11 februari 2012 20:16 - Reacties (21)
Categorie: -, Views: 16.299

Aanleiding
In december zag ik bij toeval dit topic op Tweakers, en mijn interesse was gewekt. Hoe cool zou je eigen Ambilight-installatie zijn? Het leek me een mooi projectje voor de donkere wintermaanden, en tegelijkertijd ook een uitdaging, want ik heb geen soldeerervaring, geen elektrotechnische achtergrond en eigenlijk ook geen programmeerervaring. So bring it on!

Idee
Amblight is een product van Philips, dat op bepaalde TV's te verkrijgen is. Het is een mooi sfeerverhogend effect, en het heeft natuurlijk een behoorlijk Tweakersgehalte als je dit zelf maakt.



Het grote verschil met het Philips-product is dat het echte Ambilight op alle beeldbronnen werkt, en het signaal direct van de TV uitleest en vertaalt in kleuren. De Tweakers-oplossing gaat helaas iets minder ver, deze heeft namelijk een PC nodig om het beeld te analyseren en de LED's aan te sturen. Hierdoor werkt het (in mijn geval) alleen bij beeld dat ik kijk op mijn HTPC, een eenvoudige Asrock Ion 330 met OpenElec. Maar het werkt, en ik ben helemaal om! Wat mij betreft is het effect minimaal zo goed als bij een 'echte' Amblight TV. Als basis voor deze post is de tutorial van Adafruit gebruikt.

Opstelling
Zoals genoemd heb ik als hardware een Asrock Ion 330 staan, waarop OpenElec draait met XBMC (Pre-)Eden. XBMC ondersteunt sinds Eden een goed werkende add-on, genaamd boblight, die de LED's out-of-the-box aanstuurt. Daarnaast heb ik een 42" Panasonic plasma-TV (TH-42PX80) op een TV-meubel.

Hardware
Je hebt LED-lampen nodig, duh. In principe heb je twee keuzes, LED-strips of een string van LED-lampen. De voordelen van strips zijn dat de lampjes dicht op elkaar zitten (vaak 3cm), en dat dit geheel wat compacter is en mooier oogt. De meeste strips zijn op te knippen in stukken, zodat dit perfect passend te maken is. Echter, er zijn veel verschillende strips, waarbij ze niet allemaal schijnen te werken voor een Ambilight-systeem, of de LED's zijn niet per stuk aan te sturen. Ik heb dus gekozen voor de RGB-LED strings van Adafruit. Sterker nog, ik heb het startpakket gekocht van die site, waarvan ik zeker wist dat het zou moeten werken. Daarnaast heb ik het volgende gekocht:

- Startpakket Adalight
- Arduino Uno Board
- Extra LED's
- USB-kabel om de Arduino aan de HTPC te verbinden
- Amerikaanse stekker-adapter
- Wat draden en krimpkousen bij de elektronicazaak

De totale kosten zijn iets opgelopen omdat de douane mijn pakket van Adafruit had onderschept, en ik BTW en inklaringskosten mocht betalen (§ 35 totaal). In totaal komt het geheel, inclusief de douane-verrassing, op 160 euro uit.

Software
XBMC Eden (OpenElec), met de volgende addons:
- boblightd
- boblightXBMC

Ik kan dus niet zeggen of en hoe het werkt onder Windows of een andere XBMC-distro. Het moet allemaal wel kunnen, maar ben speciaal voor dit project overgestapt van XBMCLive naar OpenElec omdat de boblight-addon hier in de beta-versies van XBMC Eden al goed werkte. Daarnaast is OpenElec een heerlijk snelle en lichte distro, dus sowieso een goede keuze voor een HTPC wat mij betreft.

Configuratie
De configuratie is hetgeen wat het meest tijd kost. Je moet een aantal dingen namelijk goed op een rijtje zetten voor jezelf. Hoeveel LED's wil ik hebben, en waar wil ik ze hebben? Voor een 23" monitor heb je wellicht aan 25 LED's genoeg, voor een 50" LCD heb je er echt meer nodig. Voor mijn Panasonic 42" heb ik gekozen voor 50 LED's. Omdat deze TV een brede voet heeft komt dit op zich mooi uit, en zitten de LED's op gemiddeld 5cm van elkaar, en dat is prima. Bedenk dus goed voor jezelf wat je wil, en wat je belangrijk vindt. Bekijk ook mijn filmpjes, en je ziet of een afstand van 5cm goed genoeg is voor je.

Je hebt besloten hoeveel LED's je gaat kopen, mooi. Nu moet je de boblight-software gaan vertellen waar ze zitten, en welke LED wanneer welke kleur moet weergeven.

In mijn opstelling heb ik gekozen voor een raster van 20x13, waarbij er links- en rechtsonder 4 LED's zijn (in verband met de brede voet van de TV), aan de zijkanten 13 LED's, en aan de bovenkant 20. Let wel, ik reken de hoek-LED's voor het gemak even dubbel. Zie onderstaand plaatje voor mijn setup ter verduidelijking.

http://i42.tinypic.com/f4dyrp.jpg


boblight.conf
Dit is het bestand dat de boblight addon vertelt hoeveel LED's je hebt, en waar ze zitten. De configuratie rekent met horizontale (hscan) en verticale (vscan) percentages. Je geeft dus voor een LED in de linkeronderhoek bijvoorbeeld aan dat deze 0-5% van het horizontale gedeelte van het beeld moet 'scannen', en 92,28-100% van het verticale gedeelte. Je rekent hierbij altijd vanuit de linkerbovenhoek, waar punt 0,0 ligt voor zowel horizontaal als verticaal. Zie ook bovenstaand plaatje voor de percentages die in mijn geval gelden. De getallen geven per LED het beginpunt aan. Dus LED25 scant 45-50% horizontaal, en 0-7,69% verticaal.

De volgende stap is het plaatsen van de juiste getallen in boblight.conf volgens de volgende setup. Ik heb het geheel in Excel gedaan, en met wat handige formules kom je een heel eind. Je wil niet voor 50 LED's alles handmatig doen lijkt me. De boblight-wiki helpt je ook aardig op weg.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#config file for adalight from http://www.ladyada.net/make/adalight/

[global]
interface 127.0.0.1
port         19333

[device]
name           device1
type             momo
output          /dev/ttyACM0
channels     150 #wijzig dit naar je aantal LED's
prefix      41 64 61 00 31 64 #prefix voor 25 LED's is 41 64 61 00 18 4D
interval        10000
rate             115200
debug          off #turn this on to see what it's doing with the serial port
delayafteropen  1000000


[color]
name          red
rgb             FF0000

[color]
name          green
rgb             00FF00

[color]
name          blue
rgb             0000FF

#Het benoemen en configureren van de LED's:

[light]
name        light1
color       red     device1 1
color       green  device1  2
color       blue       device1    3
hscan       15 20
vscan       92.28 100

[light]
name        light2
color       red     device1 4
color       green  device1  5
color       blue       device1    6
hscan       15 20
vscan       91.67 100



name: light1,light2,..., light50
color: red device1 1,4,7, ...,148
color: green device1 2,5,8, ...,149
color: blue device1 3,6,9,...,150
hscan: horizontaal begin- en eindpunt (let op, decimalen scheiden met punten!)
vscan: verticaal begin- en eindpunt (let op, decimalen scheiden met punten!)

Let op: device1 bij de color-regels blijft dus altijd device1, je hebt namelijk maar 1 Ambilight-device. Als referentie is mijn volledige boblight.conf hier te vinden.

Sla dit bestand op als boblight.conf op je OpenElec-pc in de map \\openelec\Userdata\addon_data\service.multimedia.boblightd\

Arduino
De Arduino Uno (of een andere versie) is een programmeerbaar ontwikkelbord, dat de communicatie tussen de boblight plugin en de LED's verzorgt. Om deze te programmeren en te testen heb je twee programma's en een losse ZIP met zogenaamde sketches nodig:

- Processing
- Arduino IDE
- Adafruit sketches

Let op, de interface van deze programma's lijkt veel op elkaar, dus voer de volgende stappen in het juiste programma uit. Scheelt je heel wat frustratie kan ik je uit ervaring vertellen...
  • Verbind de Arduino met je (Windows) pc d.m.v. de USB-kabel
  • De driverinstallatie loopt vast, kijk hier voor een oplossing
  • Open Arduino IDE en laadt de sketch LEDstream.pde uit de Adafruit Sketches map (Arduino\LEDstream\LEDsream.pde)
  • Selecteer in Arduino IDE onder tools het juiste board (Uno R3 in mijn geval)
  • Kies Upload om de sketch te compilen en naar de Arduino te uploaden
  • Sluit Arduino IDE
Testen
De volgende stappen zijn niet noodzakelijk, maar wel aanbevolen. Als de test slaagt, dan weet je in ieder geval dat je hardware in orde is.
  • Open de Processing-tool (met de Arduino nog steeds verbonden)
  • Open de sketch Colorswirl.pde uit de Adafruit sketches map (Processing\Colorswirl\Coorswirl.pde)
  • Run de sketch
  • Als het goed is gaan nu alle LED's een voor een branden, telkens met een andere kleur. Ja? Gefeliciteerd, je hardware werkt. Nee, ga terug naar 'start' :)
LED's en draden
Hier staat het verhaal rondom het monteren van de juiste draden op de juiste plek, maar ik vind het toch nog wat verwarrend. Als je voor exact dezelfde setup als ik kies, dan is het vrij simpel. Zorg wel dat je aan de juiste kant van de LED's begint, dus aan de INPUT-kant.
http://www.ladyada.net/wiki/_media/tutorials/products/pixel12mm/12mminput.jpg
Verbind vervolgens draden op de volgende manier op de Arduino:
- groene draad op 13 (clock)
- gele draad op 11 (data)
- zwarte draad via de power-adapter (min aansluiting) op een van de GND's
- rode draad van de LED's naar de power-adapter (plus aansluiting)

Het vastmaken van de draden op de Arduino heeft me ook nog wel wat moeite gekost. Ik wilde het niet direct vastsolderen, en bovendien is de kans dat dat misgaat erg groot. Ik heb op Ebay deze jumper wires gekocht, en daar wacht ik nog op.

Bevestigen
Het monteren van de LED's heeft me wel wat hoofdbrekens bezorgd. Mijn TV heeft aardig wat ventilatiegaten aan de achterkant, en er op vasttapen met DUCT-tape vond ik niet echt een charmante oplossing. Na wat pogingen heb ik het als volgt opgelost. Ik heb met tiewraps de afstand tussen de LED's verkleint tot de gewenste afstand, en vervolgens beide stringen in een kabelorganiser gestopt. Dit vind ik er net wat netter uitzien, en het heeft als voordeel dat de string wat stugger is en dus rechter blijft. Het geheel heb ik wederom met tiewraps zo ver mogelijk aan de bovenkant/zijkant van de TV vastgemaakt. Uiteraard wel op zo'n manier dat de LED's zelf niet zichtbaar zijn. Het zit niet strak en even netjes, maar voor de werking is het prima. Het is ambient light, geen spotlight :)

Om de afstand tussen de LED's te berekenen moet je wel rekening houden met de 'hoek'-LED's. Het is bij het berekenen heel makkelijk om deze dubbel te tellen, en dan kom je dus niet goed uit! De afstand tussen mijn LED's aan de onderkant is ongeveer 6 cm, aan de zijkanten 5 cm, en aan de bovenkant 4,5 cm. Nogmaals, dit is voor iedereen anders, dus aan mijn voorbeeld heb je niet zoveel.
http://i41.tinypic.com/evcajo.jpg
http://i44.tinypic.com/1z4wc2p.jpg


XBMC
Zit alles vast? Mooi! Start OpenElec op en installeer de boblightd en boblightXBMC addons (te vinden onder services), en gaan! Je kunt de addon nog configureren als je wilt, maar ik heb de standaard movie-instellingen gebruikt op 'slow'. Als je 'fast' gebruikt wisselen de kleuren razendsnel, maar het kijkt heel onrustig. Kijk maar in de showcase voor wat voorbeelden!

Veel plezier met je el-cheapo Tweaker-Ambilightsysteem! Voor vragen kun je hieronder terecht, of in dit topic op GoT. Let wel, ik ben geen techneut, en heb ook maar handleidingen en mijn gezonde verstand gebruikt.

Showcase
De volgende filmpjes zijn om een impressie te krijgen van het Ambilight-effect.

Eenvoudige testvideo met wisselende kleuren:


Eenvoudige testvideo met snel wisselende kleuren, gebruik makend van de 'fast'-setting in de boblight addon:


Zelfde video als hierboven, maar nu met de 'slow'-setting:


ScŤnes uit Up!, Captain America en Jonathan Ross: