SHT31与SHT35温湿度传感器实测对比:精度差异、数据校准与选型指南
1. 项目背景与核心目标
最近在折腾一个环境监测的小项目,核心传感器选用了Sensirion的SHT31-DIS温湿度传感器。这个传感器精度不错,价格也相对亲民,在开源硬件圈子里很常见。我原本的计划是把SHT31模块的I2C引脚引出来,接到自己设计的另一块主控板上进行数据读取和后续处理。但调试过程不太顺利,I2C通信总是时断时续,数据读取不稳定,排查了半天硬件连接和软件驱动也没找到根本原因。
正巧,实验室里有一台现成的SHT35-DIS温湿度记录仪。SHT35算是SHT31的“升级版”或者说“高精度版本”,官方标称的精度和长期稳定性要更好一些,价格自然也更高。既然手头的SHT31模块调试卡壳,我灵机一动:不如先搁置引脚的调试,转而做一个更基础的对比测试。看看我手头这个便宜的SHT31模块,和实验室里那台更“高级”的SHT35记录仪,在实际的办公室环境下,测出来的温湿度数据到底有多大差异?这就是本次对比测试的由来。
这个测试的目标很明确: 量化评估SHT31与SHT35在相同环境下的测量一致性 。对于嵌入式开发者和电子爱好者来说,这种对比非常实用。我们常常需要在成本、精度和项目需求之间做权衡。如果SHT31的表现与SHT35足够接近,那在很多对绝对精度要求不是极端苛刻的应用中(比如智能家居、一般的环境监测),SHT31无疑是更具性价比的选择。反之,如果差异显著,那我们就得认真考虑校准的必要性,或者为高精度场景直接选择SHT35。所以,这次测试不只是“玩一玩”,其结果能为我们后续的传感器选型和数据可靠性评估提供直接的参考依据。
2. 测试方案设计与环境搭建
2.1 传感器与设备选择
本次测试的主角有两个:
- 被测设备:SHT31模块 。我用的是一块常见的蓝色SHT31-DIS模块,板载了电平转换电路,支持3.3V/5V供电,通过标准的I2C接口通信。其典型精度为温度±0.2°C,湿度±2%RH(在25°C条件下)。这是我们需要评估的对象。
- 参考设备:SHT35记录仪 。这是一台集成化的温湿度记录仪,内置了SHT35-DIS传感器、微处理器、存储单元和显示屏。SHT35的典型精度为温度±0.1°C,湿度±1.5%RH。在本次测试中,我将它作为参考基准。虽然它也不是“绝对真理”,但其更高的标称精度和一体化设计,使其测量结果通常被认为更可靠。
注意 :这里存在一个测试逻辑上的前提。我们默认SHT35的记录值更接近真实值,并以此为准来评判SHT31的偏差。在实际的计量校准中,需要使用经过更高等级标准器校准过的设备作为参考。对于我们的工程对比而言,用更高精度的设备作为相对参考是常见且合理的做法。
2.2 测试环境与布置
环境的一致性是对比测试的生命线。如果两个传感器感受的环境不同,任何差异都将失去意义。我特别关注了以下几点:
- 地点选择 :测试在办公室内进行。避开了空调出风口、窗户阳光直射以及人员频繁走动的区域,选择一个相对稳定、空气流通温和的角落。
- 传感器布置 :这是关键一步。为了确保两者感受完全相同的温湿度场,我将SHT31模块和SHT35记录仪的探头物理上紧贴在一起。具体做法是,将SHT31模块平放,然后把SHT35记录仪(其探头位于设备侧面)侧立,让它的探头区域与SHT31的传感器芯片尽可能靠近,几乎处于同一位置。我用一点点蓝丁胶辅助固定,避免它们相对移动。这样能最大程度减少由于空间位置不同导致的微小梯度差异。
- 状态设置 :确保SHT35记录仪的探头保护盖(如果有)已打开,使其传感器完全暴露在空气中,与SHT31的条件一致。
2.3 数据采集参数设置
- 测试时长 :从7月22日上午10:30开始,持续到7月23日上午9:05结束。总时长超过22小时。这个时长足以覆盖一个完整的日夜周期,可以观察传感器在办公室夜间低温、白天升温以及可能的人员活动带来的环境波动下的表现。
- 采集频率 :设置为每分钟采集一次数据。这个频率对于观察办公室环境变化来说足够高,可以捕捉到相对快速的变化(如有人经过、开门等),同时又不会产生过于庞大的数据量。对于SHT31,我通过自己编写的嵌入式程序(虽然主控板通信不稳,但用Arduino Uno先单独读取SHT31是成功的)来实现定时读取并记录到SD卡。SHT35记录仪则使用其内置的定时记录功能,设置为同样的1分钟间隔。
实物布置图 : (描述性文字替代)可以想象这样一个场景:一张办公桌的安静角落,一个蓝色的邮票大小模块和一个黑色的小巧记录仪紧紧靠在一起,几根细线从模块引出连接到旁边的开发板,记录仪的屏幕则闪烁着当前的温湿度读数。这个简单的 setup,就是本次对比实验的全部硬件基础。
3. 原始数据观察与初步处理
3.1 数据导出与格式差异
测试结束后,分别从SHT31的SD卡和SHT35记录仪中导出数据。
- SHT31数据 :通过我编写的程序,数据以CSV格式存储,温度(°C)和湿度(%RH)均保留了小数点后两位。例如:
25.67, 54.32。 - SHT35数据 :通过设备配套的软件导出,发现其记录的数据只保留了小数点后一位。例如:
25.6, 54.8。
这个差异立刻引起了我的注意。 数据分辨率的不同,会直接影响数据曲线的平滑度和细节表现 ,在后续对比时必须考虑这个因素。
3.2 初始值对比
将两个传感器在测试起始时刻附近的数据拿出来直接对比:
- 温度 :SHT31读数约为25.67°C,SHT35读数约为25.6°C。粗略看,SHT31比SHT35高约0.07°C,考虑到SHT35只显示一位小数,其真实值可能在25.55°C到25.65°C之间,因此两者初始温差大约在 0.1°C 左右。
- 湿度 :SHT31读数约为54.32%RH,SHT35读数约为54.8%RH。SHT31比SHT35低约0.5%RH。但纵观后续数据,这个差值并不恒定。
为了有一个整体印象,我计算了整个测试周期内所有数据点的统计差值(SHT31值减去SHT35值):
- 温度平均偏差 :+0.12°C (SHT31整体偏高)
- 湿度平均偏差 :-4.3%RH (SHT31整体偏低)
这个初步统计验证了最初的观察: 我手头的这个SHT31模块,相对于SHT35记录仪,存在一个近似的系统偏移——温度略高,湿度明显偏低。
4. 温度数据一致性深度分析
为了更直观地对比,我将所有数据导入电子表格,并生成了双Y轴折线图。下面我们分几种情况来仔细剖析。
4.1 高分辨率下的曲线形态对比
首先,使用SHT31的原始数据(两位小数)与SHT35的数据(一位小数)进行对比。
观察1:曲线平滑度差异显著 SHT31的曲线非常平滑柔和,能清晰地反映出环境的细微波动,比如夜间温度的缓慢下降、清晨阳光带来的缓慢上升。这是因为其0.01°C的分辨率足以描绘这些微小变化。 而SHT35的曲线则呈现出明显的“阶梯”状或“锯齿”状。这是因为其数据只有0.1°C的分辨率,当环境温度真实地在25.65°C和25.66°C之间变化时,设备记录的值可能一直是25.6°C或25.7°C,导致曲线在几个固定的值之间跳跃,丢失了中间过程信息。
观察2:整体偏移与重合性 两条曲线虽然形态不同(一平滑一阶梯),但它们的“中心轨迹”是高度一致的。如果将SHT35的曲线整体向上平移大约0.1°C,两条曲线的“骨架”几乎重叠。这说明, 剔除分辨率差异带来的“毛刺”后,两个传感器对温度变化的响应趋势和绝对值都非常接近 。0.1°C的偏差在绝大多数应用场景下都是可以接受的。
4.2 模拟同分辨率下的对比
为了公平比较,我手动处理了SHT31的高分辨率数据,将其转换为与SHT35相同的一位小数格式。这里有两种常用的舍入方法:
- 四舍五入法 :将SHT31的两位小数数据,按四舍五入规则保留一位小数。例如,25.67°C变为25.7°C,25.62°C变为25.6°C。
- 直接截断法 :直接舍去第二位小数。例如,25.67°C变为25.6°C,25.62°C也变为25.6°C。
场景一:SHT31数据四舍五入后 经过处理,SHT31的曲线也变成了“锯齿”状,其跳跃的形态和频率与SHT35的曲线变得极为相似。此时再将SHT35曲线上移0.1°C,两条锯齿状曲线几乎完美重合。这强有力地证明, 两者核心的测量能力是一致的,观测到的形态差异主要源于数据记录精度的不同,而非传感器本身的响应特性差异 。
场景二:SHT31数据截断后 截断处理后的SHT31曲线,其锯齿形态与SHT35曲线仍然相似,但在数值上会系统性偏低0.0x°C(因为总是舍去)。此时即使平移SHT35曲线,重合度也不如四舍五入法好。这说明SHT35记录仪内部很可能使用的是四舍五入或类似的舍入策略,而非简单截断。
实操心得 :在对比不同精度的传感器数据时, 将高精度数据统一舍入到低精度再进行对比,是一个消除“假性差异”的好方法 。这能帮助我们聚焦于传感器本身的偏差,而不是被数据显示格式所迷惑。很多数据记录仪或显示设备为了节省存储空间或遵循显示规范,会对内部高精度数据进行舍入后输出,了解这一点对数据分析很重要。
4.3 温度一致性结论
综合以上分析,可以得出关于温度测量的一致性的结论:
- 绝对偏差 :本次测试中,该SHT31模块相对于SHT35记录仪存在约 +0.1°C 的系统性正偏差。
- 趋势一致性 :两者对温度变化的响应趋势高度一致,相关系数极高(计算后超过0.99)。
- 差异主因 :观测到的曲线平滑度差异, 几乎完全由数据记录的分辨率(一位小数 vs 两位小数)导致 ,而非传感器动态响应慢或噪声大。
- 校准可行性 :这个+0.1°C的固定偏移非常稳定,意味着在软件中对其进行补偿(即所有SHT31读数减去0.1°C)是简单且有效的,补偿后两者读数将高度一致。
5. 湿度数据一致性深度分析
湿度数据的对比比温度更有趣,也更能体现传感器之间可能存在的差异。
5.1 原始分辨率下的对比
同样,先看SHT31(两位小数)和SHT35(一位小数)的原始曲线。
观察1:显著的基线偏移 最 striking 的现象是,两条曲线虽然都能反映出办公室湿度的整体变化(例如夜间湿度升高,白天降低),但它们几乎全程保持着一段明显的距离。SHT31的曲线整体位于SHT35曲线的下方。计算整个周期的平均差值,达到了约 -4.5%RH 。也就是说,在相同的环境下,SHT31的读数比SHT35平均低了4.5个百分点。
观察2:变化趋势与幅度的一致性 尽管存在基线偏移,但仔细观察可以发现,两条曲线的“起伏形状”是相似的。当湿度上升时,两者都上升;下降时,两者都下降。而且上升下降的幅度比例也大致相当。如果将SHT35的曲线整体向下平移4.5%RH,两条曲线的主体部分会重合得非常好。这说明, 两个传感器的湿度响应线性度很好,只是存在一个较大的零位(或跨度)偏差 。
5.2 模拟同分辨率下的对比
同样对SHT31的湿度数据进行一位小数处理(四舍五入和截断)。
场景一:SHT31数据四舍五入后 处理后的SHT31曲线变为锯齿状。此时,SHT35曲线(也是锯齿状)与平移4.5%RH后的SHT31曲线,在锯齿的形态和分布上吻合度很高。这再次印证,分辨率是造成曲线“粗糙度”差异的主因,而那个约4.5%RH的偏移是持续存在的系统性偏差。
场景二:SHT31数据截断后 截断后的SHT31曲线数值更低,与SHT35曲线的差距更大。平移后的重合度也变差。这同样暗示SHT35设备内部可能采用了四舍五入而非截断。
5.3 湿度偏差的根源探讨与校准思考
4.5%RH的偏差不算小。这背后可能的原因有哪些?
- 传感器本身的离散性 :即使是同一型号的传感器,在出厂时也存在公差。SHT31标称的湿度精度是±2%RH,SHT35是±1.5%RH。我的这个SHT31模块和SHT35记录仪里的传感器,可能都处于各自公差范围的不同位置,叠加起来就可能产生几个百分点的差异。 这是最可能的主要原因 。
- 老化与历史环境 :SHT35作为实验室记录仪,可能经历过不同的温湿度环境,传感器可能存在一定的老化或漂移。我的SHT31模块则是全新的。传感器,尤其是湿度传感器,其特性会随时间和使用环境发生缓慢变化。
- 物理位置的微小差异 :尽管我们紧贴放置,但两个传感器的感应元件在物理上仍有毫米级的距离。在湿度梯度可能存在的环境中(即使很微弱),这点距离也可能导致可测量的差异。
- 供电与自发热影响 :SHT31模块由我的开发板供电,SHT35是内置电池。不同的供电电路和功耗导致的微小自发热,可能对传感器芯片的局部微环境产生极其轻微的影响,进而影响湿度读数。
注意事项 :湿度传感器的校准和比对远比温度复杂。温度有一个相对客观的物理标准(如冰点、沸点),而湿度(相对湿度)的测量高度依赖于温度。许多湿度传感器内部是先精确测量温度,再根据此温度下的物理特性推算湿度。因此,两个传感器之间哪怕存在0.1°C的温度测量差异,也可能被放大为百分之几的湿度显示差异。这也是为什么在高端应用中,温湿度传感器通常需要配对校准。
关于校准的思考 : 对于这个4.5%RH的偏差,简单的整体偏移补偿(所有SHT31湿度读数加4.5%RH)在本次测试环境下是有效的。但需要注意的是,湿度传感器的误差不一定是线性的,在不同湿度点(如30%RH和80%RH)的偏差可能不同。对于要求高的应用,最好能在多个已知湿度的标准点(如使用饱和盐溶液产生特定湿度环境)进行测试,建立分段线性或查找表式的校准曲线。但对于大多数物联网、智能家居应用,如果环境湿度变化范围不大(例如45%-65%RH),一个固定的偏移补偿足以将精度提升到可接受的水平。
6. 工程实践建议与常见问题排查
基于这次对比测试的经验,我想给正在使用或考虑使用SHT3x系列传感器的朋友一些实用的建议。
6.1 传感器选型与采购建议
- SHT31 vs SHT35 :如果你的项目对精度要求极高(例如科研测量、精密工业控制),且预算充足,SHT35是更好的选择,其长期稳定性和精度指标更优。对于绝大多数消费级、商用级物联网设备、智能家居、普通环境监测,SHT31的精度已经完全足够,性价比突出。本次测试也表明,其与SHT35的核心测量能力是一致的。
- 模块 vs 芯片 :直接购买焊接好传感器的模块(通常带电平转换和滤波电容)可以极大简化开发,避免自己处理敏感模拟信号带来的问题。选择信誉好的供应商,模块的校准质量可能更有保障。
- 分辨率设置 :SHT3x系列传感器可以通过命令设置不同的测量重复性和读取分辨率。更高的分辨率意味着更长的测量时间和更高的功耗,但噪声更低。根据你的应用需求(刷新率、功耗、精度)在驱动代码中合理配置。
6.2 硬件连接与电路设计要点
我最初遇到的I2C通信问题,很可能就出在硬件上。以下是一些关键检查点:
- 上拉电阻 :I2C总线(SDA, SCL)必须接上拉电阻到正电源(3.3V或5V,与模块一致)。模块本身可能集成了,但如果你引线较长或总线上设备多,可能需要额外加强上拉。典型值是4.7kΩ到10kΩ。
- 电源去耦 :务必在传感器的VCC和GND引脚之间靠近芯片的位置放置一个100nF的陶瓷电容。电源噪声是导致传感器读数跳动或通信失败的常见元凶。
- 电平匹配 :确保主控MCU的I2C电平与传感器模块的电平一致。虽然很多模块号称兼容5V/3.3V,但如果MCU是5V而模块工作在3.3V,最好使用电平转换器,或者确认模块的I2C引脚是5V耐受的。
- 走线长度 :I2C总线长度不宜过长,尽量短。如果必须引线,使用双绞线或屏蔽线以减少干扰。
6.3 软件驱动与数据读取避坑指南
- 启动与复位 :上电后,给传感器足够的稳定时间(例如20ms)再发送命令。如果通信异常,尝试发送软复位命令(0x30A2)。
- 时钟延展 :SHT3x支持时钟延展。确保你的I2C驱动库能正确处理这一特性,或者在初始化时禁用时钟延展(如果传感器和库支持)。
- CRC校验 :SHT3x传感器返回的每个数据字(温度和湿度各两个字节)后面都跟着一个CRC校验字节。 强烈建议在驱动程序中实现CRC校验 。这能有效过滤掉因通信干扰导致的错误数据。很多读数“跳变”的灵异问题,都是因为忽略了CRC校验,读到了错误数据。
- 读取时序 :发送测量命令后,需要等待测量完成。对于高重复性模式,等待时间可能达到15ms。使用阻塞延时或查询状态位的方式确保数据就绪后再读取。
6.4 数据后处理与校准策略
- 滤波 :即使硬件和通信都正常,传感器读数也可能有微小跳动。在软件中对连续读取的数据进行简单的滑动平均滤波(例如取最近5次读数的平均值),可以显著平滑曲线,提升用户体验。
- 校准 :
- 温度校准 :如本次测试所示,一个固定的偏移补偿(加/减一个常数)通常就足够。你可以通过与一个可信的参考温度计在稳定环境下(如室内)对比,计算出这个偏移量。
- 湿度校准 :固定偏移补偿是第一步。如果追求更高精度,可以考虑两点校准:在低湿环境(如使用干燥剂)和高湿环境(如密闭水杯上方)分别记录传感器读数和参考值,计算出斜率和截距进行线性补偿。 切勿将传感器暴露在结露(湿度>80%RH且温度变化大)或污染性气体环境中,这可能导致永久性漂移 。
- 数据记录 :记录原始数据时,尽量保存高分辨率的数据(如SHT31的两位小数)。显示或传输时可以根据需要舍入。原始数据是进行后期分析和校准的基础。
7. 总结与个人体会
这次SHT31与SHT35的对比测试,虽然源于一次失败的引脚调试,但收获却远超预期。它不仅仅是一次简单的数据比对,更是一次深入的传感器行为观察和工程实践演练。
我最深的体会是: 在嵌入式系统和物联网项目中,对传感器数据的理解不能停留在“读数”本身 。那个显示在屏幕上的数字,背后是传感器物理特性、电路设计、通信协议、软件驱动、数据处理链条共同作用的结果。SHT31和SHT35曲线形态的差异,生动地展示了“数据分辨率”这个看似简单的因素,如何极大地影响我们对传感器性能的直观判断。如果只看锯齿状的SHT35曲线和光滑的SHT31曲线,很容易误以为SHT35噪声大或不稳定,但经过同分辨率处理和分析后,才发现它们的内核是如此一致。
对于那4.5%RH的湿度偏差,它提醒我们, 数据手册上的精度指标是“典型值”或“最大值” 。在实际应用中,个体差异、使用历史、环境因素都会影响最终读数。因此,对于精度敏感的应用,预留软件校准的接口和能力,是产品设计中必不可少的一环。这并不是说传感器不可靠,而是工程上的必要谨慎。
最后,从项目角度看,这次测试让我对SHT31这颗传感器的信心大增。0.1°C的温度一致性和高度线性的湿度响应,意味着在我后续的环境监测项目中,完全可以使用成本更低的SHT31,并通过简单的软件校准来获得足够精确的数据。而排查I2C通信问题的过程,也让我重新审视了硬件设计中的那些基础细节——上拉电阻、去耦电容、电平匹配,这些老生常谈的点,往往是项目能否稳定运行的“魔鬼细节”。
所以,如果你也在使用类似的数字传感器,不妨也动手做一次对比测试。不一定要有高精度的参考设备,用两个同型号的模块对比看看一致性,或者在不同位置测量观察环境梯度,都能让你对数据、对系统有更踏实、更深入的理解。这比单纯调通代码、看到读数,要有价值得多。
更多推荐




所有评论(0)