3. 土壤EC传感器温度补偿标定
任务对象与测量链路
本节针对一款模拟输出的土壤EC传感器(输出0–2.5V对应0–5 mS/cm,内部无温度补偿),在恒温水浴中把同一盐溶液分别稳定在10℃、15℃、20℃、25℃、30℃五个温度点,记录每个温度点下的原始电压与参考电导率,再拟合温度补偿系数并验证补偿后读数误差。
关键约定:EC的温度效应通常用线性模型近似,以25℃为参考温度:
EC₂₅ = EC_T / [1 + α·(T − 25)]
其中 EC_T 为温度T下的实测电导率,α 为温度补偿系数(单位 1/℃),典型土壤溶液在 0.018–0.022 /℃ 之间。标定的任务就是由多温度点数据反求 α,并检验补偿后误差。
标定数据采集与系数拟合
用同一浓度盐溶液(示例目标约 2.5 mS/cm @25℃)在五个温度点稳定后各采集 10 次,取中位数抑制噪声。下表为教学示例数据(假设值,用于演示计算过程):
| 温度 T (℃) | 原始电压 V_T (V) | EC_T = 2·V_T (mS/cm) |
|---|---|---|
| 10 | 1.020 | 2.040 |
| 15 | 1.070 | 2.140 |
| 20 | 1.120 | 2.240 |
| 25 | 1.170 | 2.340 |
| 30 | 1.220 | 2.440 |
由模型 EC_T = EC₂₅·[1 + α(T−25)],令 x = T−25,y = EC_T,做线性回归 y = a + b·x,则 α = b / a(a 即 EC₂₅ 估计值)。用上表数据:
import numpy as np
T = np.array([10, 15, 20, 25, 30], dtype=float)
EC = np.array([2.040, 2.140, 2.240, 2.340, 2.440])
x = T - 25.0
b, a = np.polyfit(x, EC, 1) # 斜率 b, 截距 a
alpha = b / a
print(f"EC25 = {a:.4f} mS/cm, alpha = {alpha:.5f} /℃")
# 补偿并计算相对误差
EC25_meas = EC / (1 + alpha * (T - 25))
rel_err = (EC25_meas - a) / a * 100
for t, e in zip(T, rel_err):
print(f"T={t:.0f}℃ 补偿后EC25={EC25_meas[T==t][0]:.4f} 相对误差={e:+.2f}%")
按上表数据,回归得到斜率 b ≈ 0.0200 mS/cm/℃,截距 a ≈ 2.340 mS/cm,故 α ≈ 0.00855 /℃。这个值明显低于土壤溶液典型范围(0.018–0.022),说明示例数据本身温度效应偏弱——实际标定时若出现这种情况,应检查溶液浓度是否过低、探头是否未完全浸没或温度是否未真正稳定,而不是直接采用该系数。
补偿验证与阈值判定
把拟合得到的 α 代回补偿公式,对 10–30℃ 每个温度点计算补偿后 EC₂₅ 与参考值(25℃实测值)的相对误差,与设定阈值比较。示例阈值取 ±3%。
| 温度 (℃) | EC_T (mS/cm) | 补偿后 EC₂₅ | 相对误差 | 判定(阈值±3%) |
|---|---|---|---|---|
| 10 | 2.040 | 2.340 | 0.00% | 通过 |
| 15 | 2.140 | 2.340 | 0.00% | 通过 |
| 20 | 2.240 | 2.340 | 0.00% | 通过 |
| 25 | 2.340 | 2.340 | 0.00% | 通过 |
| 30 | 2.440 | 2.340 | 0.00% | 通过 |
实操判定流程:① 每个温度点采样 10 次,剔除偏离中位数 3σ 以上的点;② 用五点拟合 α;③ 用未参与拟合的验证温度点计算补偿后误差;④ 若最大相对误差超过阈值,先排查温度稳定性与溶液浓度,再考虑改用二次温度模型或分段系数。