你的土壤湿度传感器数据准吗?聊聊Arduino项目中传感器校准、电极腐蚀那些坑
在阳台上种了几盆薄荷,本以为插个土壤湿度传感器就能高枕无忧,结果两周后叶子全蔫了——拆开传感器一看,电极上结了一层白霜似的盐垢。这个场景恐怕不少用Arduino做智能园艺的朋友都遇到过。土壤湿度传感器看似简单,但要让它在真实环境中长期稳定工作,远比教程里"接三根线读数值"复杂得多。
1. 为什么你的传感器数据不可靠?
刚拿到传感器时,在花盆里测试读数看起来挺合理。但部署到户外两周后,数据开始出现诡异波动:明明刚浇过水,数值却显示土壤干燥。这种"传感器漂移"现象背后有三大元凶:
盐分干扰:北方地区自来水普遍硬度较高,蒸发后钙镁离子会在电极表面积累。实测显示,使用30天后电极电阻会增加47%-62%,导致读数虚高。我曾用不同水源做对比实验:
| 水源类型 | 初始电阻(Ω) | 30天后电阻(Ω) | 误差率 |
|---|---|---|---|
| 蒸馏水 | 680 | 710 | +4.4% |
| 自来水 | 650 | 1050 | +61.5% |
| 雨水 | 670 | 690 | +3.0% |
温度影响:同一块传感器在25℃和5℃环境下测量饱和湿土,输出值相差23%。这是因为水温变化会改变离子迁移速率。有个简单的补偿方法——在代码里加入温度传感器读数:
arduino复制#include <OneWire.h>
#include <DallasTemperature.h>
#define TEMP_PIN 3
OneWire oneWire(TEMP_PIN);
DallasTemperature sensors(&oneWire);
float getCompensatedHumidity(int rawValue, float temp) {
float compensation = 1 + 0.02 * (temp - 25); // 温度补偿系数
return rawValue / compensation;
}
电极极化:
