Haga clic para más productos.
No se encontraron productos.

Tutorial cinta LED RGB WS2812B

131149

 La cinta LED RGB se basa en el chip controlador WS2812B de Neopixel con el cual podemos realizar proyectos de una manera simple y escalable ya que se tiene el control de cada pixel y de cada color, ya sea rojo, verde y azul a través de un solo cable. Además, tienen la ventaja de poder encadenarse unos tras otros (la salida de uno se puede conectar a la entrada de la siguiente) para obtener cadenas más largas además de formas interesantes gracias a su flexibilidad. Las cintas Led vienen con diferente densidad de LED, generalmente bienen de 60 y 30 LEDs por Metro. 

WS2812B 60 Led por Metro         WS2812B 30 Leds por Metro

Para realizar las conexiones básicas, vamos primero a identificar el pin de Entrada de nuestra cinta led RGB, para ello tenemos que verificar el pin con la etiqueta “DIN” (entrada de datos). También podremos identificarla por la flecha que indica la dirección en la que se realiza el envío de datos. Cabe indicar, que la entrada de datos se puede conectar hacia cualquier pin de nuestro Arduino, para este caso usaremos el pin digital D6 de nuestro Arduino UNO como ejemplo.

Cinta Led WS2812B  

Vamos a alimentar nuestra cinta led RGB con una fuente de alimentación externa de +5V DC para lo cual podremos seguir el esquema que se muestra en la siguiente imagen o seguir los siguientes pasos:  conectar la entrada de + 5V de la tira led RGB al terminal + (positivo) en la fuente de alimentación (no conecte a la de Arduino), DIN al pin digital D6 del Arduino, y – de nuestra fuente a GND de nuestra cinta led RGB, además de conectar nuestro terminal negativo a un pin GND de nuestro Arduino.

    

Conexion cinta led WS2812B  

    

Para un buen uso de nuestra cinta led RGB es necesario conocer sus características técnicas principales y tener en consideración algunas pautas para evitar algún posible daño, entre ellas citamos:

 

- Cada pixel o led individual de nuestra cinta RGB requiere 60 miliamperios como máximo cuando trabaja en su brillo completo. Los colores mezclados y ajustes inferiores de brillo utilizarán proporcionalmente menos energía. Esto es necesario conocer a la hora de elegir la capacidad de nuestra fuente de alimentación.

- Antes de conectar nuestra cinta led RGB a cualquier fuente de alimentación, añadir un gran condensador (1000 uF, 6.3V o superior) a través de los terminales de alimentación positivo y negativo.

- Coloque una resistencia de 300 a 500 Ohm entre el pin de salida de datos del Arduino y la entrada al primer led o pixel para prevenir que este se dañe debido a posibles picos en la línea de datos.

- Trate de minimizar la distancia entre la cinta led RGB y el controlador Arduino.
Si va a utilizar una fuente de energía externa, aplique energía a la cinta LED antes de aplicar energía al microcontrolador.

Te recordamos que es ideal utilizar una fuente de alimentación independiente o externa, sin embargo se podría utilizar la salida del pin 5V del Arduino si tan solo usamos pocos leds y/ o si los colores y el brillo son relativamente bajos. Como se explicó con anterioridad, cada led necesita de 60 miliamperios aproximadamente en su brillo completo y nuestro Arduino nos puede suministrar de forma continua cerca de 500 miliamperios mediante su pin de 5V.

 

Para simplificar el uso de nuestra cinta LED, vamos a utilizar la librería NeoPixel de Adafruit, para lo cual vamos a descargarla e instalarla de la siguiente manera: 

1. Descarga la librería NeoPixel de Adafruit en el siguiente enlace:   https://github.com/adafruit/Adafruit_NeoPixel

2. Seleccione el botón "Descargar zip".

3. Descomprimir el archivo ZIP después de que termine la descarga. 

4. La carpeta resultante debe contener los archivos "Adafruit_NeoPixel.cpp", "Adafruit_NeoPixel.h”.

5. Cambiar el nombre de la carpeta (que contiene el .cpp y .h) a "Adafruit_NeoPixel" (con el guión y todo), y colocarla en la carpeta Libraries donde se encuentra instalada nuestra plataforma Arduino.

6. Reinicie el Arduino IDE si se está ejecutando actualmente.
 

Luego de instalar la librería en nuestro Arduino IDE, vamos a detallar parte del código que cargaremos posteriormente en nuestro Arduino y que se encuentra en la parte inferior de este tutorial para poder copiar y pegar en nuestro IDE.

Como podemos ver, el programa empieza incluyendo nuestra librería instalada “Adafruit_NeoPixel.h” en la cabecera de nuestro código.

 

La primera línea asigna un número a la variable “PIN" para su posterior consulta, aunque no es obligatorio pero hace que sea más fácil para cambiar el pin donde la entrada de datos de nuestra cinta led RGB está conectada sin profundizar en el código. De la misma manera hacemos lo mismo con la variable “NUMPIXELS” la cual simboliza el número de pixeles o leds por la que está conformada nuestra tira led. Recordar cambiar estas dos variables o parámetros antes de cargar el código según sea nuestro caso.

//Designamos nuestro pin de datos
#define PIN 6
//Designamos cuantos pixeles tenemos en nuestra cinta led RGB
#define NUMPIXELS      10

Nótese que a continuación creamos un objeto “pixels” que nos permitirá controlar nuestra tira led a través de las funciones que nos permite la librería NeoPixel. Luego, en la función setup() llamamos a la función begin () para preparar la salida de nuestro pin de datos de nuestro Arduino a nuestra cinta led RGB.

 

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
// Inicializamos nuestra cinta led RGB
  pixels.begin(); 
  
}

Una de las funciones principales a utilizar para configurar un pixel es:

    pixels.setPixelColor(n, rojo,verde,azul); 

Donde el primer argumento n en este ejemplo es el número de píxeles a lo largo de la tira y 0 representa el pixel más cercano a nuestro Arduino. Por ejemplo si tiene una cinta de 30 píxeles, estos estarán numerados del 0 al 29.

Los siguientes tres argumentos son el color del píxel, expresados ​​como niveles de brillo de color rojo, verde y azul, donde 0 es más tenue (apagado) y 255 es el máximo brillo. 

Una sintaxis alternativa que podemos usar para esta función tiene sólo dos argumentos como se puede ver a continuación:

    pixels.setPixelColor(n, color); 
 

Aquí, el color es un tipo de 32 bits que combina los valores de rojo, verde y azul en un solo número. Esto a veces puede ser más fácil y sencillo de manejar para algunos programas.

También puede convertir valores de rojo, verde y azul por separado en una sola variable de tipo 32 bits para su uso posterior usando la función Color() como se puede ver en el ejemplo siguiente:

   uint32_t magenta = pixels.Color(255,0,255);

Luego se puede simplemente pasar la variable "magenta" como argumento para setPixelColor() en lugar de los números rojos, verdes y azules por separado cada vez.

 

Ahora, nuestra función setPixelColor () no tiene un efecto inmediato en los LEDs. Para "empujar" los datos de color a la tira, hacemos el llamado a la función show():

   pixels.show();   

Esta función nos actualiza toda nuestra cinta led RGB a la vez. A continuación, mostramos el código final y completo que cargaremos a nuestra cinta led RGB y poder disfrutar del juego de luces:

 

#include <Adafruit_NeoPixel.h>
#include <avr/power.h>

//Designamos nuestro pin de datos
#define PIN 6
//Designamos cuantos pixeles tenemos en nuestra cinta led RGB
#define NUMPIXELS      10

//Definimos el número de pixeles de la cinta y el pin de datos
//   Parámetro 1 = número de pixeles de la cinta
//   Parámetro 2 = número de pin de datos del Arduino
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

// IMPORTANTE: Para reducir el riesgo de dañar los pixeles de la cinta, añada un condensador de 1000 uF a través de
// los cables de alimentación de la cinta, agregue una resistencia de 300-500 Ohm en la entrada de datos del primer pixel
// Y reduzca la distancia entre Arduino y el primera pixel. 
// Evite realizar conexiones en el circuito vivo si lo va a hacer, conecte GND primero.

void setup() {
// Inicializamos nuestra cinta led RGB
  pixels.begin(); 
  
}

void loop() {

  //Definimos nuestras variables de tipo uint32 para cada color que utilizaremos
  // pixels.Color toma valores en RGB, desde 0,0,0 hasta 255,255,255
   uint32_t rojo = pixels.Color(150,0,0);
   uint32_t verde = pixels.Color(0,150,0);
   uint32_t azul = pixels.Color(0,0,150);

  int delayval = 50; // Pausa de cincuenta milisegundos

  // La numeración de leds en la cinta RGB es la siguiente:  el primer pixel es 0, el segundo es 1 y asi sucesivamente hasta el número total de leds menos uno
  for(int i=0;i<NUMPIXELS;i++){

    pixels.setPixelColor(i, rojo); // Brillo moderado en rojo

    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB

    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).

  }
  
  //Realizamos lo mismo para los colores verde y azul
    for(int i=0;i<NUMPIXELS;i++){

    pixels.setPixelColor(i, verde); // Brillo moderado en verde

    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB

    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).

  }
    
    for(int i=0;i<NUMPIXELS;i++){

    pixels.setPixelColor(i, azul); // Brillo moderado en azul

    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB

    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).

  }
  
  delay(1000);  // Pausa de un segundo
  
  //Variamos los colores de cada led en nuestra cinta RGB cada medio segundo
   uint32_t amarillo = pixels.Color(150,150,0);
   uint32_t morado = pixels.Color(150,0,150);
   uint32_t celeste = pixels.Color(0,150,150);
   uint32_t blanco = pixels.Color(150,150,150);
   
    delayval=500;
    
    pixels.setPixelColor(0, rojo); // Brillo moderado en rojo
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(1, verde); // Brillo moderado en verde
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(2, azul); // Brillo moderado en azul
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(3, amarillo); // Brillo moderado en amarillo
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(4, morado); // Brillo moderado en morado
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(5, celeste); // Brillo moderado en celeste
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(6, blanco); // Brillo moderado en blanco
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(7, rojo); // Brillo moderado en rojo
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(8, verde); // Brillo moderado en verde
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(9, azul); // Brillo moderado en azul
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
  
}

Productos relacionados
Artículos relacionados
19 Comentarios
  • Jo************

    Jo************ 13/03/2024 Responder

    Buenos dias,
    Tengo que controlar una tira de 5 m., WS2812B, , con una buena fuente, ningún problema, mi pregunta es:
    El pin de datos que está conectado a la placa de arduino, aguantará con dicha tira de 5 m.,? no hay que intercalar un BD911, como una tira led RGB, que le conecto un BD911
    para cada pin de color ?
    Muchas gracias.
  • Om**

    Om** 10/07/2023 Responder

    Hola, disculpa estoy empezando con la tira led ws2812 y la estoy trabajando de manera que al recibir un dato desde un modulo bluetooth hc-05 encienda de cierta forma, es decir, que al mandarle un 1 este genere una serie de colores de determinados como una mezcla entre amarillo, naranja y blanco. Como podría hacer una función determinada para distintas mezclas ??
  • ju** ****os

    ju** ****os 02/12/2022 Responder

    hola, tu sabes cuantos leds maximo puedo controlar con un arduino uno?, con las pruebas que he realizado entre mas leds mas memoria ocupa y llena el micro con aprox 600 leds,necesito controlar 1500, con una arduino mega funciona pero no es opcion cambiar el micro. hay alguna opcion? modificando la libreria o algo asi, gracias por tu ayuda y por tus tutos.
  • Ge*****

    Ge***** 12/11/2020 Responder

    Saludos.
    En un proyecto usando cadenas ws2811, se me daño uno de los pixeles, lo reemplaze por otra cadena y al dia siguiente se me daño otro pixel. Qué estara sucediendo??? Estoy usando una fuente de Pc, también estoy usando la resistencia de 330 ohmios en la entrada del primer pixel. Gracias por su colaboración.
  • Da*******

    Da******* 15/04/2020 Responder

    Si toco la conexión donde el cable está soldado a la entrada de datos DIN, el LED no se enciende, pero si toco el extremo opuesto de la tira en el punto de datos, con algunos objetos metálicos el LED se encenderá acumulativamente a lo largo de la tira, aunque a veces el brillo disminuye o algunos desvanecerse
  • RU**

    RU** 28/12/2019 Responder

    Se puede cargar el programa de la tira a el chip atmega 328p, después solo conectarlo a una fuente y a la tira y funcionaria con el programa cargado anterior en arduino?
  • JH******

    JH****** 19/03/2019 Responder

    PATXI MANRIQUE,
    Observa este video allí está el mismo código y las cintas funcionando.
    https://www.youtube.com/watch?v=Vn52dAUNxFs del profe Humberto Higiñ, me ha servido mucho.
    Tal vez en el encuentre su error
  • ce*** **ar

    ce*** **ar 11/12/2018 Responder

    a como vendes 1 metro y 5 metros
  • PA*** ******UE

    PA*** ******UE 02/12/2018 Responder

    Buenas tardes equipo de Naylamp. He leído con mucha atención su tutorial de la cinta RGB WS2812B pues tras más de 30h de visionar vídeos, leer artículos y hacer pruebas y más pruebas aun no he conseguido hacer funcionar una sola tira de 8 led, exactamente igual a la que muestran en el artículo y exactamente con el mismo programa. Dado que mi paciencia se está agotando he optado por pasar a explicarles lo que he observado y de paso pedirles si tienen alguna pista que me lleve a ver mi tira encendida como se ve en algún vídeo que hay con el mismo programa.

    Primeramente conecté la tira a la salida de 5V de Arduino UNO pensando que aunque justo de mA podría funcionar. Después lo he conectado a una f.d.a. externa regulable de 3-18V y 1A ajustando la tensión a 5,03V. He comprobado que sin tira de led y con tira la f.d.a. siempre a alimentado a la tira con 5,03V. Tampoco ha funcionado. Por último he comprado un adaptador de 5V - 3A y tampoco ha funcionado. Todo ello con la R de 470 ohmios y colocando en unas pruebas sí y en otras no el condensador de 1000 microfaradios. El mismo resultado, o sea, que no ha funcionado. He comprobado la continuidad de todos los cablecillos y es buena. He comprobado la tensión en un extremo y en otro de la tira de 8 led y hay 5,03 V en ambos lados. Hasta aquí cero éxitos.

    Lo curioso es que los led se han encendido (unas veces unos y otras veces otros y sobretodo con el color rojo) cuando en una de las mil pruebas he quitado el cable de masa de la tira y en la punta contraria a la entrada de alimentación y de datos he tocado en el cable de datos con la punta del polímetro. Con la masa de la tira desconectada, si toco en la conexión donde está soldado el cablecillo a la entrada de datos DIN los led no se encienden, pero si toco en el extremo opuesto de la tira en el punto de datos, con algún objeto metálico los led se van encendiendo de forma acumulativa por la tira aunque a veces baja la luminosidad o algunos se van apagando. La luz predominante en casi todos los casos es el rojo.¿Qué explicación tiene esto? ¿Por qué se encienden los led precisamente cuando se quedan sin conexión a masa? Si vuelvo a conectar el cablecillo de masa a la masa de la fda los led se apagan al instante.

    También he dudado de si fallará la librería de Adafruit_NeoPixel. Veo que aparece como installed en la parte del gestor de librerías, con la versión 1.1.7 y también en el listado de las librerías. También he comprobado que está en la carpeta de librerías en el archivo de la carpeta del programa Arduino. Por aquí tampoco he encontrado solución alguna

    Bueno, lo siento por tanto rollo, pero es que ya no sé que más hacer o investigar, porque no consigo que el programa encienda los led. ¿Alguna sugerencia para seguir intentándolo o alguna explicación de qué puede estar pasando?

    Un saludo
    • JH******

      JH****** 19/03/2019 Responder

      PATXI MANRIQUE.

      Te recomiendo ver este video del profe Humberto Higiño tal vez allí encuentras la causa del error a mi me ha servido mucho.

      https://www.youtube.com/watch?v=Vn52dAUNxFs
  • Yo*******

    Yo******* 03/11/2018 Responder

    Muy util, me ha servido. Muchisimas gracias
  • Ar***

    Ar*** 12/10/2018 Responder

    Hola,
    Hace un día me llego esta cinta y me encanto! es hermoso como puedes controlar LED por LED, color por color sin necesidad de tener tanto cableado.
    Lo que si tengo una consulta, no quiero utilizar arduino, ya que necesito hacer un proyecto muy económico, existe forma de hacerlo con sistemas digitales ? con puertas lógicas? algún circuito integrado con un 555 ??? seria muy grato de su parte que me puedan ayudar.
    Gracias y felicitaciones por la pagina

  • He**** ******oa

    He**** ******oa 13/09/2018 Responder

    Hola, felicitaciones por su pagina, como soy nuevo en esto quisiera saber, a modo de ejemplo, como puedo interconectar 9 tiras pequeñas de esas de 8 o 5 leds.
    Pretendo distribuirlas en 3 lamparas colgantes (3 tiras x lampara) para que obviamente queden sincronizadas entre si.
    Mis dudas nacen por el lado de la fuente y el cableado de las mismas hacia su respectivo controlador.
    Gracias y sigan adelante, son un gran aporte para gente novata como yo.
  • al*******

    al******* 18/06/2018 Responder

    hola quisiera saber si la unica forma de conectar estas tiras led es solo con arduino u exiten alguna otra forma de conectarla en otros Dimmer
  • AN*** ***IA

    AN*** ***IA 22/01/2018 Responder

    donde se puede encontrar la lista de las funciones de Neopixel para podes estudiarlas y hacer nuestros propios programas?
  • Di** ****to

    Di** ****to 15/08/2017 Responder

    Por favor me indican cada cuantos metros de cinta debo colocar un controlador y que tipo de fuente (w) me recomiendan para una aplicación de 500 m.

    Gracias
    • Na*****

      Na***** 23/08/2017 Responder

      Hola, Cada 5m es recomendable alimenta nuevamente la cinta, pero no necesariamente agregarle un nuevo controlador u otra fuente, puede ser la misma fuente si aún tiene la corriente suficiente. Con respecto el tipo de fuente puede ser cualquiera que tenga 5V estables la corriente va a depender de la longitud de cinta que deseas alimentar. Cada Led consume como máximo 60mA eso es 3.6A por metro (con 60led/metro), pero con 1.5 A o 2A por metro podría ser suficiente pues casi nuca el RGB está a (255,255,255)
  • Pe*** ****** *****ez

    Pe*** ****** *****ez 05/08/2017 Responder

    Segun los datos tecnicos de estos led, la amplitud de los pulsos varia para distinguir los CEROS de los UNOS y por lo tanto no vale cualquier oscilador para el micro.

    Estos datos ò no los he visto ò no lo han comentado Vds. en su programa ejemplo,
    Si su programa se copia y no funciona no sè si lo copie mal ò su programa no funciona

    Saludos
    • Na*****

      Na***** 22/08/2017 Responder

      Hola Pedro, la librería se encarga de sincronizar la velocidad para el correcto funcionamiento en la transmisión de datos, El tutorial nosotros lo hemos implementado y probado. Los errores más comunes son en usar una fuente inestable para alimentar los LEDS, estos consumen corriente y necesitas una buena fuente, agrega un condensador de 1000uF si es necesario.
Dejar un comentario
Deja su comentario

Menú

Ajustes

Crear una cuenta gratuita para usar listas de deseos.

Registrarse