1. 项目概述:当传统鱼缸遇上物联网技术
养鱼爱好者们应该都深有体会,维持一个健康的水族生态系统需要投入大量精力。水温波动、水质变化、投喂量控制这些看似简单的工作,实际上需要长期的经验积累和细致观察。去年我指导的一个本科毕业设计项目,正好解决了这个痛点——基于STM32的智能鱼缸监控投喂系统。
这个系统本质上是一个微型物联网终端,通过多种传感器实时采集鱼缸环境数据,结合执行机构实现自动化管理。整套硬件成本控制在200元以内,却实现了市面千元级商业产品的核心功能。最让我惊喜的是,学生们在原型机上连续运行三个月,鱼缸的藻类生长和鱼类活跃度明显优于人工管理的对照组。
2. 系统架构设计解析
2.1 硬件组成框图
系统采用模块化设计,核心部件包括:
- STM32F103C8T6最小系统板(蓝色药丸)
- DS18B20防水温度传感器
- TDS水质检测模块
- 5V潜水泵+自制过滤装置
- 步进电机驱动的投食机构
- 0.96寸OLED显示屏
- ESP8266 WiFi模块
特别说明电源设计:采用双路供电方案(USB+12V适配器),通过MOS管实现自动切换。这个设计保证了即便在停电时,只要连接着移动电源,系统仍能持续工作至少72小时。
2.2 传感器选型考量
温度传感器选用DS18B20而非更便宜的NTC热敏电阻,主要考虑三点:
- 防水性能:可直接浸入水中测量
- 单总线协议:节省GPIO资源
- ±0.5℃的精度完全满足需求
TDS检测选用廉价的模拟输出模块,虽然需要定期校准(每月一次),但相比数字型号节省了60%成本。实际测试发现,当TDS值超过500ppm时,系统会触发自动换水流程。
3. 核心功能实现细节
3.1 水质监控子系统
c复制// 温度采集示例代码
float read_water_temp() {
ds18b20_convert_t();
delay_ms(750);
return ds18b20_read_temperature();
}
// TDS值计算算法
uint16_t calculate_tds(float analog_voltage) {
float compensation = 1.0 + 0.02*(water_temp-25.0);
float tds_value = (133.42*analog_voltage*analog_voltage*analog_voltage
- 255.86*analog_voltage*analog_voltage
+ 857.39*analog_voltage)*compensation;
return (uint16_t)tds_value;
}
传感器数据通过卡尔曼滤波处理,有效消除了水泵振动带来的噪声干扰。实测数据显示,经过滤波后的温度读数波动范围从±1.2℃降低到±0.3℃。
3.2 自动投喂机构
投食装置采用28BYJ-48步进电机+3D打印的螺旋送料器,关键创新点在于:
- 非对称设计的送料螺旋,确保每次转动排出固定量饲料
- 霍尔传感器检测料仓余量
- 防潮处理:在料仓底部放置硅胶干燥剂
控制逻辑包含三种模式:
- 定时模式:每天固定时间投喂
- 响应模式:检测到鱼类活跃时触发
- 手动模式:通过手机APP控制
4. 物联网功能实现
4.1 ESP8266通信方案
选用AT指令固件而非NodeMCU,主要考虑:
- 更小的内存占用(仅需30KB RAM)
- 更稳定的TCP长连接
- 支持本地配置热点
通信协议采用自定义的二进制格式,相比JSON节省了40%的数据量。一个典型的数据包结构如下:
| 字节偏移 | 内容 | 说明 |
|---|---|---|
| 0 | 0xA5 | 帧头 |
| 1 | 0x02 | 数据类型(温度) |
| 2-3 | uint16 | 温度值(放大10倍) |
| 4 | checksum | 校验和 |
4.2 手机端监控APP
基于MIT App Inventor开发的简易控制端,实现了:
- 实时数据显示折线图
- 异常报警推送
- 远程投喂控制
- 历史数据导出
特别优化了断网重连机制:当网络中断时,数据会暂存到STM32的EEPROM中,待连接恢复后批量上传。
5. 系统调优与问题排查
5.1 常见故障处理表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| TDS值持续偏高 | 滤材失效 | 更换活性炭滤芯 |
| 投喂机构卡死 | 饲料受潮结块 | 清理料仓并添加干燥剂 |
| WiFi频繁断开 | 路由器信道干扰 | 固定使用信道6 |
| 温度读数异常 | 传感器线缆破损 | 更换硅胶防水线缆 |
5.2 功耗优化技巧
通过以下措施将待机功耗从85mA降至12mA:
- 调整传感器采样间隔(温度每5分钟,TDS每小时)
- 关闭未使用的外设时钟
- 采用中断唤醒机制替代轮询
- 优化ESP8266的休眠策略
实测表明,在每天投喂两次的使用场景下,2000mAh的锂电池可维持系统运行约17天。
6. 扩展功能建议
已完成原型验证的升级方向:
- 增加PH值检测模块(需解决电极维护问题)
- 引入摄像头进行鱼类行为分析
- 支持多鱼缸组网管理
- 太阳能供电系统集成
一个有趣的发现:当在夜间开启蓝色LED补光时,系统检测到的鱼类活动频率会提高23%,这提示我们可以开发基于光照周期的智能投喂算法。