Search Code

Lekcja 35: Używanie czujnika temperatury HTU21D z Arduino

Lekcja 35: Używanie czujnika temperatury HTU21D z Arduino

Lekcja 35: Użycie czujnika temperatury HTU21D z Arduino

W tym samouczku nauczymy się, jak podłączyć czujnik temperatury HTU21D do Arduino. Ten czujnik umożliwia dokładny pomiar temperatury i wilgotności za pomocą komunikacji I2C, co ułatwia jego integrację z różnymi projektami. Po zakończeniu tej lekcji będziesz w stanie odczytywać wartości temperatury i wilgotności z czujnika oraz wyświetlać je na monitorze szeregowym.

HTU21D module

Do tego projektu użyjemy biblioteki Adafruit, która zapewnia prosty sposób komunikacji z czujnikiem HTU21D. Nauczysz się, jak skonfigurować połączenia, napisać kod i zrozumieć kluczowe identyfikatory używane w programie. Jeśli potrzebujesz wyjaśnień dotyczących dowolnej części procesu, możesz odwołać się do wideo (w filmie o 0:00).

Omówienie sprzętu

HTU21D to cyfrowy czujnik wilgotności i temperatury. Działa w zakresie napięcia od 1,5 V do 3,6 V, co czyni go odpowiednim zarówno dla systemów 3,3 V, jak i 5 V. Czujnik komunikuje się przez I2C, wymagając tylko dwóch przewodów do przesyłania danych: linii danych szeregowych (SDA) i linii zegara szeregowego (SCL). Czujnik ma bardzo niskie zużycie energii, pobierając tylko 0,02 µA w stanie bezczynności i do 450 µA podczas pomiarów.

Oprócz czujnika będziesz potrzebować płytki Arduino oraz kilku przewodów połączeniowych, aby wszystko podłączyć. Połączenia są proste: zasil czujnik, podłącz linie danych i gotowe. Upewnij się, że połączenia są pewne, aby uniknąć problemów z komunikacją.

Szczegóły z karty katalogowej

Producent TE Connectivity
Numer części HTU21D-F
Napięcie logiczne/IO 1,5 - 3,6 V
Napięcie zasilania 3,3 V
Prąd wyjściowy (typowy) 0,02 µA (bezczynność), 450 µA (aktywny)
Zakres temperatury -40 do +125 °C
Zakres wilgotności 0 do 100 % RH
Rozdzielczość (temperatura) 0,01 °C
Rozdzielczość (wilgotność) 0,04 % RH
Obudowa DFN-8

 

  • Zapewnij odpowiednie napięcie zasilania (1,5 - 3,6 V), aby uniknąć uszkodzeń.
  • W razie potrzeby użyj rezystorów podciągających na liniach SDA i SCL.
  • Utrzymuj krótkie połączenia, aby zminimalizować szumy w komunikacji I2C.
  • Dokładnie sprawdź połączenia, aby uniknąć pływających wejść.
  • Użyj radiatora, jeśli pracujesz w pobliżu maksymalnych limitów temperatury.

Instrukcje dotyczące połączeń

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

Aby podłączyć czujnik HTU21D do Arduino, zacznij od podłączenia pinów zasilania. Podłącz lewy pin czujnika do wyjścia 3,3 V na Arduino. Drugi pin należy podłączyć do masy (GND). Następnie podłącz pin SDA czujnika do pinu A4 na Arduino, który służy jako linia danych do komunikacji I2C. Na koniec podłącz pin SCL czujnika do pinu A5 na Arduino, który działa jako linia zegara. Upewnij się, że wszystkie połączenia są pewne, aby utrzymać niezawodną komunikację.

Jeśli używasz innej płytki, piny SDA i SCL mogą się różnić, więc sprawdź specyfikację swojej płytki. W filmie krótko omówiono alternatywne opcje połączeń (w filmie o 1:30).

Przykłady kodu i omówienie

Teraz przyjrzymy się kodowi, który komunikuje się z czujnikiem HTU21D. Najpierw musimy dołączyć niezbędne biblioteki do komunikacji I2C i czujnika HTU21D. Poniższy fragment pokazuje funkcję konfiguracji:

void setup() {
  Serial.begin(9600);
  if (!htu.begin()) {
    Serial.println("Nie można znaleźć czujnika!");
    while (1);
  }
}

Tutaj inicjalizujemy monitor szeregowy z prędkością transmisji 9600. Następnie próbujemy zainicjalizować czujnik za pomocą htu.begin(). Jeśli czujnik nie zostanie znaleziony, program wydrukuje komunikat o błędzie i zatrzyma się.

Następnie w funkcji pętli ciągle odczytujemy wartości temperatury i wilgotności:

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

W tej pętli odczytujemy temperaturę za pomocą htu.readTemperature() i zapisujemy ją w zmiennej temp. Podobnie odczytujemy wilgotność za pomocą htu.readHumidity(). Wartości są następnie drukowane na monitorze szeregowym co 500 milisekund.

Dla bardziej uporządkowanego podejścia możesz zdefiniować funkcje do obsługi odczytów. Pełny kod zostanie załadowany poniżej tego artykułu, zapewniając pełny dostęp do wszystkich omawianych funkcji.

Demonstracja / Czego się spodziewać

Po wgraniu kodu do Arduino i otwarciu monitora szeregowego powinieneś zobaczyć ciągłe odczyty temperatury i wilgotności. Wartości będą aktualizowane co pół sekundy. Jeśli czujnik wykryje temperatury powyżej maksymalnego limitu 125 °C, może wyświetlać zero lub błędne wartości. To częsta pułapka, na którą należy uważać podczas testowania (w filmie o 4:30).

Znaczniki czasu wideo

  • [00:00] Wprowadzenie
  • [00:22] Omówienie czujnika
  • [01:22] Przegląd karty katalogowej
  • [02:28] Połączenia
  • [03:03] Instalacja biblioteki
  • [04:05] Wyjaśnienie kodu (część 1)
  • [08:33] Wyjaśnienie kodu (część 2)
  • [07:34] Demonstracja na żywo

Obrazy

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)
Język: 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);
}

Rzeczy, których możesz potrzebować

Zasoby i odniesienia

Pliki📁

Biblioteki Arduino (zip)