本教程是的一部分: 数字式相对湿度和温度传感器 HTU21D
本文下方提供了与数字式相对湿度和温度传感器 HTU21D 相关的视频链接。
使用两个额外的 HTU21DF 湿度和温度传感器与 Arduino 结合使用
在本教程中,我们将学习如何将两个HTU21DF温湿度传感器与Arduino连接并使用。HTU21DF传感器以其准确性和低功耗而著称,适用于各种应用。到本教程结束时,您将能够从两个传感器读取温度和湿度值,并在串口监视器上显示这些值。

首先,我们将简要介绍本项目涉及的硬件组件。HTU21DF传感器通过I2C进行通信,这只需要两根数据线,以及电源和接地连接。Arduino将读取传感器数据并将结果打印到串行监视器上,让您能够实时观察温度和湿度的变化。
为了更清楚地理解接线和编码过程,建议观看相关视频(视频时间为01:30)。让我们深入细节!
硬件解读
该项目的主要组成部分是 HTU21DF 传感器,它测量温度和相对湿度。该传感器使用 I2C 通信,简化了布线,只需两条数据线。它能够测量 -40°C 到 125°C 的温度和 0% 到 100% 的湿度水平,分辨率为 0.04%。
当传感器没有主动测量时,它仅消耗 0.04 µA,使其适合电池供电的应用。在测量时,电流消耗约为 400 µA,对于大多数项目来说仍然相对较低。
数据表详细信息
| 制造商 | TE Connectivity |
|---|---|
| 部件号 | HTU21DF |
| 逻辑/IO电压 | 1.5 - 3.6 伏 |
| 供电电压 | 3.3 伏 |
| 输出电流(每通道) | 0.4 毫安 (测量) |
| 峰值电流(每通道) | 450 µA(最大) |
| PWM频率指导 | 不适用 |
| 输入逻辑阈值 | 0.3 x VDD至 0.7 倍 V空白 |
| 电压降 / RDS(开)/ 饱和度 | N/A |
| 热限制 | -40°C至+125°C |
| 包裹 | 6针DFN |
| 注释 / 变体 | 有不同包装规格可供选择。 |
- 电源:建议使用3.3 V以获得最佳性能。
- 将 SCL 连接到 I2C 时钟引脚(Arduino UNO 上的 A5)。
- 将SDA连接到I2C数据引脚(Arduino UNO上的A4)。
- 确保正确接线以避免浮动输入。
- 在测量期间监控当前消耗,以管理电池寿命。
- 如果需要,可以考虑在 I2C 线路上使用上拉电阻。
接线说明

要连接HTU21DF传感器,首先连接VCC将每个传感器的引脚连接到Arduino的3.3 V引脚。接下来,将每个传感器的GND引脚连接到一个共同的接地。对于I2C通信,将两个传感器的SDA引脚连接到Arduino的A4引脚,将SCL引脚连接到A5引脚。确保传感器电源正常,数据连接安全,以便于通信。
如果您使用额外的传感器或组件,请确保它们的接线不会干扰I2C总线。HTU21DF传感器可以并联连接到同一个I2C总线,使Arduino能够从两个传感器中读取数据而不会产生混淆。
代码示例与教程
以下代码初始化HTU21DF传感器并读取它们的温度和湿度值。首先,我们包含必要的库并创建两个传感器的实例:
#include
#include "Adafruit_HTU21DF.h"
Adafruit_HTU21DF htu1 = Adafruit_HTU21DF(); // create object for first sensor
Adafruit_HTU21DF htu2 = Adafruit_HTU21DF(); // create object for second sensor
上述代码设置了所需的库并创建了两个传感器对象,htu1和htu2将用于独立读取每个传感器的数据。
接下来,在setup()我们初始化串行监视器并检查传感器是否已连接:
void setup() {
Serial.begin(9600);
if (!htu1.begin() || !htu2.begin()) {
Serial.println("Couldn't find sensor!");
while (1);
}
}
这段代码初始化了9600波特率的串行通信,并检查两个传感器是否正常工作。如果未检测到传感器,将打印错误信息并停止程序。
在主循环中,我们从两个传感器读取温度和湿度值并将其显示出来:
void loop() {
float temp1 = htu1.readTemperature();
float rel_hum1 = htu1.readHumidity();
float temp2 = htu2.readTemperature();
float rel_hum2 = htu2.readHumidity();
Serial.print("Sensor 1 Temp: "); Serial.print(temp1); Serial.print(" C");
Serial.print("\tSensor 1 Humidity: "); Serial.print(rel_hum1); Serial.println(" %");
Serial.print("Sensor 2 Temp: "); Serial.print(temp2); Serial.print(" C");
Serial.print("\tSensor 2 Humidity: "); Serial.print(rel_hum2); Serial.println(" %");
delay(500);
}
这个循环每500毫秒连续读取并打印两个传感器的温度和湿度。您可以观察到这些值如何根据环境条件变化。
演示 / 预期内容
当您运行代码时,串行监视器将显示两个传感器的温度和湿度值。您可以施加热量,例如使用热风枪,以观察温度读数如何增加,而湿度水平可能会降低(视频在12:30)。如果温度超过最大可测量极限125°C,传感器可能返回零或错误,表明无法读取该值。
注意接线错误,例如反向连接或浮动输入,这可能导致读数不正确。通过遵循本教程中概述的步骤,您应该能够成功实现HTU21DF传感器并有效监控其读数。
视频时间戳
- 00:00- 介绍
- 01:30- 接线说明
- 02:45代码说明
- 12:30- 热风枪演示
- 14:00- 结论
++
/***************************************************
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);
}
|||您可能需要的东西
-
亚马逊从亚马逊购买HTU21D模块amzn.to
-
易趣在eBay上购买HTU21Debay.us
-
全球速卖通从AliExpress购买HTU21D或SHT21s.click.aliexpress.com
资源与参考
-
外部Adafruit HTU21D库(GitHub)github.com
文件📁
数据手册 (pdf)
-
HTU21D温湿度数据表
HTU21D_temerature_humidity_datasheet.pdf0.96 MB