基于51单片机自动智能浇花系统设计

1 系统功能介绍

本设计为 基于 51 单片机的自动智能浇花系统,通过对土壤湿度的实时监测,实现自动控制水泵对植物进行浇灌,确保土壤湿度保持在合理范围。该系统具有自动模式和手动模式两种工作方式,用户可通过按键进行设置和操作,既保证了植物的科学养护,又减少了人为操作的繁琐性,适合家庭园艺与农业生产的智能化需求。

本系统的主要功能如下:

  1. 实时湿度显示:通过土壤湿度传感器采集土壤含水量,转换为电信号,经 ADC0832 模数转换后送入 STC89C52 单片机处理,最终通过 4 位共阳数码管实时显示湿度值。
  2. 上下限值设定:通过设置键配合加、减键,可以灵活设定湿度上下限,系统在掉电后仍能保存设定值,避免每次上电后重新设置的麻烦。
  3. 自动浇灌:当土壤湿度低于下限值时,系统自动启动水泵进行浇水;当土壤湿度高于上限值时,系统关闭水泵,避免过度灌溉。
  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 位数码管显示电路水泵控制电路按键设置电路 的有机结合,成功实现了一个功能完善的 自动智能浇花系统

系统特点总结如下:

  1. 智能化:可根据设定的上下限湿度值自动浇水,保证植物生长环境稳定。
  2. 可控性:具备手动模式,用户可以灵活操作水泵。
  3. 人性化:通过数码管实时显示湿度,按键可调节上下限值,掉电后自动保存。
  4. 实用性:结构简单、成本低,适合家庭园艺、阳台种植和小型农业应用。

本设计不仅体现了 51 单片机在智能控制领域的灵活性和实用性,还为农业智能化发展提供了一种切实可行的解决方案。

相关推荐
清风6666662 小时前
基于STM32F103单片机智能门禁热释人体感应报警设计
单片机·毕业设计·课程设计
玖別ԅ(¯﹃¯ԅ)5 小时前
ADC的实现(单通道,多通道,DMA)
stm32·单片机·嵌入式硬件
anghost1506 小时前
基于单片机的防酒驾系统设计
单片机·嵌入式硬件·毕业设计·流程图
lepton_yang6 小时前
Zephyr下控制ESP32S3的GPIO口
linux·嵌入式硬件·esp32·zephyr
AI+程序员在路上7 小时前
单片机驱动LCD显示模块LM6029BCW
c语言·单片机·嵌入式硬件
XINVRY-FPGA8 小时前
10CL016YF484C8G Altera FPGA Cyclone
嵌入式硬件·网络协议·fpga开发·云计算·硬件工程·信息与通信·fpga
Hero_11278 小时前
学习Stm32 的第一天
stm32·嵌入式硬件·学习
ye1501277745512 小时前
DC6v-36V转3.2V1A恒流驱动芯片WT7017
单片机·嵌入式硬件·其他
scilwb1 天前
RoboCon考核题——scilwb
单片机