|
您是否想过要记录温室中的气候、搭建温湿度控制系统或追踪踪气象站项目的温度和湿度数据? HTU21D温湿度传感器可能是您的正确选择!
该传感器经过工厂校准,无需外部组件即可工作。 因此,只需几个连接和一些Arduino代码,您就可以立即开始测量相对湿度和温度。
硬件概述 该模块搭载一颗瑞士MEAS公司的低成本、易于使用、高精度的数字温度和湿度传感器 – HTU21D。
该模块尺寸小,几乎可以安装在任何东西上,例如恒温器、恒湿器、室内气象站和类似设备,用于监测和控制温度/湿度。
HTU21D传感器能够读取0至100% RH的整个范围内的湿度,在5%至95%RH的范围内典型精度为±2%。
HTU21D的最高测量温度范围为-40至125°C。 它在0至70°C范围内的典型精度为±0.3°C。
在湿度和温度测量的正常模式下,传感器的分辨率为0.7%RH和0.040°C,转换时间分别为2ms和11ms。 对于更苛刻的要求,传感器允许您提高分辨率,但会增加转换时间。 在最高分辨率模式下,HTU21D可以提供0.04% RH(转换时间为 14ms)和 0.01°C(转换时间为44ms)。
电源
该模块配有一颗3.3V精确稳压器和电平转换器,因此您可以放心地将其与您最喜欢的3.3V或5V微控制器一起使用。
HTU21D在测量期间的功耗低于0.5mA,在睡眠模式期间的功耗低于0.14μA。 这种低功耗允许在手机、可穿戴设备或智能手表等电池驱动设备中实施。
I2C接口 HTU21D是一款I2C传感器,这意味着它使用大多数微控制器上可用的两条I2C数据/时钟线,并且可以与其他I2C传感器共享这些引脚,只要它们不发生地址冲突。
传感器具有固定的 I2C 地址并设置为0x40。 需要多路复用器才能与单个总线上的多个HTU21D传感器进行通信。
HTU21D模块引脚排列 现在让我们看一下引脚排列。
VCC是电源引脚。 您可以将其连接到Arduino的3.3V或5V输出。 GND是电源和逻辑的公共地。 SCL也是I2C时钟引脚,连接到你的微控制器的I2C时钟线。 SDA也是I2C数据引脚,连接到您的微控制器的I2C数据线。
将HTU21D模块连接到Arduino开发板 HTU21D湿度传感器的接线非常简单!只需连接四个引脚即可开始使用传感器。 一根用于VCC,一根用于GND,两根用于I2C通信的数据线。
将SCL引脚连接到Arduino上的I2C时钟引脚,将SDA引脚连接到I2C数据引脚。 请注意,每个Arduino开发板都有不同的I2C引脚,应进行相应的连接。 在Arduino UNO开发板上,SDA(数据线)和 SCL(时钟线)位于靠近AREF引脚的排针上。 它们也称为A5 (SCL) 和A4 (SDA)。
下图显示了接线。
安装库 要启动并运行传感器,您需要安装Adafruit HTU21DF。 它可以从Arduino库管理器获得。
要安装库,请导航至 Sketch > Include Library > Manage Libraries... 等待库管理器下载库索引并更新已安装库的列表。通过输入“HTU21D”过滤搜索结果并安装库。
Adafruit_HTU21DF库在内部使用Adafruit Bus IO库帮助程序库来抽象I2C和SPI事务和寄存器。 因此,在库管理器中搜索 adafruit bus 并安装。
Arduino代码 – 读取温度和湿度 下面是一个基本的Arduino草图。 继续将其上传到Arduino。 您将看到您房间当前的温度和湿度! - #include <Wire.h>
- #include "Adafruit_HTU21DF.h"
- Adafruit_HTU21DF htu = Adafruit_HTU21DF();
- void setup() {
- Serial.begin(9600);
- if (!htu.begin()) {
- Serial.println("Couldn't find sensor!");
- while (1);
- }
- }
- void loop() {
- float temp = htu.readTemperature();
- float rel_hum = htu.readHumidity();
- Serial.print("Temp: "); Serial.print(temp); Serial.print(" C");
- Serial.print("\t\t");
- Serial.print("Humidity: "); Serial.print(rel_hum); Serial.println(" \%");
- delay(500);
- }
复制代码
代码上传后,使用波特率9600打开串行终端。 您应该看到类似于下面的输出。 尝试对着传感器呼吸,看看湿度和温度值都发生变化!
代码说明 代码非常简单。 首先,包含Wire.h和Adafruit_HTU21DF.h库,并在全局空间中创建Adafruit_HTU21DF对象。 - #include <Wire.h>
- #include "Adafruit_HTU21DF.h"
- Adafruit_HTU21DF htu = Adafruit_HTU21DF();
复制代码
在setup函数中,我们初始化与PC的串行通信并调用begin()函数。
htu.begin() 函数初始化传感器。 如果找到传感器并正确响应,则此函数返回 True;如果未找到传感器,则返回 False。 - void setup() {
- Serial.begin(9600);
- if (!htu.begin()) {
- Serial.println("Couldn't find sensor!");
- while (1);
- }
- }
复制代码
初始化后,您可以使用点运算符访问对象 (htu) 的方法。 htu.readTemperature() 返回浮点温度读数(以 °C 为单位)。 您可以通过乘以1.8再加上32来转换为华氏度。 htu.readHumidity() 返回湿度读数,也是0到100之间的浮点值(读取 % 湿度) - void loop() {
- float temp = htu.readTemperature();
- float rel_hum = htu.readHumidity();
- Serial.print("Temperature: "); Serial.print(temp); Serial.print(" C");
- Serial.print("\t");
- Serial.print("Humidity: "); Serial.print(rel_hum); Serial.println(" \%");
- delay(500);
- }
复制代码
|