Artículos recientes

Novedades

Tutorial cinta LED RGB WS2812B

Tutorial cinta LED RGB WS2812B

 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).
    
  
}

Pueden adquirir los materiales usados en este tutorial en nuestra tienda

Arduino Uno R3

Cinta LED WS2812B: 10 LEDs x 16cm

Cinta LED WS2812B: 5 LEDs x 16cm

13 Comments

    • Avatar
      Pedro Molina Sanchez
      ago 5, 2017

      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 funcionaSaludos

      • Avatar
        Naylamp
        ago 22, 2017

        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.

    • Avatar
      Diva Puerto
      ago 15, 2017

      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

      • Avatar
        Naylamp
        ago 23, 2017

        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)

    • Avatar
      ANGEL MARIA
      ene 22, 2018

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

    • Avatar
      alexander
      jun 18, 2018

      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

    • Avatar
      Hernan Figueroa
      sep 13, 2018

      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.

    • Avatar
      Ariel
      oct 12, 2018

      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

    • Avatar
      Yokesetio
      nov 3, 2018

      Muy util, me ha servido. Muchisimas gracias

    • Avatar
      PATXI MANRIQUE
      dic 2, 2018

      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 algunaBueno, 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

      • Avatar
        JHelbert
        mar 19, 2019

        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

    • Avatar
      cesar amar
      dic 11, 2018

      a como vendes 1 metro y 5 metros

    • Avatar
      JHelbert
      mar 19, 2019

      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

Leave a Reply

* Name:
* E-mail: (Not Published)
   Website: (Site url withhttp://)
* Comment: