风筝
发表于: 昨天 19:20 | 显示全部楼层

在之前的帖子中,我们实现了温度、湿度、压力值的测量。另外,有多种办法可以提高测量的精度。

所有传感器都有不同类型的误差,如随机噪声、重复性、滞后(偏移)、非线性等。但是,每种误差都有解决方案!在本文中,我们将提到其中一些以提高 BME680传感器的测量精度。

BME680-HysteresisNonlinearity.jpg


传感器的正确放置

在室内应用中,传感器的放置至关重要,因为空气不能正常流通。尽量不要将传感器放置在热源附近,并确保可以接触到它。


校准

大多数传感器都有一定程度的偏移和非线性误差。

例如,要消除偏移误差,最可靠的方法是使用参考值。您可以间接地将传感器与蒸馏水接触,蒸馏水的冰点温度没有杂质。您可以根据海平面高度或传感器周围环境的大气压力计算蒸馏水的冰点温度。测量值和计算值之间的差异将显示传感器的偏移值。

BME680-offset.jpg


您可以使用类似的方法消除其他参数的偏移。

但是,对于非线性,您需要一个精确的测量设备。通过将传感器和参考设备放置在不同的环境条件下,您可以比较两个设备的测量值并为每个设备绘制一个图表。传感器的测量曲线应该是线性的,您可以获得表示测量值和实际值之间关系的曲线方程。然后可以使用该方程在后续测量中计算实际值。


过采样

另一个常见错误是噪声。对于这种,您需要使用过滤器。测量一个参数时,可以使用以下过滤器消除噪声。

BME680-Filter-effect.jpg


●    加权滤波器(过采样):首先,进行多次采样并计算其平均值。这将减少随机噪声的影响。这种方法的缺点是对测量参数突然变化的响应时间较慢。

●    可变权重滤波器(IIR):根据采样值的新鲜度对其进行评估,并取其加权平均值。此方法的响应时间更短。


BME680传感器内部有两种类型的滤波器。如果启用IIR滤波器,测量值的分辨率将为20位。过采样滤波器会根据样本数量增加分辨率。在这里,我们分别对温度、湿度和压力进行8、2和16次额外采样。

要激活上述两个过滤器,请将以下几行添加到代码,然后将其上传到您的Arduino开发板。

  1.   bme.setTemperatureOversampling(BME680_OS_8X);
  2.   bme.setHumidityOversampling(BME680_OS_2X);
  3.   bme.setPressureOversampling(BME680_OS_16X);
  4.   bme.setIIRFilterSize(BME680_FILTER_SIZE_127);
复制代码

运行代码时,您可以在串口监视器中看到输出。

BME680-Result.jpg

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-20 23:53 , Processed in 0.078012 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表