✅博主简介:本人擅长数据处理、建模仿真、程序设计、论文写作与指导,项目与课题经验交流。项目合作可私信或扫描文章底部二维码。


随着现代农业的快速发展,智慧农业逐渐成为提升农业生产效率和作物质量的重要手段。智慧农业大棚控制系统的设计旨在通过物联网技术,实现对大棚内环境的精准监控与控制。该系统能够根据环境变化自动调整温度、湿度、光照等参数,为作物提供最佳生长环境,进而提高农业生产的可持续性和经济效益。

针对智慧农业大棚控制的具体需求,系统设计包括信息采集节点、数据传输节点、执行设备控制节点及远程监控节点四个部分。各个节点通过LoRa无线通信技术进行数据传输,确保数据传递的稳定性和远程控制的高效性。

2. 系统架构设计

系统架构主要分为以下四个部分:

  • 信息采集节点:负责实时采集大棚内的环境数据,包括温度、湿度、光照强度等。该节点采用多种传感器进行数据采集,并通过LoRa模块将数据传输至数据传输节点。

  • 数据传输节点:作为系统的中枢,负责接收信息采集节点发送的数据,并通过GPRS或Wi-Fi模块将数据上传至云端或远程监控平台。

  • 执行设备控制节点:根据采集到的环境数据和设定的控制策略,实时调节大棚内的执行设备,如卷帘机、风机和水泵等,以保持环境参数在合理范围内。

  • 远程监控节点:通过Web界面展示大棚内的实时环境信息,并提供历史数据查询和设备控制功能。用户可以通过该节点对大棚进行实时监控和管理。

3. 系统硬件设计

在系统硬件设计中,各个节点的主要组成部分均经过详细选型,以确保系统的高效性和稳定性。

  • 主控制器:选择STM32F103C8T6作为主控芯片,因其具有强大的处理能力和丰富的接口,适合多传感器和执行设备的控制。

  • 采集传感器:系统使用温湿度传感器、光照传感器、CO2传感器等,以实现全面的环境监测。每种传感器的选型均基于其准确性、稳定性和抗干扰能力。

  • LoRa模块:选择高性能的LoRa无线通信模块,实现低功耗、长距离的数据传输。

  • Wi-Fi与GPRS模块:用于实现数据的上行传输,Wi-Fi模块用于局域网环境下的数据传输,而GPRS模块则适用于广域网连接。

  • 控制电路设计:设计并制作控制箱,能够对380V电机设备进行控制,包括卷帘机和风机的自动或手动控制。

使用Altium Designer软件完成了STM32F103C8T6最小系统电路的设计,完成PCB的绘制与焊接,确保各个硬件组件的可靠连接。

4. 程序开发与控制算法

在程序开发方面,使用Keil5软件进行各节点的STM32单片机程序设计。针对不同的功能需求,设计了相应的程序模块,并绘制了各节点功能模块的程序流程图。

  • 数据采集程序:实现各类传感器的数据采集,并通过LoRa模块进行数据发送。

  • 数据传输程序:改进了LoRa组网方式和数据传输协议,确保数据在传输过程中的稳定性和准确性。

  • 执行控制程序:根据传感器采集到的数据,制定相应的控制策略,自动调节大棚内的环境设备。

  • 智能决策程序:结合环境监测数据与用户设定的参数,智能调整环境控制策略,实现科学的管理。

这些程序模块的开发,使得系统能够实现实时监控、自动调节和远程控制等功能,极大地提升了农业管理的效率。

5. Web信息管理系统设计

为了实现用户与系统之间的良好互动,设计了基于B/S架构的Web信息管理系统。前端采用Vue.js和ElementUI框架,后端则使用SpringBoot和Mybatis-Plus进行开发。

  • 前端设计:使用Echarts进行数据可视化,将大棚内的实时环境信息以图表形式呈现,方便用户进行分析和决策。用户界面简洁易用,能够实现实时监测、数据查询和设备控制等功能。

  • 后端设计:后端通过RESTful API接收前端请求,处理数据存储与业务逻辑。数据库中存储历史数据,用户可以方便地查询各项指标的历史记录,便于后期分析和决策。

通过这种设计,用户可以对大棚的环境进行全面的管理,实现智能化和自动化的农业生产。

6. 系统测试与优化

系统的集成完成后,进行了多轮的功能测试,确保各模块能够正常工作。测试内容包括数据采集的准确性、设备控制的响应速度、以及远程监控的稳定性。

  • 数据采集测试:对比传感器采集的数据与标准设备的数据,验证采集的准确性和稳定性。

  • 控制响应测试:通过模拟不同的环境条件,测试执行设备对控制指令的响应时间和准确性。

  • 远程监控测试:测试用户在不同网络环境下的访问速度和稳定性,确保系统能够稳定运行。

  • #include "stm32f1xx_hal.h"
    #include "lora.h" // LoRa模块
    #include "wifi.h" // WiFi模块
    #include "sensor.h" // 传感器模块
    #include "control.h" // 控制模块
    
    #define DATA_SEND_INTERVAL 5000 // 数据发送间隔(毫秒)
    
    void SystemClock_Config(void);
    void Error_Handler(void);
    void initSensors(void);
    void readSensors(float* temperature, float* humidity);
    void sendDataToServer(float temperature, float humidity);
    void controlDevices(float temperature, float humidity);
    
    int main(void) {
        HAL_Init();
        SystemClock_Config();
    
        initSensors();
        LoRa_Init();
        WiFi_Init();
    
        while (1) {
            float temperature, humidity;
            readSensors(&temperature, &humidity);
            sendDataToServer(temperature, humidity);
            controlDevices(temperature, humidity);
            HAL_Delay(DATA_SEND_INTERVAL); // 延时发送数据
        }
    }
    
    void initSensors(void) {
        Sensor_Init(); // 初始化传感器
    }
    
    void readSensors(float* temperature, float* humidity) {
        *temperature = Sensor_Read_Temperature();
        *humidity = Sensor_Read_Humidity();
    }
    
    void sendDataToServer(float temperature, float humidity) {
        char buffer[256];
        sprintf(buffer, "{\"temperature\":%f,\"humidity\":%f}", temperature, humidity);
        LoRa_SendData(buffer); // 通过LoRa发送数据
        WiFi_SendData(buffer); // 通过WiFi发送数据
    }
    
    void controlDevices(float temperature, float humidity) {
        if (temperature > 30.0) {
            Control_Fan(1); // 开启风扇
        } else {
            Control_Fan(0); // 关闭风扇
        }
    
        if (humidity < 40.0) {
            Control_WaterPump(1); // 开启水泵
        } else {
            Control_WaterPump(0); // 关闭水泵
        }
    }
    
    void Error_Handler(void) {
        // 错误处理代码
    }
    

更多推荐