Mucho de los proyectos utilizan utilizan algún LED para dar información del estado del programa a un usuario, mientras que otros simplemente lo utilizan por estética. La ambientación por medio del agregado de luces es uno de los métodos más utilizados en nuestra época. Se trata de una de las cosas más sencillas de implementar, con resultados muy buenos.
Cualquiera que sea el caso, al utilizar varios LEDs en un proyecto se vuelve tedioso tener que gastar una salida del microcontrolador para controlar cada LED. Para estos casos es posible utilizar registros de desplazamiento, aunque esto requiere de una electrónica asociada. En el mercado existe una solución con resistencias limitadoras integradas: las LED Strip o tiras de leds. Se destacan los modelos WS2812, WS2811 y SK2812. Estas tres soluciones se consiguen en diferentes formas y tamaños. El integrado es sencillamente un LED RGB unido a un registro de desplazamiento que permite conectarse en cascada con otros integrados más. La ventaja de estos es que en el mercado se pueden conseguir tiras de múltiples tamaños y formas.
Funcionamiento
Cuando se unen varios de estos dispositivos en cascada, se crea una «tira». Entonces cada integrado adquiere un ID o dirección (address). Estas direcciones son números que se incrementan como se muestra en la figura (asumiendo que la corriente viene de izquierda a derecha). En Internet existen librerías que nos permiten controlar tiras como estas. También podemos encontrar uniones de integrados personalizados (siempre y cuando tengan la misma secuencia de conexión), mediante la asignación de colores en formato RGB a cada integrado por medio del address.
Conexión
Para este caso se ha utilizado una tira de Adafruit, llamada NeoPixels. Está formada por una union de WS2811 en cascada, como se aprecia en la figura anterior. La conexión es sumamente sencilla e involucra unir las referencias a tierra (GND) de todas las partes involucradas (microcontrolador, fuente de poder y tira o strip). Luego se conecta un pin del microcontrolador (Arduino) al pin de señal de la tira.
Para el microcontrolador se ha utilizado un NodeMCU 1.0 (ESP12F). También es posible utilizar un Arduino, sea cual sea el modelo.
Fuentes de voltaje
Es necesario prestar atención a los requerimientos de corriente de estos integrados. Cada integrado consume aproximadamente 20mA cuando un color está a su máximo, y como son tres (3) colores entonces si los tres están al máximo (255,255,255 => blanco) tendríamos un consumo de 60mA. En este caso he utilizado una fuente ATX (utilizadas en desktops), debido a que puede proveerme alrededor de ~28A – y mi strip es de 300 integrados (5 metros).
Para conocer el consumo máximo solo hay que multiplicar la cantidad de integrados (LEDs RGB) que contiene la tira o strip, por 60mA. Eso nos daría un aproximado de cuanto consumiría si todos los integrados están en color blanco.
Código de ejemplo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <Adafruit_NeoPixel.h> // Libreria necesaria de Adafruit. #define PIN_STRIP D2 // Notacion especial para NodeMCU1.0. Para otros, utilizar simplemente '2' o cualquier otro pin. #define LEDS 10 //cantidad de integrados #define TIMEOUT 10000 Adafruit_NeoPixel STRIP = Adafruit_NeoPixel(LEDS, PIN_STRIP, NEO_GRB + NEO_KHZ800); void setup() { STRIP.begin(); for(int i=0;i<LEDS;i++){ if(i%2==0) setColor(0,0,255,i); else setColor(255,0,0,i); } updateStrip(); //Cada vez que deseamos actualizar la tira, llamamos a esta función. } void loop() { } void setColor(byte r,byte g,byte b,int i){ /* * r => Numero entero entre 0 y 255 * g => Numero entero entre 0 y 255 * b => Numero entero entre 0 y 255 * i => Address o dirección del integrado en el strip a asignarle el color rgb */ STRIP.setPixelColor(i,STRIP.Color(r,g,b)); } void updateStrip() { STRIP.show(); } |
El código es sencillo. Alterna entre el color azul y el color rojo. Solo he utilizado diez (10) integrados de mi tira, pero si deseas cambiar ese número solo se debe actualizar la definición de LEDS en el código.
1 |
#define LEDS 10 //cantidad de integrados |
Cada vez que desee actualizar la tira, se debe llamar la función updateStrip(). Esta cual actualizará la tira con los últimos datos que tenga guardados. Para cambiar esos datos solo es necesario llamar a la función setColor(), y asignarle un color a cada integrado.
Las posibilidades con este tipo de tiras son infinitas. Se pueden montar espectáculos de luces o utilizarlas para la ambientación de espacios domésticos u oficinas. Con un microcontrolador sencillo es posible definir un color para todos y cada uno de los LEDs de la tira, de forma individual y simultánea. Las Neopixels de Adafruit son una excelente opción si lo que se desea es adquirir un LED Strip de alta calidad. Sin embargo, en el mercado existen soluciones similares a precios un poco más accesibles.
Esperamos que la información presentada sea de su agrado. No duden en expresar sus comentarios y dudas en la sección de comentarios.
muy interesante.. hace varios años sigo tus post, y me han servido de mucho… gracias !
actualmente ando trabajando en un proyecto con estos tipos de leds, y precisamente pensaba utilizar el nodemcu para controlarlo de manera inalambrica…
gracias por la informacion
buenas, sabes si en algun lugar de Panama venden ese tipo de cintas de led?
Buen dia, como estas? excelente post, estoy comenzando un proyecto y me gustaria saber si tienes informacion de algun lugar en Panama donde pueda comprar este tipo de leds, de antemano muchas gracias por la informacion.
Hasta donde se, no. Yo las compre en Adafruit en su momento
Ok, muchas gracias. Exitos, excelente contenido