风筝
发表于: 2023-9-5 21:53:19 | 显示全部楼层

您是否想过要记录温室中的气候、搭建温湿度控制系统或追踪踪气象站项目的温度和湿度数据? HTU21D温湿度传感器可能是您的正确选择!


该传感器经过工厂校准,无需外部组件即可工作。 因此,只需几个连接和一些Arduino代码,您就可以立即开始测量相对湿度和温度。


硬件概述

该模块搭载一颗瑞士MEAS公司的低成本、易于使用、高精度的数字温度和湿度传感器 – HTU21D

HTU21D-Module-Hardware-Overview.jpg

该模块尺寸小,几乎可以安装在任何东西上,例如恒温器、恒湿器、室内气象站和类似设备,用于监测和控制温度/湿度。


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-Module-Voltage-Regulator-Translator.jpg

HTU21D在测量期间的功耗低于0.5mA,在睡眠模式期间的功耗低于0.14μA。 这种低功耗允许在手机、可穿戴设备或智能手表等电池驱动设备中实施。


I2C接口

HTU21D是一款I2C传感器,这意味着它使用大多数微控制器上可用的两条I2C数据/时钟线,并且可以与其他I2C传感器共享这些引脚,只要它们不发生地址冲突。


传感器具有固定的 I2C 地址并设置为0x40。 需要多路复用器才能与单个总线上的多个HTU21D传感器进行通信。


HTU21D模块引脚排列

现在让我们看一下引脚排列。

HTU21D-Module-Pinout.png

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)。


下图显示了接线。

Wiring-Connecting-HTU21D-Module-with-Arduino.png

安装库

要启动并运行传感器,您需要安装Adafruit HTU21DF。 它可以从Arduino库管理器获得。


要安装库,请导航至 Sketch > Include Library > Manage Libraries... 等待库管理器下载库索引并更新已安装库的列表。通过输入“HTU21D”过滤搜索结果并安装库。

Adafruit-HTU21D-Library-Installation.png

Adafruit_HTU21DF库在内部使用Adafruit Bus IO库帮助程序库来抽象I2C和SPI事务和寄存器。 因此,在库管理器中搜索 adafruit bus 并安装。

Adafruit-BusIO-Library-Installation.png

Arduino代码 – 读取温度和湿度

下面是一个基本的Arduino草图。 继续将其上传到Arduino。 您将看到您房间当前的温度和湿度!

  1. #include <Wire.h>
  2. #include "Adafruit_HTU21DF.h"

  3. Adafruit_HTU21DF htu = Adafruit_HTU21DF();

  4. void setup() {
  5.   Serial.begin(9600);

  6.   if (!htu.begin()) {
  7.     Serial.println("Couldn't find sensor!");
  8.     while (1);
  9.   }
  10. }

  11. void loop() {
  12.     float temp = htu.readTemperature();
  13.     float rel_hum = htu.readHumidity();
  14.     Serial.print("Temp: "); Serial.print(temp); Serial.print(" C");
  15.     Serial.print("\t\t");
  16.     Serial.print("Humidity: "); Serial.print(rel_hum); Serial.println(" \%");
  17.     delay(500);
  18. }
复制代码

代码上传后,使用波特率9600打开串行终端。 您应该看到类似于下面的输出。 尝试对着传感器呼吸,看看湿度和温度值都发生变化!

HTU21D-Sensor-Arduino-Output.png


代码说明

代码非常简单。 首先,包含Wire.hAdafruit_HTU21DF.h库,并在全局空间中创建Adafruit_HTU21DF对象。

  1. #include <Wire.h>
  2. #include "Adafruit_HTU21DF.h"

  3. Adafruit_HTU21DF htu = Adafruit_HTU21DF();
复制代码

在setup函数中,我们初始化与PC的串行通信并调用begin()函数。


htu.begin() 函数初始化传感器。 如果找到传感器并正确响应,则此函数返回 True;如果未找到传感器,则返回 False。

  1. void setup() {
  2.   Serial.begin(9600);

  3.   if (!htu.begin()) {
  4.     Serial.println("Couldn't find sensor!");
  5.     while (1);
  6.   }
  7. }
复制代码

初始化后,您可以使用点运算符访问对象 (htu) 的方法。

htu.readTemperature() 返回浮点温度读数(以 °C 为单位)。 您可以通过乘以1.8再加上32来转换为华氏度。

htu.readHumidity() 返回湿度读数,也是0到100之间的浮点值(读取 % 湿度)

  1. void loop() {
  2.     float temp = htu.readTemperature();
  3.     float rel_hum = htu.readHumidity();
  4.     Serial.print("Temperature: "); Serial.print(temp); Serial.print(" C");
  5.     Serial.print("\t");
  6.     Serial.print("Humidity: "); Serial.print(rel_hum); Serial.println(" \%");
  7.     delay(500);
  8. }
复制代码

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-24 02:10 , Processed in 0.045529 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表