搜索代码

使用两个额外的 HTU21DF 湿度和温度传感器与 Arduino 结合使用

使用两个额外的 HTU21DF 湿度和温度传感器与 Arduino 结合使用

在本教程中,我们将学习如何将两个HTU21DF温湿度传感器与Arduino连接并使用。HTU21DF传感器以其准确性和低功耗而著称,适用于各种应用。到本教程结束时,您将能够从两个传感器读取温度和湿度值,并在串口监视器上显示这些值。

HTU21D module

首先,我们将简要介绍本项目涉及的硬件组件。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 线路上使用上拉电阻。

接线说明

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

要连接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

上述代码设置了所需的库并创建了两个传感器对象,htu1htu2将用于独立读取每个传感器的数据。

接下来,在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- 结论

图像

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

|||您可能需要的东西

资源与参考

文件📁

数据手册 (pdf)