1. 项目概述:当STM32遇上智能水族生态
去年帮学弟调试他的毕业设计时,我彻底被这个智能鱼缸系统惊艳到了。传统鱼缸维护需要每天手动投喂、频繁检测水质,而这个基于STM32的解决方案,通过一堆传感器和精巧的控制逻辑,把鱼缸变成了会自主管理的微型生态系统。最让我意外的是,整套硬件成本控制在200元以内,却实现了市面千元级商用产品的核心功能。
这个系统本质上是个典型的环境监控+自动化执行案例。通过DHT11监测温湿度,PH传感器检测水质酸碱度,红外对管统计鱼群活动,这些数据经STM32处理后会触发相应操作:水温异常时启动加热棒,检测到投喂时间便转动舵机放出饲料,甚至能通过OLED屏幕和手机APP双端显示状态。这种将物联网技术下沉到小型生态场景的思路,特别适合作为嵌入式学习的综合实践项目。
2. 硬件架构设计解析
2.1 核心控制器选型对比
选择STM32F103C8T6作为主控是经过多维度考量的结果。与51单片机相比,STM32的72MHz主频能轻松处理多传感器数据融合;相比ESP8266等Wi-Fi芯片,其丰富的外设接口(5个USART、2个SPI、2个I2C)更适合连接各类传感器。我实测过同时读取4个传感器数据并驱动执行器时,CPU占用率仅35%左右。
关键提示:购买开发板时认准"Blue Pill"板型,市面上有些兼容板用的STM32F103C6T6芯片Flash只有32KB,可能无法容纳完整程序。
2.2 传感器组网方案
传感器布局遵循"三线制"原则(电源、地、信号),特别注意模拟信号的抗干扰处理:
- DHT11温湿度传感器:数据引脚接10K上拉电阻
- PH传感器:采用BNC接口的工业级探头,信号线需加磁珠滤波
- 红外对管:安装在投食口附近,发射管串联150Ω限流电阻
- 水位传感器:不锈钢探针式,注意做好防水密封
电路设计有个容易踩坑的地方:PH传感器输出的是非线性电压信号,需要在STM32的ADC输入端搭建电压跟随器电路。我推荐使用LM358运放,成本不到1元却能显著提升测量稳定性。
3. 软件系统实现细节
3.1 多任务调度设计
采用时间片轮询架构而非RTOS,这是考虑到毕业设计的时间成本。关键任务及其优先级如下:
| 任务名称 | 触发条件 | 执行周期 | 优先级 |
|---|---|---|---|
| 环境数据采集 | 定时器中断 | 1s | 高 |
| 投喂控制 | RTC闹钟/手动触发 | - | 中 |
| 异常状态检测 | 数据超阈值 | - | 最高 |
| 显示刷新 | 数据更新标志位 | 200ms | 低 |
在main.c中实现的核心调度逻辑如下:
c复制while(1) {
if(flag_1s) { // 定时器中断置位
Sensor_Read();
flag_1s = 0;
}
if(alert_flag) {
Handle_Alert();
alert_flag = 0;
}
Feed_Check(); // 包含喂食时间判断
Display_Update();
}
3.2 传感器数据处理技巧
不同传感器的数据特性决定了处理方式的差异:
- DHT11:单总线协议,需严格遵循时序图。实测发现启动信号后延迟30μs再读取最稳定
- PH值计算:采用两点校准法,在代码中存储校准参数:
c复制float PH_Convert(uint16_t adc_val) {
static float calib_k = 1.0; // 斜率校准值
static float calib_b = 0.0; // 截距校准值
return calib_k * (3.3 * adc_val/4096) + calib_b;
}
- 红外计数:使用状态机滤波,避免鱼群游动造成的误触发
4. 关键功能实现实录
4.1 智能投喂机制
投喂系统采用"时间触发+行为判断"双保险策略:
- RTC模块设置每日3个固定投喂时间点
- 红外对管统计鱼群活跃度,若检测到持续10分钟无活动则暂停本次投喂
- 舵机控制饲料盒旋转角度与转速关系:
- 90°位置:停止状态
- 45°→135°往复:慢速投喂(每次约0.5g饲料)
- 0°→180°快速摆动:紧急清空饲料(防结块)
调试时发现普通SG90舵机扭矩不足,改用MG996R金属齿轮舵机后,即使饲料盒装满100g饲料也能稳定运转。
4.2 手机端监控方案
选用HC-05蓝牙模块实现低功耗无线传输,避免Wi-Fi的复杂配置。Android端采用MIT App Inventor快速开发,关键点在于协议设计:
code复制[STX][数据类型][数据长度][数据内容][校验和][ETX]
例如水温数据包示例:
code复制0x02 0x01 0x04 0x00 0x00 0x42 0x48 0x03
解析后表示:温度数据(0x01),4字节长度,浮点数66.0(0x42480000)
5. 常见问题与解决方案
5.1 传感器读数异常排查
现象:PH值测量结果波动超过0.5
- 检查步骤:
- 万用表测量传感器供电电压(应稳定在5V±0.1V)
- 断开探头观察ADC输入是否归零
- 用标准缓冲液(PH4.0/7.0)重新校准
- 根本原因:通常是由于电源纹波或探头老化导致
5.2 投喂机构卡死处理
典型故障:舵机发出异响但不动作
- 应急处理流程:
- 立即切断电源防止烧毁驱动芯片
- 手动旋转饲料盒检查机械阻力
- 检查舵机齿轮是否有饲料碎屑卡入
- 预防措施:
- 每周用毛刷清洁出料口
- 在饲料盒内放置食品级干燥剂
6. 论文撰写要点建议
毕设论文要突出系统创新性,建议在以下章节重点着墨:
- 系统架构图:用Visio绘制分层框图,注明数据流向
- 功耗分析:实测不同工作模式下的电流消耗
- 休眠模式:3.8mA
- 正常工作:45mA
- 全负载运行:210mA
- 对比测试:与传统鱼缸维护方式的数据对比(如换水频率、饲料浪费率等)
在项目展示环节,建议准备三个演示场景:
- 手动投喂触发演示
- 模拟水温异常告警
- 手机APP数据查询实时展示
最后分享一个硬件布局的小技巧:将STM32开发板与执行机构分开放置,中间用FPC排线连接。这样既能避免振动干扰,又方便在答辩时展示各模块工作状态。