Crie um Sistema Ambilight Impressionante para Monitor com Arduino
Componentes e Materiais
| Arduino Nano R3 | × | 1 |
| Arduino UNO | × | 1 |
| Fita LED Endereçável WS2812 (Digilent) | × | 1 |
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
Olá, amigos! Hoje vou mostrar como fazer um Ambilight para TV/Monitor usando Arduino. Este é um projeto muito fácil.
Não entrarei em muitos detalhes sobre o funcionamento de cada parte, pois já escrevi informações no meu blog: diiprojectslab.com. Mas você conseguirá fazer funcionar com as informações aqui.
O que você precisa:
- Software Ambibox no PC (gratuito, apenas Windows)
- Arduino com script simples usando a biblioteca FastLED (~$3)
- 50 LEDs RGB WS2811/WS2812 (~$13) – fonte de alimentação opcional
Nota importante: Linux ou Mac não são suportados. O software Ambibox usado aqui só roda no Windows. (Para aplicações standalone existe variante com Raspberry Pi, mais cara).
Os LEDs funcionam muito bem sem lag perceptível no desktop e ao assistir filmes! Jogos são outra história: se o jogo rodar em modo tela cheia, o software na maioria das vezes não consegue capturar a imagem. Mas modo janela sem bordas (borderless) funciona! (Considere o CPU extra necessário ~5%)
Passo 1: Materiais Necessários
- Fita LED WS2812B
- Arduino Nano
- Mini protoboard
- Jumpers
- Terminal para conector DC jack
- Cabo Mini USB para USB
- Fonte 5V para os LEDs
- Um computador
- Arduino IDE
- Cabo de programação
Passo 2: LEDs RGB
A parte mais importante são os LEDs RGB com controladores individuais. Não importa qual controlador você compre, desde que seja suportado pela biblioteca FastLED. Lista de chips suportados: GitHub FastLED.
Os mais comuns são WS2811 ou WS2812 – baratos e fáceis de usar. Vendidos em dois formatos:
- Lâmpadas individuais (12mm) com espaçamento variável (~10cm máx.) – vantagem: posicionamento livre
- Fitas LED (com adesivo) – compradas por metro com espaçamento fixo (30/60+ LEDs/m)
Passo 3: Fixar a Fita LED no Monitor/TV
- Meça a parte traseira do monitor para saber quantos LEDs cortar (deixe ~1cm de cada borda)
- Corte a fita no comprimento desejado – cada LED é individualmente endereçável, corte nos pontos marcados
- Reconecte as 4 tiras para agir como uma única fita flexível (solde +5V, DIN, GND em sequência)
- DICA CRÍTICA: Verifique se as setas de direção da fita estão na orientação correta, senão não funcionará!
Passo 4: Conectar o Arduino
- Conecte o pino DIN da fita ao pino 5 do Arduino (no código: pino 4 ou 6 – verifique!)
- Opcional: Conecte GND do Arduino ao GND da fonte externa (útil se usar fonte separada da PSU do PC)
- Conecte o Arduino ao PC e instale drivers se necessário
Passo 5: Conexões Resumidas
Para LEDs WS2811/12, apenas 3 conexões:
- 5V da fonte → 5V dos LEDs
- GND da fonte → GND do Arduino → GND dos LEDs
- Linha de dados dos LEDs → uma porta digital do Arduino (lembre o número!)
Passo 6: Software
- Baixe o código Adalight para Arduino (abaixo)
- Abra na Arduino IDE e instale a biblioteca FastLED antes
- No código, defina o pino (ex: pino digital 4) e quantidade de LEDs (ex: 60)
- Compile, selecione a porta COM e faça upload
- Configure o Ambibox: ajuste cores para combinar com a parede (no meu caso, branca)
- Reproduza um vídeo de teste RGB e pronto!
Agora você pode assistir filmes com efeitos AMBILIGHT – incrível! O app também tem efeito sonoro: LEDs piscam conforme a música.
Código
Código Arduino (baseado em Adalight/FastLED)
#include "FastLED.h"
#define NUM_LEDS 240
#define DATA_PIN 6
#define serialRate 115200
// "Magic Word" do protocolo 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);
// Sequência de inicialização RGB
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"); // Envia "Magic Word" para o host
}
void loop() {
// Aguarda "Magic Word" (3 bytes: 'A','d','a')
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();
// Verifica checksum
if (chk != (hi ^ lo ^ 0x55)) { i = 0; goto waitLoop; }
memset(leds, 0, NUM_LEDS * sizeof(struct CRGB));
// Recebe dados RGB para cada 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(); // Atualiza LEDs
}
Esquemático
Processo de manufatura
- Monitor de Frequência Cardíaca IoT em Tempo Real com Arduino e MAX30100
- Detector de Frequência de Áudio com Arduino – Meça Picos de Som com Módulo de Alta Sensibilidade
- Jogo da Velha com Arduino, Matriz LED MAX7219 e Caixa de Papelão
- Construa um Temporizador Regressivo Confiável com Arduino e Display de 7 Segmentos SparkFun
- Construa um Rádio FM Compacto com Arduino Nano e RDA5807M
- Monitor de Nível de Sumidouro DIY – Arduino Nano, MPXV5010DP e Display OLED
- Construa Seu Próprio Carro RC Porsche com Arduino: Guia Passo a Passo
- Criar Tons Musicais com Arduino: Um Guia Passo a Passo
- Sistema Avançado de Monitoramento Residencial com Arduino Mega e Sensores IoT
- Construa uma Bússola Digital em Tempo Real com Arduino e Processing