引言
随着农业智能化的发展,传统温室管理模式因效率低下逐渐被淘汰,智能温室控制系统应运而生。智能温室系统通过实时监测温室内的温度、湿度和光照强度,并自动控制通风、灌溉及补光设备,为作物生长提供最优的环境条件。本项目基于STM32微控制器设计了一种智能温室控制系统,集成了温湿度传感器、光照传感器、水泵、风扇和LED补光灯,实现了温室环境的实时监控和自动调节。
系统需求与设计目标
- 环境参数监测:实时采集温室内的温湿度和光照强度数据。
- 设备自动化控制:根据环境参数,自动控制风扇、水泵和补光灯的工作状态。
- 信息显示:通过LCD显示屏实时显示温湿度和光照强度。
- 远程控制与报警:通过无线模块支持远程控制,并在异常情况下发出警报。
硬件设计
- 核心控制模块
- STM32F103C8T6开发板:负责传感器数据处理和设备控制。
- 传感器模块
- DHT11温湿度传感器:采集温室内的温度和湿度。
- 光敏传感器(LDR):检测光照强度。
- 执行模块
- 水泵:用于灌溉控制。
- 风扇:用于温室内的通风。
- LED补光灯:用于光照不足时补光。
- 显示与报警模块
- LCD显示屏:显示环境参数和设备状态。
- 蜂鸣器:用于异常状态的报警提示。
软件设计
-
数据采集 系统通过DHT11传感器采集温湿度数据,通过光敏传感器获取光照强度。
-
设备控制 根据预设的环境阈值,自动控制风扇、水泵和补光灯的开启和关闭。
-
信息显示 通过LCD实时显示环境数据和设备状态。
-
报警功能 当温度、湿度或光照强度超出设定范围时,蜂鸣器发出报警。
代码实现
以下是STM32智能温室控制系统的核心代码:
#include "stm32f1xx_hal.h"
#include "dht11.h"
#include "lcd.h"// 定义引脚
#define FAN_PIN GPIO_PIN_0
#define FAN_PORT GPIOA
#define PUMP_PIN GPIO_PIN_1
#define PUMP_PORT GPIOA
#define LED_PIN GPIO_PIN_2
#define LED_PORT GPIOA
#define BUZZER_PIN GPIO_PIN_3
#define BUZZER_PORT GPIOA
#define LDR_PIN GPIO_PIN_4
#define LDR_PORT GPIOA// 定义阈值
#define TEMP_THRESHOLD 30.0
#define HUMID_THRESHOLD 40.0
#define LIGHT_THRESHOLD 300// 全局变量
float temperature, humidity;
uint16_t light_intensity;// 函数声明
void Read_Sensors(void);
void Control_Devices(void);
void Display_Info(void);
void Buzzer_Alert(uint8_t state);// 读取传感器数据
void Read_Sensors(void) {DHT11_Read_Data(&temperature, &humidity); // 读取温湿度HAL_ADC_Start(&hadc1);if (HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY) == HAL_OK) {light_intensity = HAL_ADC_GetValue(&hadc1); // 获取光敏传感器数据}HAL_ADC_Stop(&hadc1);
}// 控制设备状态
void Control_Devices(void) {// 温度控制if (temperature > TEMP_THRESHOLD) {HAL_GPIO_WritePin(FAN_PORT, FAN_PIN, GPIO_PIN_SET); // 打开风扇} else {HAL_GPIO_WritePin(FAN_PORT, FAN_PIN, GPIO_PIN_RESET); // 关闭风扇}// 湿度控制if (humidity < HUMID_THRESHOLD) {HAL_GPIO_WritePin(PUMP_PORT, PUMP_PIN, GPIO_PIN_SET); // 打开水泵} else {HAL_GPIO_WritePin(PUMP_PORT, PUMP_PIN, GPIO_PIN_RESET); // 关闭水泵}// 光照控制if (light_intensity < LIGHT_THRESHOLD) {HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET); // 打开补光灯} else {HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET); // 关闭补光灯}// 异常报警if (temperature > TEMP_THRESHOLD + 5 || humidity < HUMID_THRESHOLD - 10) {Buzzer_Alert(1); // 打开蜂鸣器} else {Buzzer_Alert(0); // 关闭蜂鸣器}
}// 显示信息
void Display_Info(void) {char buffer[32];sprintf(buffer, "Temp: %.1fC", temperature);LCD_PrintLine(0, buffer);sprintf(buffer, "Humid: %.1f%%", humidity);LCD_PrintLine(1, buffer);sprintf(buffer, "Light: %d", light_intensity);LCD_PrintLine(2, buffer);
}// 蜂鸣器控制
void Buzzer_Alert(uint8_t state) {HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
}// 主函数
int main(void) {HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_ADC1_Init();LCD_Init();DHT11_Init();while (1) {Read_Sensors(); // 读取传感器数据Control_Devices(); // 控制设备状态Display_Info(); // 显示环境信息HAL_Delay(1000); // 每秒更新一次}
}
系统功能说明
- 实时监测环境参数:通过DHT11和光敏传感器获取温湿度和光照强度,并实时更新。
- 自动化设备控制:根据传感器反馈,自动调节风扇、水泵和补光灯的工作状态。
- 异常报警:当环境条件异常时,蜂鸣器提示警报,提醒用户进行处理。
- 信息显示:LCD显示屏显示实时数据,方便用户观察。
常见问题与解决方法
-
传感器数据读取异常
- 检查传感器连接是否正确,确保接口牢固。
- 确保传感器驱动程序初始化正常。
-
设备无法正常启动
- 检查设备连接和电源,确保电流输出足够。
- 测试GPIO引脚是否正确配置为输出模式。
-
显示屏无法显示信息
- 确保I2C通信正常工作,并检查显示屏初始化代码。
总结
本项目基于STM32设计了一种智能温室控制系统,集成了温湿度传感器、光照传感器和多种执行设备,能够实时监测温室环境并自动调节设备状态。系统设计简单高效,适用于农业种植环境的智能化管理需求。未来可以进一步优化系统,通过无线模块实现远程监控与控制功能,进一步提高系统的实用性和智能化水平。