1. 项目概述:智能水位水温监控系统设计
这个基于STM32的水位检测自动控制系统是我去年为一个农业大棚项目设计的解决方案,主要解决传统人工监测水塔水位和水温效率低下的问题。系统通过传感器实时采集水位、水温数据,自动控制水泵工作状态,并能对历史数据进行分析,实现用水管理的智能化和自动化。
整套系统硬件成本控制在200元以内,却实现了市面上一两千元商用控制器的基础功能。特别适合中小型农场、温室大棚、家庭水塔等场景。我在实际部署中发现,系统不仅能节省人工巡检时间,还能通过数据分析优化用水策略,平均节水达到15%-20%。
2. 系统架构设计
2.1 硬件组成框图
系统采用模块化设计,主要包含以下几个核心部件:
- STM32F103C8T6最小系统板(核心控制器)
- 超声波水位传感器HC-SR04
- DS18B20防水温度传感器
- 继电器模块(控制水泵)
- OLED显示屏(本地数据显示)
- ESP8266 WiFi模块(可选,用于远程监控)
2.2 传感器选型考量
水位检测我最终选择了HC-SR04超声波模块而非浮球式传感器,主要基于三点考虑:
- 非接触式测量不会污染水源
- 5cm-4m的检测范围完全覆盖常见水塔高度
- 2mm的测量精度满足农业灌溉需求
水温传感器选用DS18B20是因为:
- 防水封装可直接浸入水中
- ±0.5℃的精度足够
- 单总线协议节省IO口资源
注意:DS18B20在长距离传输时需要加上拉电阻,我的经验是超过3米线长就需要加4.7KΩ上拉。
3. 核心功能实现细节
3.1 水位检测算法优化
超声波测距的原始数据存在波动,我采用了三重滤波算法:
- 硬件滤波:在ECHO引脚加104电容滤波
- 软件中值滤波:连续采样5次取中间值
- 滑动平均滤波:记录最近10次数据求平均
c复制// 示例代码片段
float getWaterLevel(){
float temp[5];
for(int i=0;i<5;i++){
temp[i] = HC_SR04_GetDistance();
delay(50);
}
bubbleSort(temp,5); // 中值滤波
static float history[10];
static int index=0;
history[index++%10] = temp[2]; // 滑动窗口
float sum=0;
for(int j=0;j<10;j++) sum+=history[j];
return sum/10 - offset; // offset是传感器到水面的基准距离
}
3.2 水泵控制逻辑
水泵控制采用模糊PID算法,主要考虑以下因素:
- 当前水位与目标水位的差值
- 水位变化趋势(上升/下降速度)
- 昼夜时段(夜间用水量小可降低补水频率)
我设计的状态机包含三种工作模式:
- 快速补水模式(水位低于下限)
- 精确调节模式(接近目标水位)
- 休眠模式(水位在安全范围内)
4. 数据分析功能实现
4.1 本地数据存储
使用STM32内部Flash模拟EEPROM存储关键数据:
- 每小时记录一次水位、水温数据
- 每天形成一条汇总记录(最高/最低/平均)
- 采用环形缓冲区设计,可存储30天数据
c复制#pragma pack(push,1)
typedef struct {
uint32_t timestamp;
float max_level;
float min_level;
float avg_temp;
} DailyRecord;
#pragma pack(pop)
4.2 远程监控方案(可选)
通过ESP8266模块将数据上传至云平台:
- 每5分钟上传一次实时数据
- 使用MQTT协议传输,JSON格式封装
- 支持手机APP远程查看和控制
经验分享:在农田等信号弱区域,我增加了本地缓存机制,网络中断时数据暂存SD卡,恢复后自动补传。
5. 常见问题与解决方案
5.1 超声波传感器误检测
现象:偶尔会出现水位突变的异常值
解决方法:
- 增加传感器供电稳压电路
- 在代码中添加合理性检查(如变化率超过10cm/s视为无效)
- 在传感器下方加装消波挡板
5.2 水泵频繁启停
现象:在水位临界点附近水泵反复开关
优化方案:
- 设置5cm的滞回区间
- 增加最小运行时间限制(至少运行30秒)
- 根据历史数据学习用水规律,预测性控制
5.3 温度传感器读数异常
可能原因:
- 线缆接触不良(表现为85℃或-127℃)
- 电源干扰(表现为随机跳变)
排查步骤:
- 检查总线是否有上拉电阻
- 缩短传感器线缆长度
- 在代码中添加CRC校验
6. 系统优化与扩展方向
在实际部署中,我逐步增加了以下实用功能:
- 低功耗模式:夜间关闭显示屏,采样间隔延长
- 异常报警:水位过低/过高时蜂鸣器提示
- 自清洁提醒:根据使用时长提示清洗传感器
- 电量监测:通过ADC检测电池电压
对于想进一步开发的同行,可以考虑:
- 增加PH值检测实现水质监控
- 集成天气预报数据优化灌溉策略
- 使用太阳能供电系统实现完全无线部署
这个项目最让我意外的收获是,通过三个月的数据积累,发现大棚内水温与作物生长速度存在明显相关性。现在系统不仅能自动控制水位,还能根据水温变化预测作物成熟时间,这比最初设计的单纯控制功能价值提升了不少。
