Anda di halaman 1dari 8

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 travs de un solo cable. Adems,
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 ms largas adems 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.
Para realizar las conexiones bsicas, 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). Tambin podremos identificarla por la flecha que indica la direccin en la que se
realiza el envo 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.

Vamos a alimentar nuestra cinta led RGB con una fuente de alimentacin 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 alimentacin (no conecte a la de Arduino), DIN al pin digital D6 del
Arduino, y de nuestra fuente a GND de nuestra cinta led RGB, adems de conectar
nuestro terminal negativo a un pin GND de nuestro Arduino.
Para un buen uso de nuestra cinta led RGB es necesario conocer sus caractersticas tcnicas
principales y tener en consideracin algunas pautas para evitar algn posible dao, entre
ellas citamos:

- Cada pixel o led individual de nuestra cinta RGB requiere 60 miliamperios como mximo
cuando trabaja en su brillo completo. Los colores mezclados y ajustes inferiores de brillo
utilizarn proporcionalmente menos energa. Esto es necesario conocer a la hora de elegir la
capacidad de nuestra fuente de alimentacin.

- Antes de conectar nuestra cinta led RGB a cualquier fuente de alimentacin, aadir un
gran condensador (1000 uF, 6.3V o superior) a travs de los terminales de alimentacin
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 dae debido a posibles picos en la
lnea de datos.

- Trate de minimizar la distancia entre la cinta led RGB y el controlador Arduino.


Si va a utilizar una fuente de energa externa, aplique energa a la cinta LED antes de
aplicar energa al microcontrolador.

Te recordamos que es ideal utilizar una fuente de alimentacin independiente o externa, sin
embargo se podra 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 librera NeoPixel de
Adafruit, para lo cual vamos a descargarla e instalarla de la siguiente manera:

1. Descarga la librera NeoPixel de Adafruit en el siguiente


enlace: https://github.com/adafruit/Adafruit_NeoPixel

2. Seleccione el botn "Descargar zip".

3. Descomprimir el archivo ZIP despus 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 guin 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 librera en nuestro Arduino IDE, vamos a detallar parte del cdigo 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 librera instalada


Adafruit_NeoPixel.h en la cabecera de nuestro cdigo.

La primera lnea asigna un nmero a la variable PIN" para su posterior consulta, aunque
no es obligatorio pero hace que sea ms fcil para cambiar el pin donde la entrada de datos
de nuestra cinta led RGB est conectada sin profundizar en el cdigo. De la misma manera
hacemos lo mismo con la variable NUMPIXELS la cual simboliza el nmero de pixeles o
leds por la que est conformada nuestra tira led. Recordar cambiar estas dos variables o
parmetros antes de cargar el cdigo segn sea nuestro caso.

//Designamos nuestro pin de datos


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

Ntese que a continuacin creamos un objeto pixels que nos permitir controlar nuestra
tira led a travs de las funciones que nos permite la librera NeoPixel. Luego, en la
funcin setup() llamamos a la funcin 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 nmero de pxeles a lo largo de la tira y


0 representa el pixel ms cercano a nuestro Arduino. Por ejemplo si tiene una cinta de 30
pxeles, estos estarn numerados del 0 al 29.

Los siguientes tres argumentos son el color del pxel, expresados como niveles de brillo de
color rojo, verde y azul, donde 0 es ms tenue (apagado) y 255 es el mximo brillo.

Una sintaxis alternativa que podemos usar para esta funcin tiene slo dos argumentos
como se puede ver a continuacin:

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
nmero. Esto a veces puede ser ms fcil y sencillo de manejar para algunos programas.

Tambin puede convertir valores de rojo, verde y azul por separado en una sola variable de
tipo 32 bits para su uso posterior usando la funcin 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 nmeros rojos, verdes y azules por separado cada vez.

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

pixels.show();

Esta funcin nos actualiza toda nuestra cinta led RGB a la vez. A continuacin, mostramos
el cdigo 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 nmero de pixeles de la cinta y el pin de datos


// Parmetro 1 = nmero de pixeles de la cinta
// Parmetro 2 = nmero de pin de datos del Arduino
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB +
NEO_KHZ800);

// IMPORTANTE: Para reducir el riesgo de daar los pixeles de la cinta, a


ada un condensador de 1000 uF a travs de
// los cables de alimentacin 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, conect
e 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 numeracin de leds en la cinta RGB es la siguiente: el primer


pixel es 0, el segundo es 1 y asi sucesivamente hasta el nmero 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

Anda mungkin juga menyukai