Buenas tardes,
A continuación os presento el desarrollo de un proyecto de Arduino capaz de crear distintas escenas con un LED RGB. Las escenas serán controladas mediante un control remoto de infrarrojos ( IR)
Podéis simularlo a continuación:
Antes un esquema de colorimetría RGB:
Después de ver este esquema realizaremos el algoritmo mezclando los colores para crear 7 escenas:
- El botón 1 dará luz roja
- El botón 2 dará luz verde
- El botón 3 dará luz azul
- El botón 4 dará luz roja + verde =amarillo
- El botón 5 dará luz roja + azul = morado
- El botón 6 dará luz verde + azul = cían
- El botón 7 dará luz verde + azul + rojo = blanca
El botón 0 apagará las 3 luces.
El montaje y los elementos podéis verlo a continuación;
El código de programación es el siguente:
// C++ code for IR para controlar escenas en un LED domótico by LHN
#include <IRremote.h> //incluimos en el programa la librería para IRremote
int red=9; //Designamos el numero entero 9 para la palabra RED
int green=13; //Designamos el numero entero 13 para la palabra GREEN
int blue=10; //Designamos el numero entero 10 para la palabra BLUE
int RECV_PIN = 11; //Designamos el numero entero 11 para la señal del IR
IRrecv irrecv(RECV_PIN); //Asignamos la palabra IRrecv al pin que lleva la señal IR
decode_results results; //Asignamos la palabra decode_result al código que llega en la señal IR
void setup() //definimos los pines de entrada y salida (el montaje)
{
pinMode(red, OUTPUT); // Asignamos el pin del LED rojo como salida
pinMode(green, OUTPUT); // Asignamos el pin del LED verde como salida
pinMode(blue, OUTPUT); // Asignamos el pin del LED azul como salida
pinMode(RECV_PIN, INPUT); // Asignamos el pin del IR como entrada
Serial.begin(9600); //Comenzamos el monitor en serie a 9600 baudios
Serial.println("Enable IRin"); //Comienza la escritura de los datos del IR en el monitor en serie
irrecv.enableIRIn(); //Comando para habilitar funcionamineto del sensor IR
Serial.println("Enabled IRIin"); //Escritura ya comenzada del IR del monitor
}
void loop()//comenzamos el bucle de programación
{
if (irrecv.decode(&results))
{
Serial.println(results.value, HEX);
irrecv.resume();
if (results.value==0xFD30CF) //Si recibimos el valor 0
{
digitalWrite(red, LOW); //rojo sin activar
digitalWrite(green, LOW);//verde sin activar
digitalWrite(blue, LOW);//azul sin activar
}
else if (results.value==0xFD08F7) //Si recibimos el valor 1
{
digitalWrite(red, HIGH); //rojo activo
digitalWrite(green, LOW);//verde sin activar
digitalWrite(blue, LOW);//azul sin activar
}
else if (results.value==0xFD8877) //Si recibimos el valor 2
{
digitalWrite(red, LOW); //rojo sin activar
digitalWrite(green, HIGH);//verde activo
digitalWrite(blue, LOW);//azul sin activar
}
else if (results.value==0xFD48B7) //Si recibimos el valor 3
{
digitalWrite(red, LOW); //rojo sin activar
digitalWrite(green, LOW);//verde sin activar
digitalWrite(blue, HIGH);//azul activo
}
else if (results.value==0xFD28D7) //Si recibimos el valor 4
{
digitalWrite(red, HIGH); //rojo activo
digitalWrite(green, HIGH);//verde activo
digitalWrite(blue, LOW);//azul sin activar
}
else if (results.value==0xFDA857) //Si recibimos el valor 5
{
digitalWrite(red, HIGH); //rojo activo
digitalWrite(green, LOW);//verde sin activar
digitalWrite(blue, HIGH);//azul activo
}
else if (results.value==0xFD6897) //Si recibimos el valor 6
{
digitalWrite(red, LOW); //rojo sin activar
digitalWrite(green, HIGH);//verde activo
digitalWrite(blue, HIGH);//azul activo
}
else if (results.value==0xFD18E7) //Si recibimos el valor 7
{
digitalWrite(red, HIGH); //rojo activo
digitalWrite(green, HIGH);//verde activo
digitalWrite(blue, HIGH);//azul activo
}
}
delay(100); //retraso de 100 msg antes de volver recomenzar el bucle
}
