Cerca codice

Lezione 35-2: Utilizzo del sensore di temperatura HTU21D - Codice personalizzato

Lezione 35-2: Utilizzo del sensore di temperatura HTU21D - Codice personalizzato

In questo tutorial, esploreremo come utilizzare il sensore di temperatura HTU21D con Arduino per misurare temperatura e umidità. L'HTU21D è un sensore affidabile e a basso consumo energetico che comunica tramite I2C, rendendolo facile da integrare nei tuoi progetti. Alla fine di questa lezione, avrai un codice funzionante che legge la temperatura in gradi Celsius, Fahrenheit e Kelvin, oltre all'umidità relativa.

HTU21D module

Prima di immergerci nel cablaggio e nel codice, è essenziale comprendere i componenti coinvolti. Il sensore HTU21D richiede connessioni minime: alimentazione, massa e due fili I2C per il trasferimento dei dati. Questa semplicità lo rende un'ottima scelta per varie applicazioni, dalle stazioni meteorologiche ai dispositivi per la casa intelligente. Per una guida visiva, fai riferimento al video al timestamp 03:45.

Spiegazione dell'hardware

Il componente principale di questo progetto è il sensore HTU21D, che misura temperatura e umidità. Questo sensore può operare con tensioni da 1.5V a 3.6V, rendendolo versatile per diverse applicazioni. Fornisce letture ad alta risoluzione, con misurazioni della temperatura che vanno da -40°C a +125°C e letture di umidità con una risoluzione dello 0,04%.

Inoltre, il sensore utilizza la comunicazione I2C, che richiede due pin: SDA (linea dei dati) e SCL (linea di clock). Questo consente un'integrazione semplice con Arduino e altri microcontrollori senza la necessità di cablaggi complessi. La libreria Adafruit semplifica l'interazione con il sensore, gestendo il recupero dei dati e i protocolli di comunicazione in modo fluido.

Dettagli del datasheet

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

  • Assicurati di fornire una corretta alimentazione per evitare danni al sensore.
  • Utilizzare resistori pull-up sulle linee SDA e SCL se non sono integrati.
  • Mantieni le connessioni dei sensori brevi per ridurre al minimo il rumore.
  • Monitora la tensione durante il funzionamento per mantenere la stabilità.
  • Considera di utilizzare un condensatore per il disaccoppiamento vicino ai pin di alimentazione.

Istruzioni di cablaggio

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

Per cablare il sensore di temperatura HTU21D, inizia collegando l'alimentazione e la massa. Collega il pin sinistro del sensore a una fonte di 3,3 V, assicurandoti che possa gestire la tensione richiesta. Il secondo pin, tipicamente contrassegnato in rosso, dovrebbe andare a terra.

Successivamente, collega il pin SDA del sensore al pinA4sull'Arduino, che funge da linea dati per la comunicazione I2C. Quindi, collega il pin SCL al pinA5, che funge da linea della cronologia. Assicurati che queste connessioni siano sicure, poiché cavi allentati possono portare a letture intermittenti o a un'interruzione nella comunicazione con il sensore.

Esempi di codice e guida passo passo

Nel codice, iniziamo includendo le librerie necessarie e inizializzando il sensore. La rigaAdafruit_HTU21DF htu = Adafruit_HTU21DF();crea un'istanza della classe sensore. Nelsetup()funzione, iniziamo la comunicazione seriale e verifichiamo se il sensore è collegato correttamente.

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

Questo frammento controlla se il sensore sta funzionando correttamente. In caso contrario, stampa un messaggio di errore e interrompe il programma. Nelloop()funzione, leggiamo continuamente i valori di temperatura e umidità.

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

Qui, la funzionegetHTU()viene chiamato con parametri diversi per recuperare la temperatura in gradi Celsius e l'umidità. Il ritardo garantisce che le letture vengano effettuate ogni secondo, fornendo un output fluido sul monitor seriale. Il codice completo è disponibile per riferimento sotto l'articolo.

Dimostrazione / Cosa Aspettarsi

Una volta che tutto è collegato correttamente e il codice è caricato, dovresti vedere le letture di temperatura e umidità stampate nel monitor seriale. La temperatura sarà visualizzata in Celsius, seguita dalla corrispondente percentuale di umidità. Se applichi calore al sensore, dovresti osservare l'aumento della temperatura di conseguenza (nel video alle 10:15).

Fai attenzione ai limiti del sensore; se la temperatura supera i 125 °C, potrebbe restituire una lettura errata o visualizzare zero. Assicurati sempre che le tue connessioni siano sicure e che il sensore sia alimentato correttamente per evitare problemi durante il funzionamento.

Timestamp video

  • 00:00Introduzione
  • 03:45Cablaggio del sensore
  • 05:30Guida al codice
  • 10:15Dimostrazione
  • 12:00Conclusione

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
513-Lesson 35: Using HTU21D Temperature Sensor (F, C, K, RH)
Lingua: C++
/*
 * Robojax Arduino Step-by-Step Course
 * Part 4: Temperature Sensors
 * Lesson 35: HTU21D Temperature Sensor Custom code
 
 * Written/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 & Temperature 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() {
//Get the code for the course: http://robojax.com/L/?id=339  	
  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)