LEDs RGB Neopixel

[Leds neopixel. tecnoloxia.org CC By SA ]

Descrición

Incluír nos teus proxectos un led RGB pode facer que quede máis lustroso. Unha opción é utilizar un LED RGB simple, como vimos aquí. Neste caso imos utilizar LEDs RGB Neopixel, moito máis fáciles de conectar e controla.

Un LED RGB ( R= red, vermello, G= green, verde e B= blue, azul) é un LED que incorpora tres LEDs no mesmo encapsulado, de xeito que se poden formar miles de cores axustando de maneira individual a intensidade de cada LED. Dependendo da intensidade de cada un dos LEDs RGB obteremos diferentes cores, como podes ver nos seguintes exemplos:

[By Quark67 CC BY-SA from Wikimedia]
  • Branco: RGB= 255,255,255
  • Vermello: RGB= 255,0,0
  • Verde: RGB= 0,255,0
  • Azul: RGB= 0,0,255
  • Negro: RGB= 0,0,0
  • Amarelo: RGB= 255,255,0
  • Maxenta: RGB= 255,0,255
  • Ciano: RGB= 0,255,255

Tomando outros valores podemos conseguir un total de 256 x 256 x 256 = 16.777.216 cores distintas.

Cada LED RGB neopixel inclúe estes 3 LEDs xunto a un circuíto controlador responsable de recibir os datos do LED anterior e envialos ao seguinte, de xeito que todos os LEDs se controlan desde unha soa liña de datos.

Ollo!  Pode que atopes LEDs RGB neopixel que non son realmente RGB, senón GRB. É dicir, o vermello e o verde están cambiados. Por exemplo, se queres a cor verde debes poñer 255,0,0 e se queres vermello 0,255,0.

Conexión

Podes utilizar un único LED RGB neopixel individual, ou podes unir varios en serie, un tras outro. Pódense atopar tiras e rodas de leds que xa veñen conectados, pero aínda así podes conectar varias tiras e rodas entre si. Os pins que teñen son:

  • GND
  • VCC: 5V
  • IN ou DIN: é o pin de datos que recibe do arduino
  • OUT ou DOUT: utilízase para conectar un led co seguinte.

Se non queres soldar cables ou queres traballar sobre unha protoboard unha opción é utilizar uns neopixel que teñen un encapsulado similar ao un LED normal. Hainos tamén cuns pins para soldar, pero non en superficie, polo que pode resultar máis fácil para quen non ten experiencia.

[tecnoloxia.org]
[market.samm.com]

As tiras de LEDs neopixel tamén se poden conectar entre si, pero nós aquí ímolas utilizar soas. Polo tanto só temos que conectar os cables de alimantación (VCC e GND) e o de datos en DIN, que irá ao pin 13 do arduino. Estas de 8 píxeles son as que imos usar para os exemplos.

Se utilizas unha cinta de leds moi longa, cómpre utilizar unha fonte de alimentación externa de 5V para ela, e non alimentala directamente do arduino. Lembra unir os GND.

Configuración

O primeiro que debemos facer é incluír a librería Adafruit_NeoPixel (Vai a Sketch -> Incluír biblioteca -> Xestionar bibliotecas – > busca “NeoPixel” -> Instalar)

Para un conxunto de leds o primeiro é o 0, o seguinte o 1, e así sucesivamente. Para asignar as cores deberás introducir os valores GRB, desde (0,0,0) hasta (255,255,255)

// Librería

#include <Adafruit_NeoPixel.h>

// Declaración de variables

#define PIN       13  // Pin da tira de Leds
#define NUMPIXELS 8   // Número de Leds

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); //define o obxecto pixels

// Configuración

void setup() {
  pixels.begin(); // Inicializa a libreria NeoPixel.
}

void loop(){
}

No loop introduciremos as instrucións necesarias para acender e apagar os leds

Prácticas

1. Cores un a un

Se queremos acender cada led dunha cor determinada podemos indicar un a un que cor queremos. Isto é moi canso cando tempos tantos leds, e sería útil só no caso de ter un ou dous leds que controlar.

// Bucle

void loop() {

  //acender os leds de cor vermella (GRB)

    pixels.setPixelColor(0, pixels.Color(255,0,0)); // Asigno vermello ao 1º LED
    pixels.setPixelColor(1, pixels.Color(0,255,0)); // Asigno verde ao 2º LED
    pixels.setPixelColor(2, pixels.Color(0,0,255)); // Asigno azul ao 2º LED
    pixels.setPixelColor(3, pixels.Color(255,255,0));
    pixels.setPixelColor(4, pixels.Color(0,255,255));
    pixels.setPixelColor(5, pixels.Color(255,0,255));
    pixels.setPixelColor(6, pixels.Color(255,255,255));
    pixels.setPixelColor(7, pixels.Color(100,100,100));

    pixels.show(); // Actualiza os leds.
    delay(1000);


  //apagar os leds
  
    pixels.clear();

    delay(1000);
  
}

Pode resultar máis sinxelo crear unhas variables pra definir cada cor, e despois utilizalas para asignar o valor a cada led

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); //define o obxecto pixels
uint32_t vermello=pixels.Color(255,0,0);
uint32_t verde=pixels.Color(0,255,0);
uint32_t azul=pixels.Color(0,0,255);
uint32_t amarelo=pixels.Color(255,255,0);
uint32_t maxenta=pixels.Color(255,0,255);
uint32_t ciano=pixels.Color(0,255,255);
uint32_t branco=pixels.Color(255,255,255);
uint32_t negro=pixels.Color(0,0,0);

Se agora quero acender o 1º led de cor vermella, só teño que escribir:

pixels.setPixelColor(0, vermello);

2. Cores con for

No caso de ter moitos LEDs é moito mellor ir percorrendo os leds un a un coa instrución for.  Neste exemplo iremos acendendo os leds de forma consecutiva e despois apagarémolos tamén de forma consecutiva, no mesmo sentido.

// Bucle

void loop() {

  // Acender os leds consecutivamente dunha cor determinada

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

    pixels.setPixelColor(i, pixels.Color(10,20,100)); 
    pixels.show(); 
    delay(100);   // espera para o acendido de cada led.
  }

  // Apargar os leds consecutivamente
  
  for(int i=0;i<NUMPIXELS;i++){ 
    pixels.setPixelColor(i, pixels.Color(0,0,0)); 
    pixels.show(); 
    delay(100);
  }
  
}

3. Random

Imos facer que os leds se acendan un tempo cunha cor aleatoria cada vez. para iso creamos as variables R, G e B que toman un valor ao chou cada vez que se repite o bucle.

void loop() {

  int R=random(0,255);
  int G=random(0,255);
  int B=random(0,255);

  //acender os leds dunha cor ao chou (GRB)

  for(int i=0;i<NUMPIXELS;i++){
    pixels.setPixelColor(i, pixels.Color(R,G,B)); 
  }
  pixels.show(); // Actualiza os leds.
  delay(500);
  
}

Propostas

  • Fai que os leds se vaian acendendo consecutivamente nun sentido e despois apagándose en sentido contrario.
  • Fai que cada led se acenda e apague de forma consecutiva, simulando “o coche fantástico”.
  • Conecta un sensor de Cor. Os leds deben acenderse coa mesma tonalidade que a detectada polo sensor sobre diferentes pezas de cores.