Cómo conectar LED RGB Neopixel/WS2812 a Arduino

En este pequeño tutorial veremos cómo conectar LEDs RGB Neopixel a una tarjeta Arduino, también encontrarás un código de programación para tus primeras pruebas.

Neopixel es una marca creada por Adafruit Industries para referirse a algunos LEDs RGB direccionables individualmente, es decir LEDs que cuentan con un circuito lógico integrado dentro de si mismos, circuito que hace posible controlar con un solo pin digital el color de cada LED en una secuencia de LEDs encadenados. No todos los LEDs direccionables individualmente son Neopixel, solo los basados en alguno de estos controladores: WS2812WS2811 o SK6812. 

Cada LED cuenta con 4 pines:

  • GND – Alimentación nivel bajo
  • 5V – Alimentación nivel alto
  • DIN – Pin que recibe la información del color
  • DO – Pin que entrega la información del color

El circuito integrado de cada LED puede almacenar 3 bytes, un byte para cada color. Debido a que se encuentran encadenados solo el primer LED está conectado al Pin de control, en este caso, un pin digital de la tarjeta Arduino Uno. La tarjeta enviará la cadena de todos los colores según el número de pixeles que estén conectados y a su vez el primer LED recibirá la información todos los colores uno de tras de el otro. Pero ¿Cómo logran recibir la información todos los pixeles? Muy sencillo, cuando un LED recibe 3 bytes nuevos de información entrega al siguiente LED los 3 bytes que contenía anteriormente, de esta manera cuando la tarjeta Arduino termina de mandar todos los colores por el pin de datos el primer LED habría recibido y enviado todos los colores para quedarse finalmente con el color que le corresponde y así los demás LEDs.

De esta forma una cadena de LEDs Neopixel es un dispositivo digital de salida, es decir su funcionamiento consiste en recibir ila información del color mostrar y mostrarlo.

Componentes Necesarios

  • Arreglo de LED Neopixel
  • Arduino Uno
  • Resistor 470 ohms
  • Condensador electrolítico de 1000uF de 6.3V(mínimo)
  • Jack de 2.1mm Terminal de Barril a Terminal de Tornillo
  • Eliminador 5V, mínimo 1A – Terminal de Barril 2.1mm
  • Protoboard chica
  • Cables para conexión M-M

Diagrama de Conexiones

Arduino Uno – NeoPixel – 1000uF – Resistor 470 ohms – Jack 2.1mm terminal de tornillo

Pasos previos a cargar el código

Como mencionamos anteriormente, para controlar una cadena de LEDs Neopixel desde Arduino es necesario implementar el protocolo de comunicación específico en un pin digital. En este caso utilizaremos la librería <Adafruit_NeoPixel.h>, para realizar dicho control de manera sencilla y con muy pocas líneas de código.

Dicha librería no viene instalada por defecto en el IDE de Arduino por lo que debemos instalarla antes de poder compilar y cargar un código que haga uso de ella. Si necesitas ayuda realizando la instalación consulta aquí los pasos a seguir para que puedas continuar con este ejemplo.

Código de Arduino

Cargamos el código y observamos como se van iluminando los Neopixel uno por uno.


// Basado en el ejemplo "simple" de Adafruit NeoPixel library

#include <Adafruit_NeoPixel.h>//Incluimos la librería en el código

// Pin del Arduino al cual conectamos el DIN del primer led en la cadena
#define PIN        6 

// Número de píxeles encadenados
#define NUMPIXELS 10 //Modifica este npumero según el arreglo de LEDs con el que cuentes

// Inicializamos nuestro objeto "pixeles"
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
// Argumento 1 = Número de pixeles encadenados
// Argumento 2 = Número del pin de Arduino utilizado con pin de datos
// Argumento 3 = Banderas de tipo de pixel:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)

#define DELAYVAL 500 //timpo de espera en ms 

void setup() {
  pixels.begin(); // Inicializamos el objeto "pixeles"
}

void loop() {
  pixels.clear(); // Apagamos todos los LEDs

  // El primer pixel de una cadena es el #0, el segundo es el #1, y así sucesivamente
  // hasta el npumero de pixeles menos uno
  for(int i=0; i<NUMPIXELS; i++) { // Para cada pixel...

    
    // Modificamos el LED #i, encendiendolo con un color verde moderadamente brillante
    pixels.setPixelColor(i, pixels.Color(0, 150, 0));

    pixels.show();   // Mandamos todos los colores con la actualización hecha

    delay(DELAYVAL); // Pausa antes de modificar el color del siguiente LED
  }
}

¡Sigue explorando!