Controlando el módulo LED WS2812 con Arduino (2)

En un artículo anterior vimos cómo funciona el módulo de led WS2812. Ahora vamos a ver cómo conectarlo y controlarlo desde un programa en Arduino.

En el artículo previo les contaba cómo se deben enviar los datos cuando queremos controlar el encendido de un módulo LED WS2812. Vimos que el Arduino debe enviar una secuencia de bits respetando una temporización muy precisa. Afortunadamente no es necesario que nos preocupemos de todos esos detalles ya que existen librerías que se encargan de ello. Aquí les voy a presentar una aplicación con la librería Adafruit_Neopixel, pero pueden hacerlo con otras, como por ejemplo la librería FastLED.

El módulo WS2812 que utilizo se encuentra en una plaquita un tanto antigua denominada “WS2812 Breakout” que además tiene dos hileras de 3 pines que permiten conectar varias de estas placas en cascada.

Placa WS2811 Breakout, igual a la WS2812 (Fuente: learn.sparkfun.com)

Para controlar esta placa usaré un Arduino UNO. La alimentación se toma directamente desde el Arduino (si fueran varias placas o varios módulos led debería usar una fuente externa) y la entrada DI se conecta al pin digital 2 del Arduino.

Arduino UNO y placa Breakout

Como dije mas arriba la librería utilizada es Adafruit_Neopixel que pueden descargar desde aquí.

El código para probar el módulo es el siguiente:

#include <Adafruit_NeoPixel.h>

#define PIN        2
#define NUMPIXELS  1

//Crea el objeto "led"
Adafruit_NeoPixel led (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup (void) {
  
  led.begin ();
  led.clear ();
}



void loop (void) {
  
  
  led.setPixelColor(0, led.Color(255, 0, 0)); //Rojo
  led.show();
  delay (1000);
  led.setPixelColor(0, led.Color(0, 255, 0)); //Verde
  led.show();
  delay (1000);
  led.setPixelColor(0, led.Color(0, 0, 255)); //Azul
  led.show();
  delay (1000);
  
  
}

En la línea 1 se incluye la librería con las funciones del módulo WS2812.

En las líneas 3 y 4 se definen el pin de salida de datos (PIN) y la cantidad de módulos led conectados al Arduino (NUMPIXELS) que en este caso es uno.

Luego, en la línea 7 se crea el objeto “led” pasando tres parámetros al constructor: la cantidad de módulos, el número del pin de datos y dos valores de configuración. NEO_GRB identifica a los módulos que reciben datos en ese orden (Green, Red y Blue) como la placa NeoPixel o la que utilicé yo y NEO_KHZ800 especifica la velocidad de los datos.

Dentro de la función setup, en la línea 11 el método begin configura el pin de datos (PIN) como salida y el método clear apaga todos los módulos conectados.

Dentro de loop hay una repetición en la que se muestran los colores básicos (rojo, verde y azul) llamando al método setPixelcolor con el número del módulo a cambiar (empezando por cero) y los tres componentes de color. Esto no se transmite a los leds hasta que se llama al método show

Funcionamiento del código

Esta no es más que una muestra de las capacidades de este módulo y de las posibilidades de la librería. Quienes quieran profundizar más o armar circuitos mas complejos con mayor cantidad de módulos pueden encontrar mas detalles en los enlaces que les adjunto a continuación.

Más info:

Librería FastLED

Referencia de la librería NeoPixel

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Habilitar notificaciones OK No, gracias