✅博主简介:本人擅长数据处理、建模仿真、程序设计、论文写作与指导,项目与课题经验交流。项目合作可私信或扫描文章底部二维码。
构建一个智能化的农业大棚控制系统,通过物联网技术实现对大棚环境的实时监测与控制,以提高作物产量和质量。该系统的设计包括信息采集节点、数据传输节点、执行设备控制节点以及远程监控节点,利用LoRa无线通信技术实现节点间的数据传输,确保信息的高效、稳定传递。
2. 系统架构设计
2.1 信息采集节点
信息采集节点是系统的重要组成部分,负责实时监测大棚内的环境参数。主要包括以下几个方面:
- 传感器选型:系统选用多种传感器,包括温湿度传感器、光照传感器、土壤湿度传感器和CO2浓度传感器。这些传感器能够全面反映大棚的环境状况,确保数据的准确性。
- 数据采集:通过STM32F103C8T6微控制器对传感器数据进行采集,采用ADC接口读取模拟信号并转换为数字信号。系统设置定时采集,以保证环境数据的实时更新。
2.2 数据传输节点
数据传输节点负责将采集到的数据进行处理并传输到控制中心。设计思路如下:
- LoRa无线通信:选择LoRa模块作为数据传输的主要手段,具有远距离、低功耗的特点,适合农业大棚这种相对封闭的环境。通过LoRa网络,将各个信息采集节点的数据汇总至中心节点。
- 网络拓扑结构:采用星形拓扑结构,中心节点与各信息采集节点之间的通信简洁高效。中心节点接收所有数据后进行初步处理,并通过Wi-Fi或GPRS模块上传至云服务器。
2.3 执行设备控制节点
执行设备控制节点负责根据监测到的环境数据,自动或手动控制大棚内的设备,确保作物在最佳生长条件下生长。控制的设备包括:
- 卷帘机:根据光照强度和温度数据,自动调节卷帘的高度,以避免温度过高或光照过强。
- 风机和水泵:根据温湿度和土壤湿度的实时数据,自动启停风机和水泵,以维持适宜的环境条件。
3. 硬件设计
3.1 整体架构
硬件设计包括系统中各节点的主控制器、传感器、LoRa模块、Wi-Fi模块和GPRS模块的选型与电路设计。具体内容如下:
- 主控制器:选择STM32F103C8T6作为主控制器,具有处理速度快、存储容量大、功能丰富的优势,适合本系统的需要。
- 外围电路设计:通过Altium Designer软件设计最小系统电路,确保电源稳定和信号完整。同时完成PCB的绘制与焊接,保证系统的可靠性与稳定性。
- 控制箱设计:设计并制作控制箱,能够安全地控制380V电机设备,确保大棚内的各项设备能够安全高效地运行。
4. 软件设计
4.1 程序开发
在软件开发方面,利用Keil5软件对各节点的STM32单片机程序进行设计与编写,重点包括以下几个方面:
- 数据采集程序:编写数据采集程序,实现对各类传感器数据的采集和处理,保证数据的准确性和实时性。
- LoRa通信协议:对LoRa组网方式和数据传输方式进行优化,确保数据的快速传输和有效接收。
- 智能决策程序:开发智能决策程序,根据采集到的环境数据,自动控制执行设备,确保作物生长在适宜的环境条件下。
4.2 Web信息管理系统
系统还设计了基于B/S架构的Web信息管理系统,实现了大棚的实时监测与管理功能。具体设计如下:
- 前端开发:使用Vue.js、ElementUI和Echarts技术构建用户界面,界面简洁直观,方便用户操作。
- 后端开发:采用SpringBoot和Mybatis-Plus框架进行后端开发,处理数据请求和响应,确保系统高效运行。
- 功能模块:系统支持实时监测大棚内环境信息、查询历史记录和管理设备,用户可手动控制执行设备或开启自动控制模式,实现科学管理。
5. 系统测试与验证
在系统搭建完成后,进行全面的测试与验证,以确保系统的功能和性能满足实际需求。
5.1 功能测试
对系统各个功能模块进行逐项测试,包括数据采集的准确性、执行设备的控制精度等。测试结果表明,各项功能均能够正常运行,满足设计要求。
5.2 性能测试
通过模拟不同环境条件,测试系统在极端气候下的表现。系统能够稳定运行,传感器数据采集与传输实时性良好。
5.3 稳定性测试
将系统长期运行在实际大棚环境中,观察其对环境变化的响应能力。经过一个月的测试,系统表现出良好的稳定性,能够持续监测环境参数并有效控制设备。
#include "stm32f10x.h"
#include "sensor.h"
#include "loRa.h"
#include "actuator.h"
void setup() {
// 初始化系统时钟
SystemInit();
// 初始化传感器
Sensor_Init();
// 初始化LoRa通信
LoRa_Init();
// 初始化执行设备
Actuator_Init();
}
void loop() {
// 采集传感器数据
SensorData data = Sensor_Read();
// 数据处理与决策
if (data.temperature > 30) {
Actuator_Control("fan", ON); // 启动风机
} else {
Actuator_Control("fan", OFF); // 关闭风机
}
// 通过LoRa发送数据
LoRa_Send(data);
// 等待一段时间
Delay(1000);
}
int main() {
setup();
while (1) {
loop();
}
}