Guia de como usar o sensor de umidade e temperatura SHT21/HTU21D

Tempo de leitura: 4 minutes

O SHT21/HTU21 é um sensor de umidade e temperatura de baixo custo. É um dispositivo I2C, então novamente é muito simples de conectar a qualquer Arduino

Os sensores SHT2x/HTU2x contêm um sensor de umidade do tipo capacitivo, um sensor de temperatura de gap e circuito integrado analógico e digital especializado – tudo em um único chip CMOSens®. Isso resulta em um desempenho incomparável do sensor em termos de precisão e estabilidade, bem como consumo mínimo de energia.

 

Obs: O Sensor HTU21D é uma substituição ao SHT21, mais fácil de encontrar nas lojas com o HTU21D.
Obs: No esquema via Fritzing, não tinha o HTU21D por isso so coloquei o diagrama para o SHT15 que é similar ao SHT21 e ao HTU21D.

 

Este é o breakout para o sensor que comprei.

Aqui está um esquema simples, mais uma vez, tome cuidado, pois o Vcc é 3.3v com este dispositivo

Vamos dar uma olhada nas bibliotecas necessárias e em um exemplo de código básico, não há muito para ser honesto, a maior parte do trabalho é feito na biblioteca

 

Código

Existem algumas bibliotecas para ajudá-lo

https://github.com/misenso/SHT2x-Arduino-Library
https://github.com/elechouse/SHT21_Arduino

https://github.com/sparkfun/SparkFun_HTU21D_Breakout_Arduino_Library
https://github.com/enjoyneering/HTU21D

Eu usei o último * (SHT21) é similar a (HTU21D) testei os 2 sketchs

#include <Wire.h>
#include <SHT2x.h>
 
 
void setup()
{
  Wire.begin();
  Serial.begin(9600);
}
 
void loop()
{
  Serial.print("Humidity: ");
  Serial.println(SHT2x.GetHumidity());
  Serial.print("Temperature(C): ");
  Serial.println(SHT2x.GetTemperature());
  Serial.println();
  delay(1000);
}

O Sketch do demo da segunda lib

/***************************************************************************************************/
/* 
  Este é um exemplo de Arduino para o sensor digital de umidade e temperatura SHT21, HTU21D
  
  Este sensor usa barramento I2C para se comunicar, pinos especiais são necessários para fazer a interface
  Board:                                    SDA                    SCL
  Uno, Mini, Pro, ATmega168, ATmega328..... A4                     A5
  Mega2560, Due............................ 20                     21
  Leonardo, Micro, ATmega32U4.............. 2                      3
  Digistump, Trinket, ATtiny85............. 0/physical pin no.5    2/physical pin no.7
  Blue Pill, STM32F103xxxx boards.......... PB7*                   PB6*
  ESP8266 ESP-01:.......................... GPIO0/D5               GPIO2/D3
  NodeMCU 1.0, WeMos D1 Mini............... GPIO4/D2               GPIO5/D1
*/
/***************************************************************************************************/
#include <Wire.h>
#include <HTU21D.h>

/*
HTU21D(resolução)
resolução:
HTU21D_RES_RH12_TEMP14 - RH: 12 bits, temperatura: 14 bits, por padrão
HTU21D_RES_RH8_TEMP12 - RH: 8 bits, temperatura: 12 bits
HTU21D_RES_RH10_TEMP13 - RH: 10 bits, temperatura: 13 bits
HTU21D_RES_RH11_TEMP11 - RH: 11 bits, temperatura: 11 bits
*/
HTU21D myHTU21D(HTU21D_RES_RH12_TEMP14);


void setup()
{
  Serial.begin(115200);
  Serial.println();
  
  while (myHTU21D.begin() != true)
  {
    Serial.println(F("HTU21D, SHT21 sensor is faild or not connected")); // (F()) salva a string para piscar e mantém a memória dinâmica livre
    delay(5000);
  }
  Serial.println(F("HTU21D, SHT21 sensor está ativo"));
}


void loop()
{
  /* Parte não taduzida */
  /* DEMO - 1 */
  Serial.println(F("DEMO 1: 12-Bit Resolution"));
  Serial.print(F("Humidity............: ")); Serial.print(myHTU21D.readHumidity());            Serial.println(F(" +-2%"));
  Serial.print(F("Compensated Humidity: ")); Serial.print(myHTU21D.readCompensatedHumidity()); Serial.println(F(" +-2%"));

  Serial.println(F("DEMO 1: 14-Bit Resolution")); 
  Serial.print(F("Temperature.........: ")); Serial.print(myHTU21D.readTemperature()); Serial.println(F(" +-0.3C"));

 
  /* DEMO - 2 */
  Serial.println(F("DEMO 2: 11-Bit Resolution"));
  myHTU21D.setResolution(HTU21D_RES_RH11_TEMP11);
  Serial.print(F("Humidity............: ")); Serial.print(myHTU21D.readHumidity());            Serial.println(F(" +-2%"));
  Serial.print(F("Compensated Humidity: ")); Serial.print(myHTU21D.readCompensatedHumidity()); Serial.println(F(" +-2%"));

  Serial.println(F("DEMO 2: 11-Bit Resolution"));
  Serial.print(F("Temperature.........: ")); Serial.print(myHTU21D.readTemperature()); Serial.println(F(" +-0.3C"));


  /* DEMO - 3 */
  Serial.println(F("DEMO 3: Battery Status"));
  if   (myHTU21D.batteryStatus() == true) Serial.println(F("Battery.............: OK.  Level > 2.25v"));
  else                                    Serial.println(F("Battery.............: LOW. Level < 2.25v"));


  /* DEMO - 4 */
  Serial.println(F("DEMO 4:"));
  Serial.print(F("Firmware version....: ")); Serial.println(myHTU21D.readFirmwareVersion());


  /* DEMO - 5 */
  Serial.println(F("DEMO 5:"));
  Serial.print(F("Sensor's ID.........: ")); Serial.println(myHTU21D.readDeviceID());


  /* de volta ao lib. resolução padrão */
  myHTU21D.softReset();
  myHTU21D.setResolution(HTU21D_RES_RH12_TEMP14);

  Serial.print(F("DEMO começa novamente em 20 segundos."));
  delay(20000);
}

 

 

Dados do sensor SHT21 exibidos em um LCD

Nesta parte iremos conectar um sensor de temperatura e umidade SHT21 a um Arduino com um LCD para exibir as leituras de temperatura e umidade.

Aqui está uma foto do que você fará, eu soldava conectores na blindagem do teclado LCD para conectar ao sensor sht21/htu21 usando cabos de ligação, apenas para torná-lo um pouco mais fácil.

 

 

Código

Necessita da biblioteca SHT21 instalada ou a biblioteca HTD21D na parte acima tem as 2 opções que usei nos exemplos.

Novamente, a maior parte do trabalho é feita em algumas bibliotecas, as LCD e SHt21 ou HTM21D, portanto, não é necessário muito código para este exemplo (SHT21)

#include <Wire.h>
#include <SHT2x.h>

// Incluir a biblioteca: (LCD)
#include <LiquidCrystal_I2C.h>
 
// Cria o objeto lcd da classe LiquidCrystal_I2C: 
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
 
void setup() 
{
  delay(1000);
  // Se inicializar o display LCD 16x2, descomentar a linha abaixo, e comentar a do 20x4
  //lcd.begin (16, 2); para 
  // Inicializa o display LCD 20x4
  lcd.begin (20, 4);
  // Liga a luz de fundo do LCD
  lcd.setBacklight(HIGH);   
  //linha 1 - temperatura
  lcd.setCursor(0,0);
  lcd.print("Temp: ");
  //linha 2 - umidade
  lcd.setCursor(0,1);
  lcd.print("Umidade: ");
}
 
void loop() 
{
  delay(1000);
  lcd.setCursor(7,0);
  lcd.print(SHT2x.GetTemperature());
  lcd.setCursor(11,1);
  lcd.print(SHT2x.GetHumidity());
}

neste próximo exemplo é para a HTM21D (usando outra library, que também funciona para o SHT21)

#include <Wire.h> 
#include <HTU21D.h> 

/* HTU21D(resolução) resolução: HTU21D_RES_RH12_TEMP14 - RH: 12 bits, temperatura: 14 bits, por padrão */
// Incluir a biblioteca: (LCD) 
#include <LiquidCrystal_I2C.h> 
// Cria o objeto lcd da classe LiquidCrystal_I2C: 
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 

void setup() { 
   delay(1000); 
   // Se inicializar o display LCD 16x2, descomentar a linha abaixo, e comentar a do 20x4 
   //lcd.begin (16, 2); para 
   // Inicializa o display LCD 20x4 
   lcd.begin (20, 4); 
   // Liga a luz de fundo do LCD 
   lcd.setBacklight(HIGH); 
   //linha 1 - temperatura 
   lcd.setCursor(0,0); 
   lcd.print("Temp: ");  
   //linha 2 - umidade 
   lcd.setCursor(0,1); 
   lcd.print("Umidade: "); 
} 

void loop() { 
   delay(1000); 
   lcd.setCursor(7,0); 
   lcd.print(myHTU21D.readTemperature()); 
   lcd.setCursor(11,1); 
   lcd.print(myHTU21D.readHumidity()); 
}

 

Conclusão

Neste guia, mostrei como usar um LCD I2C com os Sensores SHT21 ou HTM21D ligados com o Arduino. Espero que você tenha achado útil e informativo. Se sim, compartilhe com um amigo que também gosta de eletrônica e de fazer coisas!

Eu adoraria saber quais projetos você planeja construir (ou já construiu) com esses Sensores SHT21/HTM21D junto com LCD ou não. Se você tiver alguma dúvida, sugestão ou se achar que falta algo neste tutorial, por favor, deixe um comentário abaixo.

Visits: 1 Visits: 1200565