1. 项目概述
这个基于STM32的智能鱼缸监控投喂系统是我去年指导学弟完成的毕业设计项目,经过三个月的开发和调试,最终实现了一套完整的自动化鱼缸管理方案。作为一个嵌入式系统开发的老手,我认为这个项目完美结合了传感器技术、自动控制和物联网应用,特别适合作为电子/自动化专业的毕业设计选题。
系统核心功能包括:水位自动调节、定时投喂、水质监测、远程监控等。相比市面上简单的定时器控制方案,我们的设计增加了多项智能判断逻辑,比如根据水质浑浊度自动触发换水流程,而不是简单定时换水。这种设计思路更贴近实际养鱼需求,也体现了嵌入式系统在智能家居领域的应用价值。
从技术实现角度看,项目涉及STM32单片机编程、传感器数据采集、继电器控制、WiFi通信、上位机开发等多个技术模块,完整覆盖了嵌入式系统开发的主要知识点。难度适中但又不失挑战性,工作量也符合本科毕业设计的要求。
2. 硬件系统设计
2.1 主控芯片选型
我们选择STM32F103C8T6作为主控芯片,主要基于以下几点考虑:
- 72MHz主频足够处理传感器数据和执行控制逻辑
- 64KB Flash和20KB SRAM满足程序存储和运行需求
- 丰富的外设接口(USART、I2C、SPI等)方便连接各类传感器
- 成本低廉(约10元/片),适合学生项目预算
提示:STM32F103系列俗称"蓝莓派",是学生项目中最常用的ARM Cortex-M3芯片,资料丰富,学习成本低。
2.2 传感器模块
系统使用了多种传感器来监测鱼缸状态:
-
水位传感器:采用电容式水位传感器,通过检测水位变化引起的电容值变化来判断水位高低。相比浮球式传感器,电容式更耐用且不易受水质影响。
-
水质传感器:使用TDS(总溶解固体)传感器检测水质浑浊度。当TDS值超过设定阈值(如300ppm)时触发换水流程。
-
温度传感器:DS18B20数字温度计,精度±0.5℃,通过单总线协议与MCU通信。
-
光照传感器:BH1750数字光强传感器,用于模拟昼夜节律,自动调节鱼缸灯光。
2.3 执行机构设计
执行机构通过继电器控制各类设备:
| 继电器 | 控制设备 | 功能描述 |
|---|---|---|
| RELAY1 | 水泵 | 向鱼缸加水 |
| RELAY2 | 加热棒 | 调节水温 |
| RELAY3 | 电磁阀 | 排水控制 |
| RELAY4 | 投食电机 | 定时投喂 |
继电器驱动电路采用ULN2003达林顿阵列,提供足够的驱动电流(500mA/通道),并实现MCU与高压设备的电气隔离。
2.4 通信模块
ESP8266 WiFi模块负责无线通信:
- 工作模式:Station模式连接路由器
- 通信协议:TCP/IP
- 数据传输:JSON格式封装传感器数据和控制指令
- 工作频率:2.4GHz
- 传输距离:室内约30米(视环境而定)
3. 软件系统实现
3.1 下位机程序设计
下位机程序采用模块化设计,主要包含以下功能模块:
- 传感器数据采集:
c复制void GetSensorData(void)
{
Temp_Data = DS18B20_GetTemp(); // 获取温度
WaterLevel = GetWaterLevel(); // 获取水位
TDS_Value = GetTDS(); // 获取水质数据
LightIntensity = BH1750_Read(); // 获取光照强度
}
- 自动控制逻辑:
c复制void AutoControl(void)
{
// 水位控制
if(WaterLevel < LOW_LEVEL) RELAY1 = ON; // 启动加水
else if(WaterLevel > HIGH_LEVEL) RELAY1 = OFF;
// 水质控制
if(TDS_Value > TDS_THRESHOLD) {
RELAY3 = ON; // 启动排水
Delay_ms(5000);
RELAY3 = OFF;
RELAY1 = ON; // 启动加水
}
// 温度控制
if(Temp_Data < TEMP_LOW) RELAY2 = ON;
else if(Temp_Data > TEMP_HIGH) RELAY2 = OFF;
}
- 定时任务管理:
使用STM32的硬件定时器实现精确的定时控制:
c复制void TIM2_IRQHandler(void)
{
static uint32_t feedCount = 0;
if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {
feedCount++;
if(feedCount >= FEED_INTERVAL) {
FeedFish(); // 执行投喂
feedCount = 0;
}
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
}
}
3.2 上位机软件开发
上位机使用Python+PyQt5开发,主要功能包括:
- 数据可视化界面:
python复制class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setupUI()
def setupUI(self):
self.tempLabel = QLabel("温度: -- °C")
self.waterLevelLabel = QLabel("水位: -- cm")
self.tdsLabel = QLabel("水质: -- ppm")
layout = QVBoxLayout()
layout.addWidget(self.tempLabel)
layout.addWidget(self.waterLevelLabel)
layout.addWidget(self.tdsLabel)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
- 串口通信实现:
python复制import serial
class SerialComm:
def __init__(self, port, baudrate=115200):
self.ser = serial.Serial(port, baudrate, timeout=1)
def send_command(self, cmd):
try:
self.ser.write(cmd.encode())
return True
except Exception as e:
print(f"发送失败: {e}")
return False
def read_data(self):
if self.ser.in_waiting:
return self.ser.readline().decode().strip()
return None
- 数据存储与分析:
使用SQLite数据库存储历史数据,方便后续分析:
python复制import sqlite3
def init_db():
conn = sqlite3.connect('aquarium.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS sensor_data
(timestamp DATETIME, temp REAL, water_level REAL, tds REAL)''')
conn.commit()
conn.close()
4. 系统调试与优化
4.1 硬件调试要点
- 电源稳定性测试:
- 使用示波器检查各模块供电电压纹波
- 确保电机启动时不会引起MCU复位
- 建议为数字和模拟部分分别供电
- 传感器校准:
- 温度传感器:冰水混合物中校准0°C点
- 水位传感器:空/满状态分别校准ADC值
- TDS传感器:使用标准溶液校准
- 抗干扰设计:
- 信号线使用双绞线或屏蔽线
- 数字地和模拟地单点连接
- 在继电器线圈两端并联续流二极管
4.2 软件调试技巧
- 日志记录:
c复制void LogData(void)
{
printf("[%02d:%02d:%02d] Temp=%.1fC, Level=%d%%, TDS=%dppm\r\n",
Time[2], Time[1], Time[0], Temp_Data, WaterLevel, TDS_Value);
}
- 看门狗应用:
c复制IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
IWDG_SetPrescaler(IWDG_Prescaler_32); // 约1s超时
IWDG_SetReload(0xFFF);
IWDG_Enable();
- 内存优化:
- 使用
__packed关键字优化结构体存储 - 合理分配变量到不同存储区(SRAM/Flash)
- 启用编译器优化选项(-O2)
5. 项目扩展方向
在实际使用过程中,我们发现系统还可以进一步优化和扩展:
- 手机APP控制:
- 开发Android/iOS应用替代PC上位机
- 使用MQTT协议实现云端数据同步
- 增加推送通知功能(如异常报警)
- AI智能识别:
- 添加摄像头模块
- 使用TensorFlow Lite实现鱼类行为分析
- 根据鱼类活动情况自动调整投喂量
- 能源管理:
- 增加太阳能供电系统
- 实现低功耗模式(STM32 STOP模式)
- 电量监测与预警
- 多鱼缸组网:
- 使用LoRa实现多个鱼缸的无线组网
- 集中监控管理
- 数据对比分析
这个项目从最初的简单定时控制,逐步发展为一套完整的智能鱼缸管理系统,体现了嵌入式系统开发的迭代过程。通过这个项目,学生不仅能掌握STM32开发的基本技能,还能学习到系统设计、调试优化等工程实践经验,对未来的职业发展很有帮助。