Questo tutorial è parte di: Sensore digitale di umidità relativa e temperatura HTU21D
Video relativi al sensore digitale di umidità relativa e temperatura HTU21D. I link ad altri video si trovano sotto questo articolo.
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.

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
| Produttore | TE Connectivity |
|---|---|
| Numero di parte | HTU21D-F |
| Tensione logica/IO | 1,5 - 3,6 V |
| Tensione di alimentazione | 3,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 % |
| Pacchetto | 6-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

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
Questo tutorial è parte di: Sensore digitale di umidità relativa e temperatura HTU21D
- Lezione 35-2: Utilizzo del sensore di temperatura HTU21D - Codice personalizzato
- Lezione 35: Utilizzo del sensore di temperatura HTU21D con Arduino
- Lezione 36: Utilizzare il sensore di temperatura HTU21D con un LCD Corso Arduino passo dopo passo
- Utilizzare due ulteriori sensori di umidità e temperatura HTU21DF con Arduino
- Visualizzazione della temperatura da un HTU21D su un LCD
- Visualizzazione della temperatura da un HTU21D come un grafico a barre su un LCD
- Come utilizzare il sensore di umidità e temperatura HTU21DF con Arduino (Codice di base)
- Come utilizzare il sensore di umidità e temperatura HTU21DF con Arduino (Codice personalizzato)
/*
* 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
-
Amazon
-
eBayAcquista HTU21D da eBayebay.us
-
AliExpressAcquista HTU21D o SHT21 su AliExpresss.click.aliexpress.com
Risorse e riferimenti
-
EsternoDifferenza tra HTU21DF e HTU21D (immagine)robojax.com
File📁
Scheda tecnica (pdf)
-
HTU21D_foglio_dati_temperatura_umidità
HTU21D_temerature_humidity_datasheet.pdf0.96 MB -
Scheda tecnica dei sensori di temperatura e umidità HTU31D HTU31V
HTU31_Sensors_Datasheet.pdf0.67 MB