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.
Lección 36: Uso del sensor de temperatura HTU21D con un LCD Curso paso a paso de Arduino
El sensor de temperatura y humedad HTU21D es una opción popular para muchos proyectos de Arduino debido a su facilidad de uso y precisión. En esta lección, construiremos un proyecto simple que lee los datos de temperatura y humedad del sensor y los muestra en una pantalla LCD. Al final de este tutorial, tendrás una configuración funcional que muestra continuamente la temperatura en Celsius, Fahrenheit y Kelvin, así como el porcentaje de humedad relativa. Para mayor aclaración, puedes consultar el video (en el video en mm:ss).
Hardware Explicado
El componente principal de este proyecto es el sensor de temperatura y humedad HTU21D, que se comunica a través de I2C. Este sensor opera dentro de un rango de voltaje de 1.5 a 3.6 voltios, lo que lo hace adecuado tanto para sistemas de 3.3V como de 5V. Consume muy poca energía, típicamente solo 0.02 microamperios cuando está inactivo y 450 microamperios durante la medición. Además del HTU21D, también utilizaremos una pantalla LCD, específicamente la LCD1602 con I2C. Esta pantalla permite una salida fácil de datos de texto y requiere solo dos pines para la comunicación: SDA (línea de datos) y SCL (línea de reloj). La combinación de estos componentes nos permitirá crear una pantalla informativa para monitorear los niveles de temperatura y humedad.
Detalles de la hoja de datos
| Fabricante | TE Connectivity |
|---|---|
| Número de parte | HTU21D-F |
| Voltaje de lógica/IO | 1.5 - 3.6 V |
| Tensión de alimentación | 3.3 V (típ.) |
| Corriente de salida (típ.) | 0.02 µA (inactivo), 450 µA (medición) |
| Rango de temperatura | -40 a +125 °C |
| Rango de humedad | 0 a 100 %HR |
| Resolución (Temperatura) | 0.01 °C |
| Resolución (Humedad) | 0.04 %HR |
| Paquete | DFN-6 |
- Utilice una resistencia de tirón para las líneas SDA y SCL si no están integradas.
- Asegúrese de que el voltaje de la fuente de alimentación sea correcto para evitar dañar el sensor.
- Mantén un cableado adecuado para prevenir errores de comunicación.
- Verifique la dirección I2C si el sensor no responde.
- Utiliza un retraso entre lecturas para prevenir la sobrecarga del sensor.
- Asegúrate de que el LCD sea compatible con la comunicación I2C.
Instrucciones de cableado
Para cablear el sensor HTU21D y la pantalla LCD, comienza con las conexiones de alimentación. Conecta el pin izquierdo del HTU21D a la fuente de alimentación de 3.3V y el segundo pin (a menudo rojo) a tierra. A continuación, conecta el pin SDA del HTU21D al pin analógico A4 del Arduino y el pin SCL al pin analógico A5. Para la pantalla LCD1602, conecta el pin VCC a la misma fuente de alimentación de 3.3V y conecta el pin GND a tierra. El pin SDA en la LCD también debe conectarse a A4, y el pin SCL debe conectarse a A5, permitiendo que ambos componentes compartan el bus I2C. Asegúrate de que todas las conexiones estén seguras para facilitar una comunicación adecuada entre el Arduino, el sensor y la pantalla.
Ejemplos de código y guía práctica
El siguiente código inicializa el sensor HTU21D y la pantalla LCD. En la función de configuración, se prepara la LCD para su uso y se verifica la conectividad del sensor:
void setup() {
lcd.begin();
lcd.backlight();
if (!htu.begin()) {
lcd.print("Robojax HTUD1DF");
lcd.setCursor(0,1);
lcd.print("sensor missing");
while (1);
} else {
lcd.print("Robojax HTUD1DF");
lcd.setCursor(0,1);
lcd.print("Demo");
}
delay(2000);
}Este extracto verifica si el sensor está conectado correctamente. Si no, muestra un mensaje de error en el LCD y detiene el programa. Si el sensor está funcionando, muestra un mensaje de demostración durante dos segundos. La función de bucle es donde se realizan las lecturas y la visualización principales. Aquí, llamamos a la función `lcdDisplay` para mostrar la temperatura en diferentes unidades:
void loop() {
lcd.clear(); // clear previous values from screen
lcdDisplay(0, 0, "Celsius: ", 10, 0, getHTU('C'), 'd');
lcdDisplay(0, 1, "Fahrenheit: ", 10, 1, getHTU('F'), 'd');
delay(5000);
}En este bucle, se borra la LCD y se muestran las lecturas de temperatura en Celsius y Fahrenheit. Se llama a la función `getHTU` con el carácter 'C' para Celsius y 'F' para Fahrenheit, respectivamente. Finalmente, se define la función `getHTU` para leer la temperatura o la humedad según el carácter de entrada:
float getHTU(char type) {
float temp = htu.readTemperature();
float rel_hum = htu.readHumidity();
if(type =='F') {
return temp * 9/5 + 32; // convert to Fahrenheit
} else if(type =='K') {
return temp + 273.15; // convert to Kelvin
} else if(type =='H') {
return rel_hum; // return relative humidity
} else {
return temp; // return Celsius
}
}Esta función lee la temperatura y la humedad del sensor y convierte la temperatura a la unidad solicitada. Asegúrate de revisar el código completo cargado debajo del artículo para obtener más detalles.
Demostración / Qué Esperar
Al completar el cableado y cargar el código, deberías ver los valores de temperatura y humedad mostrados en el LCD. Las lecturas se actualizarán cada pocos segundos, reflejando las condiciones actuales. Si aplicas calor al sensor, notarás que la temperatura aumenta en consecuencia, mientras que la humedad debería disminuir ligeramente. Ten en cuenta el límite máximo de temperatura del sensor; exceder esto puede resultar en lecturas inexactas o en la falla del sensor (en el video a mm:ss).
Marcas de tiempo del video
- 00:00- Introducción al proyecto
- 01:15- Instrucciones de cableado
- 03:30- Revisión de código
- 10:00- Demostración de la configuració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
- Uso de dos sensores de humedad y temperatura HTU21DF más con Arduino
- Mostrando la temperatura de un HTU21D en un LCD
- 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)
/*
* Robojax Arduino Step-by-Step Course
* Part 4: Temperature Sensors
* Lesson 36: HTU21D Temperature Sensor with LCD1602 and LCD2004 Display
* Display Temperature from HTU21DF on LCD1602-I2C or LCD2004
* Updated by Ahmad Shamshiri on July 13, 2019
Please watch video instructions here https://youtu.be/SrFJKbmiaPM
This code is available at http://robojax.com/course1/?vid=lecture36
with over 100 lectures free on YouTube. Watch it here http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339
If you found this tutorial helpful, please support me so I can continue creating
and make a donation using PayPal http://robojax.com/L/?id=64
*
This is an example for the HTU21D-F Humidity & Temp Sensor
Designed specifically to work with the HTU21D-F sensor from Adafruit
----> https://www.adafruit.com/products/1899
These displays use I2C to communicate; 2 pins are required to
interface
Watch Introduction to a 360 Servo video with code: https://youtu.be/b_xvu6wWafA
You can get the wiring diagram from my Arduino Course at Udemy.com
Learn Arduino step by step with all libraries, codes, and wiring diagrams all in one place.
Visit my course now http://robojax.com/L/?id=62
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or make a donation using PayPal http://robojax.com/L/?id=64
* Code is available at http://robojax.com/learn/arduino
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Wire.h>
#include "Adafruit_HTU21DF.h"
// Connect Vin to 3-5VDC
// Connect GND to ground
// Connect SCL to I2C clock pin (A5 on UNO)
// Connect SDA to I2C data pin (A4 on UNO)
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
// start of settings for LCD1602 with I2C
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// end of settings for LCD1602 with I2C
void setup() {
//Get the code for the course: http://robojax.com/L/?id=339
lcd.begin();
lcd.backlight();
if (!htu.begin()) {
lcd.print("Robojax HTUD1DF");
lcd.setCursor(0,1);
lcd.print("sensor missing");
while (1);
}else{
// initialize the LCD
lcd.print("Robojax HTUD1DF");
lcd.setCursor(0,1);
lcd.print("Demo");
}
delay(2000);
}
void loop() {
//Get the code for the course: http://robojax.com/L/?id=339
lcd.clear();// clear previous values from screen
lcdDisplay(
// to print Celsius:
0, // character 0
0, // line 0
"Celsius: ",
// to print Celsius
10, // character 10
0, // line 0
getHTU('C'),
'd'
);
lcdDisplay(
// to print fahrenheit:
0, // character 0
1, // line 1
"Fahrenheit: ",
// to print Fahrenheit
10, // character 9
1, // line 0
getHTU('F'),
'd'
);
delay(5000);
lcdDisplay(
// to print Kelvin:
0, // character 0
0, // line 0
"Kelvin: ",
// to print Celsius
9, // character 10
0, // line 0
getHTU('K'),
'k'
);
lcdDisplay(
// to print humidity text
0, // character 0
1, // line 1
"Humidity: ",
// to print humidity
10, // character 9
1, // line 1
getHTU('H'),
'%'
);
delay(5000);
}
/*
* @brief returns temperature or relative humidity
* @param "type" is character
* C = Celsius
* K = Kelvin
* F = Fahrenheit
* H = Humidity
* @return returns one of the values above
* Usage: to get Fahrenheit type: getHTU('F')
* to print it on serial monitor Serial.println(getHTU('F'));
* Written by Ahmad Shamshiri on July 13, 2019
* in Ajax, Ontario, Canada
* www.Robojax.com
*/
float getHTU(char type)
{
//Get the code for the course: http://robojax.com/L/?id=339
float value;
float temp = htu.readTemperature();
float rel_hum = htu.readHumidity();
if(type =='F')
{
value = temp *9/5 + 32;//convert to Fahrenheit
}else if(type =='K')
{
value = temp + 273.15;//convert to Kelvin
}else if(type =='H')
{
value = rel_hum;//return relative humidity
}else{
value = temp;// return Celsius
}
return value;
}//
/*
* lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
* displays value and title on LCD1602
* How to use:
* If you want to display: "Voltage: 13.56mV" starting from the first character
* on the second row.
* use:
* lcdDisplay(0, 1, "Voltage: ", 13.56,'d')
*
* 'd' is degree symbol
* tc is character number (0)
* tr is row in the lcd (1)
* title is the text (Voltage:)
* vc value for character
* vr value for row or line
* value is the value (13.56)
*/
void lcdDisplay(int tc, int tr, String title, int vc, int vr, float value,char symbol)
{
// Robojax.com LCD1602 for HTU21D Demo
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");
}
// Robojax.com LCD1602 for HTU21D Demo
}
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
-
ExternoDiferencia entre HTU21DF y HTU21D (imagen)robojax.com
Archivos📁
Hoja de datos (pdf)
-
HTU21D_ficha_técnica_de_temperatura_y_humedad
HTU21D_temerature_humidity_datasheet.pdf0.96 MB