STM32水质检测系统设计与实现

基于STM32的水质检测系统设计与实现

1. 项目概述

1.1 系统架构

本水质检测系统采用模块化设计架构,以STM32F103RCT6微控制器为核心,集成多种水质参数传感器、显示模块和无线通信模块。系统硬件架构分为三个主要层次:

  1. 传感层:包含水温、pH值、电导率和浊度四个检测模块
  2. 控制层:STM32主控芯片负责数据采集、处理和系统控制
  3. 通信层:4G模块实现数据上云,支持远程监控

系统工作流程为:各传感器采集水质参数→STM32进行数据处理→本地OLED显示→4G模块上传云端→用户终端显示与报警。

1.2 技术指标

  • 测量范围

    • 水温:0-50℃(±0.5℃)
    • pH值:0-14(±0.1)
    • 电导率:0-1000μS/cm(±10%)
    • 浊度:0-1000NTU(±5%)
  • 通信接口

    • 4G模块:支持TCP/IP协议栈
    • 云平台:华为云IoT
    • 本地显示:SPI接口OLED
  • 供电要求:5V DC,典型功耗<500mA

2. 硬件设计

2.1 主控电路设计

主控芯片选用STM32F103RCT6,该芯片具有以下特点:

  • Cortex-M3内核,72MHz主频
  • 256KB Flash,48KB SRAM
  • 3个12位ADC,21个通道
  • 丰富的外设接口(SPI、I2C、USART等)

主控电路设计要点:

  1. 时钟电路:8MHz晶振提供系统时钟,32.768kHz晶振用于RTC
  2. 复位电路:采用10kΩ上拉电阻和100nF电容构成RC复位
  3. 调试接口:SWD接口用于程序下载和调试
  4. 电源滤波:每个电源引脚配置100nF去耦电容

2.2 传感器接口设计

2.2.1 水温检测模块

采用DS18B20数字温度传感器,设计要点:

  • 单总线接口,通过4.7kΩ上拉电阻连接PA0
  • 防水型探头,测量范围-55℃~+125℃
  • 12位分辨率,典型精度±0.5℃
// DS18B20读取温度示例代码 float DS18B20_ReadTemp(void) { uint8_t temp[2]; DS18B20_Start(); DS18B20_ReadByte(temp); DS18B20_ReadByte(temp+1); return (float)((temp[1]<<8)|temp[0])/16.0; }
2.2.2 pH值检测模块

采用模拟输出pH传感器,接口设计:

  • 传感器输出0-3V对应pH值0-14
  • 信号接入PA1(ADC1通道1)
  • 输入前端配置RC低通滤波(R=1kΩ,C=100nF)

pH值计算公式:

pH = (ADC_value * 3.3 / 4095) * 14 / 3
2.2.3 电导率检测模块

TDS传感器接口设计:

  • 模拟输出0-3V对应0-1000ppm
  • 信号接入PA2(ADC1通道2)
  • 信号调理电路增益=1
2.2.4 浊度检测模块

浊度传感器接口特点:

  • 光学测量原理,输出0-3V模拟信号
  • 信号接入PA3(ADC1通道3)
  • 需定期清洁光学窗口保证精度

2.3 显示模块设计

采用0.96寸SPI OLED显示屏,硬件连接:

  • SCK → PA5
  • MOSI → PA7
  • RES → PB0
  • DC → PB1
  • CS → PA4

显示内容布局:

  1. 顶部状态栏:信号强度、时间
  2. 主显示区:四参数实时数值
  3. 底部:报警状态指示

2.4 通信模块设计

Air724UG 4G模块接口设计:

  • 串口连接:USART1(PA9-TX,PA10-RX)
  • 电源管理:独立LDO供电(3.8V/2A)
  • SIM卡接口:ESD保护二极管
  • 天线接口:50Ω阻抗匹配

通信协议栈:

应用层:MQTT 传输层:TCP 网络层:IPv4 物理层:LTE Cat1

2.5 电源系统设计

电源架构采用两级稳压:

  1. 输入级:5V USB或DC输入
  2. 主控供电:3.3V LDO(AMS1117)
  3. 4G模块供电:独立3.8V DCDC
  4. 传感器供电:5V/3.3V切换开关

保护电路设计:

  • 输入反接保护:二极管
  • 过流保护:自恢复保险丝
  • 浪涌保护:TVS二极管

3. 软件设计

3.1 系统软件架构

采用前后台系统架构:

  • 前台程序:中断服务例程
    • 定时器中断(1ms)
    • USART接收中断
    • ADC采样完成中断
  • 后台主循环
    • 传感器数据采集
    • 数据处理算法
    • 显示刷新
    • 网络通信

3.2 关键算法实现

3.2.1 传感器数据处理
typedef struct { float temperature; float ph_value; float conductivity; float turbidity; uint32_t timestamp; } WaterQualityData; void Sensor_DataProcess(WaterQualityData *data) { // 中值滤波 >#define ALARM_TEMP_HIGH 30.0 #define ALARM_PH_LOW 6.5 #define ALARM_PH_HIGH 8.5 uint8_t CheckAlarm(WaterQualityData data) { uint8_t alarm_flags = 0; if(data.temperature > ALARM_TEMP_HIGH) alarm_flags |= TEMP_ALARM; if(data.ph_value < ALARM_PH_LOW || data.ph_value > ALARM_PH_HIGH) alarm_flags |= PH_ALARM; return alarm_flags; }

3.3 云平台通信协议

MQTT主题设计:

  • 上行主题:/water/{deviceID}/sensor
  • 下行主题:/water/{deviceID}/control

数据包格式(JSON):

{ "temp": 25.6, "ph": 7.2, "cond": 350, "turb": 12, "time": "2024-03-20T14:30:00Z", "alarm": 0 }

3.4 上位机软件设计

Qt5跨平台应用主要功能:

  1. 数据可视化:实时曲线显示
  2. 历史查询:时间范围选择
  3. 报警管理:阈值设置
  4. 设备配置:网络参数设置

关键类设计:

  • SerialPortHandler:串口通信
  • DataParser:协议解析
  • ChartWidget:数据显示
  • CloudClient:云平台对接

4. 系统测试与优化

4.1 传感器校准方法

  1. pH传感器校准

    • 使用标准缓冲液(pH4.0、7.0、10.0)
    • 两点校准法确定斜率和截距
  2. 电导率校准

    • 标准溶液法(1413μS/cm)
    • 温度补偿系数设置
  3. 浊度校准

    • 福尔马肼标准液
    • 非线性段多点校准

4.2 通信可靠性测试

测试项目:

  1. 网络断线重连(平均恢复时间<30s)
  2. 数据包完整性(CRC校验)
  3. 高密度数据传输(1Hz采样率持续24h)

优化措施:

  • 增加数据缓存队列
  • 实现ACK确认机制
  • 优化心跳包间隔(60s)

4.3 低功耗优化

  1. 传感器轮询策略:
    • 水温:1Hz
    • pH/电导率/浊度:0.2Hz
  2. 显示刷新率:1Hz
  3. 4G模块休眠模式:空闲时进入PSM模式

实测功耗对比:

模式电流(mA)
全速运行480
低功耗模式120
深度睡眠15

5. BOM清单与成本分析

关键器件选型表:

器件名称型号数量单价(元)关键参数
主控MCUSTM32F103RCT6115.0072MHz, 256KB Flash
温度传感器DS18B20防水型18.50-55~125℃, ±0.5℃
pH传感器PH-4502C165.000-14pH, 模拟输出
电导率传感器TDS-10155.000-1000ppm, 模拟输出
浊度传感器TU-019148.000-1000NTU, 模拟输出
OLED显示屏SSD1306112.000.96", 128x64, SPI
4G模块Air724UG185.00LTE Cat1, MQTT支持
电源管理ICAMS1117-3.310.803.3V LDO, 1A

总硬件成本约300元(不含外壳和装配),相比商用设备具有显著价格优势。系统设计考虑了以下成本优化因素:

  1. 选用高性价比国产4G模块
  2. 采用通用型传感器
  3. 简化PCB设计(洞洞板方案)
  4. 开源软件架构降低开发成本