基于STM32单片机自动灌溉系统

若该文为原创文章,转载请注明原文出处。

一、引言

(一)研究背景及意义

  • 背景:传统农业灌溉多依赖人工经验,存在水资源浪费严重、灌溉不及时、劳动力成本高等问题。随着精准农业和智慧农业的发展,实现灌溉的自动化、智能化已成为现代农业发展的必然趋势。

  • 意义:本设计通过实时监测土壤墒情(温湿度)和光照强度,基于作物生长需求实现精准自动灌溉。它能有效节约水资源(约30-50%),提高作物产量和品质,降低人工成本,特别适用于大棚种植、园林绿化和家庭园艺,对推动农业现代化具有重要意义。

(二)国内外研究现状

  • 国内现状:国内智能灌溉系统多采用PLC或简单的单片机控制,功能相对单一,远程监控和智能化程度不高,且成本较高难以普及。

  • 国外现状:国外有成熟的智能灌溉系统(如Rain Bird、Hunter),集成了气象站和云平台,但价格昂贵,主要应用于大型农场和高尔夫球场。

  • 本文创新点:本设计以高性能、低成本的STM32为核心,集成了多环境因子监测(土壤温湿度、光照),实现了本地自动/手动双模式控制,并通过WiFi接入云平台,提供了一套功能完善、成本低廉、易于部署的智能灌溉解决方案。

二、系统总体设计

(一)系统架构

  • 系统采用“感知-决策-执行-云控”四层架构:

    • 感知层:由土壤温湿度传感器、光照强度传感器组成,负责采集作物生长环境数据。

    • 决策层:STM32F103C8T6核心板,运行核心控制算法,判断是否需要灌溉或补光。

    • 执行层:继电器模块(控制水泵)、MOSFET模块(控制补光灯)、蜂鸣器(报警)。

    • 人机交互层:OLED显示屏、按键,用于显示数据和设置参数。

    • 云平台层:通过ESP8266 WiFi模块将数据上传至云平台(如Blinker、OneNET),实现手机APP远程监控和控制。

(二)功能模块划分

  1. 环境感知模块:采集土壤温度、土壤湿度、光照强度。

  2. 核心控制模块:STM32,是系统的大脑。

  3. 执行驱动模块:控制水泵、补光灯的开关。

  4. 报警模块:蜂鸣器,用于异常状态提醒。

  5. 人机交互模块:OLED显示、按键设置。

  6. 通信模块: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检测环境光照强度,用于决定是否需要进行补光。I2CVCC接3.3V,SCL接PB6,SDA接PB7。地址引脚可悬空或接地。1~65535 lx, ±20%

(四)通信模块选型及配置

  • 选用ESP-01S ESP8266模块。通过AT指令集与STM32的USART2(PA2-TX, PA3-RX)进行通信,连接至云平台(推荐使用Blinker,其对智能家居和农业物联网支持友好)。

(五)执行模块选型及驱动电路

  1. 水泵控制:选用5V继电器模块控制交流220V或直流12V水泵。STM32的IO口(PA4)可直接驱动继电器模块(内置光耦隔离)。

  2. 补光灯控制:选用MOSFET模块(如IRF520) 控制大功率LED补光灯。STM32的PWM输出引脚(PA5)通过控制MOSFET的栅极来调节LED灯的亮度或简单的开关操作。

  3. 蜂鸣器:选用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);
}

五、系统测试与优化

(一)测试方案

  1. 功能测试

    • 自动灌溉:将土壤传感器插入干燥土壤,测试水泵是否自动启动;浇水后,测试湿度达到上限时是否自动停止。

    • 自动补光:遮挡光照传感器,测试补光灯是否自动开启;光线充足时是否自动关闭。

    • 手动控制:在APP上手动开关水泵和补光灯,测试响应是否及时。

    • 报警功能:设置极端阈值,测试超限报警是否正常。

    • 远程监控:在APP端查看数据是否实时、准确更新。

  2. 性能测试:测试系统功耗、控制精度、网络通信稳定性。

(二)测试结果与分析

  • 记录测试数据,分析灌溉决策是否准确(如湿度阈值设置是否合理)、系统响应是否及时(如从干燥到启动水泵的延迟)。

(三)系统优化

  • 软件优化:引入PID算法控制水泵,实现更平滑的湿度调节,防止过灌溉。为传感器数据加入滑动平均滤波,减少数据跳动。

  • 硬件优化:为水泵电机增加继电器触点保护电路(如RC吸收回路或压敏电阻)。为系统增加太阳能供电模块,适用于野外无市电场景。

六、结论与展望

(一)结论

  • 本项目成功设计并实现了一套稳定可靠的智能自动灌溉系统。系统能根据土壤墒情和光照强度自动决策,实现精准灌溉和智能补光,同时提供了便捷的远程手动控制功能,达到了节水增效、降低人工成本的设计目标。

(二)未来展望

  1. 增加气象站接入:通过API接口获取当地天气预报,在降雨前暂停灌溉计划,进一步节约水资源。

  2. 增加植物生长模型:根据不同作物、不同生长周期的需水需光特性,建立专家数据库,实现更精细化的种植管理。

  3. 扩展无线传感网络:采用Zigbee或LoRa技术,将多个土壤传感器节点组成网络,实现对大面积农田的梯度化灌溉。

  4. 增加视频监控:集成摄像头,远程直观查看作物长势和灌溉效果。

如有侵权,或需要完整代码,请及时联系博主。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

殷忆枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值