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 35-1: Uso del sensor de temperatura HTU21D
En este tutorial, exploraremos cómo utilizar el sensor de temperatura y humedad HTU21D con un Arduino. El HTU21D es un sensor compacto que se comunica a través de I2C, lo que facilita su conexión con microcontroladores. Al final de esta lección, podrás leer los valores de temperatura y humedad y mostrarlos a través del monitor serial de Arduino.

Para este proyecto, utilizaremos la biblioteca Adafruit diseñada específicamente para el sensor HTU21D. La biblioteca simplifica el proceso de lectura de datos del sensor, lo que nos permite centrarnos en integrar el sensor en nuestros proyectos. Puedes esperar ver las lecturas de temperatura del sensor en Celsius, Fahrenheit y Kelvin, así como el porcentaje de humedad relativa (en el video a las 03:15).
Hardware Explicado
El componente principal de este proyecto es el sensor de temperatura y humedad HTU21D. Este sensor opera con un voltaje de alimentación de 1.5 a 3.6 voltios y consume muy poca energía, lo que lo hace ideal para dispositivos que funcionan con batería. Se comunica con el Arduino usando el protocolo I2C, requiriendo solo dos líneas de datos: SDA para los datos y SCL para el reloj.
Para alimentar el sensor, lo conectaremos a una fuente de 3.3V o 5V, dependiendo del módulo específico que estés utilizando. La versión de Adafruit incluye un regulador de voltaje, lo que permite que funcione sin problemas con ambos niveles de voltaje. Esta flexibilidad lo convierte en una excelente opción para diversas aplicaciones.
Detalles de la hoja de datos
| Fabricante | TE Connectivity |
|---|---|
| Número de parte | HTU21D-F |
| Voltaje de lógica/entrada-salida | 1.5 - 3.6 V |
| Tensión de alimentación | 3.3 V (típ.) |
| Consumo actual (en reposo) | 0.02 µA |
| Consumo actual (medición) | 450 µA (típ.) |
| Rango de temperatura | -40 a +125 °C |
| Resolución de humedad | 0.04 % |
| Paquete | DFN de 6 pines |
- Asegúrese de niveles de voltaje adecuados para evitar dañar el sensor.
- Utiliza resistencias de pull-up en las líneas I2C si no están incluidas en el módulo.
- Mantén los cables cortos para minimizar la interferencia con la comunicación I2C.
- Considera el disipador de calor si se utiliza en entornos de alta temperatura.
- Verifique la orientación del sensor para asegurar conexiones de pines correctas.
Instrucciones de cableado

Para conectar el sensor HTU21D a tu Arduino, comienza conectando el pin VCC del sensor al pin de alimentación de 3.3V en el Arduino. Luego, conecta el pin GND del sensor al pin de tierra (GND) en el Arduino. A continuación, conecta el pin SDA del sensor al pin analógico A4 del Arduino, que sirve como la línea de datos I2C. Finalmente, conecta el pin SCL del sensor al pin analógico A5, que actúa como la línea de reloj I2C. Asegúrate de que tus conexiones estén seguras para evitar lecturas intermitentes.
Para mayor claridad, si estás utilizando una placa diferente, asegúrate de identificar los pines correctos para SDA y SCL, ya que pueden variar. Esta configuración de cableado permitirá que el Arduino se comunique eficazmente con el sensor HTU21D (en el video a las 05:00).
Ejemplos de Código y Guía paso a paso
A continuación se muestra un extracto de la función de configuración que inicializa la comunicación serial y verifica si se encuentra el sensor:
void setup() {
Serial.begin(9600);
if (!htu.begin()) {
Serial.println("Couldn't find sensor!");
while (1);
}
}Este código inicia la comunicación serie a una velocidad de 9600 baudios e intenta inicializar el sensor HTU21D. Si no se detecta el sensor, imprimirá un mensaje de error y detendrá la ejecución.
El bucle principal del programa lee continuamente los valores de temperatura y humedad:
void loop() {
Serial.print(getHTU('C'));
Serial.println("C");
Serial.print("Humidity:");
Serial.print(getHTU('H'));
Serial.println("%");
delay(1000);
}En este bucle, llamamos a la función.getHTUcon 'C' para obtener la temperatura en Celsius y 'H' para obtener la humedad. Los resultados se imprimen en el monitor serial cada segundo. Esto permite la observación en tiempo real de las lecturas del sensor.
Además, tenemos una funcióngetHTUque devuelve la temperatura o la humedad basándose en una entrada de carácter:
float getHTU(char type) {
float temp = htu.readTemperature();
float rel_hum = htu.readHumidity();
return (type == 'H') ? rel_hum : temp;
}Esta función lee la temperatura y la humedad del sensor y devuelve el valor apropiado según el tipo especificado. Este enfoque modular mantiene el código limpio y fácil de mantener.
Demostración / Qué Esperar
Tras la configuración y ejecución exitosa del código, deberías ver los valores de temperatura y humedad impresos en el monitor serial. Si aplicas calor al sensor, las lecturas de temperatura deberían aumentar en consecuencia, mientras que la humedad puede disminuir. Si la temperatura excede el rango máximo del sensor, puede mostrar resultados inesperados, como cero (en el video a las 12:00).
Marcas de tiempo en el video
- 00:00- Introducción
- 03:15- Visión general del sensor
- 05:00- Instrucciones de cableado
- 10:00- Recorrido del código
- 12:00- Demostración
Este tutorial es parte de: Sensor digital de humedad relativa y 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 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 35: HTU21D Temperature Sensor
* Updated by Ahmad Shamshiri on July 13, 2019
* in Ajax, Ontario, Canada
Please watch video instructions here https://youtu.be/LyA0yAKlf9E
This code is available at http://robojax.com/course1/?vid=lecture35
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.
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/>.
*/
/*
**************************************************
*
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
****************************************************/
#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();
void setup() {
Serial.begin(9600);
Serial.println("Robojax.com");
Serial.println("HTU21D-F test");
if (!htu.begin()) {
Serial.println("Couldn't find sensor!");
while (1);
}
}
void loop() {
//Get the code for the course: http://robojax.com/L/?id=339
Serial.print(getHTU('C'));
printDegree();
Serial.println("C");
Serial.print(getHTU('F'));
printDegree();
Serial.println("F");
Serial.print(getHTU('K'));
Serial.println("K");
Serial.println(" ");
Serial.print("Humidity:");
Serial.print(getHTU('H'));
Serial.println("%");
if(getHTU('C') <81)
{
//digitalWrite(5, LOW);
}
delay(1000);
}
/*
* @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;
}//
/*
* @brief prints degree symbol on serial monitor
* @param none
* @return returns nothing
* Written by Ahmad Shamshiri on July 13, 2019
* for Robojax Tutorial Robojax.com
*/
void printDegree()
{
Serial.print("\\xC2");
Serial.print("\\xB0");
}
Cosas que podrías necesitar
-
Amazonas
-
eBayCompra HTU21D en eBayebay.us
-
AliExpressCompra HTU21D o SHT21 en AliExpresss.click.aliexpress.com
Recursos y referencias
-
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 -
HTU31D HTU31V Sensor de Temperatura y Humedad Ficha Técnica
HTU31_Sensors_Datasheet.pdf0.67 MB