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 esquema es el siguiente:
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
Muchas Gracias!!!
ResponderEliminarMuy bueno. Gracias!
ResponderEliminarHOLA, VEO QUE USA UN LONG SIN SIGNO, OSEA 32BITS, PARA ALMACENAR AL HEX. Y LOS MISMO PARA DECODIFICAR AL COLOR RGB.unsigned long valor.:
ResponderEliminarEN 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?
@Omnimusha
ResponderEliminarEn 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.
xq a mi no me sale como puedes ayudarme o como te contacto
ResponderEliminarEs 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.
ResponderEliminarUsando Arduino 1.0.5 y habiendo cargado la libreria, me da error al compilar:
ResponderEliminarIn 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
...
@Alejandro Gomez Cabrero
ResponderEliminarPuedes 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.
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.
ResponderEliminarGracias de antemano.
Saludos
@Alejandro Gomez Cabrero
ResponderEliminar¿Has probado con la última versión de la librería IRRemote?
A Multi-Protocol Infrared Remote Library for the Arduino
Buenos días:
ResponderEliminarHe 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
@Alejandro Gomez C.
ResponderEliminarSe 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;
}
}
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.
ResponderEliminarSaludos
muito bom seu codigo.
ResponderEliminarpretendo 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
@Anónimo
ResponderEliminarMuito obrigado
Fico feliz que você tenha servido
alguien sabe de un link para manejar lcd tactil,camara y grps arduino
ResponderEliminarhola una pregunta este proyecto se debe de realizar con esta tarjeta...
ResponderEliminarArduino UNO Rev3...> http://store.arduino.cc/product/A000066
@Carlos Arturo Rebollo Campos
ResponderEliminarBueno 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.
no me funciona que hago
ResponderEliminarGenial aportó. Eres un crack
ResponderEliminarGenial aportó. Eres un crack
ResponderEliminar@Unknown
ResponderEliminarGracias!
¡Buen proyecto!
ResponderEliminar¡Felicitaciones!
Una pregunta: las funciones FLASH, STROBE, FADE, SMOOTH no se encuentran en el programa.
¿Vas a añadir las?
Hola! Buen proyecto!. Las funciones FLASH FADE STROBE SMOOOTH como se podrian agregar ya que si las pongo en un void me queda en ese bucle y no lo puedo hacer salir jaja gracias!
ResponderEliminar