1. 项目概述
这个智能水族箱控制系统项目是我去年为一个水族馆改造项目开发的,基于STM32F103C8T6这款性价比极高的MCU。整套系统可以实时监测水温、pH值、水位等关键参数,并自动控制加热棒、过滤器、LED照明等设备。相比市面上动辄上千元的商业控制器,这套方案成本不到200元,但功能却更加灵活可定制。
2. 硬件设计解析
2.1 核心控制器选型
选择STM32F103C8T6主要基于三点考虑:
- 72MHz主频完全满足实时控制需求
- 内置12位ADC便于连接各类传感器
- 丰富的外设接口(3个USART、2个SPI、2个I2C)
实际使用中发现其64KB Flash和20KB RAM对于这个项目绰绰有余,甚至还能加入OLED显示界面。
2.2 传感器模块配置
系统集成了以下关键传感器:
- DS18B20数字温度传感器(±0.5℃精度)
- PH-4502C pH值传感器模块
- 超声波HC-SR04水位传感器
- 光敏电阻环境光检测
特别要注意的是pH传感器需要定期校准,我在代码中专门设计了三点校准算法,后面会详细说明。
2.3 执行机构设计
执行部分包括:
- 继电器模块控制:
- 300W加热棒(必须用固态继电器)
- 潜水泵
- LED照明
- PWM调光:
- 模拟日出日落的光照渐变
- 可编程的月光模式
3. 软件架构实现
3.1 系统主循环设计
采用时间片轮询架构,确保各任务实时性:
c复制while(1) {
if(timer_10ms_flag) {
timer_10ms_flag = 0;
sensor_read_task(); // 传感器采集
control_task(); // 控制算法
display_task(); // OLED刷新
}
if(uart_rx_flag) {
uart_rx_flag = 0;
cli_process_task(); // 串口命令处理
}
}
3.2 关键算法实现
温度控制采用增量式PID:
c复制float pid_calc(float set, float now) {
static float err_last = 0;
float err = set - now;
float d_err = err - err_last;
err_last = err;
return KP*err + KI*err_sum + KD*d_err;
}
pH值校准采用三点法:
- 先浸入pH=4.01标准液,记录ADC值
- 再浸入pH=6.86标准液,记录ADC值
- 最后浸入pH=9.18标准液,记录ADC值
通过最小二乘法拟合出校准曲线。
4. 电路设计要点
4.1 电源设计
系统需要三种电压:
- 5V(主控和传感器)
- 12V(继电器和泵)
- 3.3V(OLED)
使用LM2596将12V降压到5V,再通过AMS1117得到3.3V。实测纹波控制在50mV以内。
4.2 抗干扰设计
水族箱环境潮湿且电机干扰大,采取以下措施:
- 所有信号线加磁珠滤波
- 继电器线圈并联续流二极管
- 传感器信号线使用屏蔽线
- PCB做三防漆处理
5. 外壳与安装
5.1 防水处理
使用IP65防水盒,所有接口处打防水胶。传感器线缆出口用防水接头。
5.2 安装位置
- 控制盒:距水面30cm以上
- 温度传感器:远离加热棒
- pH传感器:避开过滤器出水口
- 水位传感器:正对水面安装
6. 系统调试心得
6.1 常见问题排查
-
pH值漂移:
- 检查参比电极是否干涸
- 重新执行三点校准
- 确保传感器不与金属接触
-
加热控制振荡:
- 调整PID参数(先调P,再调I)
- 检查温度传感器响应速度
- 考虑加入死区控制
6.2 优化建议
-
可增加功能:
- 手机APP远程监控
- 自动喂食器控制
- 水质TDS检测
-
性能提升:
- 改用硬件I2C驱动OLED
- 加入看门狗防死机
- 实现SD卡数据记录
这套系统已经稳定运行8个月,成功培育了多个稀有水草品种。最让我自豪的是实现了±0.3℃的控温精度,比很多商业产品都要出色。后续准备加入LoRa无线组网功能,实现多鱼缸集中监控。