Construa e Programe Animações em Matriz RGB WS2812 8×8 e 16×16 com Arduino e Excel
Componentes e Materiais
| Arduino UNO | ×1 |
| Matriz RGB LED WS2812 8×8 | ×1 |
| Jumpers Macho/Fêmea (Preto-GND, Vermelho-5V, Verde-Dados) | ×3 |
| Bateria 9V (genérica) | ×1 |
| Conector 9V para Jack Barril | ×1 |
| Header Macho 5 Posições — 1 Linha — Longo (0,1") (apenas 3 pinos necessários) | ×1 |
Ferramentas e Máquinas Necessárias
- Ferro de Solda (genérico)
- Fio de Solda, Livre de Chumbo
Sobre Este Projeto
Quando comprei minha primeira matriz RGB WS2812 8×8, esperava endereçá-la como um sistema de coordenadas XY tradicional. Em vez disso, os 64 LEDs estão em cadeia (daisy-chained) em oito fileiras de oito. Descobri que o utilitário Excel do Kevin Darrah, originalmente desenhado para matriz 16×16, podia ser adaptado para controlar um array 8×8. Modificando tanto a planilha quanto o sketch Arduino acompanhante, criei uma ferramenta versátil que permite programar animações de LED sem bibliotecas externas.
A planilha Excel atualizada, LED_Utility.xlsm, agora suporta:
- Atribuição RGB individual para cada LED.
- Mudanças dinâmicas de propriedades via script VBA.
- Relocação XY para simular movimento.
- Paletas embutidas para seleção rápida de cores.
- Suporte dual para matrizes 8×8 e 16×16.
Abaixo, instruções passo a passo para montar o hardware, configurar o utilitário Excel e carregar o sketch Arduino. Cada projeto constrói sobre o anterior, introduzindo conceitos como loops, condicionais e funções modulares.
Montar o Hardware
Conecte a matriz 8×8 a um Arduino UNO usando header de 5 pinos:
- Conecte DIN ao pino 8 do Arduino.
- Conecte +5V ao pino 5V.
- Conecte GND ao pino GND.
Nesta configuração, a coordenada (0,0) refere-se ao canto superior esquerdo da matriz.
Visão Geral do Utilitário Excel
Abra LED_Utility.xlsm — contém três abas:
- Eight — interface para matriz 8×8.
- Sixteen — interface para matriz 16×16.
- ColMap — referência prática de códigos RGB comuns.
A pasta de trabalho é definida como somente leitura por padrão para proteger seu trabalho. Use Arquivo → Salvar Como após gerar código para preservar seu design.
Principais recursos na aba Eight:
- Show — exibe valores RGB para células selecionadas (0–255).
- Var Map — aceita entradas numéricas ou variáveis mas não mostra saída.
- Wrap Map — adiciona função módulo para lidar com overflow de coordenadas e suporta variáveis para uso posterior.
- Clear — limpa ambas as grades de entrada.
Cada botão gera um bloco de código C++ que você copia para o sketch Arduino. O código é formatado para a função customizada mapLEDXY(), que converte coordenadas XY no índice de LED apropriado.
Sketch Arduino
O sketch principal (LED_Arduino.ino) contém os seguintes elementos:
// Definição do pino
#define WS2812_pin 8
// Total de LEDs
#define numberOfLEDs 64
// Buffer RGB (3 bytes por LED)
byte RGB[192];
// Declarações antecipadas
void RGB_update(int LED, byte RED, byte GREEN, byte BLUE);
void mapLEDXY(int x, int y, byte RED, byte GREEN, byte BLUE);
void clearLEDs();
A rotina mapLEDXY() mapeia um par de coordenadas para o array linear, considerando o padrão de fiação zig-zag comum em matrizes WS2812.
Após copiar seu código gerado na função loop(), carregue o sketch. A matriz responderá instantaneamente às instruções.
Projeto 1 – Quadrado Vermelho Estático
Crie um quadrado vermelho 3×3 nas coordenadas (2,2) a (4,4). No Excel, defina as células correspondentes para 255 no vermelho e 0 no verde/azul. Copie o código gerado na linha 40 do sketch:
mapLEDXY(2,2,255,0,0);mapLEDXY(2,3,255,0,0);mapLEDXY(2,4,255,0,0);
mapLEDXY(3,2,255,0,0);mapLEDXY(3,3,255,0,0);mapLEDXY(3,4,255,0,0);
mapLEDXY(4,2,255,0,0);mapLEDXY(4,3,255,0,0);mapLEDXY(4,4,255,0,0);
Carregue e veja o quadrado acender. Experimente limpando a grade, mudando cores ou adicionando borda.
Projeto 2 – Quadrados Dual-Color
Duplique o sketch como Colour_Sq.ino e modifique a planilha Excel para criar um segundo quadrado maior. Use o botão Show para gerar código e cole no sketch. Adicione um delay simples e clearLEDs() para alternar entre as duas formas.
Projeto 3 – Quadrado Crescente
No sketch Grow.ino, desenhe um quadrado interno menor e cerque-o com uma borda à sua escolha. Remova os valores do quadrado interno, gere o código externo e cole ambos os blocos no sketch. O resultado é um quadrado animado que expande e contrai.
Projeto 4 – Animação Espiral
Para padrões complexos, encapsule cada frame em uma função separada e chame-as do loop(). O exemplo Spiral.ino usa cinco funções auxiliares para construir uma espiral de 5 camadas. Esta abordagem modular mantém o loop principal conciso e facilita edições futuras.
Projeto 5 – Loop de Brilho Variável
Introduza um loop for para animar brilho:
for (int r=0; r<256; r++) {
mapLEDXY(3,3,r,0,0);mapLEDXY(3,4,r,0,0);
mapLEDXY(4,3,r,0,0);mapLEDXY(4,4,r,0,0);
RGB_update(-1,0,0,0);
delay(50);
}
for (int r=255; r>=0; r--) {
mapLEDXY(3,3,r,0,0);mapLEDXY(3,4,r,0,0);
mapLEDXY(4,3,r,0,0);mapLEDXY(4,4,r,0,0);
RGB_update(-1,0,0,0);
delay(50);
}
O quadrado faz fade in e fade out automaticamente.
Projeto 6 – Borda com Fade
Combine loops for com variável g compartilhada para fazer fade em uma borda circundante:
for (int g=0; g<256; g++) {
b=g;
mapLEDXY(...); // células da borda
RGB_update(-1,0,0,0);
delay(50);
}
for (int g=255; g>=0; g--) {
b=g;
mapLEDXY(...); // células da borda
RGB_update(-1,0,0,0);
delay(50);
}
Aqui o canal azul acompanha o verde para criar um fade suave.
Projeto 7 – Transição de Cor
Use um if para mudar células da borda de verde para amarelo ao atingir um limiar:
for (int r=0; r<256; r++) {
g=r;
if (g>64) { g=65; l=r; }
mapLEDXY(...); // células
RGB_update(-1,0,0,0);
delay(50);
}
Experimente diferentes limiares para efeitos variados.
Projeto 8 – Seta em Movimento
Gere uma seta em movimento parametrizando a coordenada X:
for (int x=0; x<8; x++) {
mapLEDXY((x+0)%8,3,0,255,255);
mapLEDXY((x+1)%8,1,255,128,128);
mapLEDXY((x+1)%8,3,0,255,255);
mapLEDXY((x+1)%8,5,255,128,128);
mapLEDXY((x+2)%8,2,255,128,128);
mapLEDXY((x+2)%8,3,0,255,255);
mapLEDXY((x+2)%8,4,255,128,128);
mapLEDXY((x+3)%8,3,255,128,128);
RGB_update(-1,0,0,0);
delay(100);
}
Use o recurso Wrap Map na planilha para lidar com overflow de coordenadas.
Uso de Matriz 16×16
Todos os conceitos acima transferem diretamente para matriz 16×16. Substitua LED_Arduino.ino por LED_Arduino16.ino e mude para a aba Sixteen na pasta de trabalho. O único ajuste necessário é a definição numberOfLEDs e o cálculo RGBlocation em mapLEDXY().
Extensões e Dicas
Embora este guia foque em arrays 8×8 e 16×16, a mesma metodologia aplica-se a outros tamanhos (ex: 8×32). Para cada novo tamanho, atualize a constante numberOfLEDs e modifique o cálculo de índice para corresponder ao padrão de fiação da matriz. Mantenha a pasta de trabalho em modo somente leitura para evitar perda acidental de código customizado. Considere usar uma placa menor, como Arduino Nano, se consumo de energia for preocupação.
Processo de manufatura
- Painel de Controle para Flight Simulator 2020 com Arduino Nano – Display LCD e CDI
- Painel de Chaves e LEDs para Microsoft Flight Simulator 2020 com Arduino
- Construa e Programe Animações em Matriz RGB WS2812 8×8 e 16×16 com Arduino e Excel
- Protegendo a IoT Global: Três Passos Essenciais
- Top 3 Tendências de Manufatura Digital Moldando 2020
- 3 Estratégias Comprovadas para PMEs Expandirem Internacionalmente com Sucesso
- Três Lições Essenciais que Varejistas Devem Aprender em Meio a Disrupções de Longo Prazo
- Construa um Robô 'Vá Embora' – Kit Inicial Arduino Fácil para Crianças
- Top 3 Dicas Essenciais para Manutenção e Segurança de Equipamentos Industriais
- Guia Essencial: 3 Estratégias Comprovadas para Comprar Equipamentos Industriais Pesados