若该文为原创文章,转载请注明原文出处。
摘要:本文设计并实现了一种基于STM32F407微控制器的智能植物工厂综合管理系统。系统集成温湿度传感器、光照传感器、土壤湿度传感器和水质TDS传感器,全方位监测植物生长环境。支持手动与自动双模式,可根据预设阈值自动控制补光灯、风扇、加湿器、水泵等执行机构,精准调控环境参数。通过OLED显示屏提供本地人机交互,并通过ESP32模块实现Wi-Fi/蓝牙双模通信,用户可通过手机APP远程实时监控环境数据、接收报警信息并手动控制设备,实现了植物工厂的智能化、精准化和无人化运维。
关键词:STM32;植物工厂;精准农业;环境控制;物联网;智慧农业
一、引言
(一)研究背景及意义
植物工厂作为一种高科技农业生产方式,通过人工环境控制实现作物的全年高效生产。然而,传统植物工厂环境调控依赖人工经验,难以实现多参数协同优化,制约了生产效率和品质的提升。本项目旨在开发一套集环境监测、智能决策、自动控制和远程管理于一体的智能系统,通过对光、温、水、气等关键因子的精准调控,为植物创造最佳生长环境,对于推动现代农业发展、保障粮食安全、提升农业效益具有重大意义。
(二)国内外研究现状
目前高端植物工厂已采用自动化控制系统,但多为进口设备,价格昂贵且系统封闭。国内相关系统功能单一,缺乏多参数协同优化。本设计基于STM32平台,集成多种传感器和执行器,提供了一个成本可控、功能全面、可定制性强的智能植物工厂解决方案。
二、系统总体设计
(一)系统架构
本系统采用"全面感知-智能决策-精准执行-云边协同"的四层架构:
-
感知层:温湿度传感器、光照传感器、土壤湿度传感器、TDS传感器
-
决策层:STM32F407主控,进行数据融合处理和智能决策
-
执行层:补光灯、风扇、加湿器、水泵等执行机构
-
交互层:OLED显示屏、按键(本地交互);ESP32模块(远程交互)
(二)系统拓扑图
三、硬件设计与实现
(一)系统硬件框架图
系统硬件配置与功能说明表
1. 主控单元
器件名称 | 推荐型号 | 接口 | 功能说明 |
---|---|---|---|
STM32单片机 | STM32F103C8T6 | - | 作为系统核心,负责多传感器数据采集、环境控制逻辑、执行器控制、通信处理。 |
2. 环境监测传感器
器件名称 | 推荐型号/类型 | 接口 | 功能说明 |
---|---|---|---|
温湿度传感器 | SHT30 | I²C | 高精度监测环境温湿度,温度范围-40-125°C,湿度0-100%RH。 |
光照传感器 | BH1750 | I²C | 检测光照强度,范围1-65535 lux,用于补光控制。 |
土壤湿度传感器 | 电容式传感器 | ADC | 监测土壤体积含水量,0-100%范围,防腐蚀设计。 |
水质TDS传感器 | TDS检测模块 | ADC | 监测营养液浓度,范围0-1000ppm,确保植物养分供应。 |
按键模块 | 轻触开关 | GPIO | 用于设置各参数阈值、切换自动/手动模式、手动控制设备。 |
3. 智能执行器单元
器件名称 | 推荐型号/类型 | 接口 | 功能说明 |
---|---|---|---|
补光灯继电器 | 5V 继电器模块 | GPIO | 控制植物生长灯,根据光照强度自动补光。 |
风扇继电器 | 5V 继电器模块 | GPIO | 控制通风风扇,调节温度和湿度。 |
加湿器继电器 | 5V 继电器模块 | GPIO | 控制加湿设备,维持环境湿度。 |
换水水泵继电器 | 5V 继电器模块 | GPIO | 控制营养液循环和更换。 |
OLED显示屏 | SSD1306 | I²C | 实时显示环境参数和设备状态。 |
4. 通信单元
器件名称 | 推荐型号 | 接口 | 功能说明 |
---|---|---|---|
WiFi模块 | ESP-01S | UART | 远程数据传输,连接云平台,实现远程监控和控制。 |
蓝牙模块 | HC-05 | UART | 近场通信,手机APP直接连接配置和实时控制。 |
核心控制逻辑说明
1. 自动环境调控系统
-
智能补光控制:
-
if (光照强度 < 设定阈值) { 启动补光灯; } else { 关闭补光灯; }
-
支持光周期控制,模拟日出日落
-
-
温湿度调控:
-
if (温度 > 上限) { 启动风扇降温; }
-
if (湿度 < 下限) { 启动加湿器; }
-
if (温度 < 下限) { 关闭风扇; }
-
-
灌溉管理:
-
if (土壤湿度 < 设定值) { 启动灌溉系统; }
-
定时循环灌溉,避免积水
-
-
营养液管理:
-
if (TDS值 < 下限) { 提示添加营养液; }
-
if (TDS值 > 上限) { 启动换水系统; }
-
2. 手动控制模式
-
通过按键或APP手动控制各设备
-
手动模式下自动控制逻辑暂停
-
仍保持安全保护功能
3. 数据显示界面
OLED轮巡显示:
页面1: 环境监测 温度: 25.6°C 湿度: 65%RH 光照: 45000lux 页面2: 土壤水质 土壤湿度: 45% TDS: 350ppm 状态: 自动模式 页面3: 设备状态 补光:ON 风扇:OFF 加湿:OFF 水泵:OFF
4. 远程监控功能
-
APP实时显示:
-
所有环境参数实时数据
-
设备运行状态
-
历史数据趋势图表
-
-
APP远程控制:
-
远程开关各设备
-
调整参数阈值
-
设置定时任务
-
接收异常报警通知
-
四、软件设计与实现
(一)系统软件架构
基于FreeRTOS实时操作系统,创建多任务处理架构:
void main(void)
{
// 硬件初始化
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_I2C_Init();
MX_ADC_Init();
MX_USART2_UART_Init(); // for ESP32
// 创建FreeRTOS任务
xTaskCreate(Sensor_Reading_Task, "Sensor", 2048, NULL, 3, NULL);
xTaskCreate(Control_Task, "Control", 2048, NULL, 4, NULL);
xTaskCreate(Display_Task, "Display", 1024, NULL, 2, NULL);
xTaskCreate(Communication_Task, "Comm", 4096, NULL, 3, NULL);
xTaskCreate(UI_Task, "UI", 1024, NULL, 1, NULL);
vTaskStartScheduler();
}
(二)智能控制算法
// 多参数协同控制算法
void Intelligent_Control_Algorithm(void)
{
// 1. 光照控制 - 自动补光
if (light_intensity < light_setpoint - LIGHT_HYSTERESIS) {
LED_Grow_Light_On();
OLED_ShowStatus("AUTO: LED ON");
} else if (light_intensity >= light_setpoint) {
LED_Grow_Light_Off();
}
// 2. 温度控制 - 自动风扇
if (temperature > temp_setpoint + TEMP_HYSTERESIS) {
Fan_On();
OLED_ShowStatus("AUTO: FAN ON");
} else if (temperature <= temp_setpoint) {
Fan_Off();
}
// 3. 湿度控制 - 自动加湿
if (humidity < humidity_setpoint - HUMIDITY_HYSTERESIS) {
Humidifier_On();
OLED_ShowStatus("AUTO: HUMIDIFIER ON");
} else if (humidity >= humidity_setpoint) {
Humidifier_Off();
}
// 4. 土壤湿度控制 - 自动灌溉
if (soil_moisture < soil_setpoint - SOIL_HYSTERESIS) {
Water_Pump_On();
OLED_ShowStatus("AUTO: WATERING");
} else if (soil_moisture >= soil_setpoint) {
Water_Pump_Off();
}
// 5. 水质控制 - 自动换水
if (tds_value > tds_setpoint) {
Drain_Pump_On();
OLED_ShowStatus("AUTO: WATER CHANGE");
vTaskDelay(pdMS_TO_TICKS(30000)); // 排水30秒
Drain_Pump_Off();
Fresh_Water_Pump_On();
vTaskDelay(pdMS_TO_TICKS(60000)); // 注水60秒
Fresh_Water_Pump_Off();
}
}
(三)参数设置与存储
// EEPROM参数存储结构
typedef struct {
float temp_setpoint; // 温度设定值
float humidity_setpoint; // 湿度设定值
uint16_t light_setpoint; // 光照设定值
uint8_t soil_setpoint; // 土壤湿度设定值
uint16_t tds_setpoint; // TDS设定值
uint8_t work_mode; // 工作模式
uint32_t checksum; // 校验和
} System_Params_t;
// 参数设置函数
void Parameter_Setting_Handler(uint8_t key)
{
static uint8_t setting_step = 0;
switch(setting_step) {
case 0: // 选择参数类型
if (key == KEY_UP) cursor_position++;
if (key == KEY_DOWN) cursor_position--;
if (key == KEY_OK) setting_step = 1;
break;
case 1: // 调整参数值
if (key == KEY_UP) increase_parameter();
if (key == KEY_DOWN) decrease_parameter();
if (key == KEY_OK) {
Save_Parameters_To_EEPROM();
setting_step = 0;
}
if (key == KEY_BACK) setting_step = 0;
break;
}
Update_Display_Setting();
}
// 保存参数到EEPROM
void Save_Parameters_To_EEPROM(void)
{
System_Params_t params;
params.temp_setpoint = temp_setpoint;
params.humidity_setpoint = humidity_setpoint;
params.light_setpoint = light_setpoint;
params.soil_setpoint = soil_setpoint;
params.tds_setpoint = tds_setpoint;
params.work_mode = work_mode;
params.checksum = Calculate_Checksum(¶ms);
HAL_FLASH_Unlock();
// 写入Flash模拟EEPROM
for(uint32_t i = 0; i < sizeof(params); i += 4) {
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, EEPROM_BASE_ADDR + i,
*((uint32_t*)((uint8_t*)¶ms + i)));
}
HAL_FLASH_Lock();
}
(四)通信协议设计
// 自定义通信协议格式
typedef struct {
uint8_t header[2]; // 帧头:0xAA, 0x55
uint8_t device_id; // 设备ID
uint8_t command_type; // 命令类型
uint8_t data_length; // 数据长度
uint8_t data[16]; // 数据内容
uint8_t checksum; // 校验和
} Communication_Frame_t;
// 数据处理函数
void Process_Received_Data(uint8_t* data, uint16_t length)
{
Communication_Frame_t* frame = (Communication_Frame_t*)data;
// 验证帧头和校验和
if (frame->header[0] == 0xAA && frame->header[1] == 0x55 &&
frame->checksum == Calculate_Checksum(frame)) {
switch(frame->command_type) {
case CMD_SET_PARAM:
Handle_Set_Parameter(frame->data);
break;
case CMD_GET_DATA:
Send_Sensor_Data();
break;
case CMD_CONTROL:
Handle_Control_Command(frame->data);
break;
case CMD_MODE_CHANGE:
work_mode = frame->data[0];
break;
}
}
}
// 发送传感器数据
void Send_Sensor_Data(void)
{
cJSON* root = cJSON_CreateObject();
cJSON_AddNumberToObject(root, "temperature", temperature);
cJSON_AddNumberToObject(root, "humidity", humidity);
cJSON_AddNumberToObject(root, "light", light_intensity);
cJSON_AddNumberToObject(root, "soil_moisture", soil_moisture);
cJSON_AddNumberToObject(root, "tds", tds_value);
cJSON_AddBoolToObject(root, "led_status", led_status);
cJSON_AddBoolToObject(root, "fan_status", fan_status);
cJSON_AddBoolToObject(root, "pump_status", pump_status);
char* json_str = cJSON_Print(root);
ESP32_Send_Data(json_str);
cJSON_Delete(root);
free(json_str);
}
五、系统测试与优化
(一)测试方案
-
传感器精度测试:使用标准仪器对比校准各传感器
-
控制响应测试:测试各执行机构的响应时间和控制精度
-
通信可靠性测试:测试Wi-Fi和蓝牙在不同距离下的稳定性
-
系统稳定性测试:连续运行72小时测试系统稳定性
(二)性能优化
-
PID控制算法:采用增量式PID算法提高控制精度
-
数据滤波处理:采用卡尔曼滤波处理传感器数据
-
功耗优化:采用休眠模式降低待机功耗
-
通信优化:采用数据压缩减少通信流量
六、结论与创新点
(一)结论
本项目成功设计并实现了一个功能完善、性能稳定的智能植物工厂控制系统。系统通过多参数协同控制,实现了对植物生长环境的精准调控,为植物工厂的智能化管理提供了完整的解决方案。
(二)创新点
-
多参数协同优化:首次实现光、温、水、气等多参数协同控制
-
双模通信设计:支持Wi-Fi和蓝牙双模通信,适应不同应用场景
-
智能决策算法:基于植物生长模型的环境参数优化算法
-
模块化设计:硬件和软件均采用模块化设计,便于扩展和维护
(三)关键设计注意事项
-
精确环境控制:
-
采用PID算法实现精确温湿度控制
-
光照控制支持PWM调光,平滑调节
-
多传感器数据融合,提高控制精度
-
-
节能优化设计:
-
根据植物生长阶段调整环境参数
-
夜间自动降低能耗
-
智能调度设备运行时间
-
-
安全保护机制:
-
设备运行状态监控
-
过载和短路保护
-
异常情况自动报警
-
-
用户友好设计:
-
多植物预设方案(叶菜、果菜、花卉等)
-
一键式操作界面
-
生长数据记录和分析
-
-
系统可靠性:
-
看门狗定时器防死机
-
数据备份和恢复功能
-
网络中断时本地自动运行
-
-
扩展功能:
-
支持CO₂浓度监测
-
pH值监测功能
-
多区域独立控制
-
摄像头生长监控
-
如有侵权,或需要完整代码,请及时联系博主。