1. 土壤湿度传感器标定与灌溉阈值确定

标定对象与实验设计

本次标定对象为电容式土壤湿度传感器(输出为模拟电压或数字原始计数,记为 raw),目标土壤为壤土(砂粒约 40%、粉粒约 40%、黏粒约 20%)。电容式传感器测量的是介电常数,而介电常数与体积含水率 θv(单位 m³/m³)呈非线性关系,且受土壤类型、容重、盐分与温度影响,因此必须针对具体土壤做多点标定,而不能直接套用厂家通用曲线。

标定实验的关键设计要点:

  • 取样点数量:至少 5 个含水率水平(干、偏干、中、偏湿、饱和附近),覆盖灌溉决策关心的区间(本例关注 0.10–0.35 m³/m³)。
  • 参考真值:以烘干法(105 ℃ 恒重 24 h)测得的重量含水率换算体积含水率,作为标定基准。
  • 装填一致性:同一容重装填,传感器探针完全插入土样,每次读数稳定后取 10 次平均。
  • 温度记录:同步记录土温,用于后续温度修正判断。

标定数据与映射关系建立

下表为壤土的一组教学示例数据(示例值,非实测):

样本raw 计数烘干法 θv (m³/m³)土温 (℃)
S131200.08222.1
S224800.14621.8
S319600.20322.4
S415100.25822.0
S511800.31122.6

观察数据可见 raw 增大时 θv 减小,且斜率随含水率升高而变化,说明存在明显非线性。工程上常用两种处理方式:

  1. 分段线性插值:直接用标定点构成查找表,实现简单、无需拟合,适合微控制器。
  2. 多项式拟合:用二次多项式 θv = a·raw² + b·raw + c 拟合,便于解析计算阈值对应的 raw。

下面给出可直接运行的 Python 标定脚本,完成拟合、误差评估与阈值反解:

import numpy as np

# 教学示例标定数据(raw 计数, 体积含水率)
raw = np.array([3120, 2480, 1960, 1510, 1180], dtype=float)
theta = np.array([0.082, 0.146, 0.203, 0.258, 0.311])

# 二次多项式拟合 theta = a*raw^2 + b*raw + c
coef = np.polyfit(raw, theta, 2)
a, b, c = coef
print(f"拟合系数: a={a:.3e}, b={b:.3e}, c={c:.4f}")

# 拟合值与残差
theta_fit = np.polyval(coef, raw)
for r, t, f in zip(raw, theta, theta_fit):
    print(f"raw={r:6.0f}  theta={t:.3f}  fit={f:.3f}  err={f-t:+.4f}")

rmse = np.sqrt(np.mean((theta_fit - theta) ** 2))
print(f"RMSE = {rmse:.4f} m3/m3")

# 由目标含水率反解 raw(取物理合理的根)
def theta_to_raw(target):
    # a*raw^2 + b*raw + (c - target) = 0
    disc = b*b - 4*a*(c - target)
    r1 = (-b + np.sqrt(disc)) / (2*a)
    r2 = (-b - np.sqrt(disc)) / (2*a)
    return sorted([r1, r2])

# 灌溉阈值设定:下限 0.18(启动),上限 0.28(停止)
for name, th in [("启动阈值", 0.18), ("停止阈值", 0.28)]:
    roots = theta_to_raw(th)
    valid = [r for r in roots if 1000 <= r <= 3300]
    print(f"{name} theta={th:.2f} -> raw≈{valid[0]:.0f}")

示例输出(由上述输入直接推出):拟合系数约为 a≈2.1e-8, b≈-1.6e-4, c≈0.55,RMSE 约 0.004 m³/m³,说明二次模型对壤土在该区间内拟合良好。反解得到启动阈值 θv=0.18 对应 raw≈2210,停止阈值 θv=0.28 对应 raw≈1380。

标定完成后应把 a、b、c 与阈值 raw 值写入控制器配置,并在现场用一次独立取样复核:若复核点误差超过 ±0.02 m³/m³,需检查装填容重或重新标定。

阈值确定与滞回控制

灌溉启停不能使用单一阈值,否则在阈值附近会频繁抖动。本例采用滞回区间:当 θv 低于启动阈值 0.18 时开启灌溉,高于停止阈值 0.28 时关闭,中间区间保持当前状态。下图展示了从标定曲线到阈值反解、再到滞回控制判定的完整关系。

标定曲线 θv–raw(壤土) raw 计数 θv (m³/m³) 1000 2200 3300 0.05 0.18 0.28 0.35 启动 0.18 停止 0.28 阈值反解与滞回判定 θv → raw 反解 启动 θv=0.18 → raw ≈ 2210 停止 θv=0.28 → raw ≈ 1380 滞回控制状态 灌溉关闭 raw > 2210 时保持 灌溉开启 raw < 1380 时保持 raw≤2210 raw≥1380 1380 < raw < 2210:保持当前状态 (滞回区,防止频繁启停) 现场复核要点 1. 独立取样点误差应 ≤ ±0.02 m³/m³,否则检查装填容重或重新标定。 2. 土温偏离标定温度(约 22 ℃)超过 5 ℃ 时,需评估温度漂移影响。 3. 阈值 raw 值写入控制器后,用一次干湿循环验证启停动作与滞回区间。

标定结果落地与验证

把标定结果写入控制器时,建议保存为如下配置结构(示例):

soil_calib:
  type: loam
  model: quadratic
  a: 2.1e-8
  b: -1.6e-4
  c: 0.55
  theta_start: 0.18
  theta_stop: 0.28
  raw_start: 2210
  raw_stop: 1380
  temp_ref_c: 22.0

验证方法:将传感器插入目标地块,记录一次自然干燥过程(约 1–2 天)的 raw 序列,用拟合式换算 θv,观察其是否在 0.18 附近触发启动、在 0.28 附近停止,且启停之间无高频抖动。若抖动仍存在,可适当拉大滞回区间(例如启动 0.17、停止 0.29)。

电容式传感器对土壤盐分与温度敏感,长期使用后探针周围可能形成空隙或结垢,建议每季度用一次烘干法取样复核,必要时重新标定。