Arduino y termistor MF52
El MF52 es una familia de termistores, normalmente del tipo NTC (Negative Temperature Coefficient). Un termistor NTC cambia su resistencia dependiendo de la temperatura: cuando la temperatura aumenta, su resistencia disminuye. Por esta razón puede utilizarse con Arduino para construir un sensor de temperatura económico.
Es importante revisar las especificaciones exactas de tu termistor, porque no todos los MF52 tienen los mismos parámetros. Un modelo común es el MF52 NTC 10 kΩ a 25 °C, pero el parámetro Beta (β) puede variar según el fabricante y el modelo. Por ejemplo, existen versiones con β = 3470 y otras con β = 3950. Por lo tanto, el código debe utilizar el valor correspondiente al termistor que tienes.
¿Qué necesitas para desarrollar el proyecto?
- Una placa Arduino UNO, Nano o compatible.
- Un termistor MF52 NTC.
- Una resistencia fija de 10 kΩ, si tu termistor es de 10 kΩ a 25 °C.
- Una protoboard.
- Cables Dupont.
- Un cable USB para programar el Arduino.
La resistencia fija y el termistor forman un divisor de tensión. Arduino no mide directamente resistencia con una entrada analógica; mide tensión. Por eso primero se convierte el cambio de resistencia del termistor en un cambio de voltaje que Arduino puede leer mediante analogRead().
¿Cómo funciona un termistor MF52 NTC?
Un termistor es una resistencia cuyo valor depende de la temperatura. En un NTC ocurre lo siguiente:
- Temperatura baja: la resistencia aumenta.
- Temperatura alta: la resistencia disminuye.
- A 25 °C: un modelo NTC 10K tiene aproximadamente 10 kΩ.
Nota: La relación entre temperatura y resistencia no es lineal. Por eso no es correcto convertir directamente una lectura analógica utilizando simplemente una regla de tres. Una aproximación habitual utiliza la ecuación Beta del termistor.
La curva muestra el comportamiento típico de un termistor NTC: al aumentar la temperatura, la resistencia disminuye de forma no lineal.
Por ejemplo, utilizando estos parámetros:
- -20 °C: aproximadamente 105 kΩ.
- 0 °C: aproximadamente 33 kΩ.
- 25 °C: 10 kΩ.
- 50 °C: aproximadamente 3,6 kΩ.
- 100 °C: aproximadamente 0,7 kΩ.
La gráfica se ha calculado utilizando la ecuación Beta:
¿Qué es la constante Beta (β)?
La constante β describe la relación entre la resistencia de un termistor NTC y la temperatura.
Donde:
| Símbolo | Significado |
|---|---|
| T | Temperatura actual en Kelvin |
| | Temperatura de referencia en Kelvin |
| R | Resistencia actual del termistor |
| Resistencia nominal a la temperatura de referencia | |
| Constante Beta del termistor | |
| ln | Logaritmo natural |
¿Por qué se utiliza una temperatura de referencia?
Los fabricantes normalmente especifican la resistencia nominal del termistor a una temperatura determinada.
Por ejemplo: MF52-103
Normalmente significa:
Pero la ecuación no utiliza directamente grados Celsius. Debemos convertir la temperatura a Kelvin:
Por lo tanto
Entonces
Ejemplo con un MF52 de 10 kΩ
Por ejemplo: MF52-103
Con:
Y suponemos:
Ahora medimos una resistencia:
Aplicamos:
Primero calculamos la relación de resistencias:
Luego:
Entonces:
El resultado es aproximadamente:
Convertimos a Celsius:
Por lo tanto, un termistor MF52 de 10 kΩ que mide aproximadamente 5 kΩ puede estar cerca de: 44ºC
¿Cómo obtenemos la constante Beta?
Si conocemos dos puntos de funcionamiento del termistor, podemos calcular β.
La ecuación es:
Las temperaturas deben estar en Kelvin.
Supongamos:
| Temperatura | Resistencia |
|---|---|
| 25ºC | 10000Ω |
| 50ºC | 3588Ω |
Convertimos:
Entonces:
El resultado es aproximadamente:
Forma de conexión con Arduino
La conexión recomendada es un divisor de tensión:
Existen placas que ya traen el divisor de voltaje integrado:
La conexión física es:
- Un terminal del termistor MF52 → 5V de Arduino.
- El otro terminal del termistor → A0.
- Desde el mismo punto de A0 → una resistencia de 10 kΩ.
- El otro terminal de la resistencia → GND.
El termistor y la resistencia forman un divisor de tensión. Cuando el termistor se calienta, su resistencia disminuye y el voltaje del punto conectado a A0 también cambia. Arduino convierte ese voltaje en un valor digital mediante su ADC.
Código de ejemplo para Arduino
El siguiente ejemplo está pensado para un MF52 NTC de 10 kΩ a 25 °C y utiliza un valor Beta de 3950. Si tu termistor tiene otro valor Beta, debes cambiar la constante correspondiente.
const int PIN_TERMISTOR = A0;
// Características del termistor
const float RESISTENCIA_NOMINAL = 10000.0; // 10 kΩ a 25 °C
const float TEMPERATURA_NOMINAL = 25.0; // °C
const float BETA = 3950.0;
// Resistencia utilizada en el divisor de tensión
const float RESISTENCIA_DIVISOR = 10000.0;
void setup() {
Serial.begin(9600);
}
void loop() {
int lecturaADC = analogRead(PIN_TERMISTOR);
// Evita divisiones por cero
if (lecturaADC == 0) {
Serial.println("Error: lectura ADC igual a cero");
delay(1000);
return;
}
float resistenciaNTC =
RESISTENCIA_DIVISOR *
(float)lecturaADC /
(1023.0 - lecturaADC);
// Conversión de temperatura mediante la ecuación Beta
float temperaturaKelvin =
1.0 /
(
(1.0 / (TEMPERATURA_NOMINAL + 273.15)) +
(
log(resistenciaNTC / RESISTENCIA_NOMINAL)
/ BETA
)
);
float temperaturaCelsius = temperaturaKelvin - 273.15;
Serial.print("ADC: ");
Serial.print(lecturaADC);
Serial.print(" | Resistencia NTC: ");
Serial.print(resistenciaNTC);
Serial.print(" ohm | Temperatura: ");
Serial.print(temperaturaCelsius);
Serial.println(" °C");
delay(1000);
}
Explicación del código
Definir la entrada analógica
const int PIN_TERMISTOR = A0;
El termistor está conectado a la entrada analógica A0. Arduino UNO utiliza su ADC para convertir la tensión de la entrada en un valor numérico. En el Arduino UNO, una lectura normalmente está comprendida entre 0 y 1023.
Definir los parámetros del termistor
const float RESISTENCIA_NOMINAL = 10000.0;
const float TEMPERATURA_NOMINAL = 25.0;
const float BETA = 3950.0;
Estos valores describen el termistor:
RESISTENCIA_NOMINAL: resistencia nominal del termistor a la temperatura de referencia.TEMPERATURA_NOMINAL: temperatura de referencia, normalmente 25 °C.BETA: constante Beta del termistor.
La constante Beta es especialmente importante. Si tu MF52 tiene un valor diferente, por ejemplo 3470, debes utilizar ese valor. Usar un Beta incorrecto puede producir errores en la temperatura calculada.
Leer el voltaje mediante el ADC
int lecturaADC = analogRead(PIN_TERMISTOR);
Arduino no obtiene directamente los ohmios del termistor. Primero obtiene una lectura proporcional al voltaje existente en el punto intermedio del divisor.
Por ejemplo, si el termistor y la resistencia fija tienen valores similares, el punto intermedio estará aproximadamente en la mitad de la tensión de alimentación. El ADC devolverá entonces un valor cercano a la mitad de su rango.
Calcular la resistencia del termistor
float resistenciaNTC =
RESISTENCIA_DIVISOR *
(float)lecturaADC /
(1023.0 - lecturaADC);
La lectura ADC se convierte nuevamente en una resistencia utilizando la ecuación del divisor de tensión.
Para el circuito utilizado:
5V
│
R_NTC
│
├── VOUT
│
R_FIJA
│
GND
La relación utilizada es:
R_NTC = R_FIJA × ADC / (1023 - ADC)
Esta ecuación depende de la forma exacta en la que conectes el divisor. Si colocas la resistencia fija arriba y el termistor abajo, la fórmula cambia. Por eso el circuito y el código deben corresponderse.
Convertir la resistencia en temperatura
float temperaturaKelvin =
1.0 /
(
(1.0 / (TEMPERATURA_NOMINAL + 273.15)) +
(
log(resistenciaNTC / RESISTENCIA_NOMINAL)
/ BETA
)
);
La fórmula utiliza la ecuación Beta:
1/T = 1/T0 + (1/B) × ln(R/R0)
Donde:
- T: temperatura absoluta actual en Kelvin.
- T0: temperatura nominal de referencia en Kelvin.
- R: resistencia actual del termistor.
- R0: resistencia nominal del termistor.
- B: constante Beta.
- ln: logaritmo natural.
La temperatura se calcula inicialmente en Kelvin porque la ecuación termodinámica utiliza temperatura absoluta. Después se convierte a grados Celsius:
float temperaturaCelsius = temperaturaKelvin - 273.15;
Simulación del circuito
Del sitio oficial de https://docs.wokwi.com/parts/wokwi-ntc-temperature-sensor, podemos usar el simulador para ver el funcionamiento de este sensor.
Recomiendo copiar y pagar el código que realizamos en este post para que lo pueda comprobar.
Puntos importantes sobre el MF52
Comprueba el valor exacto de tu termistor
El nombre MF52 por sí solo no es suficiente para conocer con precisión todos los parámetros. Debes comprobar si el componente es, por ejemplo, un NTC 10K, qué valor de Beta tiene y cuál es su tolerancia.
Un MF52 NTC 10K con β = 3950 y otro MF52 NTC 10K con β = 3470 pueden producir resultados diferentes utilizando exactamente la misma fórmula.
Precisión de la medición
La precisión final depende de varios factores:
- La tolerancia del termistor.
- La tolerancia de la resistencia fija.
- El valor real de Beta.
- La precisión de la referencia de tensión de Arduino.
- La resolución del ADC.
- La temperatura ambiente y la estabilidad térmica.
- La calidad de la calibración.
Por este motivo, la ecuación Beta es una buena aproximación para proyectos educativos y de control de temperatura, pero para obtener una mayor precisión debes utilizar los parámetros específicos del fabricante o realizar una calibración. La relación resistencia-temperatura de un NTC es inherentemente no lineal.
Proyecto práctico recomendado
Un buen primer proyecto consiste en crear un termómetro digital con Arduino y un termistor MF52:
- El MF52 mide los cambios de temperatura.
- El divisor de tensión convierte la resistencia en voltaje.
- El ADC de Arduino convierte el voltaje en una lectura digital.
- El programa calcula la resistencia del termistor.
- La ecuación Beta convierte la resistencia en grados Celsius.
- El resultado se muestra en el Monitor Serie.
Después puedes ampliar el proyecto conectando una pantalla OLED, un LCD I2C, un relé para controlar un ventilador o un sistema de registro de datos. Si el objetivo es únicamente medir temperatura con mayor precisión y simplicidad, también existen sensores digitales como el DS18B20, pero el MF52 es especialmente interesante para aprender los fundamentos de los divisores de tensión, ADC, resistencia variable con la temperatura y modelado matemático de sensores.
Conclusión
El MF52 es una excelente forma de aprender cómo un sensor analógico funciona internamente. A diferencia de un sensor digital, Arduino no recibe directamente un valor como 25 °C. Primero mide una tensión, calcula una resistencia y posteriormente aplica un modelo matemático para obtener la temperatura.
La cadena completa del proyecto es:
Temperatura
↓
Resistencia del MF52 cambia
↓
Divisor de tensión
↓
Voltaje en A0
↓
ADC de Arduino
↓
Cálculo de resistencia
↓
Ecuación Beta
↓
Temperatura en °C