Ambient Light - 1. Conception

Idée

Cette semaine je suis tombé sur un article qui montre comment piloter un "led strip" (bande de led en français) depuis son PC pour en faire une sorte de copie du système Ambilight de Philips. Avec un Arduino (j'aime bien les Arduinos) comme micro contrôleur. Etant donné qu'à la maison mon écran de PC est une télé de 46 pouces et que je l'utilise assez souvent pour mater des flims, je me suis dit banco, on va faire ça!

En cherchant un peu à gauche à droite, j'ai réussi à trouver un "led strip" à un prix intéressant sur ebay. Dans les grandes lignes, il s'agit d'une bande plastique sur laquelle sont régulièrement disposées des leds RGB. On peut régler la couleur pour l'ensemble des leds. Il existe des bandes où l'on peut piloter chaque led individuellement mais c'est beaucoup plus cher. Bref, j'ai trouvé une bobine de 5m avec 150 leds (soit 1 tous les 3.33 cm) pour 37€, soit vraiment pas cher quand on voit les prix pratiqués en France (ici par exemple). J'ai également commandé des réseaux de darlington comme présenté dans l'article pour commander les leds.

Le fonctionnement du montage présenté dans l'article est le suivant : un programme tourne sur le PC et calcule la valeur moyenne de la couleur de l'écran, l'envoie à l'Arduino qui lui pilote la bande de led. C'est assez simple et ça a l'air de plutôt bien fonctionner. Je me suis tout de même posé la question de savoir si je pouvais faire un peu mieux :-) Résultat, je vais pas faire une seule couleur, mais sept. Disposées comme ceci :

Ambientlight_1_341x297

Le programme qui tourne sur le PC ne devra pas calculer la valeur moyenne des couleurs à l'écran mais 7 valeurs moyennes, une pour chaque zone au bord de l'écran correspondant à une bande de led.


Conception

Coté technique, plusieurs difficultés. La première c'est comment l'Arduino va faire pour piloter toutes ces bandes de led. Pour régler l’intensité d'une led, on utilise une technique dite pulse width modulation (PWM, petit article ici). L'Arduino propose 6 sorties PWM. Il m'en faut 21 (7 x 3). Il va donc falloir générer ces signaux à la mano, en software. Le truc c'est que ça risque de demander plus de temps CPU au petit micro contrôleur qu'il n'en a. Fort heureusement, je suis tombé sur une technique qui à l'air très intéressante : BAM pour Bit Angle Modulation. Le topic ici explique très bien de quoi il en retourne, comment en faire et pourquoi ce serait trop compliqué de faire tant de signaux en PWM. Je vous invite à le lire si ça vous intéresse. J'utiliserai également quelque registres série->parallèle car l'Arduino n'a pas 23 entrées sorties (21 + 2 pour la communication vers le PC). Bon, je pense que ça résout le problème du pilotage des led strips.

Autre point à régler, quelle va être la consommation de ces leds et comment les alimenter. Après de savants calculs j'en suis venu à la conclusion que j'aurai besoin de 2.5m de bande répartis en 110cm en haut et 70cm de chaque coté. Ce qui nous fait un total de 75 leds de 0.24W chacune soit 18W! Je pense pouvoir utiliser une alim de PC portable ou quelque chose comme ça commandée à Hong Kong pour quelque euros.

Enfin, dernier point à régler, le programme sur le PC. Je pense utiliser la même technique que celle de l'article duquel je me suis inspiré : un programme en java qui fait des screenshots et calcule une valeur moyenne. En l'adaptant avec des zones. Ça ça devrait être assez simple.


Résumons, de quoi vais-je avoir besoin ?

  • Un led strip RGB.
  • Un Arduino.
  • Des réseaux de darlingtons (ULN2003) pour service d'interface de puissance entre l'Arduino et les leds.
  • Des registres série->parallèle (74HC164).
  • Une alimentation 12V 20W.
  • Un câble USB, des fils, du scotch (et du bourbon), un fer à souder, etc.

Le tout est d'ores et déjà commandé. Je suis impatient de recevoir les différentes pièces! La suite au prochain épisode lorsque je me serais fait livrer.