1. 项目概述:当STM32遇上智能鱼缸
去年帮学弟调试这个毕设项目时,我深刻体会到传统鱼缸管理的痛点——出差三天回家发现鱼食投喂器卡住、加热棒失灵导致水温骤降。这个基于STM32的智能鱼缸系统,本质上是用嵌入式技术重构了水族生态的监控逻辑。
系统以STM32F103C8T6为主控,通过DS18B20水温传感器、PH-4502C水质检测模块、HX711称重模块等构建感知层,配合5V潜水泵、舵机投食机构等执行单元,实现了比市售千元级设备更精准的闭环控制。特别在投喂算法上,我们摒弃了简单的定时触发,引入了基于重量反馈的PID控制,确保每次投食量误差小于0.1g。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件架构设计解析
2.1 核心控制器选型对比
选择STM32F103C8T6并非偶然,经过实测对比:
- 与51单片机相比:72MHz主频能流畅运行FreeRTOS,满足多任务需求(传感器采集、PID计算、OLED刷新并行)
- 与ESP8266相比:内置12位ADC对水质传感器的模拟信号处理更精准
- 资源消耗:在开启硬件浮点运算单元时,PID控制循环仅占用2.3%的CPU资源
关键提示:务必使用带硬件浮点的STM32型号,软件浮点库会导致控制周期从5ms延长到23ms
2.2 传感器网络搭建要点
水温监测采用三线制DS18B20时,要注意:
- 上拉电阻取值4.7KΩ(10KΩ会导致波形畸变)
- 传感器必须用热缩管做防水处理,我们的测试显示未防护的传感器在盐水环境中平均寿命仅17天
水质检测模块的校准技巧:
c复制// PH值校准代码示例
void PH_Calibrate() {
adc_val = get_ADC_Value(1); // 第1通道
ph_value = 3.5 * adc_val * 5.0 / 4096; // 需用标准液校准系数
}
3. 软件系统关键实现
3.1 多任务调度设计
使用FreeRTOS创建了四个核心任务:
- 环境监控任务(优先级3):每2秒采集水温、PH值、水位
- 投喂控制任务(优先级4):按预设算法触发舵机
- 用户交互任务(优先级2):处理按键和OLED显示
- 异常处理任务(优先级5):监控硬件状态
实测发现,若将环境监控任务优先级设
