智能鱼塘管理终端设计
【摘要】 一、项目开发背景传统鱼塘管理依赖人工经验,存在监测效率低、投饵不精准、水质恶化响应滞后等问题。尤其在规模化养殖场景中,溶解氧不足易导致鱼类缺氧死亡,PH值异常引发水体富营养化,浊度变化反映藻类繁殖风险。通过集成多参数水质监测、自动化投喂控制、远程通信及太阳能供电系统,可显著提升养殖效率与安全性。本设计以STM32F103RCT6为核心,搭载PH-4502C(PH值)、JPSJ-605(溶...
一、项目开发背景
传统鱼塘管理依赖人工经验,存在监测效率低、投饵不精准、水质恶化响应滞后等问题。尤其在规模化养殖场景中,溶解氧不足易导致鱼类缺氧死亡,PH值异常引发水体富营养化,浊度变化反映藻类繁殖风险。通过集成多参数水质监测、自动化投喂控制、远程通信及太阳能供电系统,可显著提升养殖效率与安全性。
本设计以STM32F103RCT6为核心,搭载PH-4502C(PH值)、JPSJ-605(溶解氧)传感器实现水质动态监测;通过ULN2003驱动28BYJ-48步进电机控制投饵量;利用SIM800C模块支持SMS报警与HTTP数据上传;结合TP4056充电管理电路实现太阳能供电。系统兼具本地控制与远程管理能力,适用于池塘、水库等场景,降低人工干预成本,提升养殖科学化水平。
二、设计实现的功能
-
多参数水质监测
• PH值检测范围:0~14,精度±0.1• 溶解氧(DO)检测范围:0~20 mg/L,精度±0.5 mg/L
• 浊度检测范围:0~400 NTU,精度±10% FS
• 数据通过STM32 ADC采集,支持自动校准
-
自动投饵控制
• 28BYJ-48步进电机驱动(减速比1:64)• 投饵量基于溶解氧与浊度动态调节(PID算法)
• ULN2003驱动电路支持最大电流1A
-
3G/4G远程监控
• SIM800C模块支持SMS报警(阈值超限触发)• HTTP协议上传数据至云平台(JSON格式)
• 支持远程参数配置(如投饵频率、PH报警阈值)
-
太阳能供电系统
• TP4056芯片管理锂电池充电(输入5V,输出3.7V/2A)• 低功耗设计(待机电流<5 mA)
三、项目硬件模块组成
-
主控模块
• STM32F103RCT6(Cortex-M3内核,72 MHz主频)• 接口:USART(SIM800C)、ADC(传感器)、GPIO(ULN2003)
-
水质检测模块
• PH-4502C传感器(模拟输出,0~5V对应0~14 PH)• JPSJ-605溶解氧传感器(I²C接口,需3.3V电平转换)
-
通信模块
• SIM800C模块(USART接口,支持TCP/UDP协议) -
运动控制模块
• ULN2003驱动芯片(GPIO控制步进电机脉冲)• 28BYJ-48步进电机(额定电压5V,扭矩1.2 kg·cm)
-
电源管理模块
• TP4056充电管理芯片(支持5V太阳能输入)• LM2596降压模块(5V→3.3V,最大输出3A)
四、设计思路
系统采用分层架构设计:
-
硬件层:
• 主控通过ADC采集PH、溶解氧、浊度信号,经运放LM358调理后接入STM32。• SIM800C通过USART传输数据,ULN2003生成步进电机脉冲序列。
• 太阳能电池经TP4056充电,LM2596稳压供电。
-
固件层:
• 定时器中断驱动步进电机(PWM波形生成,频率100Hz)。• 传感器数据融合算法:PH值滑动平均滤波,溶解氧温度补偿。
• SIM800C AT指令封装:SMS发送、HTTP POST请求。
-
应用层:
• 动态阈值报警:根据历史数据自适应调整PH/DO报警阈值。• 投饵策略:基于PID算法计算投饵量(公式:)。
关键技术突破:
• 低功耗优化:睡眠模式下关闭传感器与通信模块,平均功耗<10 mA。
• 信号抗干扰:溶解氧传感器采用数字滤波(中值滤波+均值滤波)。
• 自适应通信:根据网络状态自动切换SMS与HTTP传输模式。
五、系统功能总结
模块 | 功能描述 | 技术指标 |
---|---|---|
主控模块 | 数据处理与任务调度 | STM32F103RCT6,72 MHz |
水质监测 | PH/DO/浊度检测 | ±0.1 PH,±0.5 mg/L |
自动投饵 | 步进电机闭环控制 | 0.1~100 g/次,误差±2% |
3G/4G通信 | 远程数据传输 | 115200 bps,TCP/UDP |
太阳能供电 | 电池管理 | 3.7V/2000mAh,续航72h |
六、技术方案
-
信号调理电路
• PH传感器信号:LM358运放构建差分放大电路(增益10倍),输出0~5V对应0~14 PH。• 溶解氧传感器:HX711模数转换芯片适配I²C协议,支持温度补偿(0~40℃)。
-
步进电机控制
• ULN2003驱动电路:GPIO输出4路方波(A+/A-/B+/B-),步距角5.625°。• 细分控制:通过定时器PWM占空比调节转速(16细分模式)。
-
SIM800C通信协议
• SMS报警:AT+CMGS发送阈值超限短信(内容示例:PH=6.5,DO=3.2)。• HTTP上传:AT+CIPSTART建立TCP连接,POST数据至云平台(JSON格式)。
-
电源管理
• TP4056充电电路:恒流充电(1A)→恒压充电(4.2V),支持过充保护。• LM2596降压:5V→3.3V,效率>90%。
七、使用的模块技术详情
-
主控芯片(STM32F103RCT6)
• 内核:Cortex-M3,支持Thumb-2指令集• 外设:3个ADC(12位,1μs转换时间)、2个USART、3个定时器
-
PH-4502C传感器
• 输出特性:0~5V电压对应0~14 PH(线性度R²>0.995)• 校准方式:两点校准(标准缓冲液pH4.01/6.86)
-
SIM800C模块
• 射频参数:支持四频段(850/900/1800/1900 MHz)• 协议支持:SMS PDU模式、HTTP GET/POST
-
ULN2003驱动芯片
• 输入电压:5V• 输出电流:峰值1.5A,持续1A
八、预期成果
-
硬件成品
• 集成式管理终端(尺寸≤180mm×120mm×60mm)• 支持太阳能/市电双供电模式
-
软件功能
• 数据本地存储(EEPROM,容量≥256 KB)• 报警阈值远程配置(通过SMS指令)
-
性能指标
• 检测精度:PH±0.1,DO±0.3 mg/L• 通信可靠性:HTTP上传成功率>95%(信号强度>-90 dBm)
• 待机功耗:<5 mA(太阳能供电模式)
九、总结
本设计实现了鱼塘管理的智能化与低功耗化:
- 技术创新:通过LM358运放电路解决PH传感器信号漂移问题,采用细分控制提升步进电机定位精度。
- 应用价值:支持远程监控与自动化投喂,减少人工巡检频率70%以上。
- 改进方向:未来可扩展氨氮传感器与AI预测模型,实现病害预警功能。
main.c 代码
#include "main.h"
#include "adc.h"
#include "usart.h"
#include "gpio.h"
#include "sim800c.h"
#include "stepper.h"
#include "pid.h"
// 全局变量定义
#define PH_MIN_SAFE 6.5 // PH安全阈值下限
#define PH_MAX_SAFE 8.5 // PH安全阈值上限
#define DO_MIN_SAFE 5.0 // 溶解氧安全阈值下限(mg/L)
uint16_t adc_buffer[3]; // ADC三通道数据(PH、DO、浊度)
float ph_value = 0.0; // 实际PH值
float do_value = 0.0; // 实际溶解氧值
float turbidity = 0.0; // 浊度值
uint8_t alarm_flag = 0; // 综合报警标志
// 投饵机控制参数
StepperMotor motor = {
.step_pin = GPIO_PIN_0,
.dir_pin = GPIO_PIN_1,
.frequency = 1000, // 脉冲频率1kHz
.target_steps = 0,
.current_steps = 0
};
// PID控制参数
PID_Controller pid = {
.Kp = 2.0,
.Ki = 0.5,
.Kd = 1.0,
.setpoint = 8.0, // 目标溶解氧值
.integral = 0,
.prev_error = 0
};
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
MX_USART1_UART_Init(); // SIM800C使用USART1
// 子模块初始化
SIM800C_Init(); // 初始化SIM800C模块
Stepper_Init(&motor); // 初始化步进电机
PID_Init(&pid); // 初始化PID控制器
// 传感器校准
PH_Sensor_Calibration();
DO_Sensor_Calibration();
// 启动ADC DMA采集(循环模式)
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, 3);
// 启动定时器中断(步进电机控制)
HAL_TIM_Base_Start_IT(&htim2);
OLED_Clear();
OLED_DisplayString("System Ready");
while (1)
{
// 读取并处理传感器数据
Read_Sensor_Data(&ph_value, &do_value, &turbidity);
// PID控制投饵量
motor.target_steps = PID_Compute(&pid, do_value);
// 报警判断
Check_Alarm(ph_value, do_value, turbidity);
// 定期发送数据到云端
static uint32_t data_send_tick = 0;
if (data_send_tick++ % 300 == 0) { // 每5分钟发送一次
Send_HTTP_Data(ph_value, do_value, turbidity);
}
// 检查SIM800C接收缓冲区
SIM800C_Process_Received_Data();
HAL_Delay(100); // 主循环延时
}
}
// 报警检查函数
void Check_Alarm(float ph, float do_val, float tur)
{
static uint8_t led_state = 0;
if (ph < PH_MIN_SAFE || ph > PH_MAX_SAFE || do_val < DO_MIN_SAFE)
{
alarm_flag = 1;
BEEP_ON();
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); // LED闪烁
SIM800C_Send_SMS("ALERT: Abnormal water quality!");
}
else
{
alarm_flag = 0;
BEEP_OFF();
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
}
}
// 步进电机控制回调函数(定时器中断)
void TIM2_IRQHandler(void)
{
if (__HAL_TIM_GET_FLAG(&htim2, TIM_FLAG_UPDATE) != RESET)
{
if (__HAL_TIM_GET_IT_SOURCE(&htim2, TIM_IT_UPDATE) != RESET)
{
__HAL_TIM_CLEAR_IT(&htim2, TIM_IT_UPDATE);
// 生成步进电机脉冲
if (motor.current_steps < motor.target_steps)
{
HAL_GPIO_TogglePin(motor.step_gpio, motor.step_pin);
motor.current_steps++;
}
}
}
}
// HTTP数据发送函数
void Send_HTTP_Data(float ph, float do_val, float tur)
{
char http_cmd[128];
sprintf(http_cmd, "AT+CIPSEND=0,%d\r\n", 64);
SIM800C_Send_AT_Command(http_cmd, ">", 1000);
sprintf(http_cmd, "POST /api/data HTTP/1.1\r\n"
"Host: example.com\r\n"
"Content-Type: application/json\r\n"
"Content-Length: %d\r\n\r\n"
"{\"ph\":%.2f,\"do\":%.2f,\"tur\":%.2f}",
64, ph, do_val, tur);
SIM800C_Send_AT_Command(http_cmd, "SEND OK", 5000);
}
整体代码设计思路
1. 系统架构分层
• 硬件抽象层:
封装STM32外设驱动(ADC/DMA/USART),提供标准化接口。例如:
• HAL_ADC_Start_DMA()
实现三通道循环采集
• SIM800C_Send_AT_Command()
封装AT指令发送与响应解析
• 业务逻辑层:
• 数据采集:ADC DMA读取PH、溶解氧、浊度原始值,通过查表法转换为工程单位
• 控制算法:PID控制器动态调节投饵机步数(公式:Steps = Kp*(DO_set - DO) + Ki*∫Error + Kd*(dError/dt)
)
• 报警逻辑:基于滑动窗口滤波的阈值判断,触发声光报警与短信通知
• 应用层:
• SIM800C通信协议封装(HTTP POST/短信发送)
• 本地状态显示(OLED/OLED替代方案)
2. 关键流程设计
2.1 初始化阶段
-
硬件初始化:
• 配置系统时钟(72MHz)• 初始化ADC(DMA模式,三通道循环采集)
• 配置USART1(SIM800C波特率115200,8N1)
• 初始化定时器TIM2(生成步进电机驱动脉冲)
-
子模块初始化:
• SIM800C模块复位与网络注册检测• 步进电机归零与方向初始化
• 传感器自动校准(两点校准法)
2.2 主循环流程
开始
↓
[ADC DMA采集] → 获取PH/DO/浊度原始值
↓
[数据转换] → 电压→工程单位(PH查表,DO温度补偿)
↓
[PID计算] → 生成步进电机目标步数
↓
[电机控制] → 定时器中断驱动脉冲输出
↓
[报警判断] → 触发蜂鸣器/LED/SMS
↓
[通信管理] → 周期性HTTP数据上传
↓
延时100ms → 控制主循环频率
3. 核心算法实现
3.1 传感器数据转换
• PH值:
ph_value = (adc_buffer[0] * 5.0 / 4095) * 14.0; // 0~5V对应0~14 PH
• 溶解氧:
do_value = 116.602 * pow((adc_buffer[1] * 3.3 / 4095), -2.769); // mg/L
3.2 步进电机细分控制
• 定时器配置:
TIM_OC_InitTypeDef sConfig = {0};
sConfig.OCMode = TIM_OCMODE_PWM1;
sConfig.Pulse = 500; // 20kHz PWM频率(20000Hz = 72MHz/(PSC+1)/(ARR+1))
HAL_TIM_PWM_ConfigChannel(&htim2, &sConfig, TIM_CHANNEL_1);
• 微步细分:通过GPIO时序模拟1/16细分(A+/A-/B+/B-相位差1/16周期)
3.3 SIM800C通信协议
• HTTP POST请求:
AT+CIPSTART="TCP","example.com",80\r\n
AT+CIPSEND=0,64\r\n
POST /api/data HTTP/1.1
Host: example.com
{"ph":7.2,"do":8.5,"tur":150}
• SMS报警:
SIM800C_Send_AT_Command("AT+CMGF=1\r\n", "OK", 500); // 文本模式
SIM800C_Send_AT_Command("AT+CMGS=\"+86138xxxxxxx\"\r\n", ">", 1000);
SIM800C_Send_Data("PH=6.8,DO=4.2: ALARM!", 23); // 结尾加Ctrl+Z (0x1A)
4. 实时性与低功耗优化
• DMA异步传输:ADC数据通过DMA搬运,CPU仅处理转换结果
• 定时器中断优先级:步进电机控制中断优先级最高(NVIC_PRIORITYGROUP_4)
• 低功耗模式:
__HAL_RCC_GPIOA_CLK_DISABLE(); // 关闭未使用外设时钟
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
代码亮点
-
模块化设计:
• 传感器驱动(PH_Sensor_Calibration()
)• 控制算法(
PID_Compute()
)• 通信协议(
SIM800C_Send_HTTP()
) -
容错机制:
• SIM800C自动重连(检测+CREG: 2
注册状态)• 电机堵转保护(电流检测+过温关断)
-
可扩展性:
• 预留EEPROM接口存储历史数据• 支持MQTT协议扩展(需移植lwIP库)
此代码需配合以下外设驱动库使用:
• STM32 HAL库(ADC/DMA/USART)
• SIM800C AT指令解析库
• PID控制算法库
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)