This tutorial is part of: 数字式相对湿度和温度传感器 HTU21D
本文下方提供了与数字式相对湿度和温度传感器 HTU21D 相关的视频链接。
第35課:用Arduino使用HTU21D溫度感測器
第35課:用Arduino使用HTU21D溫度感測器
喺呢個教學入面,我哋會學點樣將HTU21D溫度感測器同Arduino連接。呢個感測器用I2C通訊嚟準確量度溫度同濕度,令到佢好容易整合到唔同嘅項目入面。完成呢一課之後,你就會識得由感測器讀取溫度同濕度數值,並且喺Serial Monitor上面顯示出嚟。

為咗呢個項目,我哋會用Adafruit函式庫,佢提供咗一個直接嘅方法同HTU21D感測器通訊。你會學到點樣設定接線、寫程式,同埋明白程式入面用到嘅主要識別碼。如果你對過程嘅任何部分有疑問,可以參考影片(影片0:00位置)。
硬件解說
HTU21D係一個數碼濕度同溫度感測器。佢嘅操作電壓範圍係1.5V至3.6V,適合用喺3.3V同5V嘅系統。感測器透過I2C通訊,只需要兩條線嚟傳輸數據:串行數據線(SDA)同串行時鐘線(SCL)。呢個感測器嘅功耗好低,閒置時只係用0.02 µA,量度期間最多用450 µA。
除咗感測器之外,你仲需要一塊Arduino板同埋一啲跳線嚟連接所有嘢。接線好簡單:幫感測器供電、連接數據線,跟住就可以開始。確保你嘅連接穩固,避免任何通訊問題。
數據手冊細節
| 製造商 | TE Connectivity |
|---|---|
| 零件編號 | HTU21D-F |
| 邏輯/I/O電壓 | 1.5 - 3.6 V |
| 供電電壓 | 3.3 V |
| 輸出電流(典型值) | 0.02 µA(閒置),450 µA(運作中) |
| 溫度範圍 | -40至+125 °C |
| 濕度範圍 | 0至100 % RH |
| 解像度(溫度) | 0.01 °C |
| 解像度(濕度) | 0.04 % RH |
| 封裝 | DFN-8 |
- 確保供電電壓正確(1.5 - 3.6 V),避免損壞。
- 如有需要,喺SDA同SCL線上加拉高電阻。
- 保持接線短啲,減少I2C通訊嘅噪音。
- 小心檢查連接,避免浮空輸入。
- 如果喺接近最高溫度極限操作,要使用散熱器。
接線指示

要將HTU21D感測器接到Arduino,首先連接電源引腳。將感測器嘅左邊引腳連接到Arduino嘅3.3V輸出。第二個引腳應該連接到地線(GND)。跟住,將感測器嘅SDA引腳連接到Arduino嘅A4引腳,呢個係I2C通訊嘅數據線。最後,將感測器嘅SCL引腳連接到Arduino嘅A5引腳,呢個係時鐘線。確保所有連接穩固,以維持可靠嘅通訊。
如果你用嘅係其他板,SDA同SCL引腳可能唔同,所以要檢查你塊板嘅規格。喺影片入面,有簡單討論其他接線選項(影片1:30位置)。
程式碼範例同講解
我哋而家睇吓同HTU21D感測器連接嘅程式碼。首先,我哋需要包含I2C通訊同HTU21D感測器所需嘅函式庫。以下節錄顯示setup函數:
void setup() {
Serial.begin(9600);
if (!htu.begin()) {
Serial.println("搵唔到感測器!");
while (1);
}
}
喺度,我哋以9600嘅波特率初始化Serial Monitor。然後我哋嘗試用htu.begin()初始化感測器。如果搵唔到感測器,程式會印出錯誤訊息並停止。
跟住,我哋喺loop函數入面持續讀取溫度同濕度數值:
void loop() {
float temp = htu.readTemperature();
float rel_hum = htu.readHumidity();
Serial.print("溫度:"); Serial.print(temp); Serial.println(" C");
Serial.print("濕度:"); Serial.print(rel_hum); Serial.println(" %");
delay(500);
}
喺呢個迴圈入面,我哋用htu.readTemperature()讀取溫度,並將佢儲存喺temp變數入面。同樣,我哋用htu.readHumidity()讀取濕度。然後每500毫秒將數值印到Serial Monitor。
如果想用更有結構嘅方法,你可以定義函數嚟處理讀數。完整程式碼會喺呢篇文章下面載入,畀你完整使用所有討論過嘅功能。
示範/預期效果
當你將程式碼上載到Arduino並打開Serial Monitor,你應該會見到持續嘅溫度同濕度讀數。數值會每半秒更新一次。如果感測器偵測到超過最高125 °C嘅溫度,佢可能會顯示零或者錯誤數值。呢個係測試時要留意嘅常見陷阱(影片4:30位置)。
影片時間標記
- [00:00] 介紹
- [00:22] 感測器概覽
- [01:22] 數據手冊回顧
- [02:28] 接線
- [03:03] 函式庫安裝
- [04:05] 程式碼解說(第1部分)
- [08:33] 程式碼解說(第2部分)
- [07:34] 現場示範
This tutorial is part of: 数字式相对湿度和温度传感器 HTU21D
- Lesson 35-1: Using the HTU21D Temperature Sensor
- Lesson 35-2: Using the HTU21D Temperature Sensor Custom Code
- Lesson 36: Using the HTU21D Temperature Sensor with an LCD Arduino Step-by-Step Course
- 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)
++
/***************************************************
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);
}
你可能需要嘅嘢
-
亞馬遜
-
易贝Purchase HTU21D from eBayebay.us
-
阿里巴巴速卖通Purchase HTU21D or SHT21 from AliExpresss.click.aliexpress.com
資源與參考資料
-
外部Adafruit HTU21D Library (GitHub)github.com
-
外部Difference between HTU21DF and HTU21D (image)robojax.com
-
外部HTU21D Datasheet (PDF)cdn-shop.adafruit.com
文件📁
Arduino 函式庫 (zip)
-
Adafruit HTU21DF library (Robojax.com)
robojax_HTU21DF_Adafruit_HTU21DF_Library-master.zip0.01 MB