Cómo conectar una tira de LEDs direccionables WS2812B a un Arduino
El desarrollo de la tecnología de iluminación basada en LEDs continúa a buen ritmo. Hasta ayer, las cintas RGB controladas por un mando, cuyo brillo y color pueden ajustarse por control remoto, parecían un milagro. Hoy en día, hay nuevas luminarias en el mercado con aún más posibilidades.
Tira de LEDs basada en WS2812B
Las diferencias entre las tiras LED direccionables y las estándar RGB es el El brillo y la relación de color de cada elemento se pueden ajustar por separado. Esto permite obtener efectos de iluminación que no están disponibles para otros tipos de luminarias. La tira de LEDs direccionables se controla de una manera bien conocida: mediante la modulación de la anchura de los impulsos. Una característica del sistema es que cada LED está equipado con su propio controlador PWM. El chip WS2812B es un diodo emisor de luz de tres colores y un circuito de control, combinados en un solo paquete.
Los elementos se conectan en paralelo a la fuente de alimentación y se controlan mediante un bus en serie: la salida del primer elemento se conecta a la entrada de control del segundo, etc. En la mayoría de los casos, los buses serie se construyen sobre dos líneas, una de las cuales transmite estrobos (pulsos de reloj) y la otra - datos.
El bus de control del WS2812B consiste en una línea - se utiliza para transferir datos. Los datos se codifican en forma de impulsos con una frecuencia constante, pero con diferentes frecuencias. Un pulso es un bit.. La duración de cada bit es de 1,25 µs, el bit cero consta de un nivel alto de 0,4 µs y un nivel bajo de 0,85 µs. La unidad aparece como un nivel alto de 0,8µs y un nivel bajo de 0,45µs. Se envía un paquete de 24 bits (3 bytes) a cada LED, seguido de una pausa como nivel bajo durante 50µs. Esto significa que los datos del siguiente LED se transmitirán a continuación, y así sucesivamente para todos los elementos de la cadena. La transferencia de datos finaliza con una pausa de 100 µs. Esto significa que el ciclo de programación de la cinta ha finalizado y que se puede enviar el siguiente conjunto de paquetes de datos.
Este protocolo permite prescindir de una sola línea para la transferencia de datos, pero requiere una sincronización precisa. Se permite una desviación máxima de 150 ns. Además, la inmunidad al ruido de este bus es muy baja. Cualquier interferencia de suficiente amplitud puede ser captada por el controlador como datos. Esto impone limitaciones en las longitudes de los conductores desde el circuito de control. Por otro lado, ofrece la posibilidad de para comprobar el correcto funcionamiento de la correa sin dispositivos adicionales. Si se aplica energía a la luminaria y un dedo toca la zona de contacto del bus de control, algunos LEDs pueden encenderse y apagarse aleatoriamente.
Características técnicas de los elementos WS2812B
Para crear sistemas de iluminación con cintas direccionables es necesario conocer los parámetros importantes de los elementos emisores de luz.
Dimensiones del LED | 5x5 mm |
Frecuencia de modulación PWM | 400 Hz |
Consumo de corriente a máxima luminosidad | 60mA por elemento |
Tensión de alimentación | 5 voltios |
Arduino y WS2812B
La plataforma Arduino, muy popular en todo el mundo, permite crear bocetos (programas) para controlar las cintas direccionables. Las capacidades del sistema son lo suficientemente amplias, pero si en algún nivel ya no son suficientes, los conocimientos obtenidos serán suficientes para pasar sin problemas a C++ o incluso a ensamblador. Aunque es más fácil obtener los conocimientos básicos de Arduino.
Conexión de una cinta basada en WS2812B a un Arduino Uno (Nano)
Al principio, una simple placa Arduino Uno o Arduino Nano es suficiente. Más adelante, se pueden utilizar placas más complejas para construir sistemas más complejos. Al conectar físicamente la tira de LEDs direccionables a la placa Arduino, hay que asegurarse de que se cumplen algunas condiciones:
- Debido a la baja inmunidad al ruido, los conductores de conexión de la línea de datos deben ser lo más cortos posible (intentar que estén a menos de 10 cm);
- Conecte la línea de datos a una salida digital libre de la placa Arduino, que será indicada posteriormente por el software;
- Debido al elevado consumo de energía, no es necesario alimentar la regleta desde la placa; para ello se proporcionan fuentes de alimentación independientes.
La línea de alimentación común entre la tira y el Arduino debe estar conectada.
Fundamentos del control por software del WS2812B
Ya se ha mencionado que para controlar el chip WS2812B hay que generar pulsos de cierta longitud con alta precisión. En el lenguaje Arduino existen comandos para formar pulsos cortos delayMicroseconds и micros. El problema es que la resolución de estos comandos es de 4 microsegundos. Esto significa que no es posible generar retrasos en el tiempo con una precisión determinada. Es necesario utilizar herramientas C++ o Assembler. También es posible controlar la tira de LEDs direccionables a través de Arduino con la ayuda de librerías especialmente creadas para este fin. La introducción comienza con Blink, un programa que hace parpadear los elementos emisores de luz.
FastLed
Esta biblioteca es versátil. Además de la cinta direccionable, admite muchos dispositivos, incluidas las cintas controladas por SPI. Es muy potente.
Primero hay que conectar la biblioteca. Esto se hace antes del bloque de configuración, y la cadena tiene el siguiente aspecto:
#include
El siguiente paso es crear una matriz para almacenar los colores de cada diodo emisor de luz. Tendrá el nombre tira y dimensión 15 - por el número de elementos (es mejor asignar una constante a este parámetro).
Banda CRGB[15]
En el bloque de configuración debe especificar la banda con la que trabajará el script:
void setup() {
FastLED.addLeds< WS2812B, 7, RGB>(tira, 15);
int g;
}
El parámetro RGB establece el orden de alternancia de los colores, 15 significa el número de LEDs, 7 es el número de la salida asignada a controlar (es mejor asignar una constante al último parámetro también).
El bloque de bucle comienza con un bucle que escribe secuencialmente en cada sección de la matriz Roja (brillo rojo):
for (g=0; g< 15;g++)
{tira[g]=CRGB::Rojo;}
A continuación, la matriz generada se envía a la luminaria:
FastLED.show();
Retraso de 1000 milisegundos (un segundo):
delay(1000);
Entonces, todos los elementos pueden ser apagados de la misma manera, escribiendo negro en ellos.
for (int g=0; g< 15;g++)
{tira[g]=CRGB::Negro;}
FastLED.show();
delay(1000);
Después de compilar y cargar el boceto, la cinta parpadeará con un periodo de 2 segundos. Si desea controlar cada componente de color por separado, entonces en lugar de la cadena {tira[g]=CRGB::Rojo;} se utilizan varias cadenas:
{
strip[g].r=100;// establecer el nivel de luminiscencia del elemento rojo
strip[g].g=11;// lo mismo para el verde
strip[g].b=250;// lo mismo para el azul
}
NeoPixel
Esta biblioteca sólo funciona con los LEDs de anillo de NeoPixel, pero consume menos recursos y contiene sólo lo esencial. En lenguaje Arduino el programa tiene el siguiente aspecto:
#include
Como en el caso anterior, se incluye la biblioteca y se declara el objeto lenta:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// Donde 15 es el número de elementos y 6 es la salida asignada
La lenta se inicializa en el bloque de configuración:
void setup() {
lenta.begin ()
}
En el bloque de bucle todos los elementos se iluminan en rojo, se pasa una variable a la cinta y se crea un retardo de 1 segundo:
for (int y=0; y<15;y++)// 15 - número de elementos en la lenta
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
{lenta.show();
delay(1000);
La lenta deja de brillar en negro:
for (int y=0; y< 15;y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
lenta.show();
delay(1000);
Lección de vídeo: Ejemplos de efectos visuales con cintas direccionables.
Una vez que hayas aprendido a hacer parpadear los LEDs, puedes seguir aprendiendo a crear efectos de color, incluyendo los populares Arco Iris y Aurora Boreal con transiciones suaves. Los WS2812B y los LEDs direccionables de Arduino ofrecen posibilidades casi ilimitadas para ello.