Ten poradnik jest częścią: Cyfrowy czujnik wilgotności względnej i temperatury HTU21D
Filmy dotyczące cyfrowego czujnika wilgotności względnej i temperatury HTU21D. Linki do innych filmów znajdują się poniżej tego artykułu.
Lekcja 35-1: Używanie czujnika temperatury HTU21D
W tym samouczku dowiemy się, jak używać czujnika temperatury i wilgotności HTU21D z Arduino. HTU21D to kompaktowy czujnik komunikujący się przez I2C, co ułatwia jego podłączenie do mikrokontrolerów. Po zakończeniu tej lekcji będziesz w stanie odczytywać wartości temperatury i wilgotności oraz wyświetlać je przez monitor szeregowy Arduino.

Do tego projektu wykorzystamy bibliotekę Adafruit zaprojektowaną specjalnie dla czujnika HTU21D. Biblioteka upraszcza proces odczytu danych z czujnika, pozwalając nam skupić się na integracji czujnika z naszymi projektami. Możesz spodziewać się odczytów temperatury w stopniach Celsjusza, Fahrenheita i Kelvina, a także względnej wilgotności w procentach (na filmie w 03:15).
Objaśnienie Sprzętu
Głównym elementem tego projektu jest czujnik temperatury i wilgotności HTU21D. Czujnik ten działa przy napięciu zasilania od 1,5 do 3,6 wolta i zużywa bardzo mało energii, co czyni go idealnym do urządzeń zasilanych bateryjnie. Komunikuje się z Arduino za pomocą protokołu I2C, wymagając tylko dwóch linii danych: SDA do przesyłania danych i SCL do sygnału zegara.
Aby zasilić czujnik, podłączymy go do źródła 3,3 V lub 5 V, w zależności od konkretnego modułu, którego używasz. Wersja Adafruit zawiera stabilizator napięcia, dzięki czemu działa bezproblemowo z obydwoma poziomami napięcia. Ta elastyczność czyni go doskonałym wyborem do różnych zastosowań.
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 (typ.) |
| Pobór prądu (bezczynność) | 0,02 µA |
| Pobór prądu (pomiar) | 450 µA (typ.) |
| Zakres temperatury | -40 do +125 °C |
| Rozdzielczość wilgotności | 0,04 % |
| Obudowa | 6-pin DFN |
- Zapewnij odpowiednie poziomy napięcia, aby uniknąć uszkodzenia czujnika.
- Użyj rezystorów podciągających na liniach I2C, jeśli nie są one zawarte w module.
- Trzymaj przewody krótko, aby zminimalizować zakłócenia w komunikacji I2C.
- Rozważ odprowadzanie ciepła, jeśli używasz czujnika w środowiskach o wysokiej temperaturze.
- Sprawdź orientację czujnika, aby zapewnić prawidłowe podłączenie pinów.
Instrukcje Podłączania

Aby podłączyć czujnik HTU21D do Arduino, zacznij od podłączenia pinu VCC czujnika do pinu zasilania 3,3 V na Arduino. Następnie podłącz pin GND czujnika do pinu masy (GND) na Arduino. Potem podłącz pin SDA czujnika do analogowego pinu A4 na Arduino, który służy jako linia danych I2C. Na koniec podłącz pin SCL czujnika do analogowego pinu A5, który działa jako linia zegara I2C. Upewnij się, że połączenia są pewne, aby uniknąć niestabilnych odczytów.
Dla jasności, jeśli używasz innej płytki, upewnij się, że zidentyfikowałeś prawidłowe piny dla SDA i SCL, ponieważ mogą się one różnić. Ta konfiguracja okablowania pozwoli Arduino skutecznie komunikować się z czujnikiem HTU21D (na filmie w 05:00).
Przykłady Kodu i Omówienie
Poniżej znajduje się fragment funkcji setup, która inicjalizuje komunikację szeregową i sprawdza, czy czujnik został znaleziony:
void setup() {
Serial.begin(9600);
if (!htu.begin()) {
Serial.println("Nie można znaleźć czujnika!");
while (1);
}
}
Ten kod rozpoczyna komunikację szeregową z prędkością 9600 bodów i próbuje zainicjalizować czujnik HTU21D. Jeśli czujnik nie zostanie wykryty, wyświetli komunikat o błędzie i zatrzyma dalsze wykonywanie.
Główna pętla programu w sposób ciągły odczytuje wartości temperatury i wilgotności:
void loop() {
Serial.print(getHTU('C'));
Serial.println("C");
Serial.print("Wilgotność:");
Serial.print(getHTU('H'));
Serial.println("%");
delay(1000);
}
W tej pętli wywołujemy funkcję getHTU z argumentem 'C', aby uzyskać temperaturę w stopniach Celsjusza, oraz 'H', aby uzyskać wilgotność. Wyniki są drukowane na monitorze szeregowym co sekundę. Pozwala to na obserwację odczytów czujnika w czasie rzeczywistym.
Dodatkowo mamy funkcję getHTU, która zwraca temperaturę lub wilgotność na podstawie wprowadzonego znaku:
float getHTU(char type) {
float temp = htu.readTemperature();
float rel_hum = htu.readHumidity();
return (type == 'H') ? rel_hum : temp;
}
Ta funkcja odczytuje temperaturę i wilgotność z czujnika i zwraca odpowiednią wartość na podstawie określonego typu. To modułowe podejście utrzymuje kod w czystości i ułatwia jego konserwację.
Demonstracja / Czego Się Spodziewać
Po pomyślnej konfiguracji i uruchomieniu kodu powinieneś zobaczyć wartości temperatury i wilgotności wydrukowane na monitorze szeregowym. Jeśli przyłożysz ciepło do czujnika, odczyty temperatury powinny odpowiednio wzrosnąć, podczas gdy wilgotność może się zmniejszyć. Jeśli temperatura przekroczy maksymalny zakres czujnika, może wyświetlić nieoczekiwane wyniki, takie jak zero (na filmie w 12:00).
Znaczniki Czasowe Filmu
- 00:00 - Wprowadzenie
- 03:15 - Przegląd czujnika
- 05:00 - Instrukcje podłączania
- 10:00 - Omówienie kodu
- 12:00 - Demonstracja
Ten poradnik jest częścią: Cyfrowy czujnik wilgotności względnej i temperatury HTU21D
- Lekcja 35-2: Używanie niestandardowego kodu czujnika temperatury HTU21D
- Lekcja 35: Używanie czujnika temperatury HTU21D z Arduino
- Lekcja 36: Używanie czujnika temperatury HTU21D z wyświetlaczem LCD — kurs Arduino krok po kroku
- Using Two More HTU21DF Humidity and Temperature Sensors with Arduino
- Displaying Temperature from an HTU21D on an LCD
- Displaying Temperature from an HTU21D as a Bar Graph on an LCD
- How to Use the HTU21DF Humidity and Temperature Sensor with Arduino (Basic Code)
- How to Use the HTU21DF Humidity and Temperature Sensor with Arduino (Custom Code)
/*
* 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");
}
Rzeczy, których możesz potrzebować
-
Amazon
-
AllegroPurchase HTU21D from eBayebay.us
-
AliExpressPurchase HTU21D or SHT21 from AliExpresss.click.aliexpress.com
Zasoby i odniesienia
-
ZewnętrznyDifference between HTU21DF and HTU21D (image)robojax.com
-
Zewnętrzny
Pliki📁
Karta katalogowa (pdf)
-
HTU21D_temerature_humidity_datasheet
HTU21D_temerature_humidity_datasheet.pdf0.96 MB -
HTU31D HTU31V Temperature and Himidity Sensors Datasheet
HTU31_Sensors_Datasheet.pdf0.67 MB