Guia de como usar o sensor de umidade e temperatura SHT21/HTU21D
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
Conteudo
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.