Este tutorial es parte de: Sensor digital de humedad relativa y temperatura HTU21D
Vídeos relacionados con el sensor digital de humedad relativa y temperatura HTU21D. Encontrará enlaces a otros vídeos debajo de este artículo.
Mostrando la temperatura de un HTU21D en un LCD
En este tutorial, aprenderemos cómo mostrar las lecturas de temperatura del sensor de temperatura y humedad HTU21D en un LCD. El resultado será una configuración funcional donde la temperatura se podrá ver en grados Celsius, Fahrenheit y Kelvin, junto con la humedad relativa mostrada en la misma pantalla. Este proyecto te dará experiencia práctica con la comunicación I2C y el manejo básico de datos de sensores. Para una guía visual detallada, asegúrate de ver el video (en el video a las 00:00).

Hardware Explicado
Los componentes principales para este proyecto incluyen el sensor HTU21D y la pantalla LCD. El HTU21D es un sensor digital de humedad y temperatura que se comunica a través del protocolo I2C. Proporciona mediciones precisas de temperatura en grados Celsius o Fahrenheit y humedad relativa como un porcentaje. El sensor opera típicamente a un voltaje de 3.3V, pero también puede funcionar con sistemas de 5V. La pantalla LCD que utilizaremos es una LCD de 16x2 con una interfaz I2C. Este tipo de pantalla requiere solo dos cables para la comunicación de datos, lo que facilita la conexión con microcontroladores como Arduino. La interfaz I2C permite conectar múltiples dispositivos en el mismo bus, simplificando el cableado y reduciendo el número de pines utilizados.
Detalles de la hoja de datos
| Fabricante | Adafruit |
|---|---|
| Número de parte | HTU21D-F |
| Voltaje de lógica/IO | 3.3 V (típ.) |
| Voltaje de suministro | 1.5 V a 3.6 V |
| Corriente de salida | 0.5 mA (típ.) |
| Corriente de pico | 1.5 mA (máx.) |
| Rango de temperatura | -40 a 125 °C |
| Rango de humedad | 0 a 100 %HR |
| Paquete | DFN-6 |
| Notas / variantes | None |
- Asegúrese de que los niveles de voltaje sean correctos para evitar daños al sensor.
- Utiliza resistencias pull-up en las líneas SDA y SCL si es necesario.
- Verifique la dirección I2C con un escáner para asegurar una configuración correcta.
- Maneja la salida del sensor con cuidado para evitar errores de lectura.
- Mantenga el sensor alejado de fuentes de calor al tomar mediciones.
Instrucciones de cableado

Para conectar el sensor HTU21D al Arduino, conecta el pin VCC del sensor a la salida de 3.3V del Arduino. A continuación, conecta el pin GND del sensor a la tierra del Arduino. El pin SDA, que se utiliza para la transmisión de datos, debe conectarse al pin A4 del Arduino. De manera similar, conecta el pin SCL, que se utiliza para la señal de reloj, al pin A5 del Arduino. Asegúrate de que tu LCD esté conectado correctamente también; la dirección I2C para el LCD en esta configuración es típicamente 0x3F. Si estás utilizando un tipo diferente de LCD o una dirección I2C diferente, asegúrate de ajustar el código en consecuencia. Después de cablear, asegúrate de comprobar si hay conexiones sueltas antes de encender el Arduino.
Ejemplos de código y guía paso a paso
En el código, comenzamos incluyendo las bibliotecas necesarias para el sensor HTU21D y el LCD:
#include
#include "Adafruit_HTU21DF.h"
#include
Esto configura el entorno para usar tanto el sensor como la pantalla. La biblioteca `Adafruit_HTU21DF` maneja la funcionalidad del sensor, mientras que la biblioteca `LiquidCrystal_I2C` gestiona el LCD. A continuación, creamos una instancia tanto para el sensor como para el LCD:
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
LiquidCrystal_I2C lcd(0x3F, 16, 2);
Aquí,htues el objeto para el sensor HTU21D, ylcdes el objeto para la pantalla LCD. La dirección I2C para la LCD está configurada en 0x3F, que puede que necesites verificar según tu configuración.setup()función, inicializamos el LCD y comprobamos si el sensor está en funcionamiento:
void setup() {
lcd.begin();
lcd.backlight();
if (!htu.begin()) {
lcd.print("Sensor missing");
while (1);
}
lcd.print("HTU21D Ready");
}
Este código inicializa la LCD y verifica la presencia del sensor. Si no se detecta el sensor, mostrará "Sensor faltante" y detendrá el programa.loop()función, continuamente leemos los valores de temperatura y humedad y los mostramos:
void loop() {
lcd.clear();
lcdDisplay(0, 0, "Celsius: ", 10, 0, getHTU('C'), 'd');
lcdDisplay(0, 1, "Humidity: ", 10, 1, getHTU('H'), '%');
delay(5000);
}
En este fragmento, borramos el LCD, luego llamamos allcdDisplay()función para mostrar la temperatura en grados Celsius y la humedad. LagetHTU()la función recupera la temperatura o la humedad según el carácter pasado.
Demostración / Qué Esperar
Cuando la configuración esté completa y el código se haya subido al Arduino, el LCD debería mostrar la temperatura actual en Celsius y la humedad relativa. Si todo está conectado correctamente, verás que los valores se actualizan cada pocos segundos. Ten cuidado con trampas comunes, como conexiones invertidas o direcciones I2C incorrectas, que pueden llevar a fallos en la comunicación del sensor (en el video a las 05:00).
Marcas de tiempo de video
- 00:00- Introducción
- 01:30- Instrucciones de cableado
- 03:15- Explicación del código
- 04:50- Demostración
- 05:40- Conclusión
Este tutorial es parte de: Sensor digital de humedad relativa y temperatura HTU21D
- Lección 35-1: Uso del sensor de temperatura HTU21D
- Lección 35-2: Uso del sensor de temperatura HTU21D - Código personalizado
- Lección 35: Uso del sensor de temperatura HTU21D con Arduino
- Lección 36: Uso del sensor de temperatura HTU21D con un LCD Curso paso a paso de Arduino
- Uso de dos sensores de humedad y temperatura HTU21DF más con Arduino
- Mostrando la temperatura de un HTU21D como un gráfico de barras en un LCD
- Cómo usar el sensor de humedad y temperatura HTU21DF con Arduino (Código básico)
- Cómo utilizar el sensor de humedad y temperatura HTU21DF con Arduino (código personalizado)
/*
* Visualización de la temperatura del HTU21DF en LCD1602-I₂C o LCD2004
* Actualizado por Ahmad Shamshiri el 13 de julio de 2019
* en Ajax, Ontario, Canadá
* Vea las instrucciones en video para este boceto:
*
* Este es un ejemplo del sensor de humedad y temperatura HTU21D-F
*
* Diseñado específicamente para funcionar con el sensor HTU21D-F de Adafruit
* ----> https://www.adafruit.com/products/1899
*
* Estas pantallas utilizan I₂C para comunicarse. Se requieren 2 pines para la interfaz.
*
* Mira el video "Introducción al servo 360" con el código: https://youtu.be/b_xvu6wWafA
* Puedes obtener el diagrama de cableado en mi curso de Arduino en Udemy.com.
* Aprende Arduino paso a paso con todas las bibliotecas, códigos y diagramas de cableado, todo en un solo lugar.
* Visita mi curso ahora: http://robojax.com/L/?id=62
*
* Si este tutorial te resultó útil, por favor, apóyame para que pueda seguir creando contenido como este.
* o haz una donación a través de PayPal: http://robojax.com/L/?id=64
*
* El código está disponible en: http://robojax.com/learn/arduino
*
* Este código se proporciona "tal cual", sin garantía ni responsabilidad. Su uso es gratuito siempre que conserves esta nota. Este código se ha descargado de Robojax.com.
* Este programa es software libre: puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia o (a su elección) cualquier versión posterior.
*
* Este programa se distribuye con la esperanza de que sea útil, pero SIN GARANTÍA ALGUNA; ni siquiera la garantía implícita de COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la Licencia Pública General de GNU para obtener más detalles.
*
* Debería haber recibido una copia de la Licencia Pública General de GNU junto con este programa. De no ser así, consulte <https://www.gnu.org/licenses/>.
*/
#include <Wire.h>
#include "Adafruit_HTU21DF.h"
// Conecte Vin a 3-5 VCC
// Conecte GND a tierra
// Conecte SCL al pin de reloj I2C (A5 en UNO)
// Conecte SDA al pin de datos I2C (A4 en UNO)
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
// Inicio de la configuración para LCD1602 con I2C
#include <LiquidCrystal_I2C.h>
// Establezca la dirección LCD en 0x27 para una visualización de 16 caracteres y 2 líneas
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// Fin de la configuración para LCD1602 con I2C
void setup() {
lcd.begin();
lcd.backlight();
if (!htu.begin()) {
lcd.print("Robojax HTUD1DF");
lcd.setCursor(0,1);
lcd.print("sensor missing");
while (1);
}else{
// inicializar la pantalla LCD
lcd.print("Robojax HTUD1DF");
lcd.setCursor(0,1);
lcd.print("Demo");
}
delay(2000);
}
void loop() {
lcd.clear(); // borrar valores anteriores de la pantalla
lcdDisplay(
// Para imprimir en grados Celsius:
0, // personaje 0
0, // línea 0
"Celsius: ",
// para imprimir Celsius
10, // personaje 10
0, // línea 0
getHTU('C'),
'd'
);
lcdDisplay(
// Para imprimir Fahrenheit:
0, // personaje 0
1, // línea 1
"Fahrenheit: ",
// para imprimir Fahrenheit
10, // personaje 9
1, // línea 0
getHTU('F'),
'd'
);
delay(5000);
lcdDisplay(
// Para imprimir Kelvin:
0, // personaje 0
0, // línea 0
"Kelvin: ",
// para imprimir Celsius
9, // personaje 10
0, // línea 0
getHTU('K'),
'k'
);
lcdDisplay(
// para imprimir texto de humedad
0, // personaje 0
1, // línea 1
"Humidity: ",
// para imprimir humedad
10, // personaje 9
1, // línea 1
getHTU('H'),
'%'
);
delay(5000);
}
/*
* @brief devuelve la temperatura o la humedad relativa.
* @param "type" es un carácter.
* C = Celsius
* K = Kelvin
* F = Fahrenheit
* H = Humedad.
* @return devuelve uno de los valores anteriores.
* Uso: para obtener Fahrenheit, escriba: getHTU('F')
* para imprimirlo en el monitor serial. Serial.println(getHTU('F'));
* Escrito por Ahmad Shamshiri el 13 de julio de 2019 en Ajax, Ontario, Canadá.
* www.Robojax.com
*/
float getHTU(char type)
{
float value;
float temp = htu.readTemperature();
float rel_hum = htu.readHumidity();
if(type =='F')
{
value = temp *9/5 + 32; // convertir a Fahrenheit
}else if(type =='K')
{
value = temp + 273.15; // convertir a Kelvin
}else if(type =='H')
{
value = rel_hum; // devolver la humedad relativa
}else{
value = temp; // regresar Celsius
}
return value;
}
/*
* lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
* Muestra el valor y el título en la pantalla LCD1602
* Cómo usar:
* Si desea mostrar: "Voltaje: 13.56 mV" a partir del primer carácter de la segunda fila, use:
* lcdDisplay(0, 1, "Voltaje: ", 13.56,'d')
*
* 'd' es el símbolo de grado
* tc es el número de carácter (0)
* tr es la fila en la pantalla LCD (1)
* title es el texto (Voltaje:)
* vc es el valor del carácter
* vr es el valor de la fila o línea
* value es el valor (13.56)
*/
void lcdDisplay(int tc, int tr, String title, int vc, int vr, float value,char symbol)
{
// Demostración de Robojax.com LCD1602 para HTU21D
lcd.setCursor (tc,tr);
lcd.print(title);
lcd.setCursor (vc,vr);
lcd.print(value);
if(symbol == 'd')
{
lcd.print((char)223);
}else if(symbol =='%')
{
lcd.print("%");
}else if(symbol =='k')
{
lcd.print("K");
}
// Demostración de Robojax.com LCD1602 para HTU21D
}
Cosas que podrías necesitar
-
Amazonas
-
eBayCompra HTU21D en eBayebay.us
-
AliExpressCompra HTU21D o SHT21 en AliExpresss.click.aliexpress.com
Recursos y referencias
-
ExternoBiblioteca Adafruit HTU21D (GitHub)github.com
Archivos📁
Hoja de datos (pdf)
-
HTU21D_ficha_técnica_de_temperatura_y_humedad
HTU21D_temerature_humidity_datasheet.pdf0.96 MB