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:
|
|
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.
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.