Search Code

Lekcija 35: Korištenje HTU21D senzora temperature s Arduinom

Lekcija 35: Korištenje HTU21D senzora temperature s Arduinom

Lekcija 35: Korištenje HTU21D senzora temperature s Arduinom

U ovom tutorijalu naučit ćemo kako povezati HTU21D senzor temperature s Arduinom. Ovaj senzor omogućava precizno mjerenje temperature i vlažnosti koristeći I2C komunikaciju, što ga čini lakim za integraciju u različite projekte. Do kraja ove lekcije moći ćete čitati vrijednosti temperature i vlažnosti sa senzora i prikazivati ih na Serial Monitoru.

HTU21D module

Za ovaj projekt koristit ćemo Adafruit biblioteku, koja pruža jednostavan način komunikacije s HTU21D senzorom. Naučit ćete kako postaviti ožičenje, napisati kod i razumjeti ključne identifikatore korištene u programu. Ako vam je potrebno pojašnjenje bilo kojeg dijela procesa, možete pogledati video (u videu na 0:00).

Objašnjenje hardvera

HTU21D je digitalni senzor vlažnosti i temperature. Radi u rasponu napona od 1.5V do 3.6V, što ga čini pogodnim za sisteme od 3.3V i 5V. Senzor komunicira preko I2C-a, zahtijevajući samo dvije žice za prijenos podataka: Serial Data Line (SDA) i Serial Clock Line (SCL). Senzor ima vrlo nisku potrošnju energije, trošeći samo 0.02 µA u stanju mirovanja i do 450 µA tokom mjerenja.

Osim senzora, trebat će vam Arduino ploča i nekoliko jumper žica za povezivanje svega. Veze su jednostavne: napajajte senzor, povežite podatkovne linije i spremni ste. Provjerite da su vaše veze sigurne kako biste izbjegli probleme s komunikacijom.

Detalji iz tehničke dokumentacije

Proizvođač TE Connectivity
Broj dijela HTU21D-F
Logički/IO napon 1.5 - 3.6 V
Napon napajanja 3.3 V
Izlazna struja (tipična) 0.02 µA (mirovanje), 450 µA (aktivno)
Temperaturni raspon -40 do +125 °C
Raspon vlažnosti 0 do 100 % RH
Rezolucija (temperatura) 0.01 °C
Rezolucija (vlažnost) 0.04 % RH
Pakovanje DFN-8

 

  • Osigurajte odgovarajući napon napajanja (1.5 - 3.6 V) kako biste izbjegli oštećenja.
  • Koristite pull-up otpornike na SDA i SCL linijama ako je potrebno.
  • Držite ožičenje kratkim kako biste smanjili šum u I2C komunikaciji.
  • Pažljivo provjerite veze kako biste izbjegli plutajuće ulaze.
  • Koristite hladnjak ako radite blizu maksimalnih temperaturnih granica.

Upute za ožičenje

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

Da biste povezali HTU21D senzor s Arduinom, počnite spajanjem pinova za napajanje. Spojite lijevi pin senzora na 3.3V izlaz na Arduinu. Drugi pin treba spojiti na uzemljenje (GND). Zatim spojite SDA pin senzora na A4 pin Arduina, koji služi kao podatkovna linija za I2C komunikaciju. Na kraju, spojite SCL pin senzora na A5 pin Arduina, koji djeluje kao linija takta. Provjerite da su sve veze sigurne kako biste održali pouzdanu komunikaciju.

Ako koristite drugu ploču, SDA i SCL pinovi mogu varirati, pa provjerite specifikacije svoje ploče. U videu su ukratko razmotrene alternativne opcije ožičenja (u videu na 1:30).

Primjeri koda i objašnjenje

Sada ćemo pogledati kod koji komunicira s HTU21D senzorom. Prvo moramo uključiti potrebne biblioteke za I2C komunikaciju i HTU21D senzor. Sljedeći izvod prikazuje setup funkciju:

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

Ovdje inicijaliziramo Serial Monitor pri brzini prijenosa od 9600. Zatim pokušavamo inicijalizirati senzor s htu.begin(). Ako senzor nije pronađen, program će ispisati poruku o grešci i zaustaviti se.

Zatim kontinuirano čitamo vrijednosti temperature i vlažnosti u loop funkciji:

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

U ovoj petlji čitamo temperaturu koristeći htu.readTemperature() i pohranjujemo je u varijablu temp. Slično tome, čitamo vlažnost s htu.readHumidity(). Vrijednosti se zatim ispisuju na Serial Monitor svakih 500 milisekundi.

Za strukturiraniji pristup možete definirati funkcije za obradu očitanja. Kompletan kod će se učitati ispod ovog članka, pružajući vam potpuni pristup svim funkcionalnostima o kojima se raspravljalo.

Demonstracija / Šta očekivati

Kada prenesete kod na svoj Arduino i otvorite Serial Monitor, trebali biste vidjeti kontinuirana očitanja temperature i vlažnosti. Vrijednosti će se ažurirati svake pola sekunde. Ako senzor detektuje temperature iznad maksimalne granice od 125 °C, može prikazati nulu ili pogrešne vrijednosti. Ovo je česta zamka na koju treba obratiti pažnju tokom testiranja (u videu na 4:30).

Vremenske oznake videa

  • [00:00] Uvod
  • [00:22] Pregled senzora
  • [01:22] Pregled tehničke dokumentacije
  • [02:28] Ožičenje
  • [03:03] Instalacija biblioteke
  • [04:05] Objašnjenje koda (1. dio)
  • [08:33] Objašnjenje koda (2. dio)
  • [07:34] Živa demonstracija

Images

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)
Language: 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);
}

Things you might need

Files📁

Arduino Libraries (zip)