image

LightZ

Un Philips Ambilight fait maison pour moins de $50.

Explorer le code source

LightZ

C'est l'un de mes petits gadgets. Nommé LightZ, c'est en fait une guirlande connectée basée sur Arduino. Inspiré par Philips Ambilight, elle est capable de faire le rendu de la lumière d'un écran de PC et le rendu de la musique. Ce projet est une prototype et n'est pas conçu pour cibler le grand public, cependant, le code source est disponible sous licence WTFPL si vous souhaitez l'explorer et l'utiliser.

Rendu sonore.

Connecté à un ordinateur sous Windows par Bluetooth, LightZ écoute la carte audio et reproduit le spectre sonore des bass en stéréo. Dans cette vidéo : Deluxe - Shoes

Derrière la scène.

LightZ est composé d'un ensemble de guirlandes de LEDs, d'un Arduino, d'une antenne Bluetooth et d'une application Windows. Dans la vidéo : Daft Punk - Da Funk

Pourquoi et comment?

  • Pourquoi
    Pourquoi

    Je suis un amoureux de la musique, je n'arrive pas à travailler sans, et j'aime bien me détendre avec un film et des popcorns en étant plongé dans le noir, comme au cinéma.

    C'est pour cette raison qu'après avoir découvert Philips Ambilight, j'ai voulu faire mon propre système pour avoir une ambiance sympa en regardant un film, en écoutant de la musique et en travaillant.

  • Approche
    Approche

    Je voulais 3 fonctionnalités : faire le rendu des couleurs des bordures de l'écran d'un PC sous Windows, faire le rendu du spectre sonore en écoutant de la musique, et être capable de choisir moi-même une couleur.

    Après quelques recherches et après avoir lu les articles de Sebastien WARIN au sujet de son propre Ambilight, j'ai réalisé que je n'avais pas beaucoup de matériel et ne voulais pas dépenser beaucoup d'argent dans ce projet. Je me suis donc tourné vers une solution utilisant une carte Arduino Uno-like connecté à mon PC portable par Bluetooth.

    L'avantage de l'Arduino Uno est qu'il est facile à utiliser, bien documenté, et peut être trouvé pour pas cher. Le choix du Bluetooth réside dans la configuration de mon apartement et de mon bureau : j'ai déjà trop de câbles partout et ne voulais pas en ajouter pour connecter l'Arduino à mon PC ou à l'écran externe. Aussi, utiliser une connection internet locale était intéressant mais un peu "trop" pour un tel projet. De plus, la connection internet locale (pas d'ethernet, signal Wi-Fi médiocre) n'était pas l'idéale à ce moment-là pour ce projet. Le Bluetooth était une possibilité peu coûteuse, sans fil et facile à implémenter.

  • Matériel
    Matériel

    Comme je voulais minimiser le prix du matériel nécessaire et éviter de payer cher pour du matériel que j'allais potentiellement casser vu que j'allais faire de l'expérimentation dessus, je n'ai pas hésité à acheter le matériel nécessaire sur AliExpress, le Amazon chinois. L'avantage est que l'on peut trouver des petits composants électronique pour pas cher. Les désavantages sont qu'il faut compter environ 3 semaines pour être livré en Europe et en Amérique du Nord et que la qualité de certain produit laisse à désirer. Je recommande personnellement de ne pas acheter une tablette sur ce site par exemple, mais pour des câbles, petits composants en plastique, Arduino Uno-like pas cher, c'est assez.

    Ci-dessous, la liste du matériel dont j'ai eu besoin pour fabriquer LightZ :

    • Arduino Uno-like (j'insiste sur le "like" vu que ce n'est pas un Arduino Uno officiel. C'est un clone de la carte, c'est légal.).
    • Antenne Bluetooth HC-06
    • Câbles
    • Guirlande de LEDs WS2801-like (le code source sur GitHub supporte aussi le LPD8806).
    • Bloque d'alimentation (attention au voltage qui va dépendre de la guirlande que vous choisissez).
    • Divers adapteurs électrique.
    • Quelques LEGO pour faire une boite qui protège l'électronique de la poussière.
    • Divers outils comme un fer à souder, une règle...
  • Logiciel
    Logiciel

    Une application WPF est là pour déterminer quelle LED doit être allumée.

    Pour faire le rendu des bordures de l'écran, le programme utilise DirectX avec une librairie appelée SlimDX qui récupère régulièrement un tableau de bytes qui représente la couleur de chaque pixel (en gros, une capture d'écran). Le choix de DirectX à la place des APIs .Net et Windows réside dans les performances. DirectX utilise beaucoup moins de mémoire et de CPU pour cette même action.
    Une donnée de 4 bytes est envoyé à chaque LED à allumer : le premier byte est égale à l'ID de la LED, le second est égale à la quantité de rouge, le troisième, la quantité de vert, et le quatrième, de bleu.

    Pour faire le rendu du spectre sonore, le programme écoute la carte son de l'ordinateur grâce à une librairie appelée BASS.NET. Il fait une moyenne des bass en stéréo et envoie l'intensité du volume à la carte par Bluetooth.
    Une donnée de 4 bytes est envoyé toutes les 20ms : le premier est une valeur spéciale qui dit à la carte que nous voulons afficher le spectre sonore. Le second est la moyenne des bass à gauche, le troisième, à droite. Le dernier byte est une constante inutilisée.