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

简介

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

使用场景

特性

产品参数

引脚说明


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

Arduino使用教程

软硬件准备

使用I2C读取传感器数据

I2C接线图

样例代码

/*!
 * @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);

注意事项

主要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();

使用注意

常见问题

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

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

更多