Cerca codice

Visualizzazione della temperatura da un HTU21D come un grafico a barre su un LCD

Visualizzazione della temperatura da un HTU21D come un grafico a barre su un LCD

In questo tutorial, impareremo come visualizzare le letture di temperatura da un sensore di temperatura e umidità HTU21D su un display LCD sotto forma di grafico a barre. Le letture includeranno valori in Celsius, Fahrenheit, Kelvin e umidità relativa, fornendo una panoramica completa delle condizioni ambientali. Questo progetto ti aiuterà a capire come collegare correttamente i componenti e implementare il codice necessario per far funzionare tutto in modo fluido.

HTU21D module

Per coloro che desiderano una guida visiva, assicurati di controllare il video associato a questo tutorial (nel video a :00).

Hardware Spiegato

I principali componenti di questo progetto includono il sensore HTU21D e il display LCD 1602. L'HTU21D è un sensore digitale di umidità e temperatura che comunica tramite I2C. Fornisce letture accurate di temperatura e umidità, che possono essere facilmente accessibili attraverso la sua libreria. Il display LCD 1602, d'altra parte, mostra le letture in un formato leggibile dall'uomo, consentendo valutazioni rapide delle condizioni ambientali.

L'HTU21D utilizza un semplice interfaccio I2C, rendendo facile la connessione e la comunicazione con microcontrollori come l'Arduino. Il display LCD 1602 utilizza anch'esso l'I2C, il che semplifica il cablaggio riducendo il numero di pin necessari per collegarsi all'Arduino. Questo consente una configurazione più pulita fornendo comunque un'uscita visiva chiara.

Dettagli della scheda tecnica

ProduttoreAdafruit
Numero di parteHTU21D
Tensione logica/IO3,3 V (tip.)
Tensione di alimentazione1,5 - 3,6 V
Intervallo di temperatura-40 a 125 °C
Intervallo di umidità0 a 100 %UR
Risoluzione0,01 °C / 0,04 %UR
ComunicazioneI2C
Pacchetto4-pin LGA

  • Usa 3,3 V per alimentare l'HTU21D; collegarlo a 5 V può danneggiarlo.
  • Assicurati che siano utilizzati corretti resistori di pull-up sulle linee I2C (SDA e SCL).
  • Tieni il sensore lontano dalle fonti di calore durante i test.
  • Controlla l'indirizzo I2C corretto utilizzando uno sketch di scanner I2C.
  • Assicurati che il LCD sia correttamente inizializzato con l'indirizzo giusto.

Istruzioni di cablaggio

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

Per collegare il sensore HTU21D e il display LCD 1602, segui attentamente questi passaggi:

Innanzitutto, collega il sensore HTU21D. Collega il primo pin (VCC) al pin da 3,3 V sull'Arduino. Il secondo pin (GND) dovrebbe essere collegato a terra (GND) dell'Arduino. Il terzo pin (SDA) è collegato al pin A4 sull'Arduino, e il quarto pin (SCL) si collega al pin A5. Assicurati di utilizzare i colori dei fili corretti per chiarezza, usando il rosso per VCC, il nero per GND, l'arancione per SDA e il giallo per SCL.

Successivamente, per il display LCD 1602, collegare il pin VCC al pin da 5 V sull'Arduino e il pin GND a terra. Il pin SDA dell'LCDC dovrebbe essere collegato allo stesso pin A4 utilizzato per l'HTU21D, e il pin SCL dovrebbe collegarsi al pin A5. Questa configurazione consente sia al sensore che al display di comunicare tramite il protocollo I2C.

Esempi di codice e guida passo passo

Nel codice, il primo passo è includere le librerie necessarie per il sensore e l'LCD. La riga#include è essenziale per la comunicazione I2C, mentre#include "Adafruit_HTU21DF.h"inizializza il sensore HTU21D. La riga successiva crea un'istanza della classe HTU21D:

Adafruit_HTU21DF htu = Adafruit_HTU21DF();

Questa riga configura il sensore per l'uso nel programma, permettendoci di chiamare i suoi metodi in seguito per leggere i valori di temperatura e umidità.

Dentro ilsetup()Funzione, iniziamo il monitor seriale e il display LCD. Le seguenti righe controllano se il sensore funziona correttamente:

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

Se il sensore non riesce a inizializzarsi, il programma visualizzerà un messaggio di errore e interromperà l'esecuzione. Questo è fondamentale per il debug e garantisce che il sensore sia collegato correttamente.

Nellaloop()funzione, le letture della temperatura vengono rilevate e visualizzate. La lineafloat T = getHTU('H');recupera la temperatura o l'umidità in base al parametro passato. Il valore recuperato viene quindi visualizzato sul display LCD:

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

Questo codice posiziona il cursore sulla seconda riga del LCD e stampa il valore della temperatura insieme al simbolo del grado. L'uso di(char)223è un trucco utile per visualizzare il simbolo del grado sul LCD.

Dimostrazione / Cosa Aspettarsi

Una volta che tutto è impostato e il codice è caricato, dovresti vedere le letture della temperatura visualizzate sul display LCD come un grafico a barre. Le letture si aggiorneranno continuamente, riflettendo la temperatura e l'umidità attuali. Se soffii aria calda sul sensore, vedrai la temperatura salire rapidamente, confermando che il sistema funziona come previsto. Fai attenzione alla polarità inversa o ai cablaggi errati, poiché possono portare a malfunzionamenti o danni (nel video al :30).

Timestamp video

  • 00:00- Introduzione
  • 01:30- Spiegazione del cablaggio
  • 02:30- Analisi del Codice
  • 04:00- Dimostrazione
  • 05:30- Conclusione

Immagini

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
Lingua: 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;
}//

File📁

Scheda tecnica (pdf)