Este tutorial faz parte de: Sensor digital de umidade relativa e temperatura HTU21D
Vídeos relacionados ao sensor digital de umidade relativa e temperatura HTU21D. Os links para outros vídeos estão abaixo deste artigo.
Lição 35-1: Usando o Sensor de Temperatura HTU21D
Neste tutorial, vamos explorar como usar o sensor de temperatura e umidade HTU21D com um Arduino. O HTU21D é um sensor compacto que se comunica via I2C, facilitando a interface com microcontroladores. Ao final desta lição, você será capaz de ler os valores de temperatura e umidade e exibi-los através do monitor serial do Arduino.

Para este projeto, vamos utilizar a biblioteca Adafruit especificamente projetada para o sensor HTU21D. A biblioteca simplifica o processo de leitura dos dados do sensor, permitindo que nos concentremos na integração do sensor em nossos projetos. Você pode esperar ver as leituras de temperatura do sensor em Celsius, Fahrenheit e Kelvin, bem como a porcentagem de umidade relativa (no vídeo às 03:15).
Hardware Explicado
O componente principal deste projeto é o sensor de temperatura e umidade HTU21D. Este sensor opera com uma tensão de alimentação de 1,5 a 3,6 volts e consome muito pouca energia, tornando-o ideal para dispositivos alimentados por bateria. Ele se comunica com o Arduino usando o protocolo I2C, exigindo apenas duas linhas de dados: SDA para dados e SCL para o clock.
Para alimentar o sensor, nós o conectaremos a uma fonte de 3.3V ou 5V, dependendo do módulo específico que você está usando. A versão da Adafruit inclui um regulador de tensão, permitindo que funcione perfeitamente com ambos os níveis de voltagem. Essa flexibilidade o torna uma excelente escolha para várias aplicações.
Detalhes da Ficha Técnica
| Fabricante | TE Connectivity |
|---|---|
| Número da peça | HTU21D-F |
| Tensão de lógica/entrada/saída | 1,5 - 3,6 V |
| Tensão de alimentação | 3,3 V (típ.) |
| Consumo atual (em espera) | 0,02 µA |
| Consumo atual (medição) | 450 µA (típ.) |
| Faixa de temperatura | -40 a +125 °C |
| Resolução de umidade | 0,04 % |
| Pacote | DFN de 6 pinos |
- Assegure níveis de tensão adequados para evitar danificar o sensor.
- Use resistores de pull-up nas linhas I2C se não estiverem incluídos no módulo.
- Mantenha os fios curtos para minimizar a interferência na comunicação I2C.
- Considere o dissipador de calor se usado em ambientes de alta temperatura.
- Verifique a orientação do sensor para garantir conexões de pinos corretas.
Instruções de Fiação

Para conectar o sensor HTU21D ao seu Arduino, comece ligando o pino VCC do sensor ao pino de alimentação de 3,3V no Arduino. Em seguida, conecte o pino GND do sensor ao pino de terra (GND) no Arduino. Depois, conecte o pino SDA do sensor ao pino analógico A4 do Arduino, que serve como a linha de dados I2C. Por fim, conecte o pino SCL do sensor ao pino analógico A5, que atua como a linha de relógio I2C. Certifique-se de que suas conexões estejam seguras para evitar leituras intermitentes.
Para clareza, se você estiver usando uma placa diferente, certifique-se de identificar os pinos corretos para SDA e SCL, pois podem variar. Esta configuração de fiação permitirá que o Arduino se comunique com o sensor HTU21D de forma eficaz (no vídeo às 05:00).
Exemplos de Código e Guia
Abaixo está um trecho da função de configuração que inicializa a comunicação serial e verifica se o sensor foi encontrado:
void setup() {
Serial.begin(9600);
if (!htu.begin()) {
Serial.println("Couldn't find sensor!");
while (1);
}
}Este código inicia a comunicação serial a uma taxa de transmissão de 9600 e tenta inicializar o sensor HTU21D. Se o sensor não for detectado, ele exibirá uma mensagem de erro e interromperá a execução.
O loop principal do programa lê continuamente os valores de temperatura e umidade:
void loop() {
Serial.print(getHTU('C'));
Serial.println("C");
Serial.print("Humidity:");
Serial.print(getHTU('H'));
Serial.println("%");
delay(1000);
}Nesta repetição, chamamos a funçãogetHTUcom 'C' para obter a temperatura em Celsius e 'H' para obter a umidade. Os resultados são impressos no monitor serial a cada segundo. Isso permite a observação em tempo real das leituras do sensor.
Além disso, temos uma funçãogetHTUque retorna a temperatura ou umidade com base em uma entrada de caractere:
float getHTU(char type) {
float temp = htu.readTemperature();
float rel_hum = htu.readHumidity();
return (type == 'H') ? rel_hum : temp;
}Esta função lê a temperatura e a umidade do sensor e retorna o valor apropriado com base no tipo especificado. Esta abordagem modular mantém o código limpo e fácil de manter.
Demonstração / O que Esperar
Após a configuração e execução bem-sucedidas do código, você deve ver os valores de temperatura e umidade impressos no monitor serial. Se você aplicar calor ao sensor, as leituras de temperatura devem aumentar de acordo, enquanto a umidade pode diminuir. Se a temperatura exceder o limite máximo do sensor, pode exibir resultados inesperados, como zero (no vídeo às 12:00).
Marcos do Vídeo
- 00:00- Introdução
- 03:15- Visão geral do sensor
- 05:00- Instruções de fiação
- 10:00- Revisão de código
- 12:00- Demonstração
Este tutorial é parte de: Sensor digital de umidade relativa e temperatura HTU21D
- Lição 35-2: Usando o Sensor de Temperatura HTU21D - Código Personalizado
- Lição 35: Usando o sensor de temperatura HTU21D com Arduino
- Aula 36: Usando o Sensor de Temperatura HTU21D com um LCD Arduino Curso Passo a Passo
- Usando mais dois sensores de umidade e temperatura HTU21DF com Arduino
- Exibindo a temperatura de um HTU21D em um LCD
- Exibindo a Temperatura de um HTU21D como um Gráfico de Barras em um LCD
- Como Usar o Sensor de Umidade e Temperatura HTU21DF com Arduino (Código Básico)
- Como Usar o Sensor de Umidade e Temperatura HTU21DF com 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");
}
Coisas que você pode precisar
-
Amazonas
-
eBayCompre HTU21D no eBayebay.us
-
AliExpressCompre HTU21D ou SHT21 no AliExpresss.click.aliexpress.com
Recursos e referências
-
ExternoDiferença entre HTU21DF e HTU21D (imagem)robojax.com
Arquivos📁
Folha de dados (pdf)
-
HTU21D_folha_de_dados_de_temperatura_e_umidade
HTU21D_temerature_humidity_datasheet.pdf0.96 MB -
Datasheet dos Sensores de Temperatura e Umidade HTU31D HTU31V
HTU31_Sensors_Datasheet.pdf0.67 MB