Construye y programa animaciones en matrices WS2812 RGB 8x8 y 16x16 con Arduino y Excel
Componentes y suministros
| Arduino UNO | ×1 | |
| Matriz LED RGB WS2812 8x8 | ×1 | |
| Cables jumper Macho/Hembra | ×3 | Negro-GND, Rojo-5V, Verde-Data |
| Pila 9V (genérica) | ×1 | |
| Conector 9V a Jack Barrel | ×1 | |
| Header Macho 5 posiciones – 1 fila – Largo (0.1") | ×1 | Solo se requieren 3 pines |
Herramientas y máquinas necesarias
- Soldador (genérico)
- Estaño sin plomo
Sobre este proyecto
Cuando compré por primera vez una matriz LED RGB WS2812 8x8, esperaba direccionarla como un sistema de coordenadas XY tradicional. En cambio, los 64 LEDs están encadenados en serie en ocho filas de ocho. Descubrí que la utilidad Excel de Kevin Darrah, diseñada originalmente para una matriz 16×16, podía adaptarse para controlar un array 8×8. Modificando tanto la hoja de cálculo como el sketch Arduino adjunto, creé una herramienta versátil que permite programar animaciones LED sin librerías externas.
El libro de Excel actualizado, LED_Utility.xlsm, ahora soporta:
- Asignación RGB individual para cada LED.
- Cambios dinámicos de propiedades mediante scripting VBA.
- Reubicación XY para simular movimiento.
- Paletas integradas para selección rápida de color.
- Soporte dual para matrices 8×8 y 16×16.
A continuación encontrarás instrucciones paso a paso para construir el hardware, configurar la utilidad Excel y subir el sketch Arduino. Cada proyecto se basa en el anterior, introduciendo conceptos como bucles, condicionales y funciones modulares.
Montar el hardware
Conecta la matriz 8×8 a un Arduino UNO usando un header de 5 pines:
- Conecta DIN al pin 8 del Arduino.
- Conecta +5V al pin 5V.
- Conecta GND al pin GND.

En esta configuración, la coordenada (0,0) se refiere a la esquina superior izquierda de la matriz.
Visión general de la utilidad Excel
Abre LED_Utility.xlsm – contiene tres hojas:
- Eight – interfaz matriz 8×8.
- Sixteen – interfaz matriz 16×16.
- ColMap – referencia práctica de códigos RGB comunes.
El libro está en modo solo lectura por defecto para proteger tu trabajo. Usa Archivo → Guardar como tras generar código para preservar tu diseño.

Características clave en la hoja Eight:
- Show – muestra valores RGB para celdas seleccionadas (0-255).
- Var Map – acepta entradas numéricas o variables pero no muestra salida.
- Wrap Map – añade función módulo para manejar desbordamiento de coordenadas y soporta variables para uso posterior.
- Clear – vacía ambas cuadrículas de entrada.
Cada botón genera un bloque de código C++ que copias en el sketch Arduino. El código está formateado para la función personalizada mapLEDXY(), que convierte coordenadas XY en el índice LED apropiado.
Sketch Arduino
El sketch principal (LED_Arduino.ino) contiene los siguientes elementos:
// Definición de pin
#define WS2812_pin 8
// Total de LEDs
#define numberOfLEDs 64
// Buffer RGB (3 bytes por LED)
byte RGB[192];
// Declaraciones adelantadas
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();
La rutina mapLEDXY() mapea un par de coordenadas al array lineal, considerando el patrón de cableado en zigzag común en matrices WS2812.
Tras copiar tu código generado en la función loop(), sube el sketch. La matriz responderá instantáneamente a las instrucciones.
Proyecto 1 – Cuadrado rojo estático
Crea un cuadrado rojo 3×3 en coordenadas (2,2) a (4,4). En Excel, pon las celdas correspondientes a 255 en rojo y 0 en verde/azul. Copia el código generado en la línea 40 del 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);
Sube y observa el cuadrado encenderse. Experimenta limpiando la cuadrícula, cambiando colores o añadiendo un borde.
Proyecto 2 – Cuadrados de doble color
Duplica el sketch como Colour_Sq.ino y modifica la hoja Excel para crear un segundo cuadrado mayor. Usa el botón Show para generar código y pégalo en el sketch. Añade un delay simple y clearLEDs() para alternar entre las dos formas.
Proyecto 3 – Cuadrado creciente
En el sketch Grow.ino, diseña un cuadrado interior pequeño y rodéalo con un borde a tu elección. Elimina los valores del cuadrado interior, genera el código exterior, y pega ambos bloques en el sketch. El resultado es un cuadrado animado que se expande y contrae.
Proyecto 4 – Animación espiral
Para patrones complejos, encapsula cada frame en una función separada y llámalas desde loop(). El ejemplo Spiral.ino usa cinco funciones auxiliares para construir una espiral de 5 capas. Este enfoque modular mantiene el loop principal conciso y facilita futuras ediciones.
Proyecto 5 – Bucle de brillo variable
Introduce un bucle for para animar el brillo:
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);
}
El cuadrado se desvanece hacia arriba y abajo automáticamente.
Proyecto 6 – Borde desvaneciente
Combina bucles for con una variable compartida g para desvanecer un borde circundante:
for (int g=0; g<256; g++) {
b=g;
mapLEDXY(...); // celdas del borde
RGB_update(-1,0,0,0); delay(50);
}
for (int g=255; g>=0; g--) {
b=g;
mapLEDXY(...); // celdas del borde
RGB_update(-1,0,0,0); delay(50);
}
Aquí el canal azul sigue al verde para crear un desvanecimiento suave.
Proyecto 7 – Transición de color
Usa una sentencia if para cambiar celdas del borde central de verde a amarillo al superar un umbral:
for (int r=0; r<256; r++) {
g=r;
if (g>64) { g=65; l=r; }
mapLEDXY(...); // celdas
RGB_update(-1,0,0,0); delay(50);
}
Experimenta con distintos umbrales para efectos variados.
Proyecto 8 – Flecha en movimiento
Genera una flecha en movimiento parametrizando la 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);
}
Usa la función Wrap Map en la hoja de cálculo para manejar desbordamiento de coordenadas.
Uso de matriz 16×16
Todos los conceptos anteriores se transfieren directamente a una matriz 16×16. Reemplaza LED_Arduino.ino con LED_Arduino16.ino y cambia a la hoja Sixteen en el libro. El único ajuste necesario es la definición numberOfLEDs y el cálculo RGBlocation en mapLEDXY().
Extensiones y consejos
Aunque esta guía se centra en arrays 8×8 y 16×16, la misma metodología aplica a otros tamaños (ej. 8×32). Para cada nuevo tamaño, actualiza la constante numberOfLEDs y modifica el cálculo de índice para coincidir con el patrón de cableado de la matriz. Mantén el libro en modo solo lectura para evitar pérdida accidental de código personalizado. Considera usar una placa más pequeña, como Arduino Nano, si el consumo es una preocupación.
Proceso de manufactura
- Panel de control para Flight Simulator 2020 con Arduino Nano: Pantallas LCD y CDI
- Panel de interruptores y LEDs para Microsoft Flight Simulator 2020 con Arduino
- Construye y programa animaciones en matrices WS2812 RGB 8x8 y 16x16 con Arduino y Excel
- Robot "Vete" – Kit Inicial Arduino Fácil para Niños
- Ahorra Pines en Arduino: Conecta Teclado 4x3 con Solo 3 Conexiones Analógicas
- Las 3 principales tendencias de fabricación digital que moldearán 2020
- Top 3 Estrategias para PYMEs para Expandirse Internacionalmente con Éxito
- Tres lecciones esenciales que los minoristas deben aprender ante un año de disrupciones
- Top 3 consejos esenciales para mantenimiento y seguridad de equipos industriales
- Guía esencial: 3 estrategias probadas para comprar equipos industriales pesados
- Asegurando el IoT global: Tres pasos esenciales