Fermion STS35 高精度数字温度传感器

简介

STS35瑞士Sensirion公司新推出的温度传感器,STS35提供了一个完全校准、线性和供电电压补偿的数字输出,并且具有±0.1℃的超高测量精度。
STS35测量范围宽达-40~125℃,并且可以自加热除湿保持芯片干燥(这意味着它可以接受一定湿度环境下的工作)。
同时STS35的I2C通信速度可达1MHz。

使用场景

  • 谷类储存防霉时的温度检测
  • 生物实验精准控温环境
  • 大棚蔬菜环境测温
  • DIY环境温度测量装置
  • 其它在一定湿度与干燥的环境来回切换的测温等。

特性

  • 出厂校准,数字输出准确
  • 高精度,温度误差±0.1℃
  • 启动时间最快0.5ms
  • 高可靠性,长期稳定

产品参数

  • 检测类型: 温度
  • 工作电压: 3.3~5.5V DC
  • 功耗:0.05W(5V)//待修改
  • 加热功耗:3.6~33mW
  • 输出信号: I2C
  • 测量范围: -40~125℃
  • 误差:±0.1℃
  • 分辨率: 0.01℃
  • 预热时间: ≤1.5ms(典型0.5ms)
  • 响应时间: >2 s
  • 工作温度: -40~125℃
  • 电路板尺寸:20mm*17.5mm*2mm
  • 安装孔尺寸:M2(2mm),两安装孔圆心中心距离15mm

引脚说明


标号 名称 功能描述
1 RST 复位引脚(拉低复位)
2 ADDR I2C地址引脚(默认地址0x4B,拉低地址0x4A)
3 SDA I2C数据线
4 SCL I2C时钟线
5 GND GND电源负极
6 VCC 电源正极

Arduino使用教程

  • 将线按照接线图连接好后
  • 将程序通过Arduino IDE烧录到Arduino UNO中,随后打开串口监视器即可查看当前温度数据。

软硬件准备

使用I2C读取传感器数据

I2C接线图

样例代码

  • 将模块与Arduino按照上方的连线图相连,你也可以配合Gravity I/O 传感器扩展板 V7.1使用,更方便、更快速的完成项目原型搭建。
  • 模块I2C地址默认为0x4B,如果您想要修改I2C地址,可通过连接模块上的ADDR引脚接到GND,并修改如图代码的字母B改为字母A即可。
  • 打开Arduino IDE,将下面的代码上传到Arduino UNO。
  • 打开Arduino IDE的串口监控视器,把波特率调至9600,观察温度打印结果。
/*!
 * @file getTemperature.ino
 * @brief 开启传感器周期测量模式(设置周期测量频率,相当于发送开启周期测量模式的指令),
 * @n 获取传感器周期测量模式下,测量的温度数据
 * 
 * @copyright	Copyright (c) 2010 DFRobot Co.Ltd (https://www.dfrobot.com)
 * @licence     The MIT License (MIT)
 * @author [LuoYufeng](yufeng.luo@dfrobot.com)
 * @version  V1.0
 * @date  2021-9-01
 * @url https://github.com/DFRobot/DFRobot_STS3X
 */
#include "DFRobot_STS3X.h"

/*!
 * 根据ADDR引脚拉高或拉低来确定IIC地址
 * ADDR引脚拉低: STS3X_IIC_ADDRESS_A   0x4A
 * ADDR引脚拉高(默认): STS3X_IIC_ADDRESS_B   0x4B
 */
DFRobot_STS3X sts(&Wire, STS3X_IIC_ADDRESS_B);


void setup(void)
{
    Serial.begin(9600);
    /*Wait for the chip to be initialized completely, and then exit*/
    while(sts.begin() != true){
        Serial.println("Failed to init chip, please check if the chip connection is fine. ");
        delay(1000);
    }

    /*!
     *@brief 设置测量频率
     *@param freq: 在枚举变量eFreq_t中选择e2S,e1Hz,e2Hz,e4Hz,e10Hz模式
     */
    sts.setFreq(sts.e10Hz);

}

void loop() {
    Serial.print(sts.getTemperaturePeriodC());
    Serial.println(" ℃");
    delay(1000);
}

结果

重复模式选择

  • 可以通过修改括号中的参数,调整数据的重复模式。
  • 不同模式对应了不同测量时间,测量时间:输出一次的测量数据时需重复采集样本的时间。
模式 测量时间
High 12.5 ms
Medium 4.5 ms
Low 2.5 ms
    /*!
     *@brief 设置重复模式
     *@param code: 在枚举变量eCode_t中选择eHigh,eMedium,eLow模式
     */
    sts.setRepeat(sts.eHigh);

传输速率选择

可以通过修改括号中的参数,调整数据的测量速率。
不同模式对应了不同的测量速率。

模式 测量速率
2S 0.5Hz
1Hz 1Hz
2Hz 2Hz
4Hz 4Hz
10Hz 10Hz
    /*!
     *@brief 设置测量频率
     *@param freq: 在枚举变量eFreq_t中选择e2S,e1Hz,e2Hz,e4Hz,e10Hz模式
     */
    sts.setFreq(sts.e10Hz);

注意事项

  • 当测量速率在最高10Hz时可能发生自热

主要API函数列表

    void setRepeat(eCode_t code);

    /*!
     *@brief 设置时钟延展,开启时钟延展后,当传感器未测量完成时不会发送NAK,直到测量完成时才发送数据完成之前未完成的测量命令
     *@param clockStretch: 是否打开时钟延展,true表示打开,false表示关闭
     */
    void setStretch(bool clockStretch);

    /*!
     *@brief 设置测量频率,开启传感器周期测量模式(设置周期测量频率,相当于发送开启周期测量模式的指令)
     *@param freq: 在枚举变量eFreq_t中选择e2S,e1Hz,e2Hz,e4Hz,e10Hz模式
     */
    void setFreq(eFreq_t freq);

    /*!
     *@brief 打开加热器
     */
    void setHeaterOn();

    /*!
     *@brief 关闭加热器
     */
    void setHeaterOff();

    /*!
     *@brief 中断传感器正在进行的工作,强制使其进入空闲模式
     */
    void breakSensor();

    /*!
     *@brief 将参数设置回默认值
     */
    void resetSensor();

    /*!
     *@brief 获取并保存传感器当前所有状态
     *@n 每隔一段时间之后需要先调用这个接口,才能用其他api获得传感器当前的状态
     */
    void getStatus();

    /*!
     *@brief 获取校验和状态
     *@return true: checksum of last write transfer was correct
     *@n      false: checksum of last write transfer failed
     */
    bool checkSumStatus();

    /*!
     *@brief 获取指令状态
     *@return true: last command executed successfully
     *@n      false: last command not processed.
     */
    bool commandStatus();

    /*!
     *@brief 检测系统是否重置
     *@return true: no reset detected since last 'clear status register' command
     *@n      false: reset detected (hard reset, soft reset command or supply fail)
     */
    bool systemResetDetected();

    /*!
     *@brief 温度跟踪提醒
     *@return true: no alert
     *@n      false: alert
     */
    bool temTrackingAlert();

    /*!
     *@brief 获取加热器状态
     *@return true: Heater OFF
     *@n      false: Heater ON
     */
    bool heaterStatus();

    /*!
     *@brief 获取警报待处理状态
     *@return true: no pending alerts
     *@n      false: at least one pending alert
     */
    bool alertPendingStatus();

    /*!
     *@brief 单次测量模式下,获取当前温度,注:需保证传感器处于空闲状态,可以调用相关api:breakSensor()
     *@return 单位:℃
     */
    float  getTemperatureSingleC();

    /*!
     *@brief 周期测量模式下,获取当前温度,注:需提前设置采样频率,可以调用相关api:setFreq(eFreq_t freq)
     *@return 单位:℃
     */
    float  getTemperaturePeriodC();

使用注意

  • 避免长期在湿度过高的环境中使用(参考低于40%RH的环境视为干燥,由昼夜温差产生的水分可由自带加热功能进行去除)。
  • 避免长期使用10Hz模式传输数据从而造成自热影响您的数据。

常见问题

还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

更多

DFshopping_car1.png [https://www.dfrobot.com.cn/goods-3476.html "商城购买链接"]