基于STM32F103C8T6的农业大棚监测系统设计
摘要
本文设计并实现了一套基于STM32F103C8T6单片机的农业大棚监测系统。该系统通过集成多种传感器,实现对大棚内部环境参数(光照强度、二氧化碳浓度、空气温湿度、土壤湿度)的实时监测,并将采集到的数据显示在0.96寸OLED显示屏上,同时通过ESP8266 Wi-Fi模块将数据上传到手机APP(机智云)。系统支持自动控制模式和APP远程控制模式,根据环境参数自动控制相关设备,并在参数超出阈值时触发蜂鸣器报警。本文详细介绍了系统的硬件设计、软件设计、实现过程以及测试结果。
关键词
STM32F103C8T6;农业大棚监测;自动控制;APP远程控制;OLED显示屏;ESP8266
目录
- 引言
- 1.1 设计背景与意义
- 1.2 研究现状
- 1.3 研究内容
- 系统总体设计
- 2.1 系统功能需求
- 2.2 系统设计方案
- 2.3 系统硬件框图
- 2.4 系统主流程图
- 系统硬件设计
- 3.1 微控制器模块
- 3.2 传感器模块
- 3.3 显示模块
- 3.4 通信模块
- 3.5 控制模块
- 3.6 电源模块
- 3.7 原理图与PCB设计
- 系统软件设计
- 4.1 开发环境搭建
- 4.2 系统初始化
- 4.3 传感器数据采集
- 4.4 数据处理与显示
- 4.5 自动控制逻辑
- 4.6 APP远程控制
- 4.7 程序代码示例
- 系统测试与结果分析
- 5.1 硬件测试
- 5.2 软件测试
- 5.3 系统集成测试
- 5.4 结果分析
- 结论与展望
- 6.1 结论
- 6.2 展望
- 参考文献
- 附录
- 8.1 原件清单
- 8.2 演示PPT模板
- 8.3 APP与小程序安装教程
1. 引言
1.1 设计背景与意义
随着现代农业技术的不断发展,对农业大棚内部环境的实时监测和控制变得尤为重要。传统的农业大棚环境监测方式存在设备复杂、操作繁琐、需要大量进口设备等问题。本文旨在设计并实现一套基于STM32F103C8T6单片机的高性价比、模块化的农业大棚监测系统,以解决上述问题。该系统能够实时监测大棚内的环境参数,并根据参数自动控制相关设备,提高种植户的生产效率,减少劳动力投入,为农业生产提供决策支持。
1.2 研究现状
目前,国内智能大棚系统尚处于初级探索阶段,存在智能化程度低、设备昂贵、推广难度大等问题。国外的智能大棚系统虽然技术成熟,但价格高昂,且不完全适应我国的农业国情。因此,设计一套适合我国农业国情的智能大棚监测系统,并推广应用在传统农业中,是未来国内智能农业大棚的发展方向。
1.3 研究内容
本文的研究内容主要包括以下几个方面:
- 了解农业大棚的监测系统的发展现状及需求。
- 根据需求设计系统总体方案,包括硬件设计和软件设计。
- 研究各传感器的特点,结合环境特点选型,并设计相应电路。
- 编写系统软件,实现数据采集、处理、显示和控制功能。
- 对系统进行测试与调试,验证系统的可行性和有效性。
2. 系统总体设计
2.1 系统功能需求
本系统需要实现以下功能:
- 采集当前室内光照强度、二氧化碳浓度、空气温湿度、土壤湿度。
- 将采集到的数据显示在0.96寸OLED显示屏上。
- 通过ESP8266 Wi-Fi模块将数据上传到手机APP(机智云)。
- 支持自动控制模式和APP远程控制模式。
- 自动控制模式:根据环境参数自动控制相关设备(如热片、风扇、LED灯、水泵等),并在参数超出阈值时触发蜂鸣器报警。
- APP远程控制模式:通过手机APP界面上的控制按钮来控制相关设备的开关。
2.2 系统设计方案
系统采用STM32F103C8T6单片机作为核心控制器,通过集成多种传感器来监测环境参数。系统硬件包括微控制器模块、传感器模块、显示模块、通信模块、控制模块和电源模块。系统软件采用Keil MDK-ARM集成开发环境进行编程,实现数据采集、处理、显示和控制功能。
2.3 系统硬件框图
<img src="https://example.com/hardware_diagram.png" />
2.4 系统主流程图
<img src="https://example.com/main_flowchart.png" />
3. 系统硬件设计
3.1 微控制器模块
本系统选用STM32F103C8T6单片机作为核心控制器。该单片机具有低功耗、高性能、价格适中等优点,能够满足系统的需求。
3.2 传感器模块
- 光照强度传感器:采用光敏电阻,其阻值随光照强度的变化而变化,便于实现光照强度的实时监测。
- 二氧化碳传感器:采用SGP30传感器,能够准确测量环境中的二氧化碳浓度。
- 温湿度传感器:采用DHT11温湿度传感器,具有响应速度快、抗干扰能力强等特点,能够同时测量温度和湿度。
- 土壤湿度传感器:选用电阻式土壤湿度传感器,通过测量土壤中的电阻值来推算土壤湿度。
3.3 显示模块
采用0.96寸OLED显示屏,用于实时显示当前温湿度、二氧化碳浓度、土壤湿度、当前模式等信息。
3.4 通信模块
采用ESP8266 Wi-Fi模块,实现系统与手机APP之间的无线通信。通过该模块,系统可以将采集到的数据上传到手机APP,并接收APP的控制指令。
3.5 控制模块
- 热片:用于加热,当温度低于设置阈值时开启。
- 风扇:用于通风降温和降低二氧化碳浓度,当湿度高于设置阈值或二氧化碳浓度高于阈值时开启。
- LED灯:用于补光,当光照强度低于设置阈值时开启。
- 水泵:用于灌溉,当土壤湿度低于设置阈值时开启。
- 蜂鸣器:用于报警,当任意参数超出阈值时触发。
3.6 电源模块
采用可充电锂电池供电,并设计电源管理电路以确保系统稳定运行。
3.7 原理图与PCB设计
使用Altium Designer或类似软件绘制系统原理图和PCB图,并进行PCB板打样和焊接。
4. 系统软件设计
4.1 开发环境搭建
使用Keil MDK-ARM集成开发环境进行软件编程。首先,安装Keil MDK-ARM软件,并配置STM32F103C8T6的开发环境。然后,安装必要的硬件抽象层(HAL)或标准外设库。
4.2 系统初始化
在系统初始化阶段,完成以下工作:
- 配置系统时钟、GPIO、UART等外设。
- 初始化各个传感器模块、显示模块、通信模块和控制模块。
4.3 传感器数据采集
通过STM32的ADC(模数转换器)读取传感器的模拟信号,并将其转换为数字信号进行处理。具体实现如下:
c复制代码
#include "stm32f1xx_hal.h" | |
#include "dht11.h" | |
#include "soil_moisture_sensor.h" | |
#include "light_sensor.h" | |
#include "co2_sensor.h" | |
void Read_Sensors(float *temperature, float *humidity, float *soil_moisture, float *light_intensity, float *co2_concentration) { | |
// 读取DHT11温湿度传感器数据 | |
Read_DHT11(temperature, humidity); | |
// 读取土壤湿度传感器数据 | |
*soil_moisture = Read_SoilMoistureSensor(); | |
// 读取光照强度传感器数据 | |
*light_intensity = Read_LightSensor(); | |
// 读取二氧化碳传感器数据 | |
*co2_concentration = Read_CO2Sensor(); | |
} |
4.4 数据处理与显示
对采集到的数据进行处理,并在OLED显示屏上显示。具体实现如下:
c复制代码
#include "oled.h" | |
void Display_Data(float temperature, float humidity, float soil_moisture, float light_intensity, float co2_concentration, char *mode) { | |
char buffer[128]; | |
sprintf(buffer, "Temp: %.2fC\nHum: %.2f%%\nSoil: %.2f%%\nLight: %.2f\nCO2: %.2fppm\nMode: %s", | |
temperature, humidity, soil_moisture, light_intensity, co2_concentration, mode); | |
OLED_ShowString(0, 0, buffer, 12); | |
} |
4.5 自动控制逻辑
根据环境参数自动控制相关设备,并在参数超出阈值时触发蜂鸣器报警。具体实现如下:
c复制代码
#include "control.h" | |
void Auto_Control(float temperature, float humidity, float soil_moisture, float light_intensity, float co2_concentration, float temp_threshold, float humidity_threshold, float soil_moisture_threshold, float light_intensity_threshold, float co2_threshold) { | |
if (temperature < temp_threshold) { | |
Turn_On_Heater(); | |
} else { | |
Turn_Off_Heater(); | |
} | |
if (humidity > humidity_threshold || co2_concentration > co2_threshold) { | |
Turn_On_Fan(); | |
} else { | |
Turn_Off_Fan(); | |
} | |
if (light_intensity < light_intensity_threshold) { | |
Turn_On_LED(); | |
} else { | |
Turn_Off_LED(); | |
} | |
if (soil_moisture < soil_moisture_threshold) { | |
Turn_On_Pump(); | |
} else { | |
Turn_Off_Pump(); | |
} | |
if (temperature > temp_threshold || humidity > humidity_threshold || soil_moisture < soil_moisture_threshold || light_intensity < light_intensity_threshold || co2_concentration > co2_threshold) { | |
Trigger_Buzzer(); | |
} | |
} |
4.6 APP远程控制
通过ESP8266 Wi-Fi模块与手机APP进行通信,实现APP远程控制功能。具体实现如下:
c复制代码
#include "esp8266.h" | |
void APP_Control(char *command) { | |
if (strcmp(command, "TURN_ON_LED") == 0) { | |
Turn_On_LED(); | |
} else if (strcmp(command, "TURN_OFF_LED") == 0) { | |
Turn_Off_LED(); | |
} else if (strcmp(command, "TURN_ON_FAN") == 0) { | |
Turn_On_Fan(); | |
} else if (strcmp(command, "TURN_OFF_FAN") == 0) { | |
Turn_Off_Fan(); | |
} else if (strcmp(command, "TURN_ON_PUMP") == 0) { | |
Turn_On_Pump(); | |
} else if (strcmp(command, "TURN_OFF_PUMP") == 0) { | |
Turn_Off_Pump(); | |
} else if (strcmp(command, "TURN_ON_HEATER") == 0) { | |
Turn_On_Heater(); | |
} else if (strcmp(command, "TURN_OFF_HEATER") == 0) { | |
Turn_Off_Heater(); | |
} | |
} |
4.7 程序代码示例
以下是一个简化的主程序示例,展示了系统的整体工作流程:
c复制代码
#include "main.h" | |
int main(void) { | |
System_Init(); // 系统初始化 | |
float temperature, humidity, soil_moisture, light_intensity, co2_concentration; | |
char mode[10] = "AUTO"; // 默认模式为自动模式 | |
while (1) { | |
Read_Sensors(&temperature, &humidity, &soil_moisture, &light_intensity, &co2_concentration); // 读取传感器数据 | |
Display_Data(temperature, humidity, soil_moisture, light_intensity, co2_concentration, mode); // 显示数据 | |
if (strcmp(mode, "AUTO") == 0) { | |
Auto_Control(temperature, humidity, soil_moisture, light_intensity, co2_concentration, TEMP_THRESHOLD, HUMIDITY_THRESHOLD, SOIL_MOISTURE_THRESHOLD, LIGHT_INTENSITY_THRESHOLD, CO2_THRESHOLD); // 自动控制 | |
} | |
// 处理APP控制指令(这里省略了具体的通信实现) | |
// APP_Control(command); | |
HAL_Delay(1000); // 延时1秒再次采集数据 | |
} | |
} |
5. 系统测试与结果分析
5.1 硬件测试
对系统的各个硬件模块进行逐一测试,确保它们能够正常工作。具体包括:
- 测试传感器模块是否能够准确采集数据。
- 测试显示模块是否能够正常显示数据。
- 测试通信模块是否能够正常通信。
- 测试控制模块是否能够正常控制相关设备。
- 测试电源模块是否能够稳定供电。
5.2 软件测试
对系统的各个软件模块进行逐一测试,确保它们能够正确实现功能。具体包括:
- 测试系统初始化是否能够正确配置外设。
- 测试传感器数据采集模块是否能够正确读取数据。
- 测试数据处理与显示模块是否能够正确处理并显示数据。
- 测试自动控制逻辑是否能够根据环境参数正确控制相关设备。
- 测试APP远程控制模块是否能够正确接收并处理APP的控制指令。
5.3 系统集成测试
将系统的各个模块进行集成测试,验证系统的整体性能。具体包括:
- 测试系统是否能够正确采集并显示大棚内的环境参数数据。
- 测试系统是否能够根据环境参数自动控制相关设备。
- 测试系统是否能够正确接收并处理APP的控制指令。
- 测试系统的稳定性、响应速度和准确性等指标。
5.4 结果分析
根据测试结果对系统进行优化和改进,以提高系统的整体性能。具体包括:
- 对传感器数据进行校准和滤波处理,提高数据的准确性。
- 优化自动控制逻辑,提高系统的响应速度和稳定性。
- 完善APP远程控制功能,提高用户体验。
6. 结论与展望
6.1 结论
本文设计并实现了一套基于STM32F103C8T6单片机的农业大棚监测系统。该系统能够实时监测大棚内的环境参数,并根据参数自动控制相关设备,同时支持APP远程控制功能。通过系统集成与测试,验证了系统的可行性和有效性。该系统具有操作简单、体积小、功能丰富、功耗低等特点,能够显著提高种植户的生产效率,减少劳动力投入,为农业生产提供决策支持。
6.2 展望
未来可以进一步拓展系统功能,如加入更多的传感器类型以监测更多的环境参数,优化自动控制逻辑以提高系统的智能化程度,完善APP远程控制功能以提高用户体验等。同时,还可以考虑将系统与其他智能农业设备进行集成,实现更加智能化的农业大棚环境管理。
7. 参考文献
[此处列出参考文献]
8. 附录
8.1 原件清单
[此处列出系统所需的原件清单]
8.2 演示PPT模板
[此处提供演示PPT模板的下载链接或文件]