Tutorial ESP32 25/55 - Medición de temperatura utilizando NTC y LCD | Kit de aprendizaje IoT ESP32 de SunFounder
En este tutorial, aprenderemos cómo medir la temperatura utilizando un termistor de Coeficiente de Temperatura Negativo (NTC) y mostrar las lecturas en una pantalla LCD utilizando el microcontrolador ESP32. El proyecto implicará conectar un termistor NTC al ESP32 y usar una LCD para mostrar las lecturas de temperatura tanto en Celsius como en Fahrenheit. Esta es una excelente manera de comenzar con las técnicas de detección y visualización de temperatura utilizando la plataforma ESP32.
Estaremos utilizando la placa de expansión ESP32 de SunFounder, que mejora las capacidades del ESP32 con Wi-Fi y Bluetooth integrados. Esta placa se puede integrar fácilmente con varios sensores y pantallas, lo que la hace ideal para proyectos de IoT. El termistor NTC proporcionará lecturas de temperatura en función de su resistencia, que varía inversamente con la temperatura. Para más aclaraciones sobre la configuración y el código, asegúrate de consultar el video (en el video a las 00:00).
Hardware Explicado
Los componentes principales utilizados en este proyecto incluyen el microcontrolador ESP32, un termistor NTC, una resistencia y una pantalla LCD. El ESP32 funciona como la unidad central de procesamiento, manejando datos del termistor y controlando la pantalla LCD. El termistor NTC cambia su resistencia de acuerdo con la temperatura, lo que nos permite calcular la temperatura en función de la configuración del divisor de voltaje con una resistencia fija.
La pantalla LCD mostrará las lecturas de temperatura tanto en Celsius como en Fahrenheit. Utilizaremos el protocolo I2C para comunicarnos con la LCD, lo que simplifica el cableado al reducir el número de pines necesarios. El termistor NTC tiene una característica donde su resistencia disminuye con un aumento de temperatura, lo cual es crucial para nuestros cálculos.
Detalles de la hoja de datos
| Fabricante | SunFounder |
|---|---|
| Número de parte | Termistor NTC |
| Resistencia nominal | 10 kΩ |
| Valor Beta | 3950 K |
| Rango de temperatura | -40°C a 125°C |
| Paquete | Axial |
- Asegúrese de que el termistor esté clasificado para el rango de temperatura esperado.
- Utiliza una resistencia de 10 kΩ para el divisor de voltaje; de lo contrario, las lecturas serán inexactas.
- Verifique las conexiones para evitar cortocircuitos.
- Mantén la dirección I2C del LCD correcta (típicamente 0x27).
- Utilice niveles de alimentación apropiados para el ESP32 y los periféricos.
- Verifica que la tasa de baudios del monitor serie coincida con la configuración del código (115200).
Instrucciones de cableado


Para cablear los componentes, comienza conectando el termistor NTC al ESP32. El termistor no tiene polaridad, por lo que se puede conectar en cualquier dirección. Conecta un terminal del termistor al pin de tierra (GND) en el ESP32. El otro terminal se conecta a una resistencia de 10 kΩ, que luego se conecta al pin de 3.3V en el ESP32. La unión entre el termistor y la resistencia se conectará al pin.35en el ESP32, que leerá el voltaje para los cálculos de temperatura.
Para el LCD, conecta el pin de tierra (típicamente el segundo pin desde la parte superior) a GND en el ESP32. Luego, conecta el VCC (a menudo el primer pin) al pin de 5V en el ESP32. El pin SDA (usualmente el tercer pin) debe conectarse al pin21en el ESP32, y el pin SCL (a menudo el cuarto pin) debería conectarse al pin22Asegúrese de que todas las conexiones estén seguras y verifique nuevamente los números de pin para evitar errores.
Ejemplos de código y guía paso a paso
El código comienza definiendo las constantes para el termistor, incluyendo el número de pin, el voltaje de referencia y los valores de resistencia. La función de configuración inicializa la comunicación serial y establece el pin del termistor como una entrada.
const int thermistorPin = 35; // Pin connected to the thermistor
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // the 'other' resistor
El bucle principal lee el valor analógico del pin del termistor, calcula la resistencia y luego computa la temperatura en Celsius y Fahrenheit utilizando la ecuación del parámetro Beta. Los valores calculados se imprimen en el monitor serial.
int adcValue = analogRead(thermistorPin); // Read ADC value
float voltage = (adcValue * referenceVoltage) / 4095.0; // Calculate voltage
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // Calculate thermistor resistance
Finalmente, la temperatura se muestra en la pantalla LCD. Lalcd.print()La función se utiliza para mostrar los valores de temperatura, junto con el símbolo de grado.
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.write(223); // Degree symbol
lcd.print("C");
Este código actualiza efectivamente la LCD cada 300 milisegundos con las últimas lecturas de temperatura, lo que permite un monitoreo en tiempo real.
Demostración / Qué Esperar
Al ejecutar el código y completar el cableado, deberías ver las lecturas de temperatura mostradas en el LCD tanto en Celsius como en Fahrenheit. Si sostienes el termistor en tu mano, deberías notar que la temperatura aumenta a medida que la resistencia disminuye. Ten cuidado con la polaridad invertida y asegúrate de que las conexiones estén seguras, ya que un cableado incorrecto puede llevar a lecturas inexactas (en el video a las 04:50).
Marcas de tiempo del video
- 00:00 Comenzar
- 1:50 introducción al proyecto
- 5:32 cableado explicado
- Código NTC de Arduino para ESP32 explicado
- 13:38 Seleccionando la placa ESP32 y el puerto COM en Arduino IDE
- 15:20 Demostración de medición de temperatura NTC
- 17:34 temperatura NTC en LCD1602 con ESP32
- 18:42 Código NTC de Arduino con LCD explicado
- 21:15 Demostración de la temperatura en LCD
- 23:13 ¿LCD verde o LCD1601 azul?
/*
* // Definir constantes
*/
const int thermistorPin = 35; // Pin conectado al termistor
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // el 'otro' resistor
const float beta = 3950; // Valor beta (Valor típico)
const float nominalTemperature = 25; // Temperatura nominal para calcular el coeficiente de temperatura
const float nominalResistance = 10000; // Valor de resistencia a temperatura nominal
void setup() {
Serial.begin(115200); // Inicializar la comunicación serie
pinMode(thermistorPin, INPUT); // Establecer el pin como entrada
}
void loop() {
int adcValue = analogRead(thermistorPin); // Leer valor ADC
float voltage = (adcValue * referenceVoltage) / 4095.0; // Calcular voltaje
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // Calcular la resistencia del termistor con la configuración actualizada.
// Calcular la temperatura usando la ecuación del parámetro Beta.
float tempK = 1 / (((log(resistance / nominalResistance)) / beta) + (1 / (nominalTemperature + 273.15)));
float tempC = tempK - 273.15; // Obtener temperatura en Celsius
float tempF = 1.8 * tempC + 32.0; // Obtén la temperatura en Fahrenheit.
// Imprimir temperatura
printf("TempC: %.2f C\n", tempC);
printf("TempF: %.2f F\n", tempF);
delay(300); // Espera 1 segundo
}
/*
* Esta es la Lección 25/55 del kit de aprendizaje IoT ESP32 de SunFounder.
* Muestra la temperatura del NTC en la pantalla LCD.
* Escrito por Ahmad Shamshiri para el kit de aprendizaje IoT ESP32 de SunFounder.
* Mira el video completo en https://youtu.be/zJh-gWY0DmE
* Descarga este código, el diagrama de cableado y otros recursos en https://robojax.com/RJT707
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// SDA->21, SCL->22
LiquidCrystal_I2C lcd(0x27,16,2); // establecer la dirección LCD a 0x27 para una pantalla de 16 caracteres y 2 líneas
// Definir constantes
const int thermistorPin = 35; // Pin conectado al termistor
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // Valor de resistencia (10k)
const float beta = 3950; // Valor beta (Valor típico)
const float nominalTemperature = 25; // Temperatura nominal para calcular el coeficiente de temperatura
const float nominalResistance = 10000; // Valor de resistencia a la temperatura nominal
void setup() {
lcd.clear();
lcd.init(); // inicializar el lcd
lcd.backlight(); // Enciende la luz de fondo del LCD.
// Serial.begin(115200); // Iniciar la comunicación serie
pinMode(thermistorPin, INPUT); // Establecer el pin como entrada
}
void loop() {
int adcValue = analogRead(thermistorPin); // Leer valor ADC
float voltage = (adcValue * referenceVoltage) / 4095.0; // Calcular voltaje
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // Calcular la resistencia del termistor con la configuración actualizada.
// Calcular la temperatura utilizando la ecuación del parámetro Beta.
float tempK = 1 / (((log(resistance / nominalResistance)) / beta) + (1 / (nominalTemperature + 273.15)));
float tempC = tempK - 273.15; // Obtener temperatura en Celsius
float tempF = 1.8 * tempC + 32.0; // Obtener temperatura en grados Fahrenheit
// Imprimir temperatura
// printf("TempC: %.2f C\n", tempC);
// printf("TempF: %.2f F\n", tempF);
// Mostrar temperatura en el LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.write(223); // Símbolo de grado
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(tempF, 1);
lcd.write(223); // Símbolo de grado
lcd.print("F");
delay(300); // Espera 1 segundo
}
Common Course Links
Common Course Files
Recursos y referencias
-
DocumentaciónAprende sobre el termistor NTCdocs.sunfounder.com
-
DocumentaciónTutorial ESP32 25/55 - Página del documento de SunFounder para termómetro NTSdocs.sunfounder.com
Archivos📁
No hay archivos disponibles.