NeoPixel: cadenas de Leds RGB controlables individualmente (WS2812B)


Introducción


NeoPixel es un sistema de iluminación mediante el cual, de forma muy sencilla, se pueden crear escenas de luz y juegos con infinidad de colores diferentes.

Se trata de una tecnología basada en RGB, con la particularidad de que se puede acceder a cada Led para variar su color de forma individual. Esta característica se consigue incluyendo un controlador junto a cada Led, además de un sistema de transmisión de información entre controladores. Recuerda que en las tiras RGB tradicionales solo es posible cambiar el color de todo el conjunto a la vez.

Combinando NeoPixel con elementos de control como bluetooth, Wifi o mandos IR, puedes programar y controlar escenas de luz para infinidad de situaciones diferentes. Por otro lado, las aplicaciones lúdicas son inimaginables. Un ejemplo muy divertido y extremadamente ingenioso son las ya famosas carreras de luz (Open Led Race):


Neopixel se puede encontrar también con el nombre de  WS2811, WS2812 y WS2812B, siendo el último el mas moderno, y se presenta en diferentes formatos, siendo los mas comunes: matrices o paneles, tiras y anillos. 


Conexión

NeoPixel requiere una alimentación de 5V en corriente continua (la misma que da un USB, por ejemplo). A parte de este valor, que es constante, es muy importante tener en cuenta que la  intensidad consumida es un parámetro muy variable en esta tecnología. La intensidad depende, por un lado, del número de Leds que formen el NeoPixel. Pero cuidado, porque ademas, la intensidad consumida por cada Led depende del color con el que esté brillando. Podemos decir que cada Led consume en torno a 20 mA de media, pero puede llegar a demandar 60 mA para un color blanco intenso (color de máximo consumo). 

Si tenemos 60 Leds, por ejemplo, la intensidad necesaria será de 1200 mA para un consumo medio. En definitiva, esto quiere decir que NO podemos alimentar los NeoPixel con Arduino a no ser que se trate de un dispositivo muy pequeño, ya que la fuente de alimentación de Arduino ofrece unos 400 mA como máximo en régimen de funcionamiento sin sobrecarga y si no tiene otros consumos. 

En la siguiente imagen se muestra el esquema de conexión para controlar una tira NeoPixel mediante el pin 2 de Arduino. Cabe destacar dos cuestiones:
  • Resulta conveniente utilizar una resistencia de 470 Ohmios en el cable de señal de mando.
  • Es aconsejable unir el 0V de la fuente de alimentación externa con el 0V (GND) de Arduino.


Programación en ArduinoBlocks

ArduinoBlocks dispone de un apartado (NeoPixel) en el que se incluyen los bloques necesarios para controlar todos estos dispositivos. Vamos a ver cómo.

Definición del tipo de NeoPixel utilizado (inicialización)


Este bloque se coloca en el apartado Inicializar con el objetivo de definir 4 parámetros. Los dos primeros comenzando por la izquierda del bloque, tienen que ver con las características constructivas del NeoPixel que vas a utilizar. Actualmente los GRB a 800 kHz son los mas comunes. Si necesitas una configuración diferente, lo notarás porque no se iluminará con los colores que estás programando.

En la parte derecha del bloque encontramos los otros dos parámetros fundamentales a la hora de establecer la inicialización de parámetros. Debes indicar el número de pixeles (Leds) que forman tu NeoPixel y el pin de Arduino desde el que vas a controlarlo. 

En el bloque de inicialización tomado como ejemplo en la imagen anterior, se define un conjunto de 60 Leds que se controlan desde el pin 2 de Arduino.

Activación de Leds de forma individual

Mediante los siguientes bloques se determina qué Led se quiere iluminar y con qué color. Como vemos en el segundo bloque mostrado, se dispone de un desplegable en el que seleccionar colores predefinidos, ahorrándonos así el tener que introducir el código correspondiente a cada color, pero se pueden utilizar muchísimos mas.

Con los bloques mostrados a continuación se realiza el mismo proceso pero en una matriz. Puedes seleccionar el tamaño de la matriz disponible, el Led que quieres iluminar dentro de la matriz y el color con que se iluminará.


Es importante destacar que, para que se ilumine la configuración realizada, hay que acabar incluyendo el bloque Mostrar:


Además, para apagar los Leds es necesario utilizar el bloque Limpiar:


Creación gráfica de escenas en matrices

Mediante el bloque Establecer datos, se pueden crear patrones personalizados en matrices NeoPixel, del mismo modo que se realizan en las matrices de leds clásicas (no RGB). Puedes consultar un artículo explicando como lo hacíamos, aquí.  

En este caso, haciendo clic derecho sobre el bloque, nos aparece un desplegable. Pinchando en ayuda se abre una nueva ventana en la que podemos crear (con el ratón del ordenador) un mapa de bits con el patrón a mostrar en la matriz NeoPixel:


Como pasaba con las matrices de Led clásicas, esta función te permite crear elementos personalizados, con la diferencia de que ahora puedes seleccionar el color de cada pixel:


Para acabar, copia el mapa de bits generado debajo de la imagen, vuelve al editor de ArduinoBlocks y pégalo en el espacio en blando del bloque Establecer datos:

Cada vez que insertes ese bloque en el código, te aparecerá en la matriz la imagen diseñada. Puedes crear diferentes bloques personalizados incluyendo códigos diferentes en cada uno.

Estrategias de programación para la activación simultanea de Leds

Resulta muy útil usar bloques Contar con para activar muchos Leds a la vez, sin tener que introducir un bloque por cada Led. Un ejemplo, teniendo en cuenta el cableado propuesto en este artículo, sería el siguiente:


En el programa anterior se iluminan  en rojo a la vez los 60 Leds de un NeoPixel. Fíjate en que al final se incluye el bloque Mostrar. Puedes elegir cuántos Leds se iluminan cambiando los números que marcan el comienzo (1 en este caso) y el fin (60).

Si lo que quieres es que se iluminen uno a uno, puedes incluir un bloque Esperar:

La velocidad con que se iluminen nuevos Leds depende del tiempo establecido en el bloque Esperar. Además, en el último recuadro tienes la opción de seleccionar cuantos Leds se van a ir iluminando simultaneamente (de a 1, de a 5, etc.).

Finalmente, si lo que quieres es que cuando se ilumine un Led se apague el anterior, entonces tienes que añadir el bloque Limpiar antes de iluminar un nuevo elemento, para que apague el anterior:


En el siguiente vídeo mostramos cómo se ven los tres programas expuestos anteriormente, junto con un ejemplo de un programa mas avanzado.


Comentarios

Entradas populares de este blog

Publicar y almacenar datos en Internet con ThingSpeak

Gráficos y animaciones en pantallas OLED i2c

Utilizar ESP-01 como periférico WiFi en ArduinoBlocks (parte I)