Hola! Antes de nada avisar que soy totalmente amateur en temas de electrónica y Arduino. Estoy intentando crear un detector de luz infrarroja para un proyecto personal y pensaba que seria sencillo haciendo algunas modificaciones al proyecto de ejemplo que trae Arduino con el típico sensor de luz normal...pero se me esta complicando el tema. A ver si alguien puede echarme una mano!
El problema que tengo es que el receptor IR no me mide variaciones en la cantidad de luz. Yo esperaba que el receptor midiera más o menos luz en un rango de 0 - 1024 según la distancia a la que se encontrara del emisor pero me da una lectura fija de 219-220 por mucho que lo acerque al diodo... y cuando lo alejo simplemente pasa de 220 a cero a la que paso de cierta distancia (unos 10cm del emisor).
De receptor estoy usando un AR-IRRECEP que tenia de otro proyecto:
Este es el esquema en el que me he basado para el montaje sobre el que he aplicado algunos cambios:
-El led de "aviso" lo tengo conectado con una resistencia de 220 en lugar de 330.
-El emisor IR lo tengo conectado fijo a 5V y GND sin pasar por ningún Pin del Arduino, y con una resistencia de 220 también.
Y aqui el código que estoy usando:
// Sensor de luz infrarroja
#define LED 9 // led que parpadea al detectar luz IR
#define IRRe A0 // receptor IR conectado en la entrada A5
#define IREm 2 // emisor IR conectado en la entrada 2
int valor = 0; // guardo el valor obtenido por IRRe con el emisor encendido
// cuanto más cerca, mayor debería ser el valor
void setup()
{
// configuro entradas y salidas de los pines
pinMode(LED, OUTPUT);
pinMode(IRRe, INPUT);
pinMode(IREm, OUTPUT);
Serial.begin(9600);
}
void loop()
{
digitalWrite(IREm, HIGH); // Enciendo el emisor IR
valor = analogRead(IRRe); // Leo el valor recogido por el receptor
if ( valor > 0) { //si el valor es mayor a 0 hago parpadear el LED
digitalWrite(LED, HIGH);
Serial.print("\tCANTIDAD DE LUZ IR: ");
Serial.println(valor);
delay(100);
digitalWrite(LED, LOW);
delay(100);
}
else { //si el valor es 0 el LED queda apagado
digitalWrite(LED, LOW);
Serial.print("\tCANTIDAD DE LUZ IR: ");
Serial.println(valor);
}
}
A parte de que no me mide variaciones en la cantidad de luz que recibe, también veo que es algo lento al leer, es decir que tarda como 2 o 3 segundos en encenderse el led de aviso cuando paso el receptor por delante del emisor y por lo tanto solo me hace lectura si lo dejo quieto justo encima un rato.
¿Alguna idea de como solucionar todo esto?
Gracias!