若该文为原创文章,转载请注明原文出处。
一、引言
(一)研究背景及意义
-
背景:传统农业灌溉多依赖人工经验,存在水资源浪费严重、灌溉不及时、劳动力成本高等问题。随着精准农业和智慧农业的发展,实现灌溉的自动化、智能化已成为现代农业发展的必然趋势。
-
意义:本设计通过实时监测土壤墒情(温湿度)和光照强度,基于作物生长需求实现精准自动灌溉。它能有效节约水资源(约30-50%),提高作物产量和品质,降低人工成本,特别适用于大棚种植、园林绿化和家庭园艺,对推动农业现代化具有重要意义。
(二)国内外研究现状
-
国内现状:国内智能灌溉系统多采用PLC或简单的单片机控制,功能相对单一,远程监控和智能化程度不高,且成本较高难以普及。
-
国外现状:国外有成熟的智能灌溉系统(如Rain Bird、Hunter),集成了气象站和云平台,但价格昂贵,主要应用于大型农场和高尔夫球场。
-
本文创新点:本设计以高性能、低成本的STM32为核心,集成了多环境因子监测(土壤温湿度、光照),实现了本地自动/手动双模式控制,并通过WiFi接入云平台,提供了一套功能完善、成本低廉、易于部署的智能灌溉解决方案。
二、系统总体设计
(一)系统架构
-
系统采用“感知-决策-执行-云控”四层架构:
-
感知层:由土壤温湿度传感器、光照强度传感器组成,负责采集作物生长环境数据。
-
决策层:STM32F103C8T6核心板,运行核心控制算法,判断是否需要灌溉或补光。
-
执行层:继电器模块(控制水泵)、MOSFET模块(控制补光灯)、蜂鸣器(报警)。
-
人机交互层:OLED显示屏、按键,用于显示数据和设置参数。
-
云平台层:通过ESP8266 WiFi模块将数据上传至云平台(如Blinker、OneNET),实现手机APP远程监控和控制。
-
(二)功能模块划分
-
环境感知模块:采集土壤温度、土壤湿度、光照强度。
-
核心控制模块:STM32,是系统的大脑。
-
执行驱动模块:控制水泵、补光灯的开关。
-
报警模块:蜂鸣器,用于异常状态提醒。
-
人机交互模块:OLED显示、按键设置。
-
通信模块:ESP8266,负责与云平台/APP交互。
三、硬件设计与实现
(一)系统硬件框架图
(二)主控模块选型及介绍
-
型号:STM32F103C8T6
-
选型理由:该芯片基于ARM Cortex-M3内核,72MHz主频,拥有64KB Flash和20KB RAM,资源丰富。其内置的ADC、I2C、USART、多个GPIO等外设,完美契合同时读取多路传感器、驱动执行器、与显示屏和WiFi模块通信的需求。性价比极高,是此类项目的理想选择。
(三)传感器模块选型及电路设计
传感器名称 | 型号/类型 | 功能 | 接口方式 | 电路设计要点 | 量程与精度 |
---|---|---|---|---|---|
土壤温湿度传感器 | SHT10 / DS18B20+电容式 | 检测土壤的温度和体积含水量(VWC),是灌溉决策的核心依据。 | 单总线(DS18B20) 或I2C(SHT10) | VCC接5V,数据线接STM32的PA0(需4.7KΩ上拉电阻)。注意防水防腐,建议使用环氧树脂灌封探头部分。 | 温度: -40~80°C, ±0.5°C 湿度: 0~100%RH, ±3%RH |
光照强度传感器 | BH1750FVI | 检测环境光照强度,用于决定是否需要进行补光。 | I2C | VCC接3.3V,SCL接PB6,SDA接PB7。地址引脚可悬空或接地。 | 1~65535 lx, ±20% |
(四)通信模块选型及配置
-
选用ESP-01S ESP8266模块。通过AT指令集与STM32的USART2(PA2-TX, PA3-RX)进行通信,连接至云平台(推荐使用Blinker,其对智能家居和农业物联网支持友好)。
(五)执行模块选型及驱动电路
-
水泵控制:选用5V继电器模块控制交流220V或直流12V水泵。STM32的IO口(PA4)可直接驱动继电器模块(内置光耦隔离)。
-
补光灯控制:选用MOSFET模块(如IRF520) 控制大功率LED补光灯。STM32的PWM输出引脚(PA5)通过控制MOSFET的栅极来调节LED灯的亮度或简单的开关操作。
-
蜂鸣器:选用5V有源蜂鸣器,通过一个NPN三极管(S8050)驱动,基极接STM32的IO口(PA6)。
(六)电源模块设计
-
采用12V/2A直流电源适配器作为系统总输入,为水泵供电。
-
使用LM2596降压模块将12V降为5V,为继电器、土壤传感器、ESP8266供电。
-
使用AMS1117-3.3V稳压芯片将5V降为3.3V,为STM32、BH1750、OLED、按键等供电。
四、软件设计与实现
(一)开发环境搭建
-
IDE:Keil uVision 5 / STM32CubeIDE
-
开发库:采用HAL库,开发效率高。
-
云平台:选择Blinker物联网平台,可快速生成手机APP控制界面,支持远程监控和设备控制。
(二)系统软件流程图
(三)系统初始化(代码片段)
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_I2C1_Init();
MX_USART2_UART_Init();
MX_TIM3_Init(); // PWM定时器初始化,用于补光灯调光
OLED_Init();
BH1750_Init();
Blinker_Init(); // 连接Blinker云
while (1) {
Read_Sensors();
OLED_Refresh();
Key_Process();
Auto_Control();
Blinker_Run();
HAL_Delay(1000);
}
}
(四)传感器数据采集与处理(代码片段)
// 读取土壤温湿度(以SHT10为例)
void SHT10_Read(float *temp, float *humi) {
// 发送启动传输、温度测量命令
// 读取温度数据并转换
// 发送湿度测量命令
// 读取湿度数据并转换
// 进行温湿度补偿计算
}
// 读取光照强度
uint16_t BH1750_Read_Lux(void) {
// 发送一次高分辨率测量命令
HAL_Delay(180); // 等待测量完成
// 读取2字节的数据
// 计算并返回光照强度值
}
void Read_Sensors(void) {
SHT10_Read(&soil_temperature, &soil_humidity);
light_intensity = BH1750_Read_Lux();
}
(五)自动灌溉逻辑实现(代码片段)
void Auto_Control(void) {
if (system_mode == AUTO_MODE) {
// 1. 灌溉控制
if (soil_humidity < humi_low_limit) {
WaterPump_ON();
} else if (soil_humidity > humi_high_limit) {
WaterPump_OFF();
}
// 2. 补光控制
if (light_intensity < light_threshold) {
LED_Light_ON();
} else {
LED_Light_OFF();
}
} else { // MANUAL_MODE
// 手动模式下,设备状态由manual_pump_cmd等变量控制
WaterPump_Set(manual_pump_cmd);
LED_Light_Set(manual_light_cmd);
}
// 3. 报警检查(无论何种模式都检查)
if (soil_temperature > temp_max || soil_temperature < temp_min ||
soil_humidity > humi_max_alarm || soil_humidity < humi_min_alarm) {
Buzzer_Alert(); // 声光报警
} else {
Buzzer_Stop();
}
}
(六)远程通信功能实现(代码片段)
// Blinker的数据回调函数
void button_callback(const String &state, const String &msg) {
BLINKER_LOG("State: ", state, ", Msg: ", msg);
if (state == "switch") { // APP开关水泵
if (msg == "on") {
manual_pump_cmd = 1;
system_mode = MANUAL_MODE; // 手动操作时切换到手动模式
} else if (msg == "off") {
manual_pump_cmd = 0;
}
}
// ... 处理补光灯、模式切换等指令
}
// 上传数据到APP
void upload_data() {
Blinker.print("soil_temp", soil_temperature);
Blinker.print("soil_humi", soil_humidity);
Blinker.print("light", light_intensity);
Blinker.print("pump", waterpump_status);
Blinker.print("light_switch", ledlight_status);
Blinker.print("mode", system_mode);
}
五、系统测试与优化
(一)测试方案
-
功能测试:
-
自动灌溉:将土壤传感器插入干燥土壤,测试水泵是否自动启动;浇水后,测试湿度达到上限时是否自动停止。
-
自动补光:遮挡光照传感器,测试补光灯是否自动开启;光线充足时是否自动关闭。
-
手动控制:在APP上手动开关水泵和补光灯,测试响应是否及时。
-
报警功能:设置极端阈值,测试超限报警是否正常。
-
远程监控:在APP端查看数据是否实时、准确更新。
-
-
性能测试:测试系统功耗、控制精度、网络通信稳定性。
(二)测试结果与分析
-
记录测试数据,分析灌溉决策是否准确(如湿度阈值设置是否合理)、系统响应是否及时(如从干燥到启动水泵的延迟)。
(三)系统优化
-
软件优化:引入PID算法控制水泵,实现更平滑的湿度调节,防止过灌溉。为传感器数据加入滑动平均滤波,减少数据跳动。
-
硬件优化:为水泵电机增加继电器触点保护电路(如RC吸收回路或压敏电阻)。为系统增加太阳能供电模块,适用于野外无市电场景。
六、结论与展望
(一)结论
-
本项目成功设计并实现了一套稳定可靠的智能自动灌溉系统。系统能根据土壤墒情和光照强度自动决策,实现精准灌溉和智能补光,同时提供了便捷的远程手动控制功能,达到了节水增效、降低人工成本的设计目标。
(二)未来展望
-
增加气象站接入:通过API接口获取当地天气预报,在降雨前暂停灌溉计划,进一步节约水资源。
-
增加植物生长模型:根据不同作物、不同生长周期的需水需光特性,建立专家数据库,实现更精细化的种植管理。
-
扩展无线传感网络:采用Zigbee或LoRa技术,将多个土壤传感器节点组成网络,实现对大面积农田的梯度化灌溉。
-
增加视频监控:集成摄像头,远程直观查看作物长势和灌溉效果。
如有侵权,或需要完整代码,请及时联系博主。