Medir temperatura con Arduino y termistor (MF52)


arduino-termistor

¿Qué es un termistor?

Un termistor es un dispositivo cuya resistencia varia al variar la temperatura. Podemos emplear esta variación de la resistencia para realizar una medición de la temperatura ambiente.

Un termistor está formado por un semiconductor como óxido férrico, el óxido de níquel, o el óxido de cobalto. Al aumentar la temperatura, varia la concentración de portadores, por lo que varía la resistencia del dispositivo.

Existen dos tipos de termistores,

  • NTC, tienen una resistencia inferior al aumentar la temperatura
  • PTC, tienen una resistencia superior al aumentar la temperatura (también llamado posistor)

siendo más habituales los termistores de tipo NTC.

Los termistores son dispositivos baratos, pequeños, duraderos, con un rango de medición relativamente amplio, considerablemnete precisos y rápidos, y poco susceptibles al ruido. Esto hace que sean ampliamente empleados en la medición de temperatura en climatización, almacenamiento de líquidos, y automoción.

Anuncio:

La mayor desventaja de los termistores es su fuerte comportamiento no lineal. Esto no es tan problema, dado que disponemos de modelos matemáticos bien conocidos que permiten calcular con precisión la medición de temperatura. Sin embargo, nos obligan a emplear necesariamente números en coma flotante y cálculos logarítmicos, que deben ser evitados en procesadores dado que ralentizan la ejecución significativamente.

Precio

Los termistores son dispositivos muy baratos. Podemos encontrar 10 termistores MF52 por 1€ en vendedores internacionales en Ebay, gastos de envío incluidos.

arduino-termistor

¿Cómo funciona un termistor?

Como hemos comentado, la relación entre temperatura y resistencia en un termistor es fuertemente no lineal. La siguiente gráfica corresponde muestra esta relación para un termistor de la familia MF52 y Rnominal 10 kOhm.

arduino-termistor-grafica

Lógicamente, cada familia y modelo de termistor presenta una gráfica distinta, pero el comportamiento es similar.

Existen varios modelos matemáticos para aproximar el comportamiento de un termistor, más o menos complejos. El modelo de Steinhart-Hart es una aproximación de tercer orden, ampliamente empleado, dado por la siguiente ecuación,

T_s_h = \frac{1}{A + B \cdot log \left( R \right) + C \cdot \left( log \left(R  \right) \right)^3}


Si queremos incluir la corrección por autocalentamiento, podemos incluir la siguiente ecuación al modelo.

T = T_s_h - \frac{V^2}{k \cdot R}


Con el empleo de estas ecuaciones el error debido al modelo matemático es inferior a 0,005ºC, para todo el rango de temperaturas de medición (de -30 a 110 ºC). Por tanto, introduce un error que resulta despreciable frente al resto de factores, como la tolerancia de las resistencias, del propio termistor, o la aritmética de coma flotante.

Esquema eléctrico

El esquema eléctrico sería el siguiente.

arduino-termistor-esquema

Montaje

Por su parte, el montaje eléctrico en una protoboard quedaría de la siguiente manera.

arduino-termistor-montaje

Ejemplos de código

A continuación un ejemplo de código. El siguiente código realiza la lectura de la resistencia del termistor, y emplea la ecuación de Steinhart-Hart para calcular la temperatura y mostrarla por puerto serie.

Los valores A, B y C empleados están calibrados para una resistencia MF52 10kOhm, y deberán ser cambiados para otro tipo de termistores.

En ocasiones, podemos obtener estos valores directamente del Datasheet del componente. Sin embargo, resulta frecuente que únicamente se proporcione un valor Beta, correspondiente con un modelo de menor precisión que Steinhart-Hart. En estos casos, debemos obtener los valores A, B y C por ajuste de la tabla de resistencias y temperaturas del sensor.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección Tutoriales de Arduino

Anuncio:

Previous Desactivar thumbs.db en Windows 7 y 8
Next Arduinos baratos gracias al chip CH340G
1000
10 Comment threads
1 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
10 Comment authors
newest oldest
Jesus

Muy interesante e ilustrativo, muchísimas gracias.

Ekaitz

Hola, he leido varios de tus tutoriales y me ha parecido que tienen un gran nivel, están cuidados y con información suficiente, aunque, y lo digo por propia experiencia, siempre hay algo que se queda en el tintero. He trabajado varios años en empresas de metrología e instrumentación, y para la medida de temperatura con un esquema como el de tu artículo lo mejor sin duda es un sensor PT100. Está hecho de hilo de platino y encapsulado en una pequeña ampolla de vidrio de alrededor de 2 mm de diametro, y su principal ventaja es que es prácticamente lineal… Read more »

luisllamas

Hola Ekaitz.

Tienes razón, se me había cortado el último párrafo. Ya está arreglado. ¡Gracias por el aviso!

También agradecerte tu comentario, que por cierto es muy interesante. En un futuro escribiré sobre otros sensores para medir temperatura. He empezado por los termistores porque son realmente asequibles (0,10€). Pero me parece buena idea hacer uno sobre una RTD como la PT100, que como bien dices actualmente también son muy baratos.

¡Un saludo!

Osqui

Hola. ¿La librería «math.h» usada en el código es la que viene de serie con avr-gcc? En ese caso entiendo que no habría que instalarla ex-profeso, ¿verdad? Pero entonces ¿en placas ARM (Zero, Due…) habría alguna librería equivalente? Gracias!

luisllamas

Lógicamente, cada termistor tiene una curva distinta. Si usas otro modelo (en tu caso el NTCLE100E3) tendrás que acudir al datasheet correspondiente

Pablo

Hola, me encantan tus tutoriales! Mi duda es sobre tu libreria «mean filter».
Me pareceria muy interesante para medir el promedio de dos sondas en un mismo arduino pero nose muy bien como usarla. Intento copiarme el ejemplo pero como alli tienes unos valores predefinidos nose en que parte debo declarar la variable mia ni que parte del codigo debo usar. Tambien la tienes en el void setup y yo deberia colocarla en el void loop.
Me gustaria si pudieses explicarla un poco mas como si para un novato se tratara.
Muchas gracias! Esperi haberme explicado bien

Instrumentada

Gracias, me salvaste en un laboratorio de instrumentación. Eres el mejor

Vanessa

Hola. Muchas gracias por el artículo. Cómo me recomiendas seleccionar la Resistencia fija Rb? Saludos!!!

Alejandro Lopera

Hola, un saludo, esta muy interesante el articulo, me queda una duda, en el código de Arduino:
float kelvin = R_th – V*V/(K * R)*1000; porque multiplican al final * 1000? muchas gracias.

Ignacio

Quiero saber cómo se saca el valor de a,b y c ?