Créer un système Ambilight spectaculaire pour moniteur avec Arduino
Composants et fournitures
| Arduino Nano R3 | × | 1 |
| Arduino UNO | × | 1 |
| Bande LED adressable WS2812 (Digilent) | × | 1 |
Applications et services en ligne
| Arduino IDE |
À propos de ce projet
Bonjour à tous ! Aujourd'hui, je vous montre comment réaliser un Ambilight pour TV/moniteur avec Arduino. C'est un projet très accessible.
Je ne rentrerai pas dans les détails de chaque composant car j'ai déjà documenté cela sur mon blog : DIY Projects Lab. Mais les informations ici suffisent pour le reproduire.
Matériel nécessaire
- Logiciel Ambibox sur PC (gratuit, Windows uniquement)
- Arduino avec script simple utilisant la bibliothèque FastLED (~3 €)
- 50 LED RGB WS2811/WS2812 (~13 €) + alimentation 5V optionnelle
Cette configuration est très économique mais ne fonctionne qu'avec un PC.
Remerciements à NextPCB pour leur soutien dans la réalisation de ce projet.
Notes importantes
- Linux/macOS non supportés : Ambibox n'existe que sur Windows (variante RPi autonome possible mais plus coûteuse)
- Les LED fonctionnent bien sans latence notable sur le bureau et les films
- Jeux en plein écran : le logiciel ne capture souvent pas l'image → utilisez le mode fenêtré sans bordure (consomme ~5 % CPU supplémentaire)
Étape 1 : Matériel nécessaire
- Bande LED WS2812B
- Arduino Nano
- Mini breadboard
- Fils de connexion
- Borniers vers prise DC
- Câble Mini USB vers USB
- Alimentation 5V pour les LED
- Un ordinateur
- Arduino IDE
- Câble de programmation
Étape 2 : Les LED RGB adressables
La clé du projet : des LED RGB avec contrôleur individuel. Peu importe le contrôleur tant qu'il est supporté par FastLED : liste des puces supportées. Les plus courantes sont les WS2811 ou WS2812 (bon marché, faciles).
Deux formats existent :
- LED individuelles (12 mm) avec espacement variable (~10 cm max), vendues par 50
- Bandes LED adhésives à espacement fixe (30/60+ LED/m)
Les LED individuelles offrent un positionnement libre mais nécessitent une fixation sur le moniteur.
Étape 3 : Monter la bande LED sur la TV
- Mesurez le pourtour arrière de votre moniteur (laissez ~1 cm des bords)
- Coupez la bande à la longueur voulue (points de coupe marqués entre chaque LED)
- Reconnectez les 4 segments en une bande continue : soudez +5V, DIN et GND d'un segment au suivant
- Important : Vérifiez que les flèches de direction sur la bande pointent toutes dans le même sens !
Étape 4 : Connecter l'Arduino
- Broche DIN de la bande → broche 5 (ou 4 selon le code) de l'Arduino
- Optionnel : relier GND Arduino à l'alimentation des LED si source séparée
- Connectez l'Arduino au PC et installez les pilotes si nécessaire
Étape 5 : Connexions électriques
Pour WS2811/12, seulement 3 connexions :
- 5V alimentation → ligne 5V des LED
- Masse alimentation → masse Arduino ET masse LED
- Ligne data LED → une broche numérique Arduino (notez le numéro)
Étape 6 : Logiciel
- Téléchargez le code Adalight pour Arduino (fourni ci-dessous)
- Ouvrez dans l'Arduino IDE, installez la bibliothèque FastLED
- Modifiez dans le code : broche data (ex: 4) et nombre de LED (ex: 60)
- Compilez, sélectionnez le port COM, téléversez
- Configurez Ambibox : ajustez les couleurs pour correspondre à votre mur, lancez une vidéo test RGB
L'application propose aussi un mode son : les LED clignotent au rythme de la musique.
Code Arduino (Adalight / FastLED)
#include "FastLED.h"
#define NUM_LEDS 240
#define DATA_PIN 6
#define serialRate 115200
// "Magic Word" Adalight
uint8_t prefix[] = {'A', 'd', 'a'}, hi, lo, chk, i;
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
// Test couleurs au démarrage
LEDS.showColor(CRGB(255, 0, 0)); delay(500);
LEDS.showColor(CRGB(0, 255, 0)); delay(500);
LEDS.showColor(CRGB(0, 0, 255)); delay(500);
LEDS.showColor(CRGB(0, 0, 0));
Serial.begin(serialRate);
Serial.print("Ada\n"); // Envoi du Magic Word
}
void loop() {
// Attente du Magic Word (3 octets)
for (i = 0; i < sizeof prefix; ++i) {
waitLoop:
while (!Serial.available());
if (prefix[i] == Serial.read()) continue;
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();
// Vérification checksum
if (chk != (hi ^ lo ^ 0x55)) { i = 0; goto waitLoop; }
memset(leds, 0, NUM_LEDS * sizeof(struct CRGB));
// Lecture données LED (R, G, B par LED)
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;
}
FastLED.show(); // Affichage
}
Schéma de câblage

Processus de fabrication
- Moniteur de Fréquence Cardiaque IoT en Temps Réel avec Arduino et MAX30100
- Détecteur de fréquence audio Arduino — Mesurer le pic sonore avec module haute sensibilité
- Morpion sur matrice LED MAX7219 avec boîtier en carton
- Construire un minuteur à rebours Arduino fiable avec afficheur 7 segments SparkFun
- Construire une Radio FM Compacte avec Arduino Nano et RDA5807M
- Surveillance Niveau Cuve DIY – Arduino Nano, Capteur Pression MPXV5010DP et Écran OLED
- Construisez votre propre voiture RC Porsche avec Arduino : Guide étape par étape
- Générer des Sons Musicaux avec Arduino : Guide Pas à Pas
- Construire une Boussole Numérique Temps Réel avec Arduino et Processing