文档
pH 传感器模组 — 水质监测节点技术文档
1. 概述
本模组用于水质监测节点的 pH 值测量,由 pH 复合电极探头 + 信号调理板 组成。探头输出微弱毫伏级信号,经调理板放大后送入 ESP32-S3 的 12-bit ADC 采集,通过 三点标定 后在固件中线性拟合出最终 pH 值。
典型应用
- 河流 / 湖泊水质监测
- 水产养殖水体酸碱度控制
- 工业 / 市政污水处理
- 实验室 pH 数据采集
2. 引脚定义
| 引脚名 | 类型 | 说明 |
|---|---|---|
| VCC | 电源 | 3.3V 或 5V 供电 |
| GND | 电源 | 共地 |
| OUT | 模拟输出 | 0~VCC 电压,正比于 pH 探头信号 |
在 ESP32 端,OUT 接任意 ADC GPIO,本文档使用 GPIO4 (PH_ADC_PIN)。
3. 电气特性
| 参数 | 典型值 | 备注 |
|---|---|---|
| 测量范围 | 0.00 ~ 14.00 pH | — |
| 输出电压 | 0 ~ VCC | 已放大,可直接进 ADC |
| ADC 分辨率 | 12-bit (4096 级) | ESP32 analogReadMilliVolts() |
| 衰减档位 | ADC_11db | 满量程 ≈ 3.3V |
| 每点采样数 | 20 次均值 | read_ph_voltage() |
| 采集稳定时间 | ≤ 30 秒 | 缓冲液中充分浸泡后读数稳定 |
| 温度补偿 | 建议外接 DS18B20 | 当前线性拟合未做温度补偿,依赖标定温度与测量温度一致 |
标定点参考电压(示例,每块板不同)
| pH 缓冲液 | Master (V) | Slave (V) |
|---|---|---|
| 4.00 | — | — |
| 6.86 | 1.3699 | 2.5609 |
| 9.18 | 1.1168 | 2.1612 |
4. 典型应用电路
pH 探头
┌──────┐
│ BNC │──── 信号调理板 ──── OUT ──── GPIO4 (ADC)
└──────┘ │
VCC ──── 3.3V
GND ──── GND
- 调理板已将探头高阻抗信号转换为低阻抗电压输出,可直接接入单片机 ADC。
- 调理板供电与 MCU 共用 3.3V 以减少参考电压误差。
5. 标定流程
使用配套 ph_calib 三点标定工具(Python Qt):
烧录标定固件:
pio run -d firmware/node -e calib -t upload固件将持续以
[PH_CAL] v=X.XXXX格式输出实时电压(约 5Hz)。连接串口:运行
ph_calib工具,选择对应 COM 口,点击连接。三点采集:
- 将探头依次浸泡到 pH=4.00、6.86、9.18 缓冲液中。
- 每次浸泡后等待电压稳定(约 30s),点击对应点的"采集"按钮。
拟合:点击"最小二乘拟合",工具输出
k、b、R²以及可直接粘贴的PH_V686/PH_V918常量。更新固件:将生成的常量粘贴到
platformio.ini对应 env 的build_flags中,重新编译烧录。
6. 固件关键函数
6.1 pH 电压读取
static float read_ph_voltage() {
const int N = 20;
uint32_t sum_mv = 0;
for (int i = 0; i < N; ++i) {
sum_mv += analogReadMilliVolts(PH_ADC_PIN);
delay(2);
}
return (sum_mv / (float)N) / 1000.0f; // 返回 V
}
6.2 电压转 pH
static float voltage_to_ph(float v) {
constexpr float k = (6.86f - 9.18f) / (PH_V686 - PH_V918);
return 6.86f + k * (v - PH_V686);
}
其中 PH_V686 和 PH_V918 由标定工具生成,等价于线性关系 pH = k·V + b。
7. 使用注意事项
- ⚠️ 每块调理板 + 每根探头组合都必须单独标定,不可复用其他板的参数。
- ⚠️ pH 探头需保持湿润存储,干燥会导致响应漂移甚至永久损坏。
- ⚠️ 标定时三种缓冲液温度应尽量一致,否则线性度会下降。
- ⚠️ 若测量精度要求高(±0.05 pH),建议增加温度补偿算法(当前固件为简化线性模型)。
- ⚠️ ADC 参考电压波动会影响读数;建议调理板与 MCU 用同一路 LDO 供电。
- ⚠️ 标定工具采集时取最近 30 个电压样本的均值以减少噪声,若数据抖动较大可适当增大
SAMPLE_WINDOW。 - ⚠️ 探头寿命通常为 6~12 个月(取决于使用频率和水质),建议定期重新标定。