基于 STM32 的智能净水器系统设计
家庭与办公场景对饮用水安全的关注持续提升。本文设计一种以 STM32F103C8T6 主控为核心的智能净水器系统,整合 SEN0189 浑浊度检测、PH-4502C pH 值检测、SR-01 水位、YF-S201C 流量传感器、OLED12864 本地显示与 ESP8266 上云模块,实现水质监测、出水控制与流量统计的完整流程。
一、系统功能总览
| 功能编号 | 功能名称 | 说明 |
|---|---|---|
| F1 | 浑浊度检测 | SEN0189 红外漫反射 |
| F2 | pH 检测 | PH-4502C 模拟电极 |
| F3 | 水位检测 | SR-01 电阻式水位 |
| F4 | 流量累计 | YF-S201C 涡轮脉冲计数 |
| F5 | 进水控制 | 低水位自动加水 |
| F6 | 出水控制 | 水质合格才可出水 |
| F7 | 本地显示 | OLED12864 实时数据 |
| F8 | 远程监控 | ESP8266 + 手机 APP |
二、核心模块选型对比
2.1 主控模块选型
| 方案 | 型号 | 性能 |
|---|---|---|
| 方案 1 | STM32F103C8T6 | 72 MHz / 64 KB |
| 方案 2 | STM32F407VG | 168 MHz,资源多但价格高 |
选择方案 1:在中等复杂度下兼顾性能与成本。
2.2 浑浊度模块选型
| 方案 | 模块 | 原理 | 成本 |
|---|---|---|---|
| 方案 1 | SEN0189 红外 | LED + 光电二极管 | 低 |
| 方案 2 | SEN0176 激光 | 激光束 | 较高 |
选择方案 1:满足家庭净水器精度需求,价格友好。
2.3 pH 模块选型
| 方案 | 模块 | 测量范围 |
|---|---|---|
| 方案 1 | PH-4502C | pH 0~14、±0.1 pH |
| 方案 2 | SEN0161 | 量程类似 |
选择方案 1:PH-4502C 在校准与精度上更稳定。
2.4 流量模块选型
| 方案 | 型号 | 量程 |
|---|---|---|
| 方案 1 | YF-S201C | 1~30 L/min |
| 方案 2 | FS300A | 1~60 L/min |
选择方案 1:家用净水器流量在 1~10 L/min 区间,YF-S201C 足够。
三、系统接线总表
| 模块 | 引脚 | 单片机端 | 备注 |
|---|---|---|---|
| SEN0189 | VCC/GND/AO | 5 V / GND / PA0(ADC) | 红外探头 |
| PH-4502C | VCC/GND/OUT | 3.3 V / GND / PA1(ADC) | BNC 接口 |
| SR-01 | VCC/GND/AO | 5 V / GND / PA2(ADC) | 液位检测 |
| YF-S201C | 红/黄/黑 | 5 V / PA3 / GND | 脉冲计数 |
| OLED12864 | VCC/GND/SCL/SDA | 3.3 V / GND / PB6 / PB7 | I2C |
| ESP8266 | VCC/GND/TX/RX/CH_PD | 3.3 V / GND / PA10/PA9/3.3 V | UART |
| 继电器 ×2 | IN/VCC/GND | PB0 / PB1 / 5 V / GND | 进水阀 / 出水阀 |
四、系统软件设计
4.1 主程序流程
int main(void)
{
SystemInit();
SEN0189_Init();
PH_Init();
SR01_Init();
YFS201_Init();
OLED_Init();
ESP8266_Init();
ESP8266_JoinAP("home","pwd");
while (1)
{
float turbidity = SEN0189_Read();
float ph = PH_Read();
u16 level = SR01_Read();
u16 flow = YFS201_GetRate();
if (level < LVL_LO) InValve_On();
if (level >= LVL_HI) InValve_Off();
if (ph >= 6.5f && ph <= 8.5f &&
turbidity <= 5.0f && level >= LVL_LO)
OutValve_On();
else OutValve_Off();
OLED_ShowAll(turbidity, ph, level, flow);
ESP8266_Publish(turbidity, ph, level, flow);
delay_ms(1000);
}
}
4.2 ADC 采集
u16 Get_Adc_Average(u8 ch, u8 times)
{
u32 sum = 0;
for (u8 i = 0; i < times; i++) sum += Get_Adc(ch);
return sum / times;
}
4.3 流量计数
使用外部中断捕获涡轮脉冲,每秒计算脉冲数 × 60 / 7.5 = L/min,并写入累计流量。
4.4 远程上报
ESP8266 配置 STA 模式 → 连接路由器 → MQTT 客户端连接到阿里云,主题 water/quality,每 1 秒发布一次。
五、系统实现与测试
5.1 硬件焊接与测试
由于水质采样,模块外壳做好防水处理;YF-S201C 在水管中按水流方向安装,避免漏气。
5.2 软件调试
Keil 5 + ST-Link,结合串口日志核对 MQTT 报文与 ADC 转换值。
5.3 功能测试结果
| 测试项目 | 操作 | 结果 |
|---|---|---|
| pH 校准 | pH 4.00 与 pH 6.86 标液 | 偏差 ≤ 0.1 pH |
| 浑浊度 | 纯净水对照 | 数值变化趋势正确 |
| 流量累计 | 1 L 量筒实测 | 误差 ≤ ±3% |
| APP 显示 | 改变阈值 | 立即同步 |
六、总结
本文基于 STM32F103C8T6 设计了一套集成浊度、pH、水位、流量的智能净水器方案,实现水质合格才出水、水位过低自动加水以及流量统计与远程监控。整套方案结构紧凑、易于扩展,可作为家庭饮水健康、产品样机和高校嵌入式物联网课程的综合实践项目参考。
七、资料内容完整工程资料(原理图、PCB、代码、元件清单)

八、资料获取方式
