VictorJAM.zapto.org
Electrónica  Arduino 

2025-12-02

Leyendo una NTC

Un termistor es una resistencia variable cuyo valor depende de la temperatura.

En realidad, en todos los conductores, la resistencia depende en mayor o menor medida de la temperatura, pero en el caso de los termistores este cambio se produce de manera mas acusada, llegando a poder utilizarse para medir temperatura.

Existen dos tipos de termistores: PTC (Coeficiente de temperatura positivo) y NTC (Coeficiente de temperatura negativo). En el primer caso a mayor temperatura mayor resistencia. En el caso de las NTC a mayor temperatura menor resistencia.

El mayor problema de estos componentes es que su comportamiento no es lineal y la relación temperatura/resistencia hace una curva la cual hay que aproximar de alguna forma. Hay dos aproximaciones matemáticas a la curva: el método de Steinhart y el método de la Β (beta).

En todas la fórmulas de las que vamos a hablar la temperatura se suele dar en grados Kelvin.

Para pasar de °C a °K debemos sumar 273.15, para el proceso contrario hemos de restar.

Método Steinthart

El método de Steinhart es el modelo mas preciso que hay y es el que menos error comete. La fórmula es la siguiente:

T = 1 A   +   B log R   +   C log R 3

Donde T es la temperatura que queremos saber; R es la resistencia que conocemos y A,B,C son los llamados coeficientes de Steinhart.

Lo malo de estos coeficientes es que si no nos lo dan en la hoja de datos hay que calcularlos haciendo mediciones a distintas temperaturas y anotando los valores de resistencia y resolviendo el sistema de tres ecuaciones con tres incógnitas, la verdad, un poco engorroso.

En la Wikipedia podemos encontrar la solución a este sistema de ecuaciones y dejo aquí una calculadora a la cual hay que pasarle la temperatura y el valor de resistencia. Dichos valores conviene sacarlos en tres rangos donde queremos que opere la NTC para obtener los mejores resultados.

Calculadora ABC

T1 °C   R1 Ohm
T2 °C   R2 Ohm
T3 °C   R3 Ohm
 
A
B
C
 

Método de la Beta

Aunque la fórmula de Steinhart es la más precisa para rangos pequeños de temperatura suele usarse la fórmula de la Beta. Entre otras cosas porque cuando compramos un termistor es casi usual que el fabricante/vendedor nos de el valor de Beta, por ejemplo: termistor NTC 10K B 3950.

R=R0·eβ(1T-1T0)

En esta fórmula no necesitamos casi nada, solo debemos saber el valor de Β que ya nos los da el fabricante, y los valores R0 y T0 que es un valor conocido de resistencia y temperatura, que nos suele también dar el fabricante para caracterizar a la NTC y suele ser la resistencia a una temperatura de 25°C.

T=11T0+1βlnRR0

Divisor de tensión

El circuito más simple para medir una NTC es un divisor de tensión.

Colocando una resistencia de valor conocido en serie con la NTC se producirá una caída de tensión que dependerá de la alimentación y del valor de la NTC.

La caída de tensión la podemos medir vía polímetro o con la entrada ADC de un microcontrolador y si hacemos cálculos obtendremos que el valor de la resistencia es:

R=RC·V0Vcc-V0

Una vez que tenemos el valor de la resistencia ya podemos calcular el valor de la temperatura con cualquiera de los dos métodos. Dejo aquí un ejemplo de código:

// Elementos del circuito.
const float VCC = 5.0;
const float RC = 10000.0;

// Parámetros para ecuación de la Beta.
const float BETA = 3950;
const float T0 = 25+273.15;
const float R0 = 10000;

// Parámetros para ecuación de Steinhart
const float A = 1.11492089e-3;
const float B = 2.372075385e-4;
const float C = 6.954079529e-8;

// Lee el pin analógico y devuelve el valor de la resistencia
// NTC
float readNTC(int pin) {
  int raw = analogRead(pin);
  float v = raw*5.0 / 1024.0;
  float r = (v*RC)/(VCC-v);
  return r;
}

// Calcula la temperatura en Celsius para un valor de resistencia
// Usando la ecuación de la beta.
float Beta(float r) {
  return (1 / ( (1/T0)+(1/BETA)*log(r/R0) ) )-273.15;
}

// Calcula la temperatura en Celsius 
// Usando la ecuación de Steinhart.
float steinhart(float r) {
  float logr = log(r);
  return  ( 1 / ( A + B*logr + C*logr*logr*logr ) ) -273.15;
}

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

void loop() {
  Serial.print(readNTC(A0));
  Serial.print(F(" "));
  Serial.print(Beta(readNTC(A0)));
  Serial.print(F(" "));
  Serial.println(steinhart(readNTC(A0)));
  delay(1000);
}

Un circuito de pruebas

Una de mis mayores preocupaciones siempre ha sido el ruido eléctrico y he estado investigando un circuito que recomiendan para proteger la entrada analógica de un microcontrolador.

En este circuito se usa un cable de par trenzado para conectar la NTC al circuito general, usando una resistencia conocida RC.

Los diodos D1 y D2 se usan para proteger de picos de tensión que entren por el pin y se suelen llamar diodos clamping. Unos 1n4148 pueden funcionar relativamente bien, aunque es recomendable usar diodos Schottky (BAT42 o similar).

La resistencia RF tiene dos funciones, por un lado limita la corriente que pueda llegar al pin, que generalmente será del orden de los µA pero en caso de transitorios puede aumentar drásticamente. Por otro lado, junto al condensador C forma un filtro RC paso bajo, que limitará los ruidos de frecuencias altas.

Ninguno de los componentes afecta a la señal a medir y no hay que hacer cálculos extras.

Opcionalmente se podría poner un diodo TVS en paralelo con la NTC.

Gráfica de resistencia y tensión vs tempetarura.

En esta gráfica podemos observar como se comporta la resistencia con la temperatura y el valor de tensión que dedebría haber en el ADC de un microcontrolador (usando una tensión de 5V y una resistenca en serie de 10K).

Se ha usado una MF52 con una Β de 3950.

Referencias

Medir temperatura con Arduino y termistor (MF52)

NTC Calculator