Datos del sensor Arduino erráticos

0

Soy un novato que solo me moja los pies en EE, así que no me molestes, por favor. Compré un Arduino Uno y he estado aprendiendo toneladas en las últimas dos semanas. Tomé un sensor LM35, un termistor genérico (usando un resistor de 10kohm), un resistor dependiente de la luz (¿fotorresistor?) (Usando un resistor de 10k), un botón (usando el resistor interno Arupino) y un par de LED (con resistencias de 220ohm) ), y las conecté todas a mi Uno. Puedo proporcionar un diagrama, pero no sospecho que importe mucho. Básicamente, algunos comparten el mismo terreno, y otros comparten el mismo 5v.

Estoy notando que los datos de temperatura del LM35 y del termistor son muy erráticos. Varía todo solo, más cuando presiono el botón. He leído muchas publicaciones en el foro que dicen que estos tipos de sensores necesitan un regulador de voltaje para ser precisos, así que aquí está mi pregunta: ¿es probable que la causa de mis datos erráticos del sensor se deba a que el suministro de mi Arduino no es lo suficientemente constante? que se está hundiendo o clavar?

Si es así (o si no), ¿cuál es la solución a este problema? ¿Debo comprar una de esas pequeñas fuentes de alimentación de tablero de pan de 5 voltios?

Actualización: Ok, aquí hay un diagrama. Es un día orgulloso para mí, ¡este es mi primer esquema de circuito!

YaquíhayungráficodelaslecturasdeLM35.Soloseleeunavezcada9segundos.Soloestásentadoenelescritoriodemioficina,nohayningúncalentadorcercaninada.Ahora,elgráficonoeslecturasanalógicasenbruto,sinotemperaturaF.Perolaslecturasanalógicasenbrutoestánentodoelmapa,incluyendo116,107,90,145,129,etc.Nosedistraigaconlasmatemáticasanalógicasydetemperatura,nomeimportalaprecisión,soloquieroparaserestable!

Actualización 2: El fotorresistor y el termistor tienen una lectura muy consistente, solo el LM35 está en todo el mapa.

    
pregunta user3629081

4 respuestas

0

Para ser honesto, no puedo recordar cuán preciso es el LM35 en el mejor de los casos.

Pero un algoritmo muy conocido que se utilizará (especialmente con sensores 'erráticos') es usar el 'promedio móvil' de las últimas x mediciones. Esto significa que tomas el promedio de los últimos x valores. Si obtiene un nuevo valor de sensor, vuelva a tomar el promedio de los últimos valores de x (esa es la parte 'móvil').

Esto hará que la temperatura con el tiempo se vuelva mucho más suave. ¿Qué x es que puedes definirte a ti mismo. Para una x grande, obtienes un poco de 'retraso' porque necesitas primero x mediciones. Pero mi sospecha es que si tomas para x entre 5 y 10 verás muchas mejoras.

Otra adición es eliminar los valores que sabes que no pueden ser ciertos (picos muy altos o muy bajos).

Si no tiene en cuenta los valores de picos y toma el promedio de las últimas x mediciones, obtendrá un valor mucho mejor.

Parece que hay incluso una biblioteca de Arduino para eso (está llamando promedio), consulte aquí.

    
respondido por el Michel Keijzers
0

Mucho mejor que el promedio es un filtro digital de paso bajo muy simple.

LPF_DEPTH_SHIFT tan grande como reacción más lenta a los cambios (filtro inferior "frecuencia"). Recuerde que LPF_data tiene que adaptarse (valor máximo) < < LPF_DEPTH_SHIFT. Debes elegir el tipo adecuado.

#define LPF_DEPTH_SHIFT   3

unsigned int LPF_data = UINT_MAX;

unsigned int lowpassfilter(unsigned int value)
{
    unsigned int v = LPF_data >> LPF_DEPTH_SHIFT;
    if(LPF_data == UINT_MAX)
        LPF_data = value << LPF_DEPTH_SHIFT;
    LPF_data -= v;
    LPF_data += value;
    return LPF_data >> LPF_DEPTH_SHIFT;
}
    
respondido por el P__J__
0

Puede RC filtrar el dispositivo como una alternativa a la compra de un regulador. La hoja de datos muestra que el IC puede funcionar a 4V y usted está suministrando 5V. También establece que el consumo máximo de corriente es de alrededor de 100 uA, asumiendo que no está cargando la salida que probablemente no sea su arduino a menos que esté muestreando lo más rápido posible. Por margen de seguridad, supongamos que el IC puede consumir hasta 1000 uA.

5V-4V = 1V 1V / 1000uA = 1k ohm

Aplique el capacitor más grande que pueda razonablemente después de la resistencia y directamente a través de las entradas de alimentación del IC y tendrá un suministro mucho más limpio. Enlace de simulación a continuación.

Falstad Sim

    
respondido por el lucky bot
-1

Determine si el ruido está correlacionado o es aleatorio.

Le ayudará si captura un montón de datos y los grafica. La frecuencia y el tipo de ruido pueden ser muy importantes. Si tiene un ruido "aleatorio", es fácil filtrarlo en el software siempre que esté muestreando su ADC lo suficientemente rápido. Si tiene un ruido correlacionado, lo que básicamente significa que el ruido cambia con la señal que está tratando de medir, puede ser más difícil.

Entonces, para responder a su pregunta original, para determinar si el ruido se debe a las fluctuaciones de la fuente de alimentación, conectaría otro pin ADC en el Arduino a la fuente de alimentación (a través de un divisor de resistencia) y lo muestrearía al mismo tiempo que el sensor Si traza datos para ambos, será muy claro si el ruido está correlacionado.

Si están correlacionados, una opción sería mantener el ADC de suministro en su diseño y restarlo de la lectura del sensor, dando una lectura casi diferencial.

Si no están correlacionados, es probable que el ruido provenga de otra cosa. En ese caso,

  • ¿Cuánto tiempo están conectados los cables al sensor?
  • ¿Tiene alguna tapa de filtro en el sensor remoto?

Además, esta es una excelente herramienta que uso con frecuencia para diseñar rápidamente filtros de software: enlace . Generará un código fuente para usted. . (Para Arduino, ¡asegúrate de establecer el formato del número en entero!)

    
respondido por el TuxRobotics

Lea otras preguntas en las etiquetas