1. 项目概述:当STM32遇上智能鱼缸
养鱼爱好者最头疼的莫过于出差或旅行时无人照料鱼缸。水温波动、喂食不及时、水质恶化等问题随时可能导致"团灭"悲剧。去年我用STM32F103C8T6为主控,搭配常见传感器,开发了一套成本不到200元的智能鱼缸系统,实现了以下核心功能:
- 24小时水温监测(DS18B20传感器±0.5℃精度)
- 自动喂食(SG90舵机控制喂食器)
- 水位检测(超声波HC-SR04模块)
- 水质监测(TDS传感器)
- 手机远程监控(ESP8266 WiFi模块)
整套系统装在防水盒中,通过3D打印的支架固定,实测连续运行三个月零故障。最让我意外的是,原本只是毕业设计的项目,后来被本地水族馆采用作为展示缸的监控方案。
2. 硬件设计精要
2.1 核心器件选型对比
| 模块类型 | 候选方案 | 最终选择 | 选择理由 |
|---|---|---|---|
| 主控芯片 | STM32F103C8T6 vs Arduino Uno | STM32F103C8T6 | 更丰富的外设接口,更低功耗,性价比更高 |
| 温度传感 | DS18B20 vs DHT11 | DS18B20 | 防水封装,±0.5℃更高精度 |
| 喂食机构 | 步进电机 vs 舵机 | SG90舵机 | 扭矩足够且控制简单 |
| 通信模块 | ESP8266 vs HC-05蓝牙 | ESP8266-01S | 远程监控需求优先于低功耗 |
关键提示:DS18B20传感器必须购买不锈钢防水款,普通封装版本在水下极易损坏。我第一批采购的5个非防水传感器,一周内全部短路报废。
2.2 电路设计三个避坑点
-
电源隔离:水泵启停时会产生电压波动,我在STM32的5V输入前加了LC滤波电路(100μF电容+10mH电感),实测可将电压波动控制在±0.3V内。
-
信号抗干扰:水温传感器走线要远离水泵电源线,我的方案是用屏蔽线包裹信号线,并在代码中采用中值滤波算法(采样5次取中间值)。
-
防水处理:
- 超声波传感器用热熔胶密封边缘
- 所有接线头涂抹704硅橡胶
- 电路板喷涂三防漆
3. 软件架构解析
3.1 程序流程图设计
c复制void main() {
硬件初始化();
WiFi连接();
while(1) {
读取传感器数据();
if(检测到异常()) 报警处理();
if(到达喂食时间()) 自动喂食();
if(收到手机指令()) 执行远程控制();
数据上传云端();
进入低功耗模式();
}
}
3.2 关键算法实现
自适应喂食算法:
c复制// 根据水温动态调整喂食量
float getFeedAmount(float temp) {
float baseAmount = 0.5; // 基础喂食量(g)
if(temp < 22) return baseAmount * 0.8; // 低温少喂
if(temp > 28) return baseAmount * 1.2; // 高温多喂
return baseAmount;
}
水质评估模型:
python复制# 伪代码示例
def water_quality(tds, temp, ph):
score = 100
if tds > 500: score -= 30
elif tds > 300: score -= 15
if temp > 30: score -= 20
if ph < 6.5 or ph > 7.5: score -= 25
return "优" if score >=80 else "良" if score >=60 else "差"
4. 手机端监控实现
采用Blynk平台快速搭建控制界面,关键组件包括:
- 实时数据仪表盘(水温、TDS值曲线图)
- 喂食手动触发按钮
- 异常报警通知推送
- 历史数据查询页面
配置步骤:
- 在Blynk App创建新项目
- 添加图表组件绑定对应数据流
- 设置报警规则(如水温>30℃触发)
- 生成授权码填入STM32程序
实测注意:ESP8266的固件必须使用ATv1.6.2版本,新版固件与Blynk存在兼容性问题。我调试时曾因固件版本问题导致数据断续,更换后稳定运行。
5. 论文写作要点
5.1 创新点提炼方向
- 多传感器数据融合算法
- 基于环境参数的自适应控制策略
- 低功耗设计(平均电流<50mA)
- 云端+本地双备份数据存储
5.2 实验数据记录建议
- 对比测试:记录自动/手动模式下的水质参数变化
- 压力测试:模拟断网、传感器故障等异常情况
- 能耗测试:不同工作模式下的电流消耗
- 用户调研:收集实际使用反馈
6. 常见问题解决方案
Q1:舵机卡死无法转动
- 检查电源是否达到5V/1A
- 机械结构是否有物理阻碍
- 尝试减小PWM占空比幅度
Q2:WiFi频繁断开连接
- 调整ESP8266天线位置
- 在代码中添加重连机制
- 更换2.4GHz信道避开干扰
Q3:传感器读数异常
- 检查防水密封是否完好
- 用万用表测量供电电压
- 尝试更换传感器对比测试
这套系统最让我自豪的不是技术复杂度,而是它真正解决了实际问题。邻居出差两周,靠这个系统他的龙鱼健康存活。后来我开源了所有设计文件,收到二十多位爱好者的改进建议。下一步计划加入图像识别功能,通过摄像头检测鱼儿活跃度来优化喂食策略。