STM32智能温室花卉养护系统设计与实现
基于STM32的智能温室花卉养护系统设计与实现
1. 项目概述
1.1 系统架构
本系统采用主从式架构设计,以STM32F103RCT6作为核心控制器,通过多种环境传感器采集温室大棚内的关键参数,结合无线通信模块实现远程监控功能。系统硬件架构可分为三个主要部分:
- 数据采集层:包含温湿度传感器、光照传感器、土壤湿度传感器等
- 控制执行层:包括灌溉系统、通风设备、补光灯、加热模块等
- 人机交互层:由本地LCD显示屏和远程APP组成
系统支持双工作模式切换,在自动模式下可根据预设阈值自主调节环境参数,在手动模式下允许用户通过本地按键或远程APP进行控制。
1.2 核心功能特性
- 多参数环境监测(温度、湿度、光照、土壤水分)
- 自适应环境调节(自动/手动模式)
- 本地显示与远程监控双界面
- 视频监控功能
- 植物生长参数预设
2. 硬件设计
2.1 主控电路设计
主控芯片选用STM32F103RCT6,该芯片具有以下优势:
- 72MHz主频的Cortex-M3内核
- 256KB Flash + 48KB RAM
- 丰富的外设接口(3个USART、2个SPI、2个I2C等)
- 51个GPIO引脚满足多设备连接需求
主控电路设计要点:
- 采用8MHz外部晶振提供系统时钟
- 复位电路采用10kΩ上拉电阻和0.1μF电容组合
- 调试接口采用标准的SWD四线连接方式
// 系统时钟配置示例 void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; // 配置HSE振荡器 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; HAL_RCC_OscConfig(&RCC_OscInitStruct); // 配置时钟树 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); }2.2 传感器模块设计
2.2.1 环境监测传感器
SHT30温湿度传感器
- 接口类型:I2C
- 测量范围:温度-40~125℃,湿度0~100%RH
- 精度:±0.2℃(温度),±2%RH(湿度)
- 采样周期:典型值2ms
BH1750光照传感器
- 接口类型:I2C
- 测量范围:1-65535 lx
- 分辨率:1 lx
- 支持三种测量模式
土壤湿度传感器
- 输出类型:模拟量(0-3.3V)
- 工作电压:3.3-5V
- 采用电压比较器电路实现阈值检测
2.2.2 传感器接口电路
// I2C传感器初始化代码示例 void Sensors_I2C_Init(void) { hi2c1.Instance = I2C1; hi2c1.Init.ClockSpeed = 100000; hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; hi2c1.Init.OwnAddress1 = 0; hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; hi2c1.Init.OwnAddress2 = 0; hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; HAL_I2C_Init(&hi2c1); }2.3 执行机构设计
2.3.1 继电器驱动电路
系统采用5V继电器模块控制各执行机构,设计要点:
- 使用NPN三极管(如S8050)驱动继电器线圈
- 继电器线圈两端并联续流二极管
- 光耦隔离确保MCU安全
继电器控制真值表:
| 设备 | 控制引脚 | 有效电平 | 最大电流 |
|---|---|---|---|
| 灌溉水泵 | PA8 | 高电平 | 2A |
| 通风风扇 | PA9 | 高电平 | 0.5A |
| 补光灯 | PA10 | 高电平 | 1A |
| 加热模块 | PA11 | 高电平 | 2A |
2.3.2 步进电机驱动
遮阳帘控制采用28BYJ-48步进电机,驱动方案:
- ULN2003驱动芯片
- 四相八拍工作模式
- 减速比1:64
- 步距角5.625°/64
2.4 通信模块设计
2.4.1 ESP8266 WiFi模块
- 工作模式:Station+AP混合模式
- 通信协议:TCP/IP
- 数据传输格式:自定义JSON协议
- 天线设计:PCB板载天线
WiFi模块连接示意图:
STM32 USART2 <---> ESP8266 (TX) (RX) (RX) (TX) (GND) (GND)2.4.2 视频传输模块
采用ESP32+OV2640方案实现:
- 图像分辨率:支持最高UXGA(1600x1200)
- 传输协议:RTSP over WiFi
- 帧率:15fps@VGA
- 功耗:平均工作电流约150mA
2.5 电源设计
系统采用5V/2A直流电源供电,电源分配方案:
| 模块 | 供电方式 | 最大电流 | 滤波电容 |
|---|---|---|---|
| STM32主控 | 3.3V LDO | 150mA | 10μF+0.1μF |
| 传感器组 | 3.3V直接 | 50mA | 0.1μF |
| 执行机构 | 5V直接 | 2A | 100μF |
| WiFi模块 | 3.3V LDO | 300mA | 22μF |
3. 软件设计
3.1 系统软件架构
采用前后台系统架构:
- 前台:中断服务程序
- 定时器中断(系统心跳)
- USART中断(通信数据处理)
- ADC中断(传感器采样)
- 后台:主循环任务
- 环境参数处理
- 控制逻辑实现
- 人机界面更新
3.2 关键算法实现
3.2.1 环境参数滤波算法
#define SAMPLE_SIZE 5 typedef struct { float temperature; float humidity; uint16_t light; uint16_t soil_moisture; } EnvData; EnvData sensor_filter(EnvData new_data) { static EnvData buffer[SAMPLE_SIZE] = {0}; static uint8_t index = 0; EnvData filtered = {0}; buffer[index] = new_data; index = (index + 1) % SAMPLE_SIZE; for(int i=0; i<SAMPLE_SIZE; i++) { filtered.temperature += buffer[i].temperature; filtered.humidity += buffer[i].humidity; filtered.light += buffer[i].light; filtered.soil_moisture += buffer[i].soil_moisture; } filtered.temperature /= SAMPLE_SIZE; filtered.humidity /= SAMPLE_SIZE; filtered.light /= SAMPLE_SIZE; filtered.soil_moisture /= SAMPLE_SIZE; return filtered; }3.2.2 控制决策逻辑
void control_logic(EnvData data) { // 温度控制 if(data.temperature > temp_upper_threshold) { fan_on(); } else if(data.temperature < temp_lower_threshold) { heater_on(); } else { fan_off(); heater_off(); } // 光照控制 if(data.light < light_threshold) { grow_light_on(); } else { grow_light_off(); } // 土壤湿度控制 if(data.soil_moisture < soil_moisture_threshold) { water_pump_on(); HAL_Delay(2000); // 灌溉2秒 water_pump_off(); } }3.3 通信协议设计
3.3.1 数据帧格式
+--------+--------+--------+--------+--------+ | 帧头 | 长度 | 命令字 | 数据 | 校验 | | 0xAA55 | 1字节 | 1字节 | N字节 | 1字节 | +--------+--------+--------+--------+--------+3.3.2 主要命令字定义
| 命令字 | 方向 | 描述 | 数据格式 |
|---|---|---|---|
| 0x01 | 设备→APP | 环境数据上报 | 温度(2B)+湿度(2B)+光照(2B)+土壤(2B) |
| 0x02 | APP→设备 | 控制命令 | 设备ID(1B)+状态(1B) |
| 0x03 | 双向 | 模式切换 | 模式(1B): 0=自动,1=手动 |
| 0x04 | 设备→APP | 设备状态通知 | 设备ID(1B)+状态(1B) |
3.4 人机界面设计
3.4.1 LCD显示界面
采用1.44寸SPI LCD实现以下界面元素:
- 环境参数实时显示区
- 设备状态指示区
- 系统模式显示区
- 操作菜单区
界面刷新策略:
- 参数区:1秒定时刷新
- 状态区:事件驱动刷新
- 菜单区:按键触发刷新
3.4.2 APP界面设计
基于Qt5框架开发,主要功能页面:
- 仪表盘:综合显示环境参数
- 控制面板:设备手动控制
- 设置页面:阈值配置、植物类型选择
- 视频监控页面
4. 系统集成与测试
4.1 硬件组装要点
传感器布局原则
- 温湿度传感器避免阳光直射
- 光照传感器置于植物冠层高度
- 土壤传感器插入根部附近土壤
线缆管理
- 信号线与电源线分开走线
- 模拟信号线采用屏蔽线
- 长距离传输使用双绞线
4.2 系统调试流程
单元测试
- 各传感器单独验证
- 执行机构单独测试
- 通信模块点对点测试
集成测试
- 自动模式功能验证
- 手动模式功能验证
- 异常情况处理测试
压力测试
- 连续72小时运行测试
- 极端环境模拟测试
- 网络中断恢复测试
4.3 性能指标
| 指标项 | 测试结果 |
|---|---|
| 温度控制精度 | ±0.5℃ |
| 湿度控制精度 | ±3%RH |
| 光照响应时间 | <1秒 |
| 灌溉响应时间 | <2秒 |
| 数据更新周期 | 1秒 |
| 视频延迟 | <500ms |
| 系统待机功耗 | <1W |
| 最大工作功耗 | <15W |
5. BOM清单与成本分析
5.1 关键元器件清单
| 器件名称 | 型号 | 数量 | 单价(元) | 小计(元) |
|---|---|---|---|---|
| 主控芯片 | STM32F103RCT6 | 1 | 15.00 | 15.00 |
| WiFi模块 | ESP8266 | 1 | 12.00 | 12.00 |
| 温湿度传感器 | SHT30 | 1 | 25.00 | 25.00 |
| 光照传感器 | BH1750 | 1 | 8.00 | 8.00 |
| 土壤湿度传感器 | - | 1 | 5.00 | 5.00 |
| LCD显示屏 | 1.44寸SPI | 1 | 18.00 | 18.00 |
| 步进电机 | 28BYJ-48 | 1 | 10.00 | 10.00 |
| 继电器模块 | 5V 4路 | 1 | 6.00 | 6.00 |
| 摄像头模块 | ESP32+OV2640 | 1 | 45.00 | 45.00 |
| 水泵 | 5V微型 | 1 | 8.00 | 8.00 |
| 合计 | - | - | - | 152.00 |
5.2 系统优化建议
成本优化方向
- 采用国产替代芯片(如GD32)
- 简化视频监控功能
- 使用集成传感器模块
性能提升方向
- 增加LoRa远距离通信备份
- 采用工业级传感器
- 添加UPS备用电源
功能扩展方向
- 增加CO2浓度监测
- 添加营养液EC/pH监测
- 支持多区域独立控制
