Medir con precisión la temperatura con Arduino

10

Estoy tratando de construir un termostato con Arduino. Quiero alimentarlo usando la batería / cargador del teléfono móvil, lo que hace que el voltaje del sistema sea bastante variable. Ahora mismo uso Arduino Uno, pero una vez que esté completo, lo llevaré a Lilypad.

Primero traté de usar el sensor de temperatura TMP36 . Hasta ahora fue un completo fracaso. Si bien el sensor en sí parece ser muy estable, no puedo encontrar una manera de medir su voltaje con precisión.

El uso de la referencia de 5v incorporada para los sensores analógicos no funciona en absoluto, incluso con USB + 5V de arduino son en realidad + 4.8V (lo que cambia la temperatura medida en algunos grados). Cuando la placa se alimenta con la batería, el voltaje cae a aproximadamente 4 V y la temperatura se mide en los cohetes del cielo. También traté de usar + 3.3V del tablero como referencia. Parece ser más estable cuando la placa se alimenta desde USB, pero su voltaje disminuye cuando se ejecuta sin batería.

¿Hay alguna otra forma de medir de manera confiable el voltaje de salida del sensor?

Para la segunda etapa planeo usar termistores. Acabo de pedir un par de estos termistores 20K .

Por lo que entiendo, deberían ser más fáciles de medir con precisión si construyo un divisor de voltaje y uso V_in como voltaje de referencia para ADC.

Un par de preguntas sobre ellos:

  • ¿Tiene sentido usar pocos divisores de voltaje con diferentes resistencias fijas para aumentar la precisión?
  • Puedo usar el pin programable como V_in y medir la temperatura usando diferentes niveles de voltaje. Aunque no me queda claro si esto realmente aumentará la precisión.
pregunta Usov

5 respuestas

2

Parece que está al tanto del problema con el cambio de voltaje de referencia y si usa un dispositivo como el TMP36 (10mV / degC fijo) no puede hacer nada más que usar una referencia de voltaje de un chip para estabilizar las cosas.

Sin embargo, si está utilizando un RTD o un termistor, entonces el problema no surgirá. El ADC está realizando una medición radiométrica; compara la entrada del ADC con su voltaje de referencia, PERO, si alimenta el RTD o el termistor (a través de una resistencia adecuada) desde el mismo voltaje de referencia, no afectará las lecturas. Si la referencia aumenta un 10%, también lo hace el voltaje en el ADC.

    
respondido por el Andy aka
4

Creo que deberías considerar usar un sensor de temperatura digital como DS18B20 / DS18S20 porque no depende de la precisión de tu ATmega ADC para medir una señal de señalización, usa un protocolo digital de 1 cable para informar la temperatura.

Consulte los siguientes tutoriales
enlace
enlace

    
respondido por el alexan_e
3

Su medida será tan buena como la tensión de referencia para ADC es bueno. Arduino utiliza por defecto la tensión de alimentación como tensión de referencia, pero en su caso, la forma correcta de hacerlo sería utilizar el pin Aref de arduino. Tienes que obtener un chip especial llamado "Referencia de voltaje" y conectarlo al pin Aref, luego configurar ADC para usar la referencia externa en el código Arduino ( analogReference(EXTERNAL) )

El voltaje de la referencia debe seleccionarse de modo que la oscilación completa de su sensor de temperatura se ajuste al voltaje de referencia. TMP36 emitirá ~ 1.5V @ 100C, por lo que tendría que usar una referencia por encima de 1.5V para medir la temperatura hasta 100C. Desea que su referencia esté lo más cerca posible del voltaje máximo medido para obtener la mayor resolución posible.

Atmega328p tiene dos referencias internas que pueden usarse sin ningún componente externo. Uno es 1.1V, otro 2.56V. Por lo general, tienen una precisión un poco peor que la que obtendría al usar un componente externo dedicado. Consulte la documentación de Arduino para obtener la analogReference y la hoja de datos de Atmega328p para la precisión de referencia interna.

Si realmente desea obtener tuercas con diferentes rangos, puede usar varias referencias externas y cambiarlas usando un interruptor analógico como 74hc4051. O puede cambiar entre dos referencias internas.

Con los termistores obtendrá mejores resultados si configura una fuente de corriente constante en lugar de usar una resistencia tonta. Por otro lado, una resistencia tonta alimentada desde una referencia de voltaje estable funcionaría bien.

Al elegir una referencia externa, asegúrese de tener suficiente voltaje para adaptarse a su voltaje de desconexión cuando se alimenta de las baterías y las baterías están descargadas. Vref + Vdropout < Vbat-min.

    
respondido por el miceuz
2

No tener una referencia de ADC estable es en realidad un síntoma de otro problema en su circuito: no está suministrando un voltaje suficientemente alto a la placa. Esto se indica por el suministro de 5V a 4V y el descenso de 3.3V.

El regulador de voltaje (MC33269D-5.0 IIRC) en la placa Arduino tiene un voltaje de caída de ~ 1.0V, por lo tanto, debe suministrarlo con al menos 6V para obtener una salida estable de 5V. Las baterías AA comienzan a 1.5-1.6V y están casi agotadas a 1.1V, por lo que debe alimentar la placa con al menos 6 baterías AA para una salida estable durante toda la vida útil de la batería.

Alimentado correctamente, puede usar la referencia interna de ADC o las líneas de 5V o 3.3V. Dado que el sensor de temperatura varía aproximadamente 10 mV por grado Celcius, puede usar un divisor de voltaje para establecer el voltaje de referencia equivalente al voltaje de salida máximo esperado del sensor (por ejemplo, para 50 grados C). Esto le dará una medida más precisa.

Si desea usar menos de 6 baterías AA, pruebe un convertidor de refuerzo CC-CC, por ejemplo. enlace . El ejemplo vinculado toma 1V - 4V y hace 5V. La salida se alimenta directamente al pin de 5 V del Arduino, sin pasar por su regulador.

Para que la placa funcione más con las baterías, ponga la MCU en modo de reposo entre las lecturas del sensor. La biblioteca de bajo consumo de Rocketscream es excelente para este propósito. ¡Pero solo es realmente útil cuando se usa un regulador / convertidor de CC-CC eficiente, ya que el regulador estándar de Arduino usa 10 mA solo por sí mismo!

    
respondido por el geometrikal
1

Responda a la pregunta ¿Hay alguna otra manera de medir de manera confiable el voltaje de salida del sensor?

ADC utiliza el voltaje de referencia para la conversión de analógico a digital. Entonces, si hay un cambio en el voltaje de referencia, los valores convertidos (es decir, el valor digital) cambiarán. El valor digital será diferente para la misma entrada analógica si cambia el voltaje de referencia.

Una opción fácil es usar el voltaje de referencia interno dentro del Arduino (es decir, el controlador Atmega).

Vea el enlace a continuación donde se proporciona un código de muestra para usar el ADC interno (nombre de la función Arduino - analogReference (DEFAULT))

enlace

Creo que esto resolverá su problema y no hay necesidad de cambiar a termistores.

    
respondido por el robomon

Lea otras preguntas en las etiquetas