Saltar al contenido
Contenido de Arduino

Lección 1.12: Termómetro

Esta lección junta lo visto hasta ahora —una entrada analógica, un divisor de tensión y la pantalla de la lección anterior— para construir un termómetro que no necesita ordenador.

Material

Librerías

  • LiquidCrystal — incluida con el IDE

Cómo funciona

Un termistor NTC baja su resistencia al calentarse. En serie con una resistencia fija de 10 kΩ forma un divisor de tensión, y la tensión del punto medio, que lee A0, cambia con la temperatura.

De la lectura se despeja la resistencia del termistor. Con el termistor hacia 5V y la resistencia fija hacia GND: R = 10 000 × (1023 / lectura − 1).

La relación entre resistencia y temperatura no es lineal. Para temperaturas domésticas basta la ecuación del coeficiente beta: 1/T = 1/T₀ + ln(R/R₀)/B, con T en kelvin, R₀ = 10 kΩ a T₀ = 25 °C (298,15 K) y B, el coeficiente del termistor, que a menudo es 3950. Si necesitas más precisión, la ecuación de Steinhart-Hart afina el resultado con tres coeficientes.

Conexiones

ComponenteSe conecta aNota
Pantalla LCDIgual que en la lección anteriorRS al 12, E al 11 y D4–D7 al 5, 4, 3 y 2
Termistor, patilla 15V
Termistor, patilla 2A0
Resistencia de 10 kΩEntre A0 y GND

Código

// Termómetro con un termistor NTC de 10 kΩ y una pantalla LCD.
#include <LiquidCrystal.h>
#include <math.h>

const int SENSOR_PIN = A0;
const float R_FIXED = 10000.0;   // resistencia fija del divisor
const float R_NOMINAL = 10000.0; // termistor a 25 °C
const float T_NOMINAL = 298.15;  // 25 °C en kelvin
const float BETA = 3950.0;       // de la hoja de datos del termistor

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  lcd.begin(16, 2);
  lcd.print("Temperatura:");
}

void loop() {
  int reading = analogRead(SENSOR_PIN);
  if (reading <= 0 || reading >= 1023) return; // fuera de rango: revisa el montaje

  float resistance = R_FIXED * (1023.0 / reading - 1.0);
  float kelvin = 1.0 / (1.0 / T_NOMINAL + log(resistance / R_NOMINAL) / BETA);
  float celsius = kelvin - 273.15;

  lcd.setCursor(0, 1);
  lcd.print(celsius, 1); // un decimal
  lcd.print((char)223);  // símbolo de grado
  lcd.print("C    ");    // los espacios borran restos de lecturas más largas
  delay(500);
}

Qué hace el código

  • Las constantes del principio describen el montaje y el termistor: si el tuyo tiene otra B u otra resistencia nominal, solo se cambian ahí.
  • log() es el logaritmo natural, ln, en C++.
  • lcd.print(celsius, 1) escribe el número con un decimal: el montaje no da más precisión que esa.
  • (char)223 es el símbolo de grado en el juego de caracteres de la pantalla.

Paso a paso

  1. Monta la pantalla como en la lección anterior.
  2. Añade el divisor de tensión: el termistor entre 5V y A0, y la resistencia de 10 kΩ entre A0 y GND.
  3. Sube el código.
  4. Sujeta el termistor entre los dedos y observa cómo sube la temperatura.

Resultado

La pantalla muestra la temperatura con un decimal y se actualiza dos veces por segundo. Al calentar el termistor con los dedos, sube unos grados.

Si no funciona

  • Si la temperatura baja al calentar, el termistor y la resistencia están intercambiados en el divisor: cámbialos de sitio o usa R = 10 000 / (1023 / lectura − 1).
  • Si la lectura se desvía unos grados de un termómetro de referencia, ajusta BETA y R_NOMINAL con los datos de tu termistor.
  • Si la pantalla no muestra nada, vuelve a la lección anterior: el problema está en su cableado o en el contraste.