lamp.housecope.com
atrás

Cómo conectar la tira LED direccionable WS2812B a Arduino

Publicado: 02.08.2021
0
2578

El desarrollo de la tecnología de iluminación basada en LED continúa rápidamente. Justo ayer, las cintas RGB controladas por un controlador, cuyo brillo y color se pueden ajustar con un control remoto, parecían un milagro. Hoy en día, han aparecido en el mercado lámparas con aún más prestaciones.

Tira de LED basada en WS2812B

La diferencia entre la tira LED direccionable y la estándar RGB cosa es el brillo y la relación de color de cada elemento se ajustan por separado. Esto le permite obtener efectos de iluminación que son fundamentalmente inaccesibles para otros tipos de dispositivos de iluminación. El brillo de la tira de LED direccionable se controla de una manera conocida: mediante modulación de ancho de pulso. Una característica del sistema es equipar cada LED con su propio controlador PWM. El chip WS2812B es un diodo emisor de luz tricolor y un circuito de control combinados en un solo paquete.

Cómo conectar la tira LED direccionable WS2812B a Arduino
La apariencia del LED con el controlador.

Los elementos se combinan en una cinta de alimentación en paralelo y se controlan a través de un bus 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 en serie se construyen en dos líneas, una de las cuales transmite luces estroboscópicas (pulsos de reloj) y la otra, datos.

Aspecto de la tira de dirección.
Aspecto de la tira de dirección.

El bus de control del chip WS2812B consta de una línea: los datos se transmiten a través de él. Los datos se codifican como pulsos de frecuencia constante, pero con diferentes ciclos de trabajo. Un pulso - un bit. La duración de cada bit es de 1,25 µs, el bit cero consta de un nivel alto con una duración de 0,4 µs y un nivel bajo de 0,85 µs. La unidad parece un nivel alto durante 0,8 µs y un nivel bajo durante 0,45 µs. Se envía una ráfaga de 24 bits (3 bytes) a cada LED, seguida de una pausa de bajo nivel durante 50 µs. Esto significa que se transmitirán datos para el siguiente LED, y así sucesivamente para todos los elementos de la cadena. La transferencia de datos finaliza con una pausa de 100 µs. Esto indica que el ciclo de programación de la cinta está completo y que se puede enviar el siguiente conjunto de paquetes de datos.

Datos para gestionar la cinta de direcciones.
Datos para gestionar la cinta de direcciones.

Tal protocolo hace posible funcionar con una línea para la transmisión de datos, pero requiere precisión en el mantenimiento de los intervalos de tiempo. La discrepancia no se permite más de 150 ns. Además, la inmunidad al ruido de dicho bus es muy baja. Cualquier interferencia de amplitud suficiente puede ser percibida por el controlador como datos. Esto impone restricciones en la longitud de los conductores del circuito de control. Por otra parte, esto hace posible control de estado de la cinta sin dispositivos adicionales.Si aplica energía a la lámpara y toca la almohadilla de contacto del bus de control con el dedo, algunos LED pueden encenderse aleatoriamente y apagarse.

Especificaciones de los elementos WS2812B

Para crear sistemas de iluminación basados ​​en una cinta de direcciones, debe conocer los parámetros importantes de los elementos emisores de luz.

Dimensiones LED5x5mm
Frecuencia de modulación PWM400 Hz
Consumo de corriente con brillo máximo60 mA por celda
Tensión de alimentación5 voltios

Arduino y WS2812B

La plataforma Arduino, popular en el mundo, le permite crear bocetos (programas) para administrar cintas de direcciones. Las capacidades del sistema son lo suficientemente amplias, pero si ya no son suficientes en algún nivel, las habilidades adquiridas serán suficientes para cambiar sin problemas a C ++ o incluso a ensamblador. Aunque el conocimiento inicial es más fácil de obtener en el Arduino.

Conexión de la cinta WS2812B a Arduino Uno (Nano)

En la primera etapa, las placas simples Arduino Uno o Arduino Nano son suficientes. En el futuro, se pueden usar tableros más complejos para construir sistemas más complejos. Al conectar físicamente la tira de LED direccionable a la placa Arduino, se deben observar varias 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 (debe intentar hacerlos dentro de los 10 cm);
  • debe conectar el conductor de datos a la salida digital libre de la placa Arduino; luego se especificará mediante programación;
  • Debido al alto consumo de energía, no es necesario alimentar la cinta desde la placa; se proporcionan fuentes de alimentación separadas para este propósito.

El cable de alimentación común de la lámpara y Arduino debe estar conectado.

Diagrama de cableado WS2812B.
Diagrama de conexión de cinta WS2812B.

Leer también

Cómo conectar el LED a la placa Arduino

 

Conceptos básicos de control de programa WS2812B

Ya se mencionó que para controlar los microcircuitos WS2812B, es necesario generar pulsos con una cierta longitud, manteniendo una alta precisión. Existen comandos en el lenguaje Arduino para la formación de pulsos cortos retrasoMicrosegundos y micros. El problema es que la resolución de estos comandos es de 4 microsegundos. Es decir, no funcionará para formar retrasos de tiempo con una precisión determinada. Es necesario cambiar a C ++ o herramientas de ensamblador. Y puede organizar el control de la tira de LED direccionable a través de Arduino utilizando bibliotecas especialmente creadas para esto. Puede comenzar a familiarizarse con el programa Blink, que hace que los elementos emisores de luz parpadeen.

led rapido

Esta biblioteca es universal. Además de la cinta de direcciones, admite una variedad de dispositivos, incluidas las cintas controladas por la interfaz SPI. Tiene amplias posibilidades.

En primer lugar, debe incluirse la biblioteca. Esto se hace antes del bloque de instalación, y la línea se ve así:

#include <FastLED.h>

El siguiente paso es crear una matriz para almacenar los colores de cada diodo emisor de luz. Tendrá la tira de nombre y la dimensión 15, por la cantidad de elementos (es mejor asignar una constante a este parámetro).

Tira CRGB[15]

En el bloque de configuración, debe especificar con qué cinta funcionará el boceto:

configuración vacía () {

FastLED.addLeds<WS2812B, 7, RGB>(tira, 15);

intg;

}

El parámetro RGB establece el orden de la secuencia de colores, 15 significa el número de LED, 7 es el número de la salida asignada para el control (también es mejor asignar una constante al último parámetro).

El bloque de bucle comienza con un bucle que escribe secuencialmente en cada sección de la matriz Red (resplandor rojo):

para (g=0; g< 15; g++)

{tira[g]=CRGB::Rojo;}

A continuación, la matriz formada se envía a la lámpara:

FastLED.show();

Retardo 1000 milisegundos (segundo):

retraso (1000);

Luego puede apagar todos los elementos de la misma manera escribiendo negro en ellos.

para (int g=0; g< 15; g++)

{tira[g]=CRGB::Negro;}

FastLED.show();

retraso (1000);

Boceto para una cinta intermitente basada en FastLed.
Boceto para una cinta intermitente basada en FastLed.

Después de compilar y cargar el boceto, la cinta parpadeará con un período de 2 segundos. Si necesita administrar cada componente de color por separado, en lugar de la línea {tira[g]=CRGB::Rojo;} Se utilizan varias líneas:

{

tira[g].r=100;// establecer el nivel de brillo del elemento rojo

tira[g].g=11;// lo mismo para el verde

tira[g].b=250;// lo mismo para azul

}

neopíxel

Esta biblioteca solo funciona con anillos LED NeoPixel Ring, pero requiere menos recursos y contiene solo lo esencial. En lenguaje Arduino, el programa se ve así:

#include <Adafruit_NeoPixel.h>

Como en el caso anterior, se conecta 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

En el bloque de configuración, la cinta se inicializa:

configuración vacía () {

lenta.begin()

}

En el bloque de bucle, todos los elementos se resaltan en rojo, la variable se pasa al feed y se crea un retraso de 1 segundo:

para (int y=0; y<15; y++)// 15 - el número de elementos en la lámpara

{lenta.setPixelColor(y, lenta.Color(255,0,0))};

cinta.mostrar();

retraso (1000);

El resplandor se detiene con un registro negro:

para (int y=0; y< 15; y++)

{ lenta.setPixelColor(y, lenta.Color(0,0,0))};

cinta.mostrar();

retraso (1000);

Boceto para el programa Blink basado en NeoPixel.
Boceto para el programa Blink basado en NeoPixel.

Video tutorial: Muestras de efectos visuales utilizando cintas de direcciones.

Una vez que haya aprendido a hacer parpadear los LED, puede continuar aprendiendo a crear efectos de color, incluidos los populares arcoíris y auroras boreales con transiciones suaves. Los LED direccionables WS2812B y Arduino brindan posibilidades casi ilimitadas para esto.

Comentarios:
Todavía no hay comentarios. ¡Sé el primero!

Le recomendamos que lea

Cómo reparar la lámpara LED usted mismo