基于51单片机智能大棚浇花花盆浇水灌溉补光散热设计
1. 系统功能概述
本系统是一个基于STC89C52单片机的智能温室/花盆自动管理系统,能够对环境的光照、温度、土壤湿度进行实时监测,并通过控制补光灯、风扇、水泵等执行器,自动调节植物生长环境,以达到节能高效、智能控制的目的。设计中还引入了用户按键设定功能,使系统具备更强的互动性与可配置性。
本系统具有以下功能:
- 实时检测环境光照强度,低于设定值自动补光;
- 实时检测温度,温度过低自动加热,过高自动散热;
- 实时检测土壤湿度,湿度不足自动启动水泵浇水;
- 1602液晶显示模块实时显示光照、温度、湿度、设定值等参数;
- 用户通过按键设定各项阈值;
- 所有模拟信号(光照/湿度)均通过PCF8591 A/D模块进行采集;
- 控制电路包括LED、风扇、继电器、水泵等。
2. 电路设计
2.1 单片机控制模块(STC89C52)
STC89C52作为系统核心,承担传感器采集、执行器控制、参数处理、液晶显示、按键输入等所有核心逻辑功能。
- 利用P0口与LCD1602通讯;
- 利用P1口控制LED、风扇、水泵;
- 利用P2口读取按键;
- P3.4/P3.5用于I2C通信(与PCF8591及其他I2C模块通讯)。
2.2 光照检测与补光电路
- 使用光敏电阻作为光照检测元件,通过与固定电阻分压后送入PCF8591的A/D通道;
- 单片机通过I2C读取光照强度值;
- 若强度低于设定阈值,则点亮1颗白色高亮LED作为补光灯;
- 若强度正常或偏高,补光灯关闭。
2.3 温度检测与调节模块
-
使用DS18B20数字温度传感器直接与单片机通信;
-
温度值通过液晶显示;
-
可设定温度阈值;
- 若温度低于设定值,则点亮黄色LED模拟加热;
- 若温度高于设定值,则启动风扇。
2.4 土壤湿度检测模块
-
使用土壤湿度传感器输出模拟电压;
-
通过PCF8591 A/D采样获得湿度值;
-
可设定湿度阈值;
- 若湿度低于设定值,则驱动继电器开启水泵加水;
- 若湿度正常或偏高,水泵不动作。
2.5 A/D采样模块(PCF8591)
- PCF8591为四路8位A/D模块;
- 接入光照与湿度两个模拟信号;
- I2C方式与STC89C52通讯;
- 采样数据实时读取并处理后用于控制逻辑判断。
2.6 显示模块(LCD1602)
-
用于实时显示:
- 当前光照强度与设定阈值;
- 当前温度与设定值;
- 当前湿度与设定阈值;
-
使用并口与单片机通信;
-
背光常开或通过控制引脚管理。
2.7 控制执行模块
LED补光/加热
- 白色LED用于光照补光;
- 黄色LED用于温度过低模拟加热;
- 电路经限流电阻后直接由单片机控制。
风扇控制
- 使用NPN三极管+反向二极管驱动小型风扇;
- 温度高于设定阈值时,自动启动风扇散热。
水泵与继电器控制
- 水泵通过继电器控制;
- 若湿度低于设定值,单片机输出高电平驱动继电器闭合,供电给水泵。
2.8 按键输入模块
- 使用若干独立按键实现用户设定功能;
- 可切换光照、温度、湿度的设定模式;
- 调整各项设定阈值;
- 按键去抖处理后读取操作意图。
2.9 电源电路
- 统一使用+5V电源供电;
- 风扇、水泵需额外+12V电源通过继电器控制;
- 所有传感器、单片机等均由稳压+5V供电。
3. 程序设计
3.1 主程序结构
主函数中初始化所有模块,然后循环读取传感器数据并进行处理:
void main() {
Init_All();
while(1) {
Read_Sensors();
Display_Values();
Process_LightControl();
Process_TempControl();
Process_SoilControl();
Key_Scan();
Delay_ms(200);
}
}
3.2 初始化模块
初始化LCD、DS18B20、PCF8591、IO端口等:
void Init_All() {
LCD_Init();
PCF8591_Init();
DS18B20_Init();
Set_Default_Thresholds();
Init_IO();
}
3.3 传感器数据采集模块
光照、湿度通过PCF8591采集:
uint8_t Read_Light() {
return PCF8591_Read(0); // 通道0:光照
}
uint8_t Read_Soil() {
return PCF8591_Read(1); // 通道1:湿度
}
温度通过DS18B20读取:
float Read_Temperature() {
return DS18B20_GetTemp(); // 返回摄氏温度
}
3.4 显示模块
LCD显示光照、温度、湿度、设定阈值:
void Display_Values() {
LCD_ShowString(1, 1, "L:");
LCD_ShowNum(1, 3, light_value, 3);
LCD_ShowString(1, 7, "T:");
LCD_ShowNum(1, 9, (int)temperature, 2);
LCD_ShowString(2, 1, "S:");
LCD_ShowNum(2, 3, soil_value, 3);
}
3.5 光照控制模块
void Process_LightControl() {
if(light_value < light_threshold) {
LED_White_On();
} else {
LED_White_Off();
}
}
3.6 温度控制模块
void Process_TempControl() {
if(temperature < temp_threshold) {
LED_Yellow_On(); // 加热
Fan_Off();
} else if(temperature > temp_threshold) {
Fan_On(); // 散热
LED_Yellow_Off();
} else {
Fan_Off();
LED_Yellow_Off();
}
}
3.7 土壤湿度控制模块
void Process_SoilControl() {
if(soil_value < soil_threshold) {
WaterPump_On();
} else {
WaterPump_Off();
}
}
3.8 按键设置模块
通过状态变量控制当前调整项(光照阈值、温度阈值、湿度阈值):
void Key_Scan() {
key = Get_Key();
if(key == SET_LIGHT) {
state = SETTING_LIGHT;
} else if(key == SET_TEMP) {
state = SETTING_TEMP;
} else if(key == SET_SOIL) {
state = SETTING_SOIL;
} else if(key == INC) {
if(state == SETTING_LIGHT) light_threshold += 5;
if(state == SETTING_TEMP) temp_threshold += 1;
if(state == SETTING_SOIL) soil_threshold += 5;
} else if(key == DEC) {
if(state == SETTING_LIGHT) light_threshold -= 5;
if(state == SETTING_TEMP) temp_threshold -= 1;
if(state == SETTING_SOIL) soil_threshold -= 5;
}
}
3.9 控制模块驱动函数
void LED_White_On() { P1_0 = 0; }
void LED_White_Off() { P1_0 = 1; }
void LED_Yellow_On() { P1_1 = 0; }
void LED_Yellow_Off() { P1_1 = 1; }
void Fan_On() { P1_2 = 0; }
void Fan_Off() { P1_2 = 1; }
void WaterPump_On() { P1_3 = 0; }
void WaterPump_Off() { P1_3 = 1; }
4. 总结
本系统基于STC89C52单片机,融合了传感器检测、A/D采集、用户交互与自动控制等功能模块,成功实现了温室/花盆的智能灌溉、补光、加热与通风管理。系统结构清晰,功能分明,逻辑严密,适合在农业自动化、家庭园艺、智能生态瓶等多种场景推广应用。
其优点包括:
- 自动化程度高,可长时间无人值守;
- 用户可灵活设定各项参数;
- 数据实时反馈,便于观察与调整;
- 模块化设计,便于扩展或维护。
后续可进一步扩展远程控制(如加入WiFi/蓝牙)、历史数据存储、手机APP联动等功能,实现真正意义上的“智能农业管理系统”。