Controlando el módulo LED WS2812 con Arduino (1)

Los módulos de LEDs RGB basados en WS2812 se han vuelto muy populares en los últimos años, ya que permiten controlar con facilidad muchos leds RGB conectados en cascada. En este artículo vamos a ver en qué consiste este módulo y cómo podemos usarlo con un Arduino.

WS2812 es la denominación de un módulo de led RGB en formato 5050 (5 mm x 5 mm) que además de los tres leds individuales de color Rojo, Verde y Azul incluye un chip controlador.

Detalle de un módulo led WS2812. Fuente: learn.sparkfun.com

Este módulo, originalmente fabricado por la empresa WorldSemi se ha hecho muy popular en los últimos años principalmente debido a su facilidad de uso y a la posibilidad de interconexión, estando disponible en formato individual, en placas de 4 u 8 módulos, en tiras de varios metros y hasta en matrices cuadradas de 4×4 y 8×8 elementos.

Distintos diseños con el WS2812

El chip controlador tiene tres PWM (Modulador de ancho de pulso) de 8 bits, uno para cada led o color, lo que permite la generación de 256 niveles de luz en cada uno de ellos, dando un total de 256 x 256 x 256 = 16.777.216 combinaciones o colores diferentes.

Esquema de un modulo, mostrando la distribución de pines. Fuente: Worldsemi

El módulo cuenta con un pin de entrada de datos digitales (DI) y otro de salida digital (DO). La información de los valores de cada uno de los PWM debe ser enviada por algún tipo de dispositivo (como un Arduino) al pin DI. Cuando se conectan varios módulos en cascada, la misma información (convenientemente amplificada y acondicionada) sale por el pin DO para el resto de los módulos, lo que permite construir tiras de módulos de hasta 5 metros de longitud sin ninguna circuitería adicional.

Conexión de tres módulos en cascada. Fuente: Worldsemi

El funcionamiento es simple e ingenioso: cada módulo requiere de un “paquete” de 24 bits (8 para cada PWM o color). El primer módulo recibe los primeros 24 bits y los transfiere a sus PWM para controlar su propio color, mientras mantiene su salida DO inactiva. Si siguen llegando bits, simplemente los copia en su salida DO, para el módulo conectado a continuación, sin que afecte el valor de sus PWM. Si pasa un cierto tiempo sin que lleguen datos, el módulo otra vez estará atento a los datos recibidos y tomará los siguiente 24 bits para él. Este método es eficaz si se quiere refrescar el color de todos los leds cada cierto tiempo, pero no permite modificar los valores de un led en particular sin cambiar los anteriores. Por ejemplo, si tenemos una tira de varios leds y queremos cambiar el color del ubicado en la posición 4 (llamemosle LED4), debemos volver a enviar la información de color de LED1, LED2 y LED3 como mínimo. Aunque los datos pueden enviarse a alta velocidad, esto impone límites a la cantidad de leds y a la tasa de refresco.

La cadena de bits transmitida requiere de una temporización muy precisa. Todos los bits tienen la misma duración, pero los “unos” están activos (nivel alto) por un tiempo mayor que los “ceros”.

Formato de los datos. Fuente: Worldsemi

Requisitos de alimentación

El módulo W2812 funciona con una alimentación de 5V a 7V regulados. Mas de 7V puede dañar los leds y menos de 5V reducirá su brillo y puede que hasta no funcionen. En el caso del módulo WS2812B, la alimentación debe estar entre 3.3V y 5V, siempre una tensión regulada.

En un próximo artículo veremos cómo conectar un módulo al Arduino y que librerías podemos utilizar para nuestro programa.

Más info

Hoja de datos del WS2812

Hoja de datos del WS8212B

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Habilitar notificaciones OK No, gracias