Search Code

Lecția 35: Utilizarea senzorului de temperatură HTU21D cu Arduino

Lecția 35: Utilizarea senzorului de temperatură HTU21D cu Arduino

Lecția 35: Utilizarea senzorului de temperatură HTU21D cu Arduino

În acest tutorial, vom învăța cum să interfajăm senzorul de temperatură HTU21D cu un Arduino. Acest senzor permite măsurarea precisă a temperaturii și umidității folosind comunicarea I2C, ceea ce îl face ușor de integrat în diverse proiecte. Până la sfârșitul acestei lecții, veți putea citi valorile de temperatură și umiditate de la senzor și să le afișați pe Monitorul Serial.

HTU21D module

Pentru acest proiect, vom folosi biblioteca Adafruit, care oferă o modalitate simplă de a comunica cu senzorul HTU21D. Veți învăța cum să configurați cablajul, să scrieți codul și să înțelegeți identificatorii cheie folosiți în program. Dacă aveți nevoie de clarificări asupra oricărei părți a procesului, puteți consulta videoclipul (în videoclip la 0:00).

Hardware Explicat

HTU21D este un senzor digital de umiditate și temperatură. Funcționează pe o gamă de tensiune de 1,5V până la 3,6V, fiind potrivit atât pentru sisteme de 3,3V, cât și de 5V. Senzorul comunică prin I2C, necesitând doar două fire pentru transferul de date: Linia de Date Serială (SDA) și Linia de Ceas Serială (SCL). Senzorul are un consum de energie foarte scăzut, consumând doar 0,02 µA în stare de repaus și până la 450 µA în timpul măsurătorilor.

Pe lângă senzor, veți avea nevoie de o placă Arduino și de câteva fire de legătură pentru a conecta totul. Conexiunile sunt simple: alimentați senzorul, conectați liniile de date și sunteți gata de plecare. Asigurați-vă că conexiunile sunt sigure pentru a evita problemele de comunicare.

Detalii din Fișa Tehnică

Producător TE Connectivity
Număr de piesă HTU21D-F
Tensiune logică/IO 1,5 - 3,6 V
Tensiune de alimentare 3,3 V
Curent de ieșire (tipic) 0,02 µA (repaus), 450 µA (activ)
Gamă de temperatură -40 până la +125 °C
Gamă de umiditate 0 până la 100 % RH
Rezoluție (temperatură) 0,01 °C
Rezoluție (umiditate) 0,04 % RH
Pachet DFN-8

 

  • Asigurați o tensiune de alimentare adecvată (1,5 - 3,6 V) pentru a evita deteriorarea.
  • Folosiți rezistențe de pull-up pe liniile SDA și SCL dacă este necesar.
  • Păstrați cablurile scurte pentru a minimiza zgomotul în comunicarea I2C.
  • Verificați cu atenție conexiunile pentru a evita intrările flotante.
  • Folosiți un radiator dacă operați aproape de limitele maxime de temperatură.

Instrucțiuni de Cablare

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

Pentru a cabla senzorul HTU21D la Arduino, începeți prin conectarea pinilor de alimentare. Conectați pinul din stânga al senzorului la ieșirea de 3,3V de pe Arduino. Al doilea pin ar trebui conectat la masă (GND). Apoi, conectați pinul SDA al senzorului la pinul A4 al Arduino, care servește ca linie de date pentru comunicarea I2C. În final, conectați pinul SCL al senzorului la pinul A5 de pe Arduino, care acționează ca linie de ceas. Asigurați-vă că toate conexiunile sunt sigure pentru a menține o comunicare fiabilă.

Dacă folosiți o altă placă, pinii SDA și SCL pot varia, așa că verificați specificațiile plăcii dumneavoastră. În videoclip, opțiunile alternative de cablare sunt discutate pe scurt (în videoclip la 1:30).

Exemple de Cod & Explicații

Vom analiza acum codul care interfajează cu senzorul HTU21D. În primul rând, trebuie să includem bibliotecile necesare pentru comunicarea I2C și pentru senzorul HTU21D. Următorul extras arată funcția de configurare:

void setup() {
  Serial.begin(9600);
  if (!htu.begin()) {
    Serial.println("Nu am găsit senzorul!");
    while (1);
  }
}

Aici, inițializăm Monitorul Serial la o viteză de transmisie de 9600. Apoi încercăm să inițializăm senzorul cu htu.begin(). Dacă senzorul nu este găsit, programul va afișa un mesaj de eroare și se va opri.

În continuare, citim continuu valorile de temperatură și umiditate în funcția loop:

void loop() {
    float temp = htu.readTemperature();
    float rel_hum = htu.readHumidity();
    Serial.print("Temperatură: "); Serial.print(temp); Serial.println(" C");
    Serial.print("Umiditate: "); Serial.print(rel_hum); Serial.println(" %");
    delay(500);
}

În această buclă, citim temperatura folosind htu.readTemperature() și o stocăm în variabila temp. În mod similar, citim umiditatea cu htu.readHumidity(). Valorile sunt apoi afișate pe Monitorul Serial la fiecare 500 de milisecunde.

Pentru o abordare mai structurată, puteți defini funcții pentru a gestiona citirile. Codul complet va fi încărcat mai jos în acest articol, oferindu-vă acces complet la toate funcționalitățile discutate.

Demonstrație / Ce să Așteptați

Când încărcați codul pe Arduino și deschideți Monitorul Serial, ar trebui să vedeți citiri continue de temperatură și umiditate. Valorile se vor actualiza la fiecare jumătate de secundă. Dacă senzorul detectează temperaturi peste limita maximă de 125 °C, poate afișa valori zero sau eronate. Aceasta este o capcană comună de urmărit în timpul testării (în videoclip la 4:30).

Marcaje Temporale din Videoclip

  • [00:00] Introducere
  • [00:22] Prezentarea Senzorului
  • [01:22] Revizuirea Fișei Tehnice
  • [02:28] Cablare
  • [03:03] Instalarea Bibliotecii
  • [04:05] Explicația Codului (Partea 1)
  • [08:33] Explicația Codului (Partea 2)
  • [07:34] Demonstrație Live

Imagini

thumb_robojax_HTU21DF_types-1756423961-8524
thumb_robojax_HTU21DF_types-1756423961-8524
Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
212-Arduino code using HTU21D-F Humidity & Temperature Sensor (basic)
Limba: C++
++
/***************************************************
  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 module 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 htu1 = Adafruit_HTU21DF();//create object for first HTU21DF sensor
Adafruit_HTU21DF htu2 = Adafruit_HTU21DF();//create object for second HTU21DF sensor
//Adafruit_HTU21DF htu3 = Adafruit_HTU21DF();//create object for third HTU21DF sensor (disabled, remove // from begging of code)

void setup() {
  Serial.begin(9600);
  Serial.println("HTU21D-F test for two modules");

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

void loop() {
	//get value for sensor 1
    float temp1 = htu1.readTemperature();
    float rel_hum1 = htu1.readHumidity();

	//get value for sensor 2
    float temp2 = htu2.readTemperature();
    float rel_hum2 = htu2.readHumidity();	

	//get value for sensor 3
    float temp3 = htu3.readTemperature();
    float rel_hum3 = htu3.readHumidity();	
	
	//print values for sensor 1
    Serial.print("Sensor 1 Temp : "); Serial.print(temp1); Serial.print(" C");
    Serial.print("\t\t");
    Serial.print("Sensor 1 Humidity: "); Serial.print(rel_hum1); Serial.println(" %");

	//print values for sensor 2
    Serial.print("Sensor 2 Temp : "); Serial.print(temp2); Serial.print(" C");
    Serial.print("\t\t");
    Serial.print("Sensor 2 Humidity: "); Serial.print(rel_hum2); Serial.println(" %");	
	
	//print values for sensor 3
    //Serial.print("Sensor 3 Temp : "); Serial.print(temp3); Serial.print(" C");
    //Serial.print("\t\t");
    //Serial.print("Sensor 3 Humidity: "); Serial.print(rel_hum3); Serial.println(" %");	
	
    delay(500);
}

Lucruri de care ai putea avea nevoie

Fișiere📁

Biblioteci Arduino (zip)