Pular para o conteúdo
Arduino

Como usar fita de LED RGB Endereçável no Arduino

Bianca

Nível

Intermediário

Tempo

30 min

Peças

2 componentes

Custo

R$45 - R$60

O que você vai precisar 0/2

Fita de LED RGB Endereçável no Arduino: O tutorial mais fácil do MUNDO!

Se você já domina os LEDs comuns e quer melhorar a qualidade dos seus projetos de iluminação, robótica ou decoração, você precisa conhecer as fitas de LED RGB endereçáveis!

Olá pessoal!

Sabe aqueles painéis incríveis cheios de efeitos coloridos, letreiros em pixel art, luminárias gamer com efeitos fluídos e setups que parecem saídos de um filme cyberpunk? O segredo é: LEDs RGB Endereçáveis.

Diferente de uma fita RGB comum, onde todos os LEDs acendem rigorosamente na mesma cor e ao mesmo tempo, com a fita endereçável você assume o controle pixel a pixel. Cada pequeno LED possui uma “identidade” no código e você pode definir a cor exata e o brilho de cada um deles individualmente, usando apenas um único pino de dados do seu Arduino!

Mas quando começamos a pesquisar para comprar, surgem duas siglas clássicas que deixam todo mundo confuso: WS2811 e WS2812 (ou WS2812B). Qual é a diferença entre eles? Qual compensa mais comprar? Vamos entender tudo neste post hoje!

WS2811 vs. WS2812B: Qual a diferença e por que o WS2812B é melhor?

Para entender a diferença, precisamos dar uma olhada em como a mágica do controle de dados acontece dentro da fita:

  • O WS2811: É o chip circuito integrado (CI) que gerencia a comunicação de dados. Nas fitas WS2811 mais comuns (geralmente alimentadas em 12V), o chip fica visível na placa flexível do lado de fora do LED. Um único chip controlador geralmente gerencia um grupo de 3 LEDs juntos. Ou seja, você não controla cada LED sozinho, mas sim “blocos” de 3 em 3 LEDs.
  • O WS2812B: O chip controlador foi miniaturizado e montado diretamente dentro do próprio encapsulamento do LED RGB (tamanho 5050). Como cada LED tem seu próprio microchip interno, você tem o controle 100% individual de cada pixel, sem precisar agrupar nada. Funciona na mesma tensão do Arduino (5V), facilitando muito a alimentação em protótipos pequenos, projetos vestíveis (wearables) e luminárias de mesa.
Comparativo entre fita de LED WS2811 e fita WS2812B

Por aqui a minha escolha é sempre o WS2812B!

Densidade de LEDs por metro: Qual escolher?

Outra diferença fundamental na hora de escolher sua fita é a densidade de LEDs por metro. As opções mais comuns no mercado são:

Comparação de densidades de fita de LED RGB com 30, 60 e 144 LEDs por metro

  • 30 LEDs por metro: Maior espaçamento entre os pontos de iluminação. Excelente opção para iluminação indireta (atrás de monitores, TVs ou sancas) e projetos com menor consumo elétrico.
  • 60 LEDs por metro: O modelo padrão ideal para a maioria dos projetos makers, luminárias e decoração gamer. Oferece um ótimo equilíbrio entre resolução de efeitos, brilho e consumo de energia.
  • 144 LEDs por metro: Alta densidade com LEDs bem próximos. Cria um efeito visual muito dinâmico, mas exige uma fonte de alimentação externa bastante forte por conta do consumo elétrico.
  • Fitas COB Endereçáveis: Uma das maiores tendências no mundo maker! As fitas COB (Chip on Board) possuem uma camada contínua de silicone cobrindo uma altíssima densidade de pontos (variando de 332, 480 a até mais de 576 micro-LEDs por metro). Nas versões COB de menor densidade, os pontos de luz ainda podem ser levemente percebidos (como em uma fita comum, porém bem mais suaves e difusos); já nas versões de altíssima densidade, o resultado é uma linha de luz 100% homogênea estilo tubo neon. E o melhor: usam os mesmos protocolos (WS2811/WS2812B) e são programadas no Arduino exatamente com o mesmo código!

Bora entender como funciona na prática?

Fazendo as Conexões Elétricas

A fita de LED endereçável WS2812B possui apenas 3 pinos principais:

  • 5V (VCC / +5V): Alimentação positiva da fita (geralmente o fio vermelho).
  • GND: O terra / negativo compartilhado (geralmente o fio preto ou branco).
  • DIN (Data In): O pino de dados por onde o Arduino envia os comandos de cor (geralmente o fio verde ou amarelo). Atenção: repare nas pequenas setas impressas na fita! O sinal de dados do Arduino deve entrar sempre no lado DIN (início da fita) e seguir o sentido das setas.

Esquema de Ligação 1: Testes Rápido com Poucos LEDs (até 12 LEDs na Protoboard)

Se você vai fazer apenas um teste rápido com um pedaço pequeno de fita, pode alimentar diretamente pelos pinos do Arduino:

  • Pino 5V da Fita ➔ Pino 5V do Arduino
  • Pino GND da Fita ➔ Pino GND do Arduino
  • Pino DIN da Fita ➔ Pino Digital 6 do Arduino (opcionalmente passando por um resistor de 330 Ω)

Ilustração da fita de LED RGB WS2812B conectada ao Arduino Uno

Esquema de Ligação 2: Fitas Longas ou Muitos LEDs (com Fonte Externa de 5V)

Se você for acender uma fita inteira ou mais de 15 LEDs em brilho alto, a alimentação DEVE vir de uma fonte externa de 5V dedicada:

  • Pino 5V da Fita ➔ Polo Positivo (+5V) da Fonte Externa
  • Pino GND da Fita ➔ Polo Negativo (GND) da Fonte Externa E TAMBÉM ao pino GND do Arduino (O GND compartilhado é obrigatório para fechar o circuito de dados!).
  • Pino DIN da Fita ➔ Pino Digital 6 do Arduino

Ilustração da fita de LED RGB WS2812B conectada com fonte externa ao Arduino Uno

⚠️ Aviso Super Importante: A quantidade de LEDs que você pode alimentar com segurança depende diretamente da sua fonte de energia. Se o seu Arduino estiver alimentado direto pela porta USB do computador, a corrente fica limitada a cerca de 500 mA — o suficiente para acender apenas uma dúzia de LEDs no máximo! Não é recomendável ligar uma fita com muitos LEDs direto na USB do PC ou no pino 5V do Arduino, pois uma fita de 30 ou 60 LEDs em brilho máximo (onde cada LED consome até 60 mA em branco puro) exige uma corrente muito maior, o que pode reiniciar o Arduino, desligar a porta USB do computador por proteção ou até queimar as placas. Para projetos com muitos LEDs ou brilho alto, utilize sempre uma fonte externa de 5V dedicada!

Dica de Proteção (Opcional): Em projetos finais ou quando utilizar fios muito compridos, é uma excelente prática colocar um resistor de 330 Ω entre o pino digital do Arduino e o pino DIN da fita para amortecer picos de sinal e proteger os LEDs.

Programação e Bibliotecas

A forma mais fácil de programar o WS2812B no Arduino é usando a famosa biblioteca Adafruit NeoPixel.

Como instalar a biblioteca Adafruit NeoPixel

  • Abra a sua Arduino IDE.
  • Vá no menu superior em Sketch ➔ Incluir Biblioteca ➔ Gerenciar Bibliotecas…
  • Na caixa de busca, digite Adafruit NeoPixel.
  • Encontre a biblioteca criada pela Adafruit e clique em Instalar.

Como funciona a Mistura de Cores RGB no Código (R, G, B)?

Se você é iniciante no mundo dos LEDs endereçáveis, pode estar se perguntando o que significam os números dentro do comando fita.Color(255, 0, 0). A explicação é muito simples e fascinante!

Cada pixel individual da fita WS2812B possui três micro-LEDs internos: um Red (Vermelho), um Green (Verde) e um Blue (Azul). O sistema RGB utiliza uma escala de intensidade que vai de 0 (totalmente desligado) até 255 (brilho máximo) para cada uma dessas três cores.

Misturando o nível de brilho de cada uma das três cores primárias da luz (técnica chamada de Mistura Aditiva de Cores), conseguimos gerar mais de 16,7 milhões de combinações de cores! Veja alguns exemplos práticos de como usar a função fita.Color(R, G, B):

  • fita.Color(255, 0, 0) ➔ Vermelho Puro: Apenas o micro-LED vermelho em 100%, com verde e azul desligados.
  • fita.Color(0, 255, 0) ➔ Verde Puro: Apenas o micro-LED verde aceso no brilho máximo.
  • fita.Color(0, 0, 255) ➔ Azul Puro: Apenas o micro-LED azul aceso no brilho máximo.
  • fita.Color(255, 255, 0) ➔ Amarelo: Mistura de Vermelho (255) + Verde (255) com o Azul desligado.
  • fita.Color(0, 255, 255) ➔ Ciano (Azul Claro): Mistura de Verde (255) + Azul (255).
  • fita.Color(255, 0, 255) ➔ Roxo / Magenta: Mistura de Vermelho (255) + Azul (255).
  • fita.Color(255, 128, 0) ➔ Laranja: Vermelho em 100% (255) combinado com Verde na metade da intensidade (128).
  • fita.Color(255, 255, 255) ➔ Branco Puro: Os três micro-LEDs (R, G e B) ligados juntos no brilho máximo.
  • fita.Color(0, 0, 0) ➔ Apagado / Preto: Todas as três cores desligadas.

Código Exemplo 1: Teste Básico de Cores Primárias

Este primeiro exemplo faz uma varredura simples pela fita, acendendo um LED de cada vez nas cores primárias: Vermelho, Verde e Azul.

#include <Adafruit_NeoPixel.h>

#define PINO_DADOS 6 // Pino digital do Arduino conectado ao DIN
#define NUM_LEDS 12  // Quantidade de LEDs na fita

Adafruit_NeoPixel fita(NUM_LEDS, PINO_DADOS, NEO_GRB + NEO_KHZ800);

void setup() {
  fita.begin(); // Inicializa a fita de LED
  fita.show(); // Apaga todos os LEDs no início
  fita.setBrightness(50); // Define o brilho geral (0 a 255)
}

void loop() {
  // 1. Acende em VERMELHO
  preencherCor(fita.Color(255, 0, 0), 100);
  delay(1000);

  // 2. Acende em VERDE
  preencherCor(fita.Color(0, 255, 0), 100);
  delay(1000);

  // 3. Acende em AZUL
  preencherCor(fita.Color(0, 0, 255), 100);
  delay(1000);
}

void preencherCor(uint32_t cor, int tempoEspera) {
  for (int i = 0; i < fita.numPixels(); i++) {
    fita.setPixelColor(i, cor);
    fita.show();
    delay(tempoEspera);
  }
}

⚠️ Minha fita acendeu com a cor trocada (ex: mandei Vermelho e acendeu Verde)?

Isso é super comum e muito simples de resolver! Diferentes fabricantes e lotes de fitas organizam a sequência dos canais de cor nos microchips internos de formas distintas. Por exemplo, enquanto a maioria das fitas WS2812B trabalha com a ordem GRB (Verde, Vermelho, Azul), fitas WS2811 ou fitas de diferentes fabricantes podem utilizar a ordem RGB ou BRG.

Se você testou o código para acender vermelho e a sua fita acendeu verde ou azul, altere o parâmetro de ordem das cores na linha de declaração da fita no início do sketch (linha 8). Na biblioteca Adafruit NeoPixel, mude o parâmetro NEO_GRB + NEO_KHZ800 para NEO_RGB + NEO_KHZ800 ou NEO_BRG + NEO_KHZ800!


Código Exemplo 2: Alternando Efeitos pelo Botão com Feedback no Monitor Serial

Agora cada clique no botão alterna a cor e o efeito da iluminação, imprimindo no Monitor Serial o número e o nome do modo ativo!

Para Ligar o botão: No código vamos ativar o resistor interno do Arduino com INPUT_PULLUP, assim a ligação é super simples: conecte um dos terminais do botão no Pino Digital 2 e o outro lado direto no GND do Arduino, sem precisar de resistores externos na protoboard!

Curiosidade: Além do sistema RGB tradicional que usamos nos nossos códigos, sabia que existem outros modelos de cor como o HSV (Hue, Saturation, Value)? Ele organiza todas as cores em uma roda contínua de 0 a 65.535, sendo muito utilizado por programadores avançados para criar transições matemáticas complexas de arco-íris. Para os iniciantes, o bom e velho RGB resolve praticamente qualquer projeto com facilidade, mas quem quiser se aventurar, recomendo estudar um pouco sobre o HSV e quem sabe inserir no seu projeto!

#include <Adafruit_NeoPixel.h>

#define PINO_DADOS 6
#define PINO_BOTAO 2
#define NUM_LEDS 12

Adafruit_NeoPixel fita(NUM_LEDS, PINO_DADOS, NEO_GRB + NEO_KHZ800);

int modo = 0; // Guarda o efeito atual (0 a 3)
bool estadoBotaoAnterior = HIGH;

void setup() {
  Serial.begin(9600); // Inicializa a comunicação Serial
  pinMode(PINO_BOTAO, INPUT_PULLUP); // Botão usa resistor interno do Arduino

  fita.begin();
  fita.show();
  fita.setBrightness(60);

  Serial.println("==========================================");
  Serial.println(" Sistema de Controle da Fita WS2812B ");
  Serial.println("Pressione o botao para alternar os efeitos!");
  Serial.println("==========================================");
  imprimirModoAtual();
}

void loop() {
  // Verifica se o botão foi pressionado (leitura com debounce simples)
  bool estadoBotaoAtual = digitalRead(PINO_BOTAO);

  if (estadoBotaoAnterior == HIGH && estadoBotaoAtual == LOW) {
    delay(50); // Debounce para evitar leituras falsas do botão
    if (digitalRead(PINO_BOTAO) == LOW) {
      modo = (modo + 1) % 4; // Avança o modo de 0 a 3 e volta para 0
      imprimirModoAtual();
    }
  }
  estadoBotaoAnterior = estadoBotaoAtual;

  // Executa o efeito referente ao modo ativo
  switch (modo) {
    case 0:
      efeitoVermelhoFixo();
      break;
    case 1:
      efeitoVerdeFixo();
      break;
    case 2:
      efeitoStrobe();
      break;
    case 3:
      fita.clear(); // Apaga a fita
      fita.show();
      break;
  }
}

// Imprime a confirmação do modo no Monitor Serial
void imprimirModoAtual() {
  Serial.print(" [SERIALLAB] Modo ativo atualizado para: ");
  Serial.print(modo);
  Serial.print(" -> ");

  switch (modo) {
    case 0: Serial.println("Efeito 0: Vermelho Fixo"); break;
    case 1: Serial.println("Efeito 1: Verde Fixo"); break;
    case 2: Serial.println("Efeito 2: Strobe / Pisca Branco"); break;
    case 3: Serial.println("Efeito 3: LEDs Apagados (Standby)"); break;
  }
}

// --- Funções dos Efeitos ---

void efeitoVermelhoFixo() {
  fita.fill(fita.Color(255, 0, 0));
  fita.show();
}

void efeitoVerdeFixo() {
  fita.fill(fita.Color(0, 255, 0));
  fita.show();
}

void efeitoStrobe() {
  fita.fill(fita.Color(255, 255, 255)); // Branco
  fita.show();
  delay(80);
  fita.clear();
  fita.show();
  delay(80);
}

Código Exemplo 3: Usando a Biblioteca WS2812FX para Efeitos Prontos

Se você não quer programar as animações, a biblioteca WS2812FX é ótima! Ela vem com mais de 50 animações prontas como fogo queimando, respiração, cometa, estroboscópio, teatro e arco-íris que você ativa chamando uma única linha no código (por aqui eu normalmente uso essa biblioteca nos meus projetos). Você pode definir os efeitos tanto pelo nome da constante (ex: FX_MODE_FIRE_FLICKER) quanto pelo seu número de índice (de 0 a 55+), o que facilita a troca de efeitos em laços de repetição ou por botões! Dica: lembre-se de instalar a biblioteca WS2812FX pelo Gerenciador de Bibliotecas da Arduino IDE da mesma forma que fizemos no início do tutorial.

#include <WS2812FX.h>

#define PINO_DADOS 6
#define NUM_LEDS 30

WS2812FX ws2812fx = WS2812FX(NUM_LEDS, PINO_DADOS, NEO_GRB + NEO_KHZ800);

void setup() {
  ws2812fx.init();
  ws2812fx.setBrightness(60);
  ws2812fx.setSpeed(1000); // Define a velocidade da animação
  ws2812fx.setColor(0xFF0000); // Define a cor em Hexadecimal (Vermelho)

  // Você pode definir o efeito pelo NOME da constante ou pelo seu NÚMERO (0 a 55+):
  // Exemplo pelo nome: ws2812fx.setMode(FX_MODE_FIRE_FLICKER);
  // Exemplo pelo número do efeito (24 = Fogo / Fire Flicker):
  ws2812fx.setMode(24);

  ws2812fx.start();
}

void loop() {
  ws2812fx.service(); // Executa e atualiza o efeito em segundo plano
}

RESUMO SOBRE OS EFEITOS E BIBLIOTECAS:

  • Adafruit_NeoPixel: É a biblioteca mais famosa e leve. Ela fornece os blocos de construção essenciais, permitindo definir a cor de um LED específico com setPixelColor(), preencher toda a fita com fill(), ajustar o brilho geral com setBrightness() e utilizar funções de cores com rainbow(). É perfeita para aprender a lógica e criar seus próprios efeitos do zero, como te mostrei nos primeiros exemplos!
  • WS2812FX: Ideal para quem busca efeitos prontos sem precisar programar tudo do zero. No Exemplo 3 te mostrei como ela funciona: ela é construída por cima da biblioteca Adafruit NeoPixel e permite trocar de efeito chamando apenas uma linha de código como ws2812fx.setMode(FX_MODE_FIRE_FLICKER).
  • FastLED: Essa é famosa pela altíssima velocidade de renderização e controle de paletas de cores complexas. E se você pretende usar placas como ESP32 ou ESP8266, nem precisa programar do zero! Existem firmwares fantásticos e completos prontos para gravar diretamente no microcontrolador, como o famoso WLED, permitindo controlar todos os efeitos da fita via aplicativo no celular, página web ou automação residencial via Wi-Fi sem escrever nenhuma linha de código! Não coloquei um exemplo neste tutorial, mas acho que essa merece um tutorial completo só para ela, fica para um próximo post!

Como alimentar fitas longas com Segurança?

Quando trabalhamos com fitas de LED WS2812B de 1 ou 2 metros (60 a 120 LEDs), um fenômeno muito comum é a queda de tensão ao longo da fita. Você vai notar que os primeiros LEDs acendem com brilho perfeito em branco puro, mas lá no final da fita a luz começa a ficar amarelada ou fraca!

  • Injeção de Tensão: Conecte fios de energia 5V da fonte externa tanto no início quanto no final da fita (e a cada 2 metros se a fita for muito longa).
  • Corrente: Sempre coloque uma fonte que vai fornecer a corrente adequada para a quantidade de LEDs que você está colocando no projeto. Te mostrei no início deste tutorial que cada LED consome até 60 mA em branco puro — esse é o consumo máximo, então para calcular com segurança você pode fazer 60 × <quantidade de leds> para descobrir a corrente máxima de consumo do seu circuito. Você pode intencionalmente não usar os LEDs em brilho máximo e trabalhar com outras cores para ter menor consumo e adequar o circuito à fonte que você deseja usar. Tenha isso em mente durante o desenvolvimento!
  • Dica extra para quem quer continuar estudando: Se você quer ficar por dentro das tendências mundiais de tecnologia e ganhar conteúdo exclusivo gratuito, não esqueça de se inscrever na newsletter gratuita da Mouser Electronics! É ótima para entusiastas e estudantes se manterem atualizados.

O que vem por aí?

Agora que você já aprendeu a diferença entre o WS2811 e o WS2812B, sabe como acender a fita e até como criar um seletor de efeitos usando um Push Button e o Monitor Serial, o que acha de dar o próximo passo?

Imagine conectar um Potenciômetro para regular a velocidade do arco-íris em tempo real, ou usar o Display OLED SSD1306 para mostrar o nome do efeito selecionado com gráficos incríveis!

Até a próxima e bons protótipos! Tchau tchau!

Conexões

De Para
5V 5V
DIN 6
GND GND
Compartilhar:

Projetos relacionados