DIY Ambilight m.b.v. Raspberry pi, Arduino, Openelec en Hyperion

Ik heb op het internet al vaker iets voorbij zien komen over mensen die hun eigen Ambilight maakten. Ik vond dit altijd al een tof idee maar het is er al die tijd niet van gekomen. Laatst begon het toch weer te kriebelen en heb ik besloten er zelf ook een te bouwen.

Nadat ik alle spullen binnen had ben ik begonnen met het aansturen van de Leds. Dit lukte vrij snel.  Ik kon met behulp van de FastLed library makkelijk wat simpele effecten maken op de led strip.

Mijn TV is aan de achterkant niet mooi vlak. Ik heb daarom een frame gemaakt van aluminium strips met een randje voor extra stevigheid. Het frame heb ik op maat gezaagd en toen aan elkaar gelijmd met secondelijm. Het resultaat is een mooi stevig maar toch licht frame.

Nu was het tijd om de leds op maat te knippen en de stekkertjes er aan te solderen. Omdat ik weinig soldeer ervaring had ging het eerste stukje ging wat lastig maar daarna ging het erg gemakkelijk.

Vervolgens een laagje isolatietape aangebracht op mijn frame omdat ik niet zou willen dat de leds maar op een of andere manier contact zouden maken met het aluminium. Nadat ik de horizontale strips geplaatst had heb ik bij de soldeerpunten nog een stukje tape er overheen geplakt en toen de verticale strips aangebracht.

Daarna twee gaatjes geboord in het frame en met twee M6 bouten gemonteerd aan mijn tv met een PVC koppelstukje er tussen om het frame op zijn plaats te houden. De Arduino zit links in de hoek gemonteerd met een paar tie-wraps. Vanaf die hoek worden ook de leds gevoed / aangestuurd. Inmiddels is de blauwe USB kabel vervangen door een zwarte van 1~1.5 meter. Ik heb nu dus maar twee kabels naar mijn TV lopen, de voeding van de leds en de USB voor de Arduino. De rest van alle spullen kan ik mooi 1.5e meter verder verstoppen.

Close-up van de Arduino. Ik heb nog een simpele case besteld uit China dus de Arduino gaat straks nog wat mooier weggewerkt worden.

Dit is de rest van de opstelling (voor nu). De Pi2 word gevoed door mijn 5v voeding. Mijn oude Pi1 voeding gaf te weinig power en dit is toch weer een stekker minder. Ik heb een 100watt 16A voeding maar volgens mijn energiemeter was dat toch wel overkill. Met 4 meter leds (60 leds p.m.) kwam ik op 40 watt uit (volledige sterkte wit licht, zonder Pi). Ik heb nu 3 meter leds en met de Pi + AV-grabber, etc straks zal ik ook wel weer rond de 40 watt maximaal uit komen. De dikke zwarte kabel gaat dus naar de leds toe. In de Pi zit een netwerkkabel en de USB kabel naar de Arduino.

En dit is hoe het er nu uitziet. Ik moet de kleuren wel nog wat bij stellen omdat ze niet helemaal overeenkomen met de kleuren van de TV maar het systeem werkt echt fantastisch. Ben er echt super blij mee. Ik was toch redelijk verbaast hoe goed het werkt.

Klik verder voor een installatie handleiding die ik geschreven heb mocht je zelf ook interesse gekregen hebben om zelf een Ambilight TV te knutselen. Er zijn tegenwoordig ook meer klant en klaar oplossingen zoals Ambivision en Lightberry.

Handleiding

Lees deze handleiding helemaal door voor je gaat beginnen en kijk ook of je behoefte hebt aan de extra mogelijkheid om niet alleen via Kodi gebruik te kunnen maken van Ambilight.

Hardware

Om zelf een Ambilight te bouwen heb je het allerei hardware nodig. De volgende onderdelen heb je minimaal nodig. Voor het gemak heb ik links er onder geplaatst naar de onderdelen die ik gebruikt heb.

Het volgende gereedschap is ook handig om in huis te hebben:

  • Soldeerbout
  • Kabelstripper
  • Kniptang

Hardware installatie

Installeer de hardware zoals op onderstaand schema. Plaats de weerstand vlak voor de ledstrip, het zelfde geld voor de condensator. De led strip kan op meerdere plekken gevoed worden. Voor een goede kleur weergave is het van belang elke +/- 2 meter de ledstrip te voeden. Als je dit niet doet word de weerstand in de strip te groot wanneer de stroom 4 meter naar de laatste led moet en weer 4 meter terug. Hierdoor kun je kleurafwijkingen krijgen. Ik vond het voldoende om het begin en het eind van de strip te voeden. Let bij het aansluiten van de led strips op de richting van de data! De data loopt maar een kant uit.

Wanneer je alles aangesloten hebt kun je gaan testen of de led strip het doet. Voor de veiligheid had ik zelf een stukje van 4 leds afgeknipt om daar mee te testen. Mocht er iets fout gaan dan verlies je hoogstens vier leds en kun je nooit de hele strip stuk maken. Om te testen sluit je de Arduino aan op je PC in plaats van aan de Raspberry Pi. Voor verdere info zie het kopje “Arduino software intstalleren”.

Er zijn verschillende manieren om de led stip op je TV te monteren. Je kan ze direct tegen je TV plakken met de plakstrip die achterop zit of je kan een frame maken waar je de leds aan monteert. Ik heb zelf gekozen voor dat laatste.

Software installatie

Arduino

Installeer eerst de Arduino IDE en download daarna de FastLed library. Koppel je Arduino vervolgens aan je PC en start de IDE. Importeer nu de library via het menu “Sketch → Import library → Add library”. Selecteer nu het zip bestand wat je gedownload hebt. Als dit niet goed werkt kun je het zip bestand ook uitpakken naar de sketchbook/libraries/ map die de IDE aanmaakt. Vervolgens kopieer je de volgende code in je sketch en drukt op compile. Als het goed is zouden je leds het nu moeten doen als je alles goed aangesloten hebt. Werkt alles? Dan kun je de initiele test kleuren uit de code halen.

#include "FastLED.h"

// How many leds in your strip?
#define NUM_LEDS 186

// For led chips like Neopixels, which have a data line, ground, and power, you just
// need to define DATA_PIN.  For led chipsets that are SPI based (four wires - data, clock,
// ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN
#define DATA_PIN 6
#define CLOCK_PIN 13

#define COLOR_ORDER GRB

// Adalight sends a "Magic Word" (defined in /etc/boblight.conf) before sending the pixel data
uint8_t prefix[] = {'A', 'd', 'a'}, hi, lo, chk, i;

// Baudrate, higher rate allows faster refresh rate and more LEDs (defined in /etc/boblight.conf)
#define serialRate 460800

// Define the array of leds
CRGB leds[NUM_LEDS];

void setup() { 
  FastLED.addLeds<WS2812B, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
      
  // initial RGB flash, comment out if your setup works.
  LEDS.showColor(CRGB(255, 255, 255));
  delay(1000);
  LEDS.showColor(CRGB(100, 0, 0));
  delay(1000);
  LEDS.showColor(CRGB(0, 100, 0));
  delay(1000);
  LEDS.showColor(CRGB(0, 0, 100));
  delay(1000);
  LEDS.showColor(CRGB(0, 0, 0));
        
  // start listening on serial port
  Serial.begin(serialRate);
  Serial.print("Ada\n"); // Send "Magic Word" string to host
}

void loop() { 
  // wait for first byte of Magic Word
  for(i = 0; i < sizeof prefix; ++i) {
    waitLoop: while (!Serial.available()) ;;
    // Check next byte in Magic Word
    if(prefix[i] == Serial.read()) continue;
    // otherwise, start over
    i = 0;
    goto waitLoop;
  }
  
  // Hi, Lo, Checksum
  
  while (!Serial.available()) ;;
  hi=Serial.read();
  while (!Serial.available()) ;;
  lo=Serial.read();
  while (!Serial.available()) ;;
  chk=Serial.read();
  
  // if checksum does not match go back to wait
  if (chk != (hi ^ lo ^ 0x55))
  {
    i=0;
    goto waitLoop;
  }
  
  memset(leds, 0, NUM_LEDS * sizeof(struct CRGB));
  // read the transmission data and set LED values
  for (uint8_t i = 0; i < NUM_LEDS; i++) {
    byte r, g, b;    
    while(!Serial.available());
    r = Serial.read();
    while(!Serial.available());
    g = Serial.read();
    while(!Serial.available());
    b = Serial.read();
    leds[i].r = r;
    leds[i].g = g;
    leds[i].b = b;
  }
  // shows new values
 FastLED.show();
}

Credits: RanzQ

OpenElec

Zorg er eerst voor dat je OpenElec op je Raspberry Pi 2 geïnstalleerd hebt. Hoe je dat het beste kan doen vind je hier op de wiki van OpenElec. Zorg er voor dat je tijdens de eerste keer opstarten van OpenElec aangeeft dat SSH en eventueel Samba aan staan.

Hyperion

Daarna moet Hyperion geïnstalleerd worden. Met Hyperion wordt het ambilight effect gecreërd. Hyperion installeren doe je als volgt. Zoek het IP adres op van je Raspberry Pi. Log daarna in via op je Pi via SSH. Onder Windows kan dit met Putty. Linux en OSX hebben standaard een Terminal applicatie. De inloggegevens zijn standaard “root” met het wachtwoord “openelec”. Hierna voer je de volgende code uit:

curl -L --output install_hyperion.sh --get https://raw.githubusercontent.com/tvdzwan/hyperion/master/bin/install_hyperion.sh
sh ./install_hyperion.sh

Hyperion is nu geïnstalleerd. Klik hier voor meer informatie over de installatie van Hyperion.

Hyperion configureren

Nu moeten we Hyperion nog configureren. Dit kan met HyperCon. HyperCon is een Java applicatie waarmee je makkelijk een configuratie bestand kan maken. Wanneer je HyperCon opstart kun je aangeven hoeveel leds je waar overal hebt. Een aantal dingen zijn belangrijk om in te stellen:

Onder Device:

  • Type: Adalight
  • Output: /dev/ttyACM0
  • Baudrate: 460800

Onder het tabblad External, Effects Engine:

  • Directory: /storage/hyperion/effects

Device → Output kan verschillen. Om zeker te weten dat je de goede hebt hier haal je de Arduino uit je Raspberry Pi en type je: ls /dev/tty*, plug de Arduino nu in en voer het commando nogmaals uit, nu is er een device bij gekomen. Dit is degene die je moet gebruiken.

Nadat je het configuratie bestand gemaakt hebt moet het nog op de Raspberry pi gezet worden. Deze staat op de volgende locatie: /storage/.config/hyperion.config.json. Vervang dit bestand met je eigen configuratie en start de Raspberry Pi opnieuw op.

Als alles goed gaat zou het nu moeten werken. Voor je smartphone kun je ook de Hyperion app downloaden waarmee je wat met de kleurtjes kan spelen en effecten kan starten.

Extra’s voor ambilight op alle aparaten

Hardware

Wil je niet alleen ambilight vanuit OpenElec (Kodi) maar ook vanuit je andere apparaten zoals een game console, Horizon box of iets anders wat een HDMI aansluiting heeft dan heb je nog de volgende onderdelen nodig:

  • HDMI splitter (deze ondersteunt ook CEC)
  • HDMI2AV (Er zijn 3 versies, ik heb de beste ervaring met de “better” 1080p, de “best” gaf bij mij wat problemen)
  • AV-grabber (UTV007)
  • RCA-kabel / connectors

Let op: zorg dat je HDMI splitter en HDMI2AV minimaal 1080p, 3D en CEC ondersteunen. Bij HDMI is het zo dat wanneer een van de apparaten een bepaalde feature niet ondersteunt dit overal wegvalt. Ondersteunt je splitter geen CEC? Dan werkt dat niet meer. Ondersteunt je HDMI2AV alleen 720p? Dan zul je alleen in 720p content op je TV kunnen kijken.

Hardware installatie

In de simpele versie worden de beelden van Kodi gebruikt om de leds aan te sturen. Om ambilight voor alle aparaten te kunnen gebruiken moeten we eerst het HDMI signaal splitsen. Een kabel gaat naar de TV de ander naar het HDMI2AV kastje. Dit audio/video signaal wordt dan weer via de AV-grabber op de Raspberry pi aangesloten. Zie ook onderstaand schema. Het HDMI2AV kastje moet overigens op NTSC staan.

Let op: de HDMI2AV en de AV-grabber hebben allebei female RCA aansluitingen. Hier moet dus nog een kabel of connector tussen.

Hyperion configuratie

In het configuratie bestand van Hyperion moet het volgende gedeelte toegevoegd worden. Wanneer je alleen gebruik wil maken van de AV-grabber is het aan te raden het framegrabber en xbmcVideoChecker gedeelte uit te commenten.

"grabber-v4l2" :
{
        "device" : "/dev/video0",
        "input" : 0,
        "standard" : "NTSC",
        "width" : 1,
        "height" : 1,
        "frameDecimation" : 2,
        "sizeDecimation" : 4,
        "priority" : 800,
        "mode" : "2D",
        "cropLeft" : 10,
        "cropRight" : 8,
        "cropTop" : 12,
        "cropBottom" : 19,
        "redSignalThreshold" : 0.4,
        "greenSignalThreshold" : 0.2,
        "blueSignalThreshold" : 1.0
},

Reboot je Rasberry Pi en als het goed is zou alles moeten werken.

Meer guides die je kunnen helpen:

 

Leave a Reply