sht31温湿度传感器 TDK在SmartBug中使用了Sensirion的最新湿度和温度传感器SHTC3
TDK在SmartBug中使用了Sensirion的最新湿度和温度传感器SHTC3
TDK的SmartBug™(MD-42688-P)是一种多传感器无线模块,利用TDK MEMS传感器和算法来满足广泛的IoT应用。该模块在一个小瓢虫外壳中结合了六个传感器,一个强大的无线(BLE)MCU,七个算法驱动的功能和一个可充电电池。它还带有附加板选件,该附加板包括Wi-Fi模块,SD卡插槽和TDK的超声波传感器。
集成的SHTC3是一种数字湿度和温度传感器,针对电池驱动的应用和大批量消费电子产品进行了优化。该传感器旨在克服尺寸和功率比的常规限制,从而满足消费电子市场和TDK SmartBug等产品的要求。 Sensirion的CMOSens®技术可在单个芯片上提供完整的传感器系统。小巧的2 x 2 x 0.75 mm3 DFN封装甚至可以在最小的空间中使用。该传感器的湿度测量范围为0%至100%RH,温度测量范围为-40°C至125°C,典型精度为±2%RH和±0.2°C。 SHTC3的电源电压范围为1.62 V至3.6 V,每次测量的能量预算低于1μJ,因此非常适合电池供电的移动或无线应用。
TDK的SmartBug解决方案可快速,轻松地访问智能可靠的传感器数据,而无需进行编程,焊接或其他修改。这提供了对实际应用程序签名,环境变化和多传感器/算法行为的详细见解。它包括ICM-42688-P 6轴IMU,ICP-10101压力传感器,Sensirion的湿度和温度传感器,磁传感器以及TDK可选的CH-101超声波传感器,从而形成了多合一的传感器解决方案。该模块的独特功能是通过具有自定义调整参数的IoT传感器算法提供智能传感器数据。该算法包括门开/关检测,6轴和9轴传感器融合,资产监视,HVAC过滤器监视,计步器,活动分类,手势和空中鼠标监视。 SmartBug数据和输出可以轻松地在Windows 10应用程序– SmartBug中可视化,流化和记录。该应用程序可从Microsoft Store免费下载。该应用程序提供了极大的灵活性,可根据使用情况从BLE,Wi-Fi或USB获取数据。此外,SD卡日志记录功能允许自动记录数据(最大32 GB),而无需任何Windows 10应用程序。
“ Sensirion的湿度和温度传感器具有低功耗,小尺寸和高精度的特性,是SmartBug模块的理想选择,使其适用于基于IoT的远程数据收集用例,” Motion and的产品经理Sahil Choudhary说TDK集团公司InvenSense压力传感器IoT。
Sensirion消费电子产品销售总监Heiko Komaromi表示:“ TDK的SmartBug非常适合我们的环境传感器(例如SHTC3湿度和温度传感器),提供精确可靠的测量结果,并使工程师能够轻松快捷地开发新的IoT产品。”
【STM32F103ZET6开发板】第3-6讲:SHT30数字温湿度传感器
SHT30数字温湿度传感器实验
实验目的
了解SHT30数字温湿度传感器的基本原理。掌握STM32与SHT30传感器IIC总线通信的程序设计。实验内容
编写程序检测SHT30温湿度值通过串口1在串口调试助手上显示。编写程序检测SHT30温湿度值通过串口1在艾克姆实验助手上显示。硬件设计
SHT3X系列温湿度传感器
相较于SHT2x系列,Sensirion公司推出的SHT3x系列在性能上又有所提升。SHT3x系列也包括低成本版本SHT30、标准版本SHT31和高端版本SHT35。下表详述SHT3x系列芯片性能上的几点重要参数。
表1:SHT3x温湿度传感器
SHT3X系列
典型湿度精度 %RH
典型温度精度℃
工作电压V
输出量
SHT30
±2 (10~90%RH范围)
±0.2(0~65℃范围)
2.4~5.5
D/A
SHT31
±2 (0~100%RH范围)
±0.2(0~90℃范围)
2.15~5.5
D/A
SHT35
±1.5(0~80%RH范围)
±0.1(20~60℃范围)
2.4~5.5
D
注: D代表数字量,A代表模拟量。SHT30和SHT31在选型时需要注意,输出是数字量还是模拟量对应不同型号的芯片,并不是同一个芯片具有这两种输出类型。比如:SHT30-ARP代表输出量是模拟量,SHT30-DIS代表输出量是数字量。本文档所说的SHT30数字温湿度指的是芯片采用的型号是SHT30-DIS。下面给出SHT30数字温湿度传感器和带PCB板的SHT30模块的实物图。
图1:SHT30传感器和SHT30模块实物图
注: SHT30模块是艾克姆科技设计的,该模块已在IIC总线上加有上拉电阻。SHT30数字温湿度传感器的规格参数
下面介绍下SHT30-DIS数字温湿度传感器的规格参数,SHT30-DIS模块的规格参数在此不做介绍。
表2:SHT30-DIS数字温湿度传感器规格参数
参数
规格
工作电压
2.4V~5.5V
芯片尺寸
2.5mm ×2.5mm×0.9mm
测量范围
温度:-40~+125℃ 湿度:0~100%RH
精度
温度:±0.3℃ 湿度:±3%RH (25℃)
分 辨 率
温度:0.015℃ 湿度:0.01%RH
衰 减 值
温度:<0.03℃/年 湿度:<0.25%RH/年
输出信号
IIC接口
反应时间(湿度)
8 sec(tau63%)
能耗
4.8uW(8位,1次测量/秒条件下)
引脚数
8个
SHT30数字温湿度传感器的引脚定义
下面介绍SHT30数字温湿度传感器的引脚定义,首先将SHT30数字温湿度传感器的引脚号标注下。
图2:SHT30数字温湿度传感器引脚号
表3:SHT30数字温湿度传感器引脚定义
SHT20引脚号
管脚名
功能描述
1
SDA
串行数据,双向。
2
ADDR
地址引脚,输入。
3
ALERT
报警引脚,输出;不使用时悬空。
4
SCL
串行时钟,双向。
5
VCC
供电正。
6
nRESET
复位引脚,低电平有效,输入。
7
R
无用引脚,与VSS连接。
8
VSS
供电地。
SHT30温湿度模块与开发板连接
IK-ZET6开发板上没有SHT30温湿度模块专用的接口,需杜邦线连接SHT30温湿度模块到IK-ZET6开发板上。如下图所示。
图3:SHT30模块与开发板接线图
表4:SHT30传感器与开发板连接
SHT20模块
开发板J3
说明
VCC
3V3
GND
GND
SDA
PB7
非独立GPIO
SCL
PB6
非独立GPIO
注:独立GPIO表示开发板没有其他的电路使用这个GPIO,非独立GPIO说明开发板有其他电路用到了该GPIO。软件设计
SHT30数字温湿度传感器转换公式
SHT30数字温湿度传感器采用的是标准的IIC总线通信。MCU通过IIC总线配置SHT30相关寄存器,最后会读取到6个字节的原始数据信息。这6字节数据除了温湿度信息外,还有校验位。如下:
SHT30上传的6字节的原始数据信息格式:图4:SHT30上传数据格式
MCU通过IIC总线读取的SHT30的原始数据信息需要算法才能得到与之对应的温度值和相对湿度值。下面分别给出SHT30的温度转换的计算公式和相对湿度的转换公式。
SHT30的温度转换的计算公式:图5:温度转换的计算公式
SHT30的相对湿度转换的计算公式:图6:相对湿度转换的计算公式
SHT30数字温湿度传感器 - 串口调试助手显示(模拟IIC)
注:本节的实验源码是在“实验3-19-1:SHT20温湿度传感器 - 串口调试助手显示(模拟IIC)”的基础上修改。本节对应的实验源码是:“实验3-20-1:SHT30数字温湿度传感器 - 串口调试助手显示(模拟IIC)”。工程需要用到的库文件
本例需要用到的c文件如下表所示,工程需要添加下表中的c文件。
表5:实验需要用到的C文件
序号
文件名
后缀
功能描述
1
stm32f10x_rcc
.c
复位与时钟控制器。
2
stm32f10x_gpio
.c
通用输入输出。
3
stm32f10x_usart
.c
通用同步/异步收发器。
4
misc
.c
中断向量控制器。
按下图所示将需要的c文件添加到工程。
图7:在新建工程中添加所需库函数c文件
头文件引用和路径设置
需要引用的头文件因为在“main.c”文件中使用了标准库和我们自己建的软件延时函数,所以需要引用下面的头文件。
#include "stm32f10x.h" //delay这里报错的原因是:delay函数用汇编实现的,导致了MDK误报。 #include "delay.h" 需要包含的头文件路径本例需要包含的头文件路径如下表:
表6:头文件包含路径
序号
路径
描述
1
..\Lib\F10x_FWLIB\inc
标准库头文件路径。
2
..\User
stm32f10x_conf.h头文件在该路径,所以要包含。
3
..\User\bsp
自建的板卡相关的驱动文件路径。
MDK中点击魔术棒,打开工程配置窗口,按照下图所示添加头文件包含路径。
图8:添加头文件包含路径
MCU与SHT30通信所需函数汇集
在“实验3-20-1:SHT30数字温湿度传感器 - 串口调试助手显示(模拟IIC)”工程中有sht30.c文件,该文件包括了MCU通过IIC总线与SHT30通信所用到的函数,仅供用户参考。下表列举了这些函数。
表7:MCU与SHT30通信相关函数汇集
序号
函数名
功能描述
1
SHT3X_WriteCMD
向SHT30写寄存器命令。
2
SHT3X_SetPeriodicMeasurement
设置SHT30测量周期。
3
SHT3X_Init
初始化SHT30。
4
SHT3X_ReadState
读取SHT30状态信息。
5
SHX3X_ReadResults
读取SHT30测量结果。
6
SHT3x_CheckCrc
用于数据校验。
7
SHT3X_CalcTemperature
SHT30温度计算。
8
SHT3X_CalcRH
SHT30湿度计算。
9
SHT3X_TEST
SHT30测试函数,实现温湿度串口发送。
编写代码
首先介绍下SHT30初始化函数,代码如下。
代码清单:初始化SHT30
/*************************************************************************** * 描 述 : 初始化SHT3X传感器 * 入 参 : 无 * 返回值 : 无 **************************************************************************/ void SHT3X_Init(void ) { sw_delay_ms(100); SHT3X_SetPeriodicMeasurement(); sw_delay_ms(100); }然后,MCU读取到的SHT30温湿度信息会先校验,后经过计算公式转换成温度(单位是℃)和湿度(单位是%RH)。有关函数清单如下。
代码清单:CRC8校验函数
/************************************************************************** * 描 述 : SHT30校验函数 * 入 参 : data[]: 等待检验的数据 startByte: 开始数组的标号 number: 检验个数 checksum: 接收到的CRC数据 * 返回值 : 1---成功检测, 0---失败 **************************************************************************/ FunctionalState SHT3x_CheckCrc(uint8_t data[],uint8_t startBytes,uint8_t number, uint8_t checksum) { uint8_t bit=0; uint8_t crc = 0xFF; uint8_t byteCtr; for (byteCtr = startBytes; byteCtr < startBytes+number; byteCtr++) { crc ^= (data[byteCtr]); //先与需要计算的数异或,再指向下一个数 for (bit = 8; bit > 0; --bit) { if (crc & 0x80) //判断最高位是否为1 crc = (crc << 1) ^ POLYNOMIAL; //最高位为1,左移一位与多项式异或 else crc = (crc << 1); //最高位为0,直接左移一位 } } if (crc ==checksum) return ENABLE; else return DISABLE; }代码清单:SHT30温度计算
/*************************************************************************** * 描 述 : 计算温度函数 * 入 参 : dat:读取的温度原始值 * 返回值 : 计算出的温度值 ****************************************************************************/ float SHT3X_CalcTemperature(uint16_t dat) { float temp; temp = (175 * (float )dat / 65535 - 45) ; //单位 [℃] return temp; }代码清单:SHT30湿度计算
/************************************************************************* * 描 述 : 计算湿度函数 * 入 参 : dat:读取的湿度原始值 * 返回值 : 计算出的湿度值 ***********************************************************************/ float SHT3X_CalcRH(uint16_t dat) { float temp; temp = (100 * (float )dat / 65535) ; //单位 [%RH] return temp; }代码清单:串口实时显示SHT30温湿度
/*************************************************************************** * 描 述 : SHT30测试函数 * 入 参 : 无 * 返回值 : 无 *************************************************************************/ void SHT3X_TEST(void ) { uint8_t p[6],Temp1,Temp2; float cTemp,rhTemp; //清零数组p memset(p,0,6); //周期模式读出温湿度原始值,将原始值存放数组p ,存放数组对应信息格式如下: //温度高8位 + 温度低8位 + 温度校验8位 + 湿度高8位 + 湿度低8位 + 湿度校验8位 if (SHX3X_ReadResults(CMD_FETCH_DATA, buffer)) { p[0] = buffer[0]; p[1] = buffer[1]; p[2] = buffer[2]; p[3] = buffer[3]; p[4] = buffer[4]; p[5] = buffer[5]; } //校验读出的数据 Temp1=SHT3x_CheckCrc(p,0,2, p[2]); Temp2=SHT3x_CheckCrc(p,3,2, p[5]); //根据校验结果串口上传传感器信息 if (Temp1&&Temp2) { Temp1=0; Temp2=0; //计算温度原始信息,并带入算法计算出实际温度值 cTemp = (p[0] * 256.0) + p[1]; temperatureC =SHT3X_CalcTemperature(cTemp); //计算湿度原始信息,并带入算法计算出实际湿度值 rhTemp = (p[3] * 256.0) + p[4]; humidityRH = SHT3X_CalcRH(rhTemp); //串口1上传温湿度信息 printf("温度:%f\r\n",temperatureC); printf("湿度:%f%%\r\n",humidityRH); } else { printf("Read DHT11 ERROR!\r\n"); } }最后,在主函数中配置下I2C通信用引脚,初始化串口1及SHT30,调用SHT30_TEST函数实时读取温湿度信息。
代码清单:主函数
int main(void ) { //初始化USART1并配置USART1中断优先级 USART1_Init(); //初始化IIC所用到的IO口 IIC_GPIO_Init(); //初始化SHT30 SHT3X_Init(); //主循环 while (1) { //温湿度测试OK,通过串口1上传 SHT3X_TEST(); //软件延时500ms sw_delay_ms(500); } }实验步骤
解压“…\第3部分:标准库教程和实验源码\ 2 – 传感器实验程序\”目录下的压缩文件“实验3-20-1:SHT30数字温湿度传感器 - 串口调试助手显示(模拟IIC)”,将解压后得到的文件夹拷贝到合适的目录,如“D\STM32F103ZET6”。启动MDK5.23。在MDK5中执行“Project→Open Project”打开“…\SHT30\projec”目录下的工程“SHT30.uvproj”。点击编译按钮编译工程。注意查看编译输出栏,观察编译的结果,如果有错误,修改程序,直到编译成功为止。编译后生成的HEX文件“SHT30.hex”位于工程目录下的“Objects”文件夹中。点击下载按钮下载程序 。如果需要对程序进行仿真,点击Debug按钮,即可将程序下载到STM32F103ZET6中进行仿真。程序运行后,打开串口调试助手选择正确的串口号,波特率设置为19200,数据位为8、停止位为1,可以观察到串口调试助手100ms显示一次读取到的温湿度信息。SHT30温湿度艾克姆实验助手显示实验(串口1)
注:本节的实验源码是在“实验3-20-1:SHT30数字温湿度传感器 - 串口调试助手显示(模拟IIC)”的基础上修改。本节对应的实验源码是:“实验3-20-2:SHT30数字温湿度传感器 - 艾克姆实验助手显示(模拟IIC)”。工程需要用到的库文件
在使用库函数建“实验3-20-2:SHT30数字温湿度传感器 - 艾克姆实验助手显示(模拟IIC)”工程时,需要用到的c文件以及添加头文件包含路径的方法与介绍“实验3-20-1:SHT30数字温湿度传感器 - 串口调试助手显示(模拟IIC)”完全一样,在此不再赘述。
编写代码
首先sht30.c相关的函数及配置可完全参考“实验3-20-1:SHT30数字温湿度传感器 - 串口调试助手显示(模拟IIC)”的代码描述,因为是与艾克姆实验助手通信,需要有固定的通信格式,即本实验的SHT3X_TEST函数有所不同,代码清单如下。
程序清单:艾克姆实验助手实时显示SHT30温湿度信息
/************************************************************************** * 描 述 : SHT30测试函数 * 入 参 : 无 * 返回值 : 无 ************************************************************************/ void SHT3X_TEST(void ) { uint8_t p[6],Temp1,Temp2; float cTemp,rhTemp; uint8_t temp[5]; memset(p,0,6); //清零数组p memset(temp, 0, 5); //清零数组temp //周期模式读出温湿度原始值,将原始值存放数组p ,存放数组对应信息格式如下: //温度高8位 + 温度低8位 + 温度校验8位 + 湿度高8位 + 湿度低8位 + 湿度校验8位 if (SHX3X_ReadResults(CMD_FETCH_DATA, buffer)) { p[0] = buffer[0]; p[1] = buffer[1]; p[2] = buffer[2]; p[3] = buffer[3]; p[4] = buffer[4]; p[5] = buffer[5]; } //校验读出的数据 Temp1=SHT3x_CheckCrc(p,0,2, p[2]); Temp2=SHT3x_CheckCrc(p,3,2, p[5]); //根据校验结果串口上传传感器信息 if (Temp1&&Temp2) { Temp1=0; Temp2=0; //计算温度原始信息,并带入算法计算出实际温度值 cTemp = (p[0] * 256.0) + p[1]; temperatureC =SHT3X_CalcTemperature(cTemp); //计算湿度原始信息,并带入算法计算出实际湿度值 rhTemp = (p[3] * 256.0) + p[4]; humidityRH = SHT3X_CalcRH(rhTemp); //串口1上传温湿度信息 temp[0] = 'H'; //由与艾克姆实验助手通信格式决定 temp[1] = (uint16_t)temperatureC/10+ 0x30; temp[2] = (uint16_t)temperatureC%10+ 0x30; temp[3] = (uint16_t)humidityRH/10+ 0x30; temp[4] = (uint16_t)humidityRH%10+ 0x30; USART1_SendStr(temp); //实时显示温湿度 } else { //串口1上传温湿度值均是0,代表读数有误 temp[0] = 'H'; //由与艾克姆实验助手通信格式决定 temp[1] = (uint16_t)0x30; temp[2] = (uint16_t)0x30; temp[3] = (uint16_t)0x30; temp[4] = (uint16_t)0x30; USART1_SendStr(temp); //实时显示温湿度 } }然后,在主函数中配置下I2C通信用引脚,初始化串口1及SHT30,调用SHT30_TEST函数实时读取温湿度信息。
程序清单:主函数
int main(void ) { //初始化USART1并配置USART1中断优先级 USART1_Init(); //初始化IIC所用到的IO口 IIC_GPIO_Init(); //初始化SHT30 SHT3X_Init(); //主循环 while (1) { //温湿度测试OK,通过串口1上传 SHT3X_TEST(); //软件延时500ms sw_delay_ms(500); } }实验步骤
解压“…\第3部分:标准库教程和实验源码\ 2 – 传感器实验程序\”目录下的压缩文件“实验3-20-2:SHT30数字温湿度传感器 - 艾克姆实验助手显示(模拟IIC)”,将解压后得到的文件夹拷贝到合适的目录,如“D\STM32F103ZET6”。启动MDK5.23。在MDK5中执行“Project→Open Project”打开“…\SHT30\projec”目录下的工程“SHT30.uvproj”。点击编译按钮编译工程。注意查看编译输出栏,观察编译的结果,如果有错误,修改程序,直到编译成功为止。编译后生成的HEX文件“SHT30.hex”位于工程目录下的“Objects”文件夹中。点击下载按钮下载程序 。如果需要对程序进行仿真,点击Debug按钮,即可将程序下载到STM32F103ZET6中进行仿真。程序运行后,打开艾克姆实验助手选择正确的串口号,波特率设置为38400,设置完成后,点击打开,可以观察到艾克姆实验助手信息栏会500ms刷新一次温湿度信息,并且有实时温湿度曲线。相关问答
落健药物停用后还会脱发对吗 – 960化工网问答本院采纳国际领先fue+sht无痕植发技术,植发手术关于原有毛发和植入的毛发都没有...2757287-45-72757287-98-02757287-48-02923012-24-0275...
照相机开机亮一下就灭了,是哪里坏了?1000块买的还值得修吗-ZO...回复dssshtpkupkf换个电池有用(0)回复kaoroplus你学电子的,应该知道做功...15.3万浏览31回答扩展阅读上市迎来最猛破发尼康Z6III变成真香微单?评...
关于储油罐防火堤的做法-盖德问答-化工人互助问答社区楼主看看是不是这个。论坛已经有人发了
在农村买社保,一次性补缴怎么算 - 37shTQGL 的回答 - 懂得一、补缴规定小伙伴们都知道,虽然说以后养老保险和医疗保险都会实现城乡并轨。但是在现在没有并轨的情况下参加农村养老保险的小伙伴和参加城镇养...
定期报告系统一直无法查询,需要更新版本,更新的时候有时间...立即咨询b2e7****56bnwr11分钟前提交了咨询hoe0****zp974z3分钟前提交了咨询zntd****a3ljpb5分钟前提交了咨询x9np****n5nsht7分钟前提交了咨...
我的游戏帐号被对方开挂封号了十年,对方跑路了这种该怎么办-...立即咨询4kzv****az9vmf11分钟前提交了咨询be4r****f8hmmg1分钟前提交了咨询1f97****6xlsht4分钟前提交了咨询jf91****a3rqxa8分钟前提交了咨...
去年得了疥疮,自己并不知道传染,查出来以后自己买药治好了...立即咨询afc2****2t7f9a10分钟前提交了咨询7ge6****v903ce2分钟前提交了咨询vuua****03rmd94分钟前提交了咨询wlgo****ygbsht8分钟前提交了咨...
肝癌晚期合作医疗能报销多少-找法网跨年度连续住院的费用,当年12月31日以前含(31日)发生的住院医疗费用和自下一年...y53v****1sht1f10分钟前提交了咨询qwoe****sla6l83分钟前提交了咨询r294...
亲属给孩子上大学的份子钱属于夫妻共同财产吗?-找法网立即咨询0msg****kvqt7n10分钟前提交了咨询7pk8****shtn473分钟前提交了咨询5f10****e3036p5分钟前提交了咨询e7gc****msk7z17分钟前提交了咨...
老师们,有没有谁知道 江苏无锡有专门的育婴师培训机构吗?[回答]当然有啦,目前市场上关于营养师的需求量还是相当大的,其中恒健营养学院是里面很正规化的培训机构,先甄选,在培训,最后考试那证,精彩已完成。别想得...