Cerca codice

Lezione 35-1: Utilizzo del sensore di temperatura HTU21D

Lezione 35-1: Utilizzo del sensore di temperatura HTU21D

In questo tutorial, esploreremo come utilizzare il sensore di temperatura e umidità HTU21D con un Arduino. L'HTU21D è un sensore compatto che comunica tramite I2C, rendendo facile l'interfacciamento con i microcontrollori. Alla fine di questa lezione, sarai in grado di leggere i valori di temperatura e umidità e di visualizzarli tramite il monitor seriale di Arduino.

HTU21D module

Per questo progetto, utilizzeremo la libreria Adafruit appositamente progettata per il sensore HTU21D. La libreria semplifica il processo di lettura dei dati del sensore, permettendoci di concentrarci sull'integrazione del sensore nei nostri progetti. Ci si può aspettare di vedere le letture di temperatura del sensore in gradi Celsius, Fahrenheit e Kelvin, così come la percentuale di umidità relativa (nel video alle 03:15).

Hardware spiegato

Il componente principale per questo progetto è il sensore di temperatura e umidità HTU21D. Questo sensore funziona con una tensione di alimentazione da 1,5 a 3,6 volt e consuma pochissima energia, rendendolo ideale per dispositivi alimentati a batteria. Comunica con l'Arduino utilizzando il protocollo I2C, richiedendo solo due linee di dati: SDA per i dati e SCL per il clock.

Per alimentare il sensore, lo collegheremo a una sorgente da 3,3V o 5V, a seconda del modulo specifico che stai utilizzando. La versione Adafruit include un regolatore di tensione, consentendole di funzionare senza problemi con entrambi i livelli di tensione. Questa flessibilità lo rende una scelta eccellente per diverse applicazioni.

Dettagli della scheda tecnica

ProduttoreTE Connectivity
Numero di parteHTU21D-F
Tensione logica/IO1,5 - 3,6 V
Tensione di alimentazione3,3 V (tipico)
Consumo attuale (inattivo)0,02 µA
Consumo attuale (misurazione)450 µA (tip.)
Intervallo di temperatura-40 a +125 °C
Risoluzione dell'umidità0,04 %
Pacchetto6-pin DFN

  • Garantire livelli di tensione appropriati per evitare di danneggiare il sensore.
  • Utilizzare resistenze di pull-up sulle linee I2C se non incluse nel modulo.
  • Mantieni i cavi corti per ridurre al minimo le interferenze con la comunicazione I2C.
  • Considera l'uso di dissipatori di calore se utilizzato in ambienti ad alta temperatura.
  • Controlla l'orientamento del sensore per garantire connessioni corrette dei pin.

Istruzioni per il cablaggio

Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor

Per collegare il sensore HTU21D al tuo Arduino, inizia collegando il pin VCC del sensore al pin di alimentazione 3.3V dell'Arduino. Successivamente, collega il pin GND del sensore al pin di massa (GND) dell'Arduino. Poi, collega il pin SDA del sensore al pin analogico A4 dell'Arduino, che funge da linea dati I2C. Infine, collega il pin SCL del sensore al pin analogico A5, che funge da linea clock I2C. Assicurati che i tuoi collegamenti siano sicuri per evitare letture intermittenti.

Per chiarezza, se stai utilizzando un'altra scheda, assicurati di identificare i pin corretti per SDA e SCL poiché potrebbero variare. Questa configurazione di cablaggio consentirà all'Arduino di comunicare efficacemente con il sensore HTU21D (nel video alle 05:00).

Esempi di codice e guida passo passo

Di seguito è riportato un estratto dalla funzione di configurazione che inizializza la comunicazione seriale e verifica se il sensore è stato trovato:

void setup() {
  Serial.begin(9600);
  if (!htu.begin()) {
    Serial.println("Couldn't find sensor!");
    while (1);
  }
}

Questo codice inizia la comunicazione seriale a una velocità di trasmissione di 9600 e tenta di inizializzare il sensore HTU21D. Se il sensore non viene rilevato, stamperà un messaggio di errore e interromperà ulteriori esecuzioni.

Il ciclo principale del programma legge continuamente i valori di temperatura e umidità:

void loop() {
    Serial.print(getHTU('C'));
    Serial.println("C");
    Serial.print("Humidity:");
    Serial.print(getHTU('H'));
    Serial.println("%");
    delay(1000);
}

In questo ciclo, chiamiamo la funzionegetHTUcon 'C' per ottenere la temperatura in Celsius e 'H' per ottenere l'umidità. I risultati vengono stampati sul monitor seriale ogni secondo. Questo consente di osservare in tempo reale le letture del sensore.

In aggiunta, abbiamo una funzionegetHTUche restituisce la temperatura o l'umidità in base a un input di carattere:

float getHTU(char type) {
    float temp = htu.readTemperature();
    float rel_hum = htu.readHumidity();
    return (type == 'H') ? rel_hum : temp;
}

Questa funzione legge la temperatura e l'umidità dal sensore e restituisce il valore appropriato in base al tipo specificato. Questo approccio modulare mantiene il codice pulito e facile da mantenere.

Dimostrazione / Cosa Aspettarsi

Una volta completata correttamente l'installazione e l'esecuzione del codice, dovresti vedere i valori di temperatura e umidità stampati nel monitor seriale. Se applichi calore al sensore, le letture della temperatura dovrebbero aumentare di conseguenza, mentre l'umidità potrebbe diminuire. Se la temperatura supera il massimo range del sensore, potrebbero comparire risultati imprevisti, come zero (nel video alle 12:00).

Timestamp video

  • 00:00- Introduzione
  • 03:15- Panoramica dei sensori
  • 05:00- Istruzioni di cablaggio
  • 10:00- Esecuzione del codice
  • 12:00- Dimostrazione

Immagini

Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
512-Lesson 35: Using HTU21D Temperature Sensor
Lingua: C++
/*
 * 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");  
}

Cose di cui potresti avere bisogno

File📁

Scheda tecnica (pdf)