medir-temperatura-con-arduino-y-termistor-mf52

Medir temperatura con Arduino y termistor (MF52)

¿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, considerablemente 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.

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-termistor1

¿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,

Si queremos incluir la corrección por auto-calentamiento, podemos incluir la siguiente ecuación al modelo.

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.

#include <math.h>

const int Rc = 10000; //valor de la resistencia
const int Vcc = 5;
const int SensorPIN = A0;

float A = 1.11492089e-3;
float B = 2.372075385e-4;
float C = 6.954079529e-8;

float K = 2.5; //factor de disipacion en mW/C

void setup()
{
  Serial.begin(9600);
}

void loop() 
{
  float raw = analogRead(SensorPIN);
  float V =  raw / 1024 * Vcc;

  float R = (Rc * V ) / (Vcc - V);
  

  float logR  = log(R);
  float R_th = 1.0 / (A + B * logR + C * logR * logR * logR );

  float kelvin = R_th - V*V/(K * R)*1000;
  float celsius = kelvin - 273.15;

  Serial.print("T = ");
  Serial.print(celsius);
  Serial.print("C\n");
  delay(2500);
}

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.

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. github-full