Lectura de datos armónicos inusuales desde un fototransistor en una configuración arduino simple

1

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:

simular este circuito : esquema creado usando CircuitLab

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);
}
    
pregunta AdamSpurgin

1 respuesta

2

La razón es probablemente un efecto de aliasing de su frecuencia de muestreo con la frecuencia de línea que alimenta algunas luces fluorescentes o LED.

Por ejemplo, Si la frecuencia de muestreo es casi un múltiplo de 50 o 60 Hz (dependiendo de su sistema de energía eléctrica), pero no exactamente: si la diferencia entre la frecuencia de muestreo y el múltiplo de la frecuencia de la línea de alimentación es solo 1 / 8.5s = 0.118 Hz, obtendrá esta sinusoidal respuesta.

Vea la siguiente imagen tomada de Muestreo de funciones sinusoidales :

La línea roja sinusoidal representa la variación de la intensidad de luz por la frecuencia de línea (50 / 60Hz).
La línea azul sinusoidal representa tu salida.
Los puntos negros representan sus eventos de muestreo (también funciona si están aún más dispersos como se muestra en la imagen; es decir, por ejemplo, el muestreo en cada n-ésimo período).

    
respondido por el Curd

Lea otras preguntas en las etiquetas