若该文为原创文章,转载请注明原文出处。
一、引言
(一)研究背景及意义
随着城市化进程加快和生活品质提升,室内花卉种植成为人们美化环境、陶冶情操的重要方式。然而,传统花卉养护依赖人工经验,难以精准控制水、肥、光、温等关键因素,导致植物生长不良甚至死亡。物联网技术的发展为解决这一问题提供了新思路。本系统通过集成多类传感器和执行器,构建了一个能够自动维持花卉最佳生长环境的智能系统,对于推广智慧农业、降低养护门槛、提升种植成功率具有重要的现实意义。
(二)国内外研究现状
目前国内外智能农业系统多集中于大型温室或农田的监控,针对家庭或小规模花卉种植的集成化、低成本解决方案相对较少。现有产品功能单一,或仅具备监测功能而无自动执行能力。本设计创新性地将土壤湿度、PH值、重量(肥力推断) 等参数监测与环境调控深度融合,提供了一个从监测到执行的完整闭环解决方案,填补了市场空白。
二、系统总体设计
(一)系统架构
本系统采用“全面感知-智能决策-精准执行-云边协同”的四层架构。
-
感知层:负责采集空气温湿度、土壤湿度、土壤PH值、花盆重量、光照强度等多维数据。
-
决策层:以STM32为核心,进行数据融合、处理、阈值判断和控制决策。
-
执行层:包括继电器模块(控制风扇、加湿器、水泵、补光灯)、蜂鸣器,负责执行控制指令。
-
云边协同层:通过WiFi连接云平台,实现数据远程透传和手机APP交互;OLED和按键提供本地交互。
(二)功能模块划分
-
环境监测模块:DHT11(空气温湿度)、光敏电阻(光照)。
-
土壤监测模块:土壤湿度传感器、PH传感器。
-
重量监测模块:压力传感器(HX711)。
-
执行控制模块:继电器(控制风扇、加湿器、水泵、补光灯)、有源蜂鸣器。
-
人机交互模块:OLED显示屏、按键。
-
通信模块:ESP8266 WiFi模块。
三、硬件设计与实现
(一)系统硬件框架图
1. 主控单元
器件名称 | 推荐型号 | 接口 | 功能说明 |
---|---|---|---|
STM32单片机 | STM32F103C8T6 | - | 作为系统核心,负责所有传感器的数据采集、执行种植逻辑、控制各执行器、以及与WiFi模块通信。 |
2. 传感器与输入单元
器件名称 | 推荐型号/类型 | 接口 | 功能说明 |
---|---|---|---|
温湿度传感器 | DHT11 | 单总线 | 检测种植环境的空气温度和湿度。 |
土壤湿度传感器 | 电容式传感器 | ADC | 检测土壤体积含水量(%)。电容式不易腐蚀,寿命长。输出模拟电压信号。 |
PH传感器 | PH-4502C | ADC | 检测土壤或营养液的PH值。输出模拟电压信号,需通过公式转换为PH值(通常0-14范围)。 |
压力/重量传感器 | 称重传感器 + HX711 | GPIO (DT, SCK) | 监测花盆重量。用于判断是否需要浇水或施肥,重量异常减轻可能表示植物缺水。 |
光敏传感器 | 光敏电阻模块 | ADC | 检测环境光照强度。输出模拟电压,光线越强电压越高。 |
按键模块 | 轻触开关 | GPIO | 用于切换自动/手动模式、设置各参数的报警阈值、手动控制设备。 |
3. 执行器与输出单元
器件名称 | 推荐型号/类型 | 接口 | 功能说明 |
---|---|---|---|
风扇继电器 | 5V 继电器模块 | GPIO | 控制风扇的电源。温度过高时启动,为植物降温。 |
加湿器继电器 | 5V 继电器模块 | GPIO | 控制加湿器的电源。湿度过低时启动,增加环境湿度。 |
水泵继电器 | 5V 继电器模块 | GPIO | 控制水泵的电源。用于浇水或更换营养液。 |
补光灯继电器 | 5V 继电器模块 | GPIO | 控制植物生长灯的电源。光照不足时启动,为植物补光。 |
有源蜂鸣器 | 5V有源蜂鸣器 | GPIO | 当任何参数超限或重量异常时,发出报警声,提醒用户。 |
OLED显示屏 | SSD1306 | I²C | 实时显示所有监测数据:空气温湿度、土壤湿度、PH值、重量、光照强度,以及系统状态和报警信息。 |
4. 通信单元
器件名称 | 推荐型号 | 接口 | 功能说明 |
---|---|---|---|
WiFi模块 | ESP-01S | UART | STM32通过串口以AT指令与ESP8266通信,将采集到的所有状态数据和报警信息上传至云平台,用户可通过手机APP远程实时监控、手动控制设备、设置阈值。 |
5. 电源单元
器件名称 | 推荐规格 | 功能说明 |
---|---|---|
电源适配器 | 5V/3A 开关电源 | 为整个控制系统(STM32、传感器、模块)提供稳定的5V电源。 |
太阳能板 | 5V/2W | 可选:为系统提供绿色能源,适合户外或阳台使用。 |
核心控制逻辑说明
1. 环境智能调控(自动模式)
-
温度控制:
-
if (空气温度 > 温度上限) { 启动风扇继电器; } else { 关闭风扇继电器; }
-
-
湿度控制:
-
if (土壤湿度 < 湿度下限) { 启动加湿器继电器; } else { 关闭加湿器继电器; }
-
-
PH值调控:
-
if (PH值 > PH上限) { 启动水泵继电器(换水); 蜂鸣器报警; }
//PH值异常需要更换营养液
-
-
光照补偿:
-
if (光照强度 < 光照阈值) { 启动补光灯继电器; } else { 关闭补光灯继电器; }
-
-
重量监控:
-
if (花盆重量 < 重量下限) { 蜂鸣器报警; OLED显示"可能缺水"; }
-
if (花盆重量 > 重量上限) { 蜂鸣器报警; OLED显示"可能过湿"; }
-
2. 手动控制模式
-
通过本地按键强制控制风扇、加湿器、水泵、补光灯的开关。
-
通过手机APP远程手动控制所有设备,覆盖自动逻辑。
3. 数据上传与显示
-
STM32定期将所有传感器数据和设备状态通过WiFi上传至手机APP。
-
OLED屏幕分页面显示所有参数,主要显示内容:
-
页面1:温度、湿度、光照状态
-
页面2:土壤湿度、PH值、重量状态
-
页面3:设备状态、报警信息
-
四、软件设计与实现
(一)开发环境搭建
-
IDE:STM32CubeIDE。
-
库:使用STM32CubeMX配置HAL库,初始化GPIO、ADC、I2C等外设。
-
驱动与协议:需编写DHT11、HX711、OLED、ESP8266(AT指令)等驱动程序。
(二)系统软件流程图
(三)关键软件模块实现
1. 传感器数据读取与计算
// 读取HX711获取重量值 (需校准)
long HX711_Get_Weight() {
if (HX711_Is_Ready()) {
long count = HX711_Read();
// 校准公式: Weight = (Count - Offset) / Scale
float weight = (count - calibration_offset) / calibration_scale;
return (long)weight;
}
return 0;
}
// 读取PH值 (需校准)
float Read_PH_Value() {
int analogValue = HAL_ADC_GetValue(&hadc1); // 假设PH接在ADC1
float voltage = analogValue * (3.3 / 4095.0); // 转换为电压值
// PH值计算: phValue = (voltage * PH_SLOPE) + PH_OFFSET; 需用标准液校准
float phValue = (voltage * 3.5) + 4.0; // 示例公式,必须校准!
return phValue;
}
2. 自动控制逻辑实现
void Auto_Control_Logic(void) {
// 1. 温度控制
if (air_temperature > temp_high_threshold) {
Fan_On();
} else {
Fan_Off();
}
// 2. 土壤湿度控制
if (soil_moisture < soil_moisture_low_threshold) {
Humidifier_On(); // 打开加湿器(或水泵进行滴灌)
} else if (soil_moisture > soil_moisture_high_threshold) {
Humidifier_Off();
// 土壤过湿,可以附加报警
}
// 3. PH值控制
if (ph_value > ph_high_threshold) {
Water_Pump_On(); // PH过高,启动换水流程(需与排水配合)
// 实际应用中,换水可能需要更复杂的时序控制
} else {
Water_Pump_Off();
}
// 4. 光照控制
if (light_intensity < light_threshold) {
Grow_Light_On();
} else {
Grow_Light_Off();
}
// 5. 重量报警(用于监测积水或过度施肥)
if (pot_weight > weight_threshold) {
Buzzer_On_Intermitent(); // 间歇性报警
} else {
Buzzer_Off();
}
}
3. 云平台数据上报(JSON格式)
void Publish_Sensor_Data(void) {
cJSON *root = cJSON_CreateObject();
cJSON_AddNumberToObject(root, "air_temp", air_temperature);
cJSON_AddNumberToObject(root, "air_humi", air_humidity);
cJSON_AddNumberToObject(root, "soil_moisture", soil_moisture);
cJSON_AddNumberToObject(root, "ph", ph_value);
cJSON_AddNumberToObject(root, "weight", pot_weight);
cJSON_AddNumberToObject(root, "light", light_intensity);
cJSON_AddBoolToObject(root, "fan", fan_state);
cJSON_AddBoolToObject(root, "pump", pump_state);
cJSON_AddBoolToObject(root, "light_ctl", light_state);
char *json_data = cJSON_Print(root);
ESP8266_MQTT_Publish("flower/env/data", json_data);
cJSON_Delete(root);
free(json_data);
}
五、系统测试与优化
(一)测试方案
-
传感器校准测试:
-
PH传感器:使用标准PH缓冲液(如PH4.0, PH7.0, PH10.0)进行多点校准,建立电压-PH值对应曲线。
-
重量传感器:放置已知重量的砝码,校准HX711的Offset和Scale参数。
-
土壤湿度传感器:在完全干燥和完全浸水的土壤中读取ADC值,确定阈值。
-
-
功能与联动测试:
-
用电吹风加热DHT11,测试风扇是否启动。
-
干燥土壤中浇水,测试加湿器是否停止工作。
-
用醋或小苏打溶液模拟PH变化,测试换水泵是否启动。
-
遮挡光敏电阻,测试补光灯是否开启。
-
向花盆加重物,测试蜂鸣器是否报警。
-
-
云端测试:测试APP能否实时显示数据,并远程控制各执行器开关。
(二)优化方向
-
软件优化:
-
历史数据记录与趋势分析:在云平台端记录历史数据,并绘制变化曲线,帮助用户分析植物生长与环境的关系。
-
浇水策略优化:浇水并非简单的“低于阈值就开”,可采用PID控制或模糊控制,根据土壤湿度变化率动态调整浇水时间,防止过度浇水。
-
看门狗与断线重连:加入看门狗防止死机,并为ESP8266编写强大的网络重连机制。
-
-
硬件优化:
-
太阳能供电:为系统增加太阳能电池板和小型蓄电池,实现能源自给,更适合户外或阳台部署。
-
传感器防护:土壤传感器和PH电极需做防腐蚀处理,延长其使用寿命。
-
六、结论与关键设计
(一)结论
本项目成功设计并实现了一个高度集成、功能强大的智能花卉种植监控系统。系统不仅实现了对花卉生长环境的全方位监测,更建立了从感知到执行的完整闭环自动控制,并通过物联网技术实现了便捷的远程管理。经过测试,系统运行稳定,控制准确,达到了预期设计目标,为现代智能农业和家庭园艺提供了一个优秀的解决方案。
(二)关键设计
-
传感器校准与精度:
-
PH传感器: 需要定期校准,使用标准PH缓冲液(PH4.0、PH7.0、PH10.0)进行三点校准。
-
重量传感器: 需要去皮操作和重量校准,确保测量准确。
-
土壤湿度传感器: 不同土壤类型的校准值不同,需要根据实际土壤进行校准。
-
-
防水设计:
-
土壤湿度、PH等接触水分的传感器需要做防水处理。
-
电路板应喷涂三防漆,防止潮湿环境损坏。
-
-
控制策略优化:
-
采用模糊控制或PID算法,避免设备频繁启停。
-
设置设备最小运行时间,防止短时间內反复开关。
-
-
植物适应性:
-
不同花卉对环境要求不同,APP应提供常见花卉的推荐参数设置。
-
支持自定义种植方案,可设置不同生长阶段的参数要求。
-
-
节能设计:
-
根据植物光周期自动调节补光时间。
-
支持定时任务,如在电价低谷时段进行加湿、补水等操作。
-
-
用户体验:
-
APP界面应直观显示植物生长环境数据,提供历史曲线图。
-
设置智能提醒功能,如"需要浇水"、"需要施肥"等提醒。
-
支持多设备管理,可同时监控多个花盆。
-
如有侵权,或需要完整代码,请及时联系博主。