Tengo un circuito muy simple para detectar lecturas de luz ambiental con un arduino, pero estoy notando un patrón sinusoidal en las lecturas que recibo y es difícil precisarlas. ¿Cómo elimino el ruido para obtener una lectura más o menos constante?
Mi circuito es:
Mi código es simplemente:
int analogPin = 0;
int val = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
val = analogRead(analogPin);
Serial.println(val);
delay(33);
}
Grafiqué los resultados y se ve así, oscilando entre los valores de 175 y 110, en una escala que va de 0 a 1000 normalmente:
El período es de aproximadamente 8,5 segundos entre crestas, con bips descendentes aproximadamente una vez cada 1,4 segundos. Nada en la luz a mi alrededor explicaría esto obviamente ... ¿qué está pasando? ¿Cómo obtengo valores más consistentes?
Solución
Tomé muestras aleatorias en el transcurso del período de muestra y eso pareció ayudar mucho.
int analogPin = 0; // potentiometer wiper (middle terminal) connected to
analog pin 3
// outside leads to ground and +5V
int val = 0; // variable to store the value read
int maxwait = 200;
int varwait = 2000;
void setup()
{
Serial.begin(9600); // setup serial
}
void loop()
{
long sum = 0;
int count = 0;
int endTime = millis() + maxwait;
while(millis() < endTime){
sum += analogRead(analogPin);
count++;
delayMicroseconds(rand() % varwait);
}
Serial.println(sum / count);
}