SHT31传感器模块与Arduino连接图解示意
SHT31温度和传感器模块采用紧凑的用户友好尺寸,采用Sensirion的SHT31芯片。该芯片实际上是温度和湿度传感器,提供各种功能、接口并且非常易于与微控制器一起使用。
SHT31传感器能够测量-40至125°C范围内的温度读数,精度高达±0.2°C。同样,SHT32芯片还提供湿度传感器,其工作湿度范围为0-100%,典型相对湿度精度为2%。
由于尺寸小、成本低以及2.15-5.5V的宽工作电压范围,SHT31传感器是与微控制器一起使用进行温度和湿度测量(例如恒温器、气象站等)的绝佳选择。
I2C接口
SHT31传感器模块使用I2C通信协议将传感器数据传输到微控制器。传感器模块具有SCL(串行时钟)和SDA(串行数据)引脚,可与Arduino或支持相同接口的其他传感器的I2C接口连接。
需要注意的是,SHT31传感器模块带有两个I2C地址,分别是0x44和0x45。默认情况下,I2C地址设置为0x44。用户可以通过I2C地址选择引脚(俗称AD)更改I2C地址。
AD引脚包含一个内部下拉电阻,确保当该引脚未连接(低电平状态)时,I2C地址为0x44(默认)。然而,当该引脚的状态设置为高电平时,I2C地址为0x45。通过为每个传感器设置相同的I2C地址,此地址更改功能使用户可以自由地在同一总线上使用多个SHT31传感器模块。
警报输出引脚
SHT31传感器模块有一个独特的功能,即它具有一个警报输出引脚(通常称为AL),用于将模块设置为警报模式。通过使用该引脚,用户可以使传感器与微控制器一起工作,其中传感器不断获取读数,而微控制器则执行不同的任务。只要温度和湿度读数大于用户定义的范围,就会发生这种情况。因此,AL引脚充当触发引脚,其工作方式类似于中断。
只要湿度或温度读数超过用户定义的上限或下限,AL引脚就会进入高电平状态。该引脚保持高电平状态,直到值回到正常限制范围。
SHT31传感器模块引脚配置
下图为SHT31传感器模块的引脚图,该模块由6个引脚组成,具体如下图所示:
以下列出了SHT31传感器模块的引脚排列及其简要说明。
引脚名称 | 功能描述 |
---|---|
VIN | 为传感器模块提供2.4-5.5V范围内的电源。将其与Arduino的5V引脚连接。 |
GND | 用于在设备之间提供公共接地的接地引脚。 |
SCL | 生成时钟信号的串行时钟引脚。 |
SDA | 串行数据引脚,用于发送和接收数据 |
AD | I2C地址选择引脚。 |
AL | 警报输出引脚。 |
SHT31传感器模块规格
下表为SHT31温湿度传感器的规格:
典型相对湿度精度 | 2%相对湿度 |
工作相对湿度范围 | 0 – 100%相对湿度 |
响应时间 (τ63%) | 8秒 |
典型温度精度 | 0.2℃ |
工作温度范围 | -40 – 125°C |
响应时间 (τ63%) | 小于2秒 |
电源电压 | 2.4 – 5.5V |
平均供电电流 | 1.7微安 |
最大供电电流 | 1500微安 |
SHT31模块与Arduino的接口
接下来,主要介绍如何将SHT31传感器模块与Arduino连接。将需要以下组件:
- Arduino
- SHT31传感器模块
- 跳线
SHT31与Arduino板的连接非常简单。将SHT31模块的VCC端与Arduino的5V相连,GND与地(公共地)相连,传感器的SCL与Arduino的SCL引脚(A5)相连,传感器的SDA与Arduino的SDA引脚(A4)相连。
Arduino中SDA的I2C引脚是A4,SCL的I2C引脚是A5。两个设备之间的连接如下表所示。
Arduino | SHT31模块 |
---|---|
5V | VIN |
A4 | SDA |
A5 | SCL |
GND | GND |
按照下面的Arduino模块原理图进行相应连接。
安装SHT31 Arduino库
由于使用Arduino IDE对Arduino开发板进行编程。因此,应该拥有最新版本的Arduino IDE。由于将SHT31传感器模块与Arduino连接,因此必须安装库来访问传感器数据。该项目需要两个库:
- Adafruit SHT31
- Adafruit BusIO
这里将使用Arduino IDE中的库管理器来安装最新版本的库。打开Arduino IDE并转到Sketch>Include Libraries>Manage Libraries。然后在搜索栏中输入Adafruit SHT31并安装最新版本。
在搜索栏中输入Adafruit BusIO并安装它,如下图所示:
在Arduino串行监视器上获取SHT31读数
下面的代码功能实现每秒在Arduino串行监视器上显示当前温度和湿度读数:
#include <Arduino.h> #include <Wire.h> #include "Adafruit_SHT31.h" Adafruit_SHT31 sht31 = Adafruit_SHT31(); void setup() { Serial.begin(115200); if (! sht31.begin(0x44)) { Serial.println("Check circuit. SHT31 not found!"); while (1) delay(1); } } void loop() { float temp = sht31.readTemperature(); float hum = sht31.readHumidity(); if (! isnan(temp)) { Serial.print("Temperature(°C): "); Serial.print(temp); Serial.print("\t\t"); } else { Serial.println("Failed to read temperature!"); } if (! isnan(hum)) { Serial.print("Humidity(%): "); Serial.println(hum); } else { Serial.println("Failed to read humidity!"); } delay(1000); }
应用示例
在Arduino IDE中,单击“Tools”>“Board”,然后选择“Arduino Uno”:
现在,单击“Tools”>“Port”并选择你正在使用的端口。现在,单击上传按钮上传上面的代码。将代码上传到Arduino开发板上后,按ENABLE按钮,如下所示:
在Arduino IDE中,打开串行监视器并将波特率设置为115200。串行监视器将开始显示温度和湿度读数以及单位。每秒都会显示新的读数,如下草图所示:
另外,如果感兴趣及有条件的话,大家也可以在OLED显示屏上显示SHT31传感器值,以方便查看(范例如下图所示),具体的连接电路和代码,本文就不赘述了。