1 系统功能介绍
本设计为 基于 51 单片机的自动智能浇花系统,通过对土壤湿度的实时监测,实现自动控制水泵对植物进行浇灌,确保土壤湿度保持在合理范围。该系统具有自动模式和手动模式两种工作方式,用户可通过按键进行设置和操作,既保证了植物的科学养护,又减少了人为操作的繁琐性,适合家庭园艺与农业生产的智能化需求。
本系统的主要功能如下:
- 实时湿度显示:通过土壤湿度传感器采集土壤含水量,转换为电信号,经 ADC0832 模数转换后送入 STC89C52 单片机处理,最终通过 4 位共阳数码管实时显示湿度值。
- 上下限值设定:通过设置键配合加、减键,可以灵活设定湿度上下限,系统在掉电后仍能保存设定值,避免每次上电后重新设置的麻烦。
- 自动浇灌:当土壤湿度低于下限值时,系统自动启动水泵进行浇水;当土壤湿度高于上限值时,系统关闭水泵,避免过度灌溉。
- 手动控制:用户可通过按键实现对水泵的直接控制,按减键可强制开启水泵,按加键可强制关闭水泵,方便在特殊情况下进行手动干预。
2 系统电路设计
2.1 单片机最小系统设计
系统采用 STC89C52 单片机 作为控制核心,其具有价格低廉、性能稳定、存储容量较大等特点。
- 电源部分:通过稳压电路提供 +5V 电源,保证单片机和外围电路的稳定工作。
- 时钟电路:采用 12MHz 晶振,保证单片机的运行速度。
- 复位电路:使用按键和上电复位电路,确保单片机在启动时进入正常工作状态。
STC89C52 内部带有 EEPROM 功能,可用于保存湿度上下限设定值,从而实现掉电保存功能。
2.2 土壤湿度传感器与 ADC0832 转换电路
-
土壤湿度传感器:通过检测土壤的电导率或电阻变化,输出一个与湿度成比例的模拟电压信号。
-
ADC0832 模数转换芯片:将传感器的模拟电压信号转换为数字信号,传输给单片机。
- 采用串行接口与单片机通信,占用 I/O 口少。
- 转换精度为 8 位,足以满足土壤湿度的检测需求。
2.3 数码管显示电路
- 采用 4 位共阳数码管,用于显示湿度值(0-100 范围内的百分比数值)。
- 通过段选线与位选线的动态扫描方式驱动数码管,节省单片机 I/O 资源。
2.4 水泵控制电路
-
核心器件:使用三极管或 MOSFET 驱动水泵,并配合继电器进行隔离控制。
-
功能:
- 当单片机输出高电平时,驱动电路导通,水泵启动;
- 当单片机输出低电平时,驱动电路断开,水泵停止。
-
保护措施:在继电器线圈两端并联二极管,防止反向电动势对单片机产生干扰。
2.5 按键输入电路
-
设计:三个独立按键,分别为减键、加键、设置键。
-
功能说明:
- 减键:用于手动模式下开启水泵,也可在设置状态下调整湿度上下限。
- 加键:用于手动模式下关闭水泵,也可在设置状态下调整湿度上下限。
- 设置键:进入或退出上下限值设置模式。
-
去抖处理:通过软硬件结合方式避免按键抖动导致的误触发。
2.6 电源电路
- 提供稳定的 +5V 电压,采用常用的 7805 稳压芯片或 DC-DC 模块。
- 单片机、ADC0832、数码管和传感器均使用 +5V 供电。
- 水泵电机部分可能需要更高电压(如 12V),通过电源分级设计实现。
3 程序设计
系统程序主要分为以下几个部分:主控程序、湿度检测程序、数码管显示程序、按键处理程序、水泵控制程序和掉电保存程序。
3.1 主程序框架
c
#include <REGX52.H>
#include "LCD.h"
#include "ADC0832.h"
#include "EEPROM.h"
#include "Key.h"
#include "Delay.h"
unsigned char humidity;
unsigned char lowerLimit = 40; // 默认下限
unsigned char upperLimit = 70; // 默认上限
bit pumpStatus = 0;
void main()
{
EEPROM_ReadLimits(&lowerLimit, &upperLimit);
while(1)
{
humidity = ADC0832_Read(); // 读取湿度
Display_Humidity(humidity); // 数码管显示
Key_Scan(); // 按键检测
Pump_Control(); // 自动或手动控制水泵
Delay(200);
}
}
3.2 湿度检测程序
c
unsigned char ADC0832_Read()
{
unsigned char value;
// ADC0832 模拟采样
ADC_CS = 0;
// 串行通信获取 8 位数据
value = Get_ADC0832_Value();
ADC_CS = 1;
return (value * 100) / 255; // 转换为百分比湿度
}
3.3 数码管显示程序
c
void Display_Humidity(unsigned char hum)
{
unsigned char bai, shi, ge;
bai = hum / 100;
shi = (hum % 100) / 10;
ge = hum % 10;
DisplayDigit(0, bai);
DisplayDigit(1, shi);
DisplayDigit(2, ge);
DisplayDigit(3, 0x0A); // 表示%
}
3.4 按键处理程序
c
void Key_Scan()
{
unsigned char key = GetKey();
switch(key)
{
case 1: // 设置键
Enter_SetMode();
break;
case 2: // 减键
if(SetMode) LowerLimit--;
else pumpStatus = 1; // 手动开泵
break;
case 3: // 加键
if(SetMode) UpperLimit++;
else pumpStatus = 0; // 手动关泵
break;
}
}
3.5 水泵控制程序
c
void Pump_Control()
{
if(!SetMode)
{
if(humidity < lowerLimit) pumpStatus = 1;
if(humidity > upperLimit) pumpStatus = 0;
}
if(pumpStatus) P2_0 = 1; // 打开水泵
else P2_0 = 0; // 关闭水泵
}
3.6 掉电保存程序
c
void EEPROM_ReadLimits(unsigned char *low, unsigned char *high)
{
*low = EEPROM_Read(0x00);
*high = EEPROM_Read(0x01);
if(*low > *high || *low == 0xFF || *high == 0xFF)
{
*low = 40;
*high = 70;
}
}
void EEPROM_WriteLimits(unsigned char low, unsigned char high)
{
EEPROM_Write(0x00, low);
EEPROM_Write(0x01, high);
}
4 总结
本设计通过 STC89C52 单片机 、ADC0832 模数转换芯片 、土壤湿度传感器 、4 位数码管显示电路 、水泵控制电路 和 按键设置电路 的有机结合,成功实现了一个功能完善的 自动智能浇花系统。
系统特点总结如下:
- 智能化:可根据设定的上下限湿度值自动浇水,保证植物生长环境稳定。
- 可控性:具备手动模式,用户可以灵活操作水泵。
- 人性化:通过数码管实时显示湿度,按键可调节上下限值,掉电后自动保存。
- 实用性:结构简单、成本低,适合家庭园艺、阳台种植和小型农业应用。
本设计不仅体现了 51 单片机在智能控制领域的灵活性和实用性,还为农业智能化发展提供了一种切实可行的解决方案。