0、结果
说明:先来看看串口调试助手显示的结果,第一个值是温度值,第二个值是湿度值,并且保留一位小数。如果是你想要的,可以接着往下看。
1、外观
说明:虽然sht3x温湿度传感器形态各异,但是原理和代码都是适用的。
2、连线
说明:只需要连接四根线。
uno————sht3x温湿度传感器
3.3V--------------VCC
GND--------------GND
SCL--------------SCL
SDA--------------SDA
3、源程序
说明:采用非阻塞方式编写,一定时间检测一次温湿度信息,并将对应功能进行函数化,方便移植。
/****************************************sht3x温湿度 part****************************************/
/*接线:3.3V------VCCGND------GNDSCL------SCLSDA------SDA
*/
#include <Arduino.h> //调用库文件
#include <Wire.h> //调用库文件
#include "Adafruit_SHT31.h" //调用库文件Adafruit_SHT31 sht31 = Adafruit_SHT31(); //实例化对象#define sht3xTimeInterval 1000 //检测一次的时间间隔
float sht3xTemp = 0, sht3xHumi = 0; //存储温度值和湿度值。
unsigned long sht3xTimes = 0; //记录设备运行时间
/****************************************set up and loop part*********************************/
void setup() {Serial.begin(9600); //设置串口波特率为9600if (! sht31.begin(0x44)) { //传感器IIC初始化while (millis() - 1000) {Serial.println("找不到SHT31"); //串口打印对应的值}}Serial.println("设备上线!");
}
void loop() {getData(); //获取温湿度值。
}
/****************************************sht3x温湿度 part****************************************/
/*获取温度和湿度函数*/
void getData() {if (millis() - sht3xTimes >= sht3xTimeInterval) { //一定时间执行一次sht3xTimes = millis();sht3xTemp = sht31.readTemperature(); //获取温度数据sht3xHumi = sht31.readHumidity(); //获取湿度数据Serial.print("温度:"); //串口打印对应的值Serial.print(sht3xTemp, 1); //保留一位小数Serial.print(" (C), "); //串口打印对应的值Serial.print("湿度:"); //串口打印对应的值Serial.print(sht3xHumi, 1); //保留一位小数Serial.println(" (%)。"); //串口打印对应的值}
}
4、注意事项
说明:切记最好接3.3V,不要接5V。如果程序下进去不能正常显示,可能需要查一下传感器的IIC地址是不是0x44,不是的话需要改过来。
5、基本原理
SHT30是一款数字式温湿度传感器,采用Sensirion专利的CMOSens技术。其工作原理是通过感应空气中温度和湿度对芯片内部微小电容器的影响,从而将这些物理量转换成数字信号输出。
具体来说,SHT30主要包括一个微处理器、一个湿度感测单元、一个温度感测单元以及一个16位的ADC转换单元。当空气中的水分子进入传感器时,它们会被湿度感测单元吸附并引起微小电容器的变化。而温度感测单元则使用热敏电阻来感知环境温度,并将温度值转换为数字信号。
最终,这些数字信号经过一定的校验和处理后输出到传感器的数据接口上,供外部MCU进行读取和处理。SHT30采用数字输出方式,精度高、抗干扰性能好,常用于各种温湿度监测系统中。