HTU21D温湿度传感器与Arduino连接电路图说明

简介: 在本用户指南中,我们将学习如何将 HTU21D 温湿度传感器模块与 Arduino 连接。首先,我们将向您介绍 HTU21D 传感器,包括其引出线、特性以及与 Arduino 的接口。其次,我们将在 Arduino IDE 中安装 Adafruit HTU21D 库以访问传感器数据。最后,我们将看到两个在串行监视器和 SSD1306 OLED 显示器上显示温度和湿度值的示例。

HTU21D传感器模块介绍

HTU21D 温度和传感器模块采用紧凑型用户友好型尺寸,采用来自瑞士 MEAS 的 HTU21D 芯片。该芯片实际上是提供各种功能的温度和湿度传感器,并且与微控制器一起使用非常简单。该传感器能够测量 -40 至 125°C 范围内的温度读数,精度为 ±0.3°C。同样,HTU21D 芯片还提供湿度传感器,其工作湿度范围为 0-100%,典型精度为 2%。


GY -213V-HTU21D 传感器模块具有 3.3V 稳压器和电平转换器。因此,与 Arduino、ESP32、STM32 等微控制器一起使用非常方便。该传感器非常适合与微控制器一起用于温度和湿度测量,例如恒温器、气象站等。此外,由于其低功耗(测量传感器数据时小于 0.5mA,睡眠模式时小于 0.14µA)非常适合在使用电池的设备中使用。


HTU21D 传感器模块如下图所示,它封装了 HTU21D 传感器芯片和用于 I2C 通信的内置 4.7k 欧姆上拉电阻。它是一个 3.3V 传感器,使用内联逻辑电平转换器或 10k 电阻来限制 5V 信号。

mrchip.jpg

I2C接口

HTU21D 传感器模块使用 I2C 通信协议将传感器数据传输到微控制器。传感器模块具有 SCL(串行时钟)和 SDA(串行数据)引脚,可与 Arduino 或支持相同接口的其他传感器的 I2C 接口连接。

然而,HTU21D 传感器模块带有一个固定的 I2C 地址,即 0x40。为了与同一总线上的多个 HTU21D 传感器进行通信,需要一个多路复用器。

要在同一总线上使用多个 I2C 设备,HTU21D 传感器模块上的 4.7k 欧姆电阻被禁用。

HTU21D 传感器模块引出线

下图为市售的两种 HTU21D 传感器模块的引脚图。两者均由四个引脚组成。

下面列出了 HTU21D 传感器模块的引脚排列及其简要说明。

HTU21D模块管脚 描述
车辆识别号 这是为传感器模块供电的引脚。HTU21传感器模块连接3.3V,GY-213V-HTU21D传感器模块连接Arduino的3.3或5V引脚。
地线 这是用于在设备之间提供公共接地的接地引脚。
SCL 这是产生时钟信号的串行时钟引脚。
SDA 这是用于发送和接收数据的串行数据引脚

规格

HTU21D温湿度传感器规格如下表所示。

电源 3.3-5.5V(适用于GY-213V-HTU21D传感器模块)
1.5-3.6V(适用于HTU21传感器模块)
湿度范围 0 – 100 %相对湿度
湿度精度 5% 至 95% RH 范围内的 ±2%
温度范围 -40˚C 至 +125˚C
温度精度 ±0.3˚C 在 25°C
响应时间 5秒
测量时间 50毫秒

将 HTU21D 模块与 Arduino 接口

在本节中,让我们向您展示如何将 HTU21D 传感器模块连接到 Arduino。mrchip.jpg

下面列出了 HTU21D 传感器模块的引脚排列及其简要说明。

HTU21D模块管脚 描述
车辆识别号 这是为传感器模块供电的引脚。HTU21传感器模块连接3.3V,GY-213V-HTU21D传感器模块连接Arduino的3.3或5V引脚。
地线 这是用于在设备之间提供公共接地的接地引脚。
SCL 这是产生时钟信号的串行时钟引脚。
SDA 这是用于发送和接收数据的串行数据引脚

规格

HTU21D温湿度传感器规格如下表所示。

电源 3.3-5.5V(适用于GY-213V-HTU21D传感器模块)
1.5-3.6V(适用于HTU21传感器模块)
湿度范围 0 – 100 %相对湿度
湿度精度 5% 至 95% RH 范围内的 ±2%
温度范围 -40˚C 至 +125˚C
温度精度 ±0.3˚C 在 25°C
响应时间 5秒
测量时间 50毫秒

将 HTU21D 模块与 Arduino 接口

在本节中,让我们向您展示如何将 HTU21D 传感器模块连接到 Arduino。

mrchip.jpg

您将需要以下组件

  • Arduino
  • HTU21D 传感器模块
  • 跳线

HTU21D 与 Arduino 板的连接非常简单。HTU21D模块的VCC端接Arduino的3.3V,地接地(common ground),传感器的SCL接Arduino的SCL脚(A5),传感器的SDA接Arduino的SDA脚(A4) .

Arduino 中 SDA 的 I2C 引脚是 A4,SCL 是 A5。两个设备之间的连接可以在下表中看到。

阿杜诺 HTU21D模块
3.3V 输入电压
A4 SDA
A5 SCL
地线 地线

按照下面的 Arduino 模块示意图并相应地连接它们。

mrchip.jpg

安装 HTU21D Arduino 库

我们将使用 Arduino IDE 对我们的 Arduino 开发板进行编程。因此,您应该拥有最新版本的 Arduino IDE。

由于我们将 HTU21D 传感器模块与 Arduino 连接,因此,我们必须安装库以访问传感器数据。这个项目需要两个库:

  1. Adafruit HTU21D
  2. Adafruit 总线

我们将使用 Arduino IDE 中的库管理器来安装最新版本的库。打开您的 Arduino IDE 并转到 Sketch > Include Libraries > Manage Libraries。 在搜索栏中输入 HTU21D 并安装最新版本。

mrchip.jpg

在搜索栏中输入 Adafruit BusIO 并安装它。

mrchip.jpg

Arduino 代码——在 Arduino 串行监视器上获取 HTU21D 读数

此草图每半秒显示一次 Arduino 串行监视器上的当前温度和湿度读数。

#include <Wire.h>
#include "Adafruit_HTU21DF.h"
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
void setup() {
  Serial.begin(115200);
  if (!htu.begin()) {
    Serial.println("Check circuit. HTU21D not found!");
    while (1);
  }
}
void loop() {
    float temp = htu.readTemperature();
    float hum = htu.readHumidity();
    Serial.print("Temperature(°C): "); 
    Serial.print(temp); 
    Serial.print("\t\t");
    Serial.print("Humidity(%): "); 
    Serial.println(hum);
    delay(500);
}

守则如何运作?

现在,让我们了解代码的每个部分是如何工作的。

代码首先包含代码正常运行所需的所有必要库。Wire.h 将允许我们通过 I2C 协议进行通信。Adafruit_HTU21DF.h 库将使我们能够初始化和读取 HTU21D 传感器。

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

接下来我们创建名为“htu”的 Adafruit_HTU21DF 对象。

Adafruit_HTU21DF htu = Adafruit_HTU21DF();

setup()

在 setup() 函数中,我们以 115200 的波特率开始串行通信,然后初始化 HTU21D 传感器。如果传感器初始化不成功,相关消息将打印在串口监视器上。

void setup() {
  Serial.begin(115200);
  if (!htu.begin()) {
    Serial.println("Check circuit. HTU21D not found!");
    while (1);
  }
}

loop()

在 loop() 函数内,Arduino 首先每半秒获取一次 HTU21D 传感器读数,并将它们存储在各自的浮点变量中,“temp”代表温度,“hum”代表湿度。通过 htu.readTemperature() 获取温度读数。使用 htu.readHumidity() 函数访问湿度读数。这些读数打印在 ESP-IDF 终端中。

void loop() {
    float temp = htu.readTemperature();
    float hum = htu.readHumidity();
    Serial.print("Temperature(°C): "); 
    Serial.print(temp); 
    Serial.print("\t\t");
    Serial.print("Humidity(%): "); 
    Serial.println(hum);
    delay(500);
}


示范

在 Arduino IDE 中,单击工具 > 电路板并选择 Arduino。

mrchip.jpg

现在,单击工具 > 端口并选择您正在使用的端口。现在,通过单击上传按钮上传代码。

在您的 Arduino 开发板上上传以下代码后,按下 ENABLE 按钮,如下所示:

Image 15.png

在您的 Arduino IDE 中,打开串行监视器并将波特率设置为 115200。串行监视器将开始显示温度和湿度读数以及单位。每半秒后将显示新读数。

mrchip.jpg

在 OLED 显示屏上显示 HTU21D 传感器值

在本节中,我们将了解如何使用 Arduino IDE 和 Arduino 在 0.96 SSD1306 OLED 显示器上显示 HTU21D 传感器读数。

在 Arduino IDE 中安装 SSD1306 OLED 库

要在我们的项目中使用 OLED 显示屏,我们必须在 Arduino IDE 中安装 Adafruit SSD 1306 库。请按照以下步骤成功安装它。

打开 Arduino IDE 并单击 Sketch > Library > Manage Libraries。将打开以下窗口。

mrchip.jpg

在搜索选项卡中键入“SSD1306”并安装 Adafruit SSD1306 OLED 库。

mrchip.jpg

原理图——带 Arduino 和 HTU21D 的 OLED

mrchip.jpg

您将需要以下组件

  • Arduino
  • HTU21D 传感器模块
  • SSD1306 有机发光二极管
  • 面包板
  • 跳线

下表显示了应连接在一起的三个设备的端子。

有机发光显示器 阿杜诺 HTU21D 传感器模块
虚拟控制中心 3.3V 车辆识别号
地线 地线 地线
SCL A5 SCL
SDA A4 SDA

如下图所示组装电路:

mrchip.jpg

正如您在上面看到的,我们已经将所有 VCC 端子连接到 Arduino 的 3.3V 引脚。SCL端子与A5相连,SDA端子与A4相连。理由也很普遍。

Arduino Sketch 在 OLED 上显示 HTU21D 读数

把下面的代码复制到你的Arduino IDE中,组装好上面的电路图后上传到Arduino。

#include <Wire.h>
#include "Adafruit_HTU21DF.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);
void setup() {
  Serial.begin(115200);
  if (!htu.begin()) {
    Serial.println("Check circuit. HTU21D not found!");
    while (1);
  }
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  
   // init done
  display.display();
  delay(100);
  display.clearDisplay();
  display.display();
  display.setTextColor(WHITE);
}
void loop() {
    float temp = htu.readTemperature();
    float hum = htu.readHumidity();
    Serial.print("Temperature(°C): "); 
    Serial.print(temp); 
    Serial.print("\t\t");
    Serial.print("Humidity(%): "); 
    Serial.println(hum);
  display.setCursor(0,0);
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("Temperature: ");
  display.setTextSize(2);
  display.setCursor(0,10);
  display.print(temp);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");
  // display humidity
  display.setTextSize(1);
  display.setCursor(0, 35);
  display.print("Humidity: ");
  display.setTextSize(2);
  display.setCursor(0, 45);
  display.print(hum);
  display.print(" %");
  display.display();
  delay(500);
}

守则如何运作?

代码的最大部分与我们之前讨论的相同,除了 OLED 显示部分。因此,我们这里只对OLED显示部分进行说明。

我们将首先包含 HTU21D 传感器以及我们之前刚刚安装的 OLED 显示器所需的所有库。

#include <Wire.h>
#include "Adafruit_HTU21DF.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

现在,我们将创建另一个名为“display”的对象,它将处理 OLED 显示器。此外,通过将参数传递给 Adafruit_SSD1306() 函数来定义 OLED 显示屏的大小。

Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);

通过调用显示对象的 begin() 方法来初始化 OLED 显示。

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

接下来,我们将通过调用 clearDisplay() 函数来清除 OLED 屏幕。此外,我们使用 setTextColor() 函数设置文本的颜色,并将 WHITE 作为参数传递。如果我们有一个黑暗的背景,我们将以白色显示我们的文本,如果我们有一个明亮的背景,那么我们将以黑色显示文本。

display.clearDisplay();
  display.display();
  display.setTextColor(WHITE);

在 OLED 上显示读数

在 loop() 函数中,我们获取 HTU21D 传感器读数并将其打印在 OLED 显示屏上。

我们将串口监视器上的温湿度值一一显示在OLED上。此代码块在 OLED 上显示 HTU21D 传感器值并每半秒更新一次值。

display.setCursor(0,0);
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("Temperature: ");
  display.setTextSize(2);
  display.setCursor(0,10);
  display.print(temp);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");
  // display humidity
  display.setTextSize(1);
  display.setCursor(0, 35);
  display.print("Humidity: ");
  display.setTextSize(2);
  display.setCursor(0, 45);
  display.print(hum);
  display.print(" %");
  display.display();
  delay(500);

在上面的代码中,setTextSize() 函数用于设置字体的大小。我们对“温度”和“湿度”等简单文本使用小字体,并使用大字体显示实际温度和湿度读数。我们将使用 setCursor() 函数来表示文本应该开始的 x 轴和 y 轴位置。最后,print() 函数将文本写入定义的位置。

本文来源:IC先生网www.mrchip.cn,请勿转载。

相关文章
|
2月前
|
IDE 开发工具
基于单片机的简易步进电机控制系统
基于单片机的简易步进电机控制系统
20 0
|
9月前
|
安全 IDE 开发工具
了解有源和无源蜂鸣器的区别以及如何在Arduino中使用它
在本文中,我们将探索蜂鸣器的内部结构,检查其内部结构,并对其工作系统有更深入的了解。在这里,我们讨论一下有源蜂鸣器和无源蜂鸣器的区别。该设备的主要功能是将电信号转换为音频声音。蜂鸣器可分为有源蜂鸣器和无源蜂鸣器两种不同类型,它们都是极化的。
1235 0
|
10月前
|
传感器
Arduino实现超声波测距
Arduino实现超声波测距
|
11月前
|
数据处理
LabVIEW串口示波器
之前的博文分享过LabVIEW虚拟数字示波器,虚拟示波器的数据来自于软件模拟,本篇博文将分享一款串口示波器,LabVIEW设计上位机,数据来自于节点上传(STM32)。 上位机使用LabVIEW技术实现三通道示波器,实现数据处理和显示,支持多种触发方式,支持实时采集,可以对信号进行加窗处理,并具有FFT频谱分析等功能。
LabVIEW控制Arduino采集电位器电压(基础篇—4)
利用LIAT函数库中模拟IO的功能,通过Arduino Uno控制板上模拟输入端口实现对电压的测量,并显示在LabVIEW前面板上。
|
11月前
|
传感器
STM32 AHT10温湿度传感器数据
STM32 AHT10温湿度传感器数据 机智云传输温湿度
148 0
|
12月前
|
传感器 前端开发 机器人
基于单片机的智能循迹避障小车STC89C52红外对管L298N驱动PWM波控制速度
利用红外对管检测黑线与障碍物,并以STC89C52单片机为控制芯片控制电动小汽车的速度及转向,从而实现自动循迹避障的功能。其中小车驱动由L298N驱动电路完成,速度由单片机输出的PWM波控制。
214 0
|
传感器 芯片
可编程 USB 转串口适配器开发板与振弦传感器测量模块
当通过 IIC 接口修改 VM5xx 单个寄存器后,被修改的寄存器立即保存(断电不丢失),但连续寄存器的写入仅当时修改生效,模块重启后会自动恢复。为了能够使寄存器永久保存,可以单独向功能寄存器 03 写入指令码 0x000C 来强制保存所有寄存器。
可编程 USB 转串口适配器开发板与振弦传感器测量模块
|
12月前
|
传感器
【arduino】超声波垃圾桶
【arduino】超声波垃圾桶
122 0