Aprovechando el post anterior, vamos a añadir al circuito un receptor de infrarrojos de manera que podamos variar el color y el brillo del led con un mando a distancia de Dealextreme que viene perfecto para el proyecto. El mando en cuestión el el SKU: 47019, es un mando muy barato que viene con pila incluida :
Mando infrarrojo remoto RGB

Para conseguir que el Arduino lo detecte, utilizaremos un receptor infrarrojo del tipo TSOP 1738 o similar (en mi caso tengo un 1736 y funciona igualmente a pesar de que el mando utiliza una portadora de 38KHz).

El led RGB de 5W (Dealextreme)

El led RGB de 5W (Dealextreme)


El esquema es el siguiente:
Led RGB controlado por IR remoto con Arduino

 Y el montaje queda de esta manera:

Led RGB controlado por IR remoto con Arduino

Ahora necesitamos la librería IRRemote , que permite leer los códigos de multitud de mandos a distancia. En particular funciona perfectamente con nuestro mando (que utiliza el protocolo de NEC).
Debemos descargar la librería  e instalarla en nuesto entorno de Arduino.

Puedes descargar el código de:
https://github.com/arduino-guay/Blog/tree/master/RGBLed_remote

¡Cuidado!: La librería IRremote utiliza internamente el TIMER2 del Arduino.Esto hace que las salidas 11 y 3 no funcionen como PWM (por eso he cambiado el led verde a la salida 6). Por otro lado hay una versión más nueva de la librería IRremote , que reconoce bastantes protocolos más de códigos infrarrojos, pero al parecer después de varias pulsaciones los códigos obtenidos parecen aleatorios ....¿?.Puede serviros para soportar otros mandos a distancia o para otros proyectos.
Para obtener las constantes, he utilizado el ejemplo que viene con la librería 'IRrecvDemo', que permite mostrar en la consola los códigos enviados por cada botón del mando.
Esto mismo es válido si se desea utilizar otro mando a distancia distinto.

Aquí dejo un vídeo del invento funcionando:



Si te ha gustado, recuerda compartirlo en tu red social favorita. Gracias

23 comments

Anónimo
25 de diciembre de 2012, 7:32

Muchas Gracias!!!

Nuno - Portugal
5 de enero de 2013, 11:09

Muy bueno. Gracias!

Omnimusha
21 de febrero de 2013, 9:51

HOLA, VEO QUE USA UN LONG SIN SIGNO, OSEA 32BITS, PARA ALMACENAR AL HEX. Y LOS MISMO PARA DECODIFICAR AL COLOR RGB.unsigned long valor.:

EN TEMA DE EFICIENCIA DE ESPACIO DE LA MEMORIA ES ¿LO MEJOR, SE PODRIA AJUSTAR MAS EL TIPO DE DATO QUE SE USA??, SI ES ASI, COMO SERIA PARA DECOFICAR
LOS VALORES RGB?

24 de febrero de 2013, 3:05

@Omnimusha
En realidad, la variable rgb (unsigned long), al final no se utiliza :-(.
En la función RGB, se utiliza por comodidad, pero se podrían pasar los valores de r,g y b como tres bytes, es decir en vez de RGB(0x00FFAA00), sería RGB(FF,AA,00), pero no creo que esto afecte a la eficiencia de la memoria, sólo ahorrarás un byte.

Anónimo
24 de marzo de 2013, 9:55

xq a mi no me sale como puedes ayudarme o como te contacto

28 de abril de 2013, 12:55

Es posible realizar este proceso mediante un control de alarma marca Thunder Power tengo unas luces instalas en mi moto y quisiera manejarlas a control remoto, me podrias mandar los pasos y las explicaciones a mi correo carlosf0424@hotmail.com mil gracias por su aporte.

12 de octubre de 2013, 13:06

Usando Arduino 1.0.5 y habiendo cargado la libreria, me da error al compilar:
In file included from /Users/Alejandro/Documents/Arduino/libraries/IRremote/IRremote.cpp:13:
/Users/Alejandro/Documents/Arduino/libraries/IRremote/IRremoteInt.h:87: error: 'uint8_t' does not name a type
/Users/Alejandro/Documents/Arduino/libraries/IRremote/IRremoteInt.h:88: error: 'uint8_t' does not name a type
/Users/Alejandro/Documents/Arduino/libraries/IRremote/IRremoteInt.h:89
...

13 de octubre de 2013, 1:18

@Alejandro Gomez Cabrero
Puedes encontrar la solución aquí: IR remote library error: uint8_t does not name a type.
Básicamente hay que cambiar
#include <WProgram.h>
por
#include <Arduino.h>

el la cabecera "IRRemoteInt.h"
Esto es debido a un cambio en la versión 1.0 del ide de Arduino.

14 de octubre de 2013, 10:58

Eso ya lo hice y sigue dando el mismo fallo, el de uint8_t, parece no encontrar donde esta declarado. Si necesitas algun dato mas y puedes ayudarme, te lo agradeceria.

Gracias de antemano.
Saludos

15 de octubre de 2013, 0:26

@Alejandro Gomez Cabrero
¿Has probado con la última versión de la librería IRRemote?
A Multi-Protocol Infrared Remote Library for the Arduino

5 de noviembre de 2013, 0:59

Buenos días:

He estado unos días desconectado por motivos laborales.
Bien, ya consegui que cargase, el problema era que al usar MAC, las librerias no las guarda dentro de las carpetas del programa en si sino en mis documentos.
Ahora, pasando a otra pregunta:
Estoy intentando implementar el efecto Rainbow dentro del codigo de manejo por control remoto, pero me surge un problema:
Solo realiza un ciclo del bucle como esperaba, ya que no puedo llamar un loop dentro de un loop, porque mientras durase el loop del caso Rainbow, no podria recibir la orden IR a la vez.
He pensado sacar fuera del loop esa funcion pero no se me ocurre ninguna forma de que mientras esta activo el efecto Rainbow (en bucle), pueda estar a la espera de la orden IR siguiente.

Saludos y gracias de antemano

8 de noviembre de 2013, 0:27

@Alejandro Gomez C.
Se me ocurre sacar la llamada a la librería IR fuera del bucle para poder llamarla en el bucle del método rainbow.
Si durante el bucle del rainbow se detecta un código, se sale del bucle y vuelve al principal.
Algo así: (ojo, no lo he probado es un esquema)

#DEFINE NULO 0xFFFFFFFF
// Código recivido
uint32_t irCode = NULO;

// Método para la obtención del códifo
uint32_t valorIR () {
decode_results irResult;
uint32_t valor = NULO;

if (irrecv.decode(&irResult)) {
valor = irResult.value;
}
irrecv.resume();
return valor;
}

// Método rainbow
uint32_t rainbow () {
uint32_t irPulsado;
for (...) {
// Código del efecto rainbow
.......
// En cada iteración comprobamos
irPulsado = valorIR ();
if ( irPulsado != NULO) {
// Si hay algún código lo devolvemos y salimos del efecto
return irPulsado;
}
}
return NULO;
}

void loop() {
uint32_t detectado = NULO;

if ( irCode != NULO) {
switch (irCode) {
case BRIGHTNESS_UP :
....
break;
case RAINBOW :
// Guaradamos el valro devuelto
detectado = rainbow;
break;
.......
analogWrite(G_PIN,g);
analogWrite(B_PIN,b);
}
}
// Si hay algun valor lo utilizamos como prósimo código
if ( detectado == NULO ) {
irCode = valorIR ();
} else {
irCode = detectado;
}
}

8 de noviembre de 2013, 2:51

Bien, vamos a empezar a ver que podemos compilar y que nos sale, gracias por la idea, antes de esto hice algunas pruebas, pero claro en cuanto entraba la secuencia rainbow tenia que esperar a finalizar la misma para continuar el bucle y poder recibir otra orden y cambiar la secuencia.
Saludos

Anónimo
5 de diciembre de 2013, 16:04

muito bom seu codigo.

pretendo implementar as funções de flash e outras que não implementastes. me ajudou a fazer um projeto que tinha faz tempo. um abraço Joao scheffer

6 de diciembre de 2013, 7:24

@Anónimo
Muito obrigado
Fico feliz que você tenha servido

Anónimo
20 de mayo de 2014, 8:28

alguien sabe de un link para manejar lcd tactil,camara y grps arduino

1 de septiembre de 2014, 12:10

hola una pregunta este proyecto se debe de realizar con esta tarjeta...
Arduino UNO Rev3...> http://store.arduino.cc/product/A000066

1 de septiembre de 2014, 13:48

@Carlos Arturo Rebollo Campos
Bueno en realidad no es necesario que sea esa, la mayoría de modelos de Arduino pueden funcionar Uno, Leonardo, Mega, Micro, Mini, Pro Mini ... Tal vez el DUE que tiene un procesador distinto puede tener problemas con la librería IRRemote ... cuestión de ver la documentación.

Anónimo
29 de septiembre de 2015, 19:37

no me funciona que hago

20 de diciembre de 2015, 10:35

Genial aportó. Eres un crack

20 de diciembre de 2015, 10:35

Genial aportó. Eres un crack

28 de diciembre de 2015, 1:27

@Unknown
Gracias!

Anónimo
21 de marzo de 2016, 5:06

¡Buen proyecto!
¡Felicitaciones!
Una pregunta: las funciones FLASH, STROBE, FADE, SMOOTH no se encuentran en el programa.
¿Vas a añadir las?

Publicar un comentario

¡Lo más visto!

English Version

English Version
Arduino is Cool!!

También en Facebook