1. 项目概述
作为一名电子工程爱好者兼养鱼发烧友,我花了三个月时间开发了一套基于单片机的鱼缸智能调控系统。这个系统能24小时监测水温、溶氧量等关键参数,并自动调节加热棒、增氧泵等设备的工作状态。相比市面上动辄上千元的成品设备,这套自制系统成本不到300元,却实现了更精准的控制逻辑和更丰富的自定义功能。
养过观赏鱼的朋友都知道,水温波动超过±2℃就可能导致鱼群应激反应,而溶氧量不足更是造成鱼类死亡的常见原因。传统的人工调节方式不仅费时费力,还难以维持稳定的水环境。通过这套系统,我的红龙鱼已经连续半年保持最佳状态,鱼缸藻类生长和鱼类活跃度都达到理想水平。
2. 系统设计与核心组件
2.1 硬件架构设计
系统采用模块化设计,主要包含以下核心部件:
- 主控单元:STM32F103C8T6最小系统板(72MHz主频,64KB Flash)
- 传感器模块:
- DS18B20防水温度传感器(±0.5℃精度)
- SEN0237溶解氧传感器(0-20mg/L量程)
- 执行机构:
- 固态继电器控制300W加热棒
- MOSFET驱动5W气泵
- 0.96寸OLED显示屏
- 供电系统:12V/2A适配器+LM2596降压模块
关键选型考量:DS18B20采用单总线协议,仅需一个GPIO口即可读取数据;SEN0237需要专门的信号调理电路,但其模拟输出更便于校准。
2.2 软件控制逻辑
系统工作流程分为三个层次:
- 数据采集层:每10秒读取一次传感器数据
- 决策层:采用PID算法计算控制量
- 水温控制:设定值±0.3℃死区
- 溶氧控制:维持5-7mg/L区间
- 执行层:PWM调节加热功率,定时控制气泵
c复制// 简化版PID控制示例
float PID_Control(float setpoint, float input) {
static float errSum = 0, lastErr = 0;
float error = setpoint - input;
errSum += error;
float dErr = error - lastErr;
lastErr = error;
return Kp*error + Ki*errSum + Kd*dErr;
}
3. 关键实现细节
3.1 传感器校准与数据处理
溶解氧传感器需要特殊校准:
- 零点校准:将探头置于无水亚硫酸钠溶液中
- 斜率校准:在饱和溶氧环境下调整
- 温度补偿:根据实测水温修正读数
温度传感器采用中值滤波算法:
c复制#define FILTER_SIZE 5
float MedianFilter(float newVal) {
static float buffer[FILTER_SIZE] = {0};
static uint8_t index = 0;
buffer[index++] = newVal;
if(index >= FILTER_SIZE) index = 0;
float temp[FILTER_SIZE];
memcpy(temp, buffer, sizeof(temp));
// 排序取中值...
return medianValue;
}
3.2 执行机构驱动设计
加热控制采用过零检测+SSR的方案:
- 过零检测电路:MOC3063光耦+双向可控硅
- 控制策略:每10个交流周期(200ms)调节导通比例
气泵控制采用占空比调节:
- 工作周期:开启30分钟,关闭15分钟(基础模式)
- 溶氧不足时:持续运行直至达标
- 夜间模式:降低工作频率50%
4. 系统组装与调试
4.1 硬件安装要点
- 传感器布置:
- 温度传感器远离加热器
- 溶氧探头避免阳光直射
- 电路防护:
- 所有接线采用防水接头
- 控制板用硅胶密封
- 电源隔离:
- 强电部分单独封装
- 接地线接入鱼缸支架
血泪教训:曾因接线端子进水导致短路,损失了两条七彩神仙鱼。现在所有接口都做了三重防水处理。
4.2 软件参数整定
PID参数经验值:
- 水温控制:Kp=8.0, Ki=0.05, Kd=1.2
- 溶氧控制:Kp=12.0, Ki=0.02, Kd=0.8
调试步骤:
- 先设Ki=Kd=0,增大Kp至出现小幅振荡
- 加入积分项消除静差
- 加入微分项抑制超调
- 根据实际响应微调参数
5. 常见问题解决方案
5.1 传感器异常排查
| 故障现象 | 可能原因 | 解决方法 |
|---|---|---|
| 温度读数漂移 | 导线接触不良 | 更换屏蔽线 |
| 溶氧值不变化 | 膜头污染 | 用软布清洁探头 |
| 数据跳变剧烈 | 电源干扰 | 增加0.1uF去耦电容 |
5.2 执行机构故障处理
加热器不工作的检查清单:
- 测量SSR输入端电压(应有3-12VDC)
- 检查负载回路通断
- 确认过零检测信号正常
- 测试GPIO输出波形
气泵噪音过大的改进方案:
- 在出气口安装消音器
- 使用硅胶软管替代PVC管
- 将泵体悬挂减震
6. 系统优化与扩展
当前系统已稳定运行半年,期间做了以下改进:
- 增加手机蓝牙监控(HC-05模块)
- 集成PH值监测功能
- 开发喂食定时程序
- 添加异常报警短信通知
下一步计划尝试:
- 基于机器学习预测水质变化
- 太阳能供电系统
- 3D打印防水外壳
这套系统最让我满意的是其可扩展性——每个功能模块都可以独立升级。比如最近给朋友的系统加装了浊度传感器,成功预防了一次过滤器故障导致的水质恶化。对于想要入门的爱好者,建议先从基础的温度控制开始,逐步添加其他功能模块。