Código de Pesquisa

Exibindo a Temperatura de um HTU21D como um Gráfico de Barras em um LCD

Exibindo a Temperatura de um HTU21D como um Gráfico de Barras em um LCD

Neste tutorial, aprenderemos como exibir leituras de temperatura de um sensor de temperatura e umidade HTU21D em uma tela LCD na forma de um gráfico de barras. As leituras incluirão valores em Celsius, Fahrenheit, Kelvin e umidade relativa, fornecendo uma visão abrangente das condições ambientais. Este projeto ajudará você a entender como conectar os componentes corretamente e implementar o código necessário para fazer tudo funcionar perfeitamente.

HTU21D module

Para aqueles que querem um guia visual, não deixem de conferir o vídeo associado a este tutorial (no vídeo em :00).

Hardware Explicado

Os principais componentes deste projeto incluem o sensor HTU21D e o display LCD 1602. O HTU21D é um sensor digital de umidade e temperatura que se comunica via I2C. Ele fornece leituras precisas de temperatura e umidade, que podem ser facilmente acessadas através de sua biblioteca. O display LCD 1602, por outro lado, mostra as leituras em um formato legível por humanos, permitindo avaliações rápidas das condições ambientais.

O HTU21D utiliza uma interface I2C simples, facilitando a conexão e a comunicação com microcontroladores como o Arduino. O display LCD 1602 também utiliza I2C, o que simplifica a fiação ao reduzir o número de pinos necessários para se conectar ao Arduino. Isso permite uma configuração mais limpa, mantendo uma saída visual clara.

Detalhes da Ficha Técnica

FabricanteAdafruit
Número da peçaHTU21D
Tensão de lógica/IO3,3 V (típ.)
Tensão de alimentação1,5 - 3,6 V
Faixa de temperatura-40 a 125 °C
Faixa de umidade0 a 100 %UR
Resolução0,01 °C / 0,04 %UR
ComunicaçãoI2C
Pacote4-pinos LGA

  • Use 3,3 V para alimentar o HTU21D; conectar a 5 V pode danificá-lo.
  • Garanta que resistores de pull-up adequados sejam usados nas linhas I2C (SDA e SCL).
  • Mantenha o sensor afastado de fontes de calor durante os testes.
  • Verifique o endereço I2C correto usando um esboço de scanner I2C.
  • Certifique-se de que o LCD está corretamente inicializado com o endereço correto.

Instruções de Fiação

Arduino wiring for HTU21DF light intesity sensor with LCD
Arduino wiring for HTU21DF light intesity sensor with LCD

Para conectar o sensor HTU21D e o display LCD 1602, siga estas etapas cuidadosamente:

Primeiro, conecte o sensor HTU21D. Conecte o primeiro pino (VCC) ao pino de 3,3 V no Arduino. O segundo pino (GND) deve ser conectado ao terra (GND) do Arduino. O terceiro pino (SDA) é conectado ao pino A4 no Arduino, e o quarto pino (SCL) se conecta ao pino A5. Certifique-se de usar as cores corretas dos fios para clareza, usando vermelho para VCC, preto para GND, laranja para SDA e amarelo para SCL.

Em seguida, para o display LCD 1602, conecte o pino VCC ao pino de 5 V no Arduino e o pino GND ao terra. O pino SDA do LCD deve ser conectado ao mesmo pino A4 usado para o HTU21D, e o pino SCL deve ser conectado ao pino A5. Essa configuração permite que tanto o sensor quanto o display se comuniquem via protocolo I2C.

Exemplos de Código e Passo a Passo

No texto, o primeiro passo é incluir as bibliotecas necessárias para o sensor e o LCD. A linha#include é essencial para a comunicação I2C, enquanto#include "Adafruit_HTU21DF.h"inicializa o sensor HTU21D. A próxima linha cria uma instância da classe HTU21D:

Adafruit_HTU21DF htu = Adafruit_HTU21DF();

Esta linha configura o sensor para uso no programa, permitindo-nos chamar seus métodos mais tarde para ler os valores de temperatura e umidade.

Dentro dosetup()função, inicializamos o monitor serial e o display LCD. As linhas seguintes verificam se o sensor está funcionando corretamente:

if (htu.begin()) {
    lcd.print("HTU21DF Bargraph");  
} else {
    lcd.print("missing HTU21DF"); 
    while(1); // Pause forever.
}

Se o sensor não conseguir inicializar, o programa exibirá uma mensagem de erro e interromperá a execução. Isso é crucial para a depuração e garante que o sensor esteja conectado corretamente.

Noloop()função, leituras de temperatura são feitas e exibidas. A linhafloat T = getHTU('H');recupera a temperatura ou a umidade com base no parâmetro passado. O valor recuperado é então exibido no LCD:

lcd.setCursor (0,1); 
lcd.print(T); // print  
lcd.print((char)223); // prints degree symbol
lcd.print("C"); //

Este código posiciona o cursor na segunda linha do LCD e imprime o valor da temperatura junto com o símbolo de grau. O uso de(char)223é um truque útil para exibir o símbolo de grau no LCD.

Demonstração / O que Esperar

Uma vez que tudo esteja configurado e o código seja carregado, você deverá ver as leituras de temperatura exibidas no LCD como um gráfico de barras. As leituras serão atualizadas continuamente, refletindo a temperatura e umidade atuais. Se você soprar ar quente no sensor, verá a temperatura subir rapidamente, confirmando que o sistema funciona como esperado. Tenha cuidado com polaridade invertida ou fiação incorreta, pois isso pode levar a mau funcionamento ou danos (no vídeo às 02:30).

Marcação de Vídeo

  • 00:00- Introdução
  • 01:30- Explicação da Fiação
  • 02:30- Revisão de Código
  • 04:00- Demonstração
  • 05:30- Conclusão

Imagens

Arduino wiring for HTU21DF light intesity sensor with LCD
Arduino wiring for HTU21DF light intesity sensor with LCD
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
214-Arduino code using HTU21D-F Humidity & Temperature on LCD bargraph
Idioma: C++
/* 
 *  Display Temperature from HTU21D(F) on LCD as bargraph
 *  Written and Updated by Ahmad Shamshiri on July 18, 2019
 *  for Robojax in Ajax, Ontario, Canada
  Watch Video tutorial for this code: https://youtu.be/kpGvzNWLHuk

  Must watch: 
  1- Introduction to HTU21DF
  https://youtu.be/Q5y18rgTAhA
  2- LCD1602-I2C video: https://youtu.be/q9YC_GVHy5A
  
 *  Original Sources: 
 *  LCD library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
 *  Bargraph library from https://playground.arduino.cc/Code/LcdBarGraph/
 *  
 *  


- (GND) to GND
+ (VDD) to 3.3V

(WARNING: Do not connect + to 5V or the sensor will be damaged!)

*/

#include <Wire.h>
#include "Adafruit_HTU21DF.h"
Adafruit_HTU21DF htu = Adafruit_HTU21DF();

#define maxValue 160 // is the value in celsius or fahrenheit set in line above

// LCD settings
#include <LiquidCrystal_I2C.h>
byte lcdNumCols = 16; // -- number of columns in the LCD
byte lcdLine = 2; // -- number of lines in the LCD

LiquidCrystal_I2C lcd(0x3f,lcdNumCols,lcdLine); //0x3f is address for I2C
                  // to get I2C address, run I2C Scanner. 
                  //Link is provided (in same page as this code) at http://robojax.com/learn/arduino
// bargraph settings
#include <LcdBarGraphRobojax.h>
LcdBarGraphRobojax robojax(&lcd, 16, 0, 0);  // -- creating 16 character long bargraph starting at char 0 of line 0 (see video)



void setup()
{
  Serial.begin(9600);//initialize serial monitor
 // -- initializing the LCD
  lcd.begin();
  lcd.clear();
  lcd.print("Robojax"); 
   
 
  // Initialize the sensor (it is important to get calibration values stored on the device).

  if (htu.begin())
  {
   lcd.setCursor (0,1); //  
    lcd.print("HTU21DF Bargraph");  
  }else {
    lcd.setCursor (0,1); //  
    lcd.print("missing HTU21DF"); 
    while(1); // Pause forever.
  }
  // -- give user some time to read the text above
  delay(2000);
  lcd.clear();  
}// setup

void loop()
{
 // Robojax HTU21DF Bargraph main loop

 robojax.clearLine(1);// clear line 1 to display fresh temperature
 float T = getHTU('H');// get the temperature
 float Tgraph=T;

     if( Tgraph > maxValue){   
        Tgraph =0;
     }
        robojax.drawValue( Tgraph, maxValue);// draw the bargraph     
      // Print out the measurement:
      Serial.print("temperature: ");
      Serial.print(T,2);


      lcd.setCursor (0,1); //
      if(T< maxValue){       
       lcd.print("Temp.:"); 
       //lcd.print("Humi.:"); 
      }else{
       lcd.print("Max.:"); 
      }
      lcd.setCursor (7,1); //
      lcd.print(T); // print  
      lcd.print((char)223);// prints degree symbol
      //lcd.print("%");// prints degree symbol      
      lcd.print("C");//

 
delay(500);
}


/*
 * @brief returns temperature or relative humidity
 * @param "type" is a 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 the 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)
{
  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')
   {
    if(rel_hum<0){rel_hum =0;}//prevents it from negative value
    value = rel_hum;//return relative humidity
   }else{
    value = temp;// return Celsius
   }
   return value;
}//

Arquivos📁

Folha de dados (pdf)