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
- 1×Arduino Uno
- 1×Protoboard
- 1×Pantalla LCD 1602
- 1×Potenciómetro
- 1×Termistor NTC
- 2×Resistencia
- Cables de puente
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
| Componente | Se conecta a | Nota |
|---|---|---|
| Pantalla LCD | Igual que en la lección anterior | RS al 12, E al 11 y D4–D7 al 5, 4, 3 y 2 |
| Termistor, patilla 1 | 5V | |
| Termistor, patilla 2 | A0 | |
| 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
- Monta la pantalla como en la lección anterior.
- Añade el divisor de tensión: el termistor entre 5V y A0, y la resistencia de 10 kΩ entre A0 y GND.
- Sube el código.
- 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.