基于STM32的智能大棚/智能浇水系统设计与实现
摘要
随着现代农业技术的快速发展,环境监测与自动化控制在农业生产中的应用日益广泛。本文设计并实现了一种基于STM32的智能大棚/智能浇水系统,通过集成多种传感器实时监测环境参数,并结合自动控制策略实现精准农业管理。系统具备环境检测、数据显示、自动/手动控制等功能,能够显著提高农业生产效率,减少人力成本。实验结果表明,系统运行稳定,控制精度高,具有良好的应用前景。
关键词:STM32;环境监测;智能控制;农业自动化
1. 引言
传统农业大棚管理依赖人工巡检,存在效率低、数据不连续、控制滞后等问题。随着传感器技术、嵌入式系统及物联网技术的发展,智能农业系统成为解决上述问题的有效途径。本文设计的智能大棚/智能浇水系统以STM32微控制器为核心,集成温湿度传感器、土壤湿度传感器、光照传感器及执行机构,实现环境参数的实时监测与自动调控,满足现代农业对精准化、智能化的需求。
2. 系统总体设计
系统采用模块化设计,主要包含传感器模块、主控模块、执行模块、显示模块及电源模块。其功能架构如图1所示:
+-------------------+ +-------------------+ +-------------------+ | |
| 传感器模块 | | 主控模块 | | 执行模块 | | |
| (温湿度/土壤湿度/ | → | (STM32) | → | (水泵/风扇/灯光) | | |
| 光照传感器) | | | | | | |
+-------------------+ +-------------------+ +-------------------+ | |
↑ ↓ | |
+-------------------+ +-------------------+ +-------------------+ | |
| 显示模块 | ← | 电源模块 | ← | 通信接口 | | |
| (OLED) | | (锂电池供电) | | (可选) | | |
+-------------------+ +-------------------+ +-------------------+ |
2.1 功能需求
- 环境检测:实时采集温度、土壤湿度、光照强度数据。
- 数据显示:通过OLED屏幕直观展示环境参数。
- 自动控制:
- 光照强度低于阈值时开启补光灯;
- 温度高于阈值时启动风扇;
- 土壤湿度低于阈值时启动水泵。
- 模式切换:支持自动模式(基于传感器数据)与手动模式(用户通过按键触发)。
2.2 硬件选型
- 主控芯片:STM32F103C8T6(基于ARM Cortex-M3内核,低功耗、高性价比)。
- 传感器:
- 温湿度传感器:DHT11(数字输出,抗干扰能力强)。
- 土壤湿度传感器:电阻式(通过测量土壤电阻值推算湿度)。
- 光照传感器:光敏电阻(阻值随光照强度变化)。
- 执行机构:
- 继电器模块(控制水泵、风扇、灯光)。
- 直流电机(模拟风扇,可选PWM调速)。
- 显示模块:0.96英寸OLED屏(I2C接口,低功耗)。
- 电源:可充电锂电池(3.7V)及稳压电路(AMS1117-3.3V)。
3. 硬件电路设计
3.1 传感器接口电路
- DHT11温湿度传感器:通过GPIO引脚与STM32通信,采用单总线协议。
- 土壤湿度传感器:输出模拟信号,通过ADC通道转换为数字量。
- 光照传感器:光敏电阻与分压电阻组成电压分压电路,ADC读取电压值后转换为光照强度。
3.2 执行机构控制电路
- 继电器模块:通过NPN三极管驱动,GPIO引脚输出高电平触发继电器吸合。
- PWM调速:风扇电机通过STM32的定时器PWM功能实现调速(可选)。
3.3 OLED显示电路
- 采用I2C接口的SSD1306驱动芯片,SCL/SDA引脚连接STM32的I2C1接口。
3.4 电源电路
- 锂电池通过AMS1117-3.3V稳压芯片为系统供电,并设计电源指示灯及滤波电容。
4. 软件系统设计
4.1 开发环境
- IDE:STM32CubeIDE(基于Eclipse的集成开发环境)。
- 库函数:STM32 HAL库(硬件抽象层库,简化底层寄存器操作)。
4.2 系统初始化
c
void System_Init(void) { | |
HAL_Init(); // 初始化HAL库 | |
SystemClock_Config(); // 配置系统时钟(72MHz) | |
MX_GPIO_Init(); // 初始化GPIO | |
MX_ADC1_Init(); // 初始化ADC | |
MX_I2C1_Init(); // 初始化I2C(OLED) | |
MX_USART2_UART_Init(); // 初始化UART(可选调试) | |
OLED_Init(); // 初始化OLED | |
DHT11_Init(); // 初始化DHT11 | |
} |
4.3 传感器数据采集
c
void Read_Sensors(float *temp, float *hum, uint16_t *light, float *soil_moist) { | |
DHT11_Read(temp, hum); // 读取温湿度 | |
*light = ADC_Read(ADC_CHANNEL_0); // 读取光照强度(ADC值) | |
*soil_moist = ADC_Read(ADC_CHANNEL_1); // 读取土壤湿度(ADC值) | |
} |
4.4 自动控制算法
c
void Auto_Control(float temp, uint16_t light, float soil_moist) { | |
// 光照控制 | |
if (light < LIGHT_THRESHOLD) { | |
HAL_GPIO_WritePin(LIGHT_RELAY_GPIO, LIGHT_RELAY_PIN, GPIO_PIN_SET); | |
} else { | |
HAL_GPIO_WritePin(LIGHT_RELAY_GPIO, LIGHT_RELAY_PIN, GPIO_PIN_RESET); | |
} | |
// 温度控制 | |
if (temp > TEMP_THRESHOLD) { | |
HAL_GPIO_WritePin(FAN_RELAY_GPIO, FAN_RELAY_PIN, GPIO_PIN_SET); | |
} else { | |
HAL_GPIO_WritePin(FAN_RELAY_GPIO, FAN_RELAY_PIN, GPIO_PIN_RESET); | |
} | |
// 土壤湿度控制 | |
if (soil_moist < SOIL_THRESHOLD) { | |
HAL_GPIO_WritePin(PUMP_RELAY_GPIO, PUMP_RELAY_PIN, GPIO_PIN_SET); | |
} else { | |
HAL_GPIO_WritePin(PUMP_RELAY_GPIO, PUMP_RELAY_PIN, GPIO_PIN_RESET); | |
} | |
} |
4.5 OLED显示函数
c
void OLED_Display(float temp, float hum, uint16_t light, float soil_moist) { | |
char buffer[32]; | |
OLED_Clear(); | |
OLED_ShowString(0, 0, "Temp: "); | |
sprintf(buffer, "%.1fC", temp); | |
OLED_ShowString(48, 0, buffer); | |
OLED_ShowString(0, 16, "Hum: "); | |
sprintf(buffer, "%.1f%%", hum); | |
OLED_ShowString(48, 16, buffer); | |
OLED_ShowString(0, 32, "Light: "); | |
sprintf(buffer, "%d Lux", light); | |
OLED_ShowString(48, 32, buffer); | |
OLED_ShowString(0, 48, "Soil: "); | |
sprintf(buffer, "%.1f%%", soil_moist); | |
OLED_ShowString(48, 48, buffer); | |
} |
4.6 主程序流程
c
int main(void) { | |
System_Init(); | |
float temp, hum, soil_moist; | |
uint16_t light; | |
while (1) { | |
Read_Sensors(&temp, &hum, &light, &soil_moist); | |
if (is_auto_mode) { | |
Auto_Control(temp, light, soil_moist); | |
} | |
OLED_Display(temp, hum, light, soil_moist); | |
HAL_Delay(1000); // 1秒采样周期 | |
} | |
} |
5. 系统测试与验证
5.1 测试环境
- 硬件:STM32F103C8T6开发板、DHT11、土壤湿度传感器、光敏电阻、OLED屏、继电器模块。
- 软件:STM32CubeIDE、串口调试助手。
5.2 测试内容
- 传感器精度测试:
- 温湿度:与标准温湿度计对比,误差≤±2℃、±5%RH。
- 光照强度:与光照度计对比,线性度良好。
- 土壤湿度:通过不同湿度土壤验证电阻值变化规律。
- 控制功能测试:
- 光照低于阈值时,继电器吸合(补光灯亮)。
- 温度高于阈值时,风扇启动(PWM调速测试)。
- 土壤湿度低于阈值时,水泵启动。
- 模式切换测试:
- 手动模式下,通过按键触发水泵/风扇/灯光,验证继电器响应。
5.3 测试结果
- 系统在自动模式下能够根据环境参数实时调整执行机构,响应时间≤1秒。
- 手动模式下按键控制稳定,无误触发。
- OLED显示清晰,数据更新无闪烁。
6. 结论与展望
本文设计的基于STM32的智能大棚/智能浇水系统实现了环境参数的实时监测与自动控制,具有成本低、稳定性高、操作简便等优点。未来可进一步优化:
- 增加无线通信模块(如ESP8266),实现远程监控与数据上传。
- 引入PID控制算法,提高风扇调速的精准度。
- 扩展传感器类型(如CO₂浓度、EC值),实现更全面的环境监测。
参考文献
[1] 基于STM32 HAL库的农业大棚环境监测系统的毕业论文. CSDN博客, 2024.
[2] 基于STM32的便携式土壤综合参数检测仪设计. 豆丁网, 2019.
[3] 基于STM32技术的校园智能照明控制系统设计. CSDN博客, 2024.
[4] 基于STM32的温度控制毕业论文. 原创力文档, 2024.
[5] 基于STM32的温控风扇毕业设计论文. 原创力文档, 2015.