基于单片机的自动存包柜设计

1. 系统总体设计

点击链接下载protues仿真设计资料:https://download.csdn.net/download/m0_51061483/91926418

1.1 设计背景

随着公共场所(如商场、车站、学校等)对自助服务需求的不断提升,自动存包柜逐渐成为智能化服务设施的重要组成部分。传统人工管理的存包方式存在效率低、管理复杂、安全性差等问题,而智能存包柜能够通过自动分配箱位、密码验证等方式,提高存取效率并增强安全性。

基于单片机的自动存包柜系统,通过嵌入式控制技术实现密码自动生成、空箱检测、用户身份验证及实时信息显示等功能,使系统具备智能化管理能力。同时,该系统结构简单、成本低廉,适用于教学实验及中小型应用场景。


1.2 系统功能设计

本系统主要实现以下功能:

  1. 自动生成密码功能:用户按下"存包"键后,系统自动生成随机密码;
  2. LCD显示功能:实时显示密码及分配的箱号;
  3. 空箱自动管理功能:自动检测并分配空闲箱体;
  4. 存包功能:用户根据提示完成存包操作;
  5. 取包功能:用户输入密码进行验证并打开对应箱体;
  6. 输入控制功能:支持数字键输入、清除及确认操作;
  7. 状态反馈功能:实时显示系统操作状态;
  8. 系统具备响应快速、安全可靠及操作简便等特点。

2. 系统电路设计

2.1 单片机最小系统电路设计

系统采用STC89C52单片机作为核心控制器。

最小系统包括:

  1. 晶振电路:采用11.0592MHz晶振提供系统时钟;
  2. 复位电路:RC复位电路实现系统上电初始化;
  3. 电源电路:提供稳定5V电压供系统运行。

2.2 矩阵键盘输入电路设计

系统采用4×4矩阵键盘作为输入设备。

按键包括:

  1. 数字键(0~9);
  2. 存包键;
  3. 取包键;
  4. 清除键;
  5. 确认键。

设计要点:

  1. 行列扫描方式;
  2. 节省IO口资源;
  3. 软件消抖处理;
  4. 支持多功能按键识别。

2.3 LCD显示电路设计

系统采用LCD1602显示模块。

显示内容包括:

  1. 当前操作提示;
  2. 随机生成的密码;
  3. 分配的箱号;
  4. 输入状态及结果反馈。

2.4 箱体控制电路设计

存包柜通过电磁锁或继电器控制箱门。

设计方案:

  1. 单片机输出控制信号;
  2. 通过三极管驱动继电器;
  3. 控制对应箱门开关;
  4. 支持多箱体独立控制。

2.5 空箱检测电路设计

用于判断箱体是否空闲。

设计方法:

  1. 采用开关检测或红外检测;
  2. 每个箱体对应一个检测信号;
  3. 输入单片机IO口;
  4. 判断箱体状态。

2.6 存储电路设计

用于存储密码与箱号对应关系。

设计方案:

  1. 使用单片机内部RAM;
  2. 可扩展EEPROM实现掉电保存;
  3. 保存密码与箱号映射关系。

2.7 报警与提示电路设计

系统可设置蜂鸣器提示操作结果。

设计要点:

  1. 操作成功提示;
  2. 密码错误报警;
  3. 提高用户体验。

2.8 电源与抗干扰设计

设计要点:

  1. 稳压电源提供5V;
  2. 滤波电容降低干扰;
  3. 控制电路与驱动电路隔离;
  4. 提高系统稳定性。

3. 系统程序设计

3.1 程序总体结构设计

系统采用模块化与状态机设计方法。

主程序如下:

c 复制代码
void main()
{
    System_Init();
    while(1)
    {
        key = Key_Scan();
        System_Process(key);
        Display_Update();
    }
}

3.2 数据结构设计

c 复制代码
#define MAX_BOX 10

unsigned int password[MAX_BOX];
unsigned char box_state[MAX_BOX]; // 0空闲 1占用

用于存储箱体信息。


3.3 随机密码生成程序设计

c 复制代码
unsigned int Generate_Password()
{
    unsigned int pwd;
    pwd = rand() % 9000 + 1000;
    return pwd;
}

生成4位随机密码。


3.4 存包处理程序设计

c 复制代码
void Store_Process()
{
    for(i=0;i<MAX_BOX;i++)
    {
        if(box_state[i] == 0)
        {
            password[i] = Generate_Password();
            box_state[i] = 1;
            Open_Box(i);
            break;
        }
    }
}

实现空箱分配与密码生成。


3.5 取包验证程序设计

c 复制代码
void Take_Process(unsigned int input_pwd)
{
    for(i=0;i<MAX_BOX;i++)
    {
        if(password[i] == input_pwd)
        {
            Open_Box(i);
            box_state[i] = 0;
            password[i] = 0;
            break;
        }
    }
}

实现密码匹配与取包。


3.6 按键输入处理程序设计

c 复制代码
void Input_Process(unsigned char key)
{
    if(key <= 9)
    {
        input_pwd = input_pwd * 10 + key;
    }
}

实现密码输入。


3.7 清除功能程序设计

c 复制代码
void Clear_Input()
{
    input_pwd = 0;
}

清空输入内容。


3.8 系统状态处理程序设计

c 复制代码
void System_Process(unsigned char key)
{
    if(key == STORE_KEY)
        Store_Process();
    else if(key == TAKE_KEY)
        mode = 1;
    else if(key == CONFIRM_KEY)
        Take_Process(input_pwd);
    else if(key == CLEAR_KEY)
        Clear_Input();
}

实现功能调度。


3.9 显示程序设计

c 复制代码
void Display_Update()
{
    LCD_ShowString(0,0,"PWD:");
    LCD_ShowNum(4,0,input_pwd,4);

    LCD_ShowString(0,1,"BOX:");
    LCD_ShowNum(4,1,current_box,2);
}

实现信息显示。


3.10 系统初始化程序设计

c 复制代码
void System_Init()
{
    LCD_Init();
    Key_Init();
    Box_Init();
}

完成系统初始化。


4. 系统总结

本系统基于单片机实现了自动存包柜的智能控制,通过密码生成、箱位管理及用户交互,实现了存包与取包的自动化操作。

在电路设计方面,各模块分工明确,系统结构清晰;在程序设计方面,采用状态机与模块化设计,使系统逻辑严谨、运行稳定。

该系统具备良好的实用性与扩展性,可广泛应用于公共场所的智能存储设备,同时也是嵌入式系统设计中的典型应用案例。

相关推荐
jay神1 小时前
VisDrone2019-DET 无人机小目标检测数据集
人工智能·深度学习·yolo·目标检测·计算机视觉·毕业设计·无人机
FreakStudio2 小时前
亲测可用!可本地部署的 MicroPython 开源仿真器
python·单片机·嵌入式·面向对象·并行计算·电子diy·电子计算机
rit84324993 小时前
STM32 + DS3231 + TM1640 实时时钟数码管显示系统
stm32·单片机·嵌入式硬件
zjxtxdy4 小时前
STM32开发
stm32·单片机·fpga开发
集和诚JHCTECH5 小时前
BRAV-7120加持,让有毒有害气体无处遁形
大数据·人工智能·嵌入式硬件
LCG元5 小时前
STM32实战:基于STM32F103的I2C通信(AT24Cxx EEPROM读写)
stm32·单片机·嵌入式硬件
徐某人..5 小时前
基于i.MX6ULL平台的智能网关系统开发
arm开发·c++·单片机·qt·物联网·学习·arm
稳联技术老娜6 小时前
Profinet转EtherCAT网关通讯架构及EtherCAT超距故障解决原理
mongodb
星恒讯工业路由器7 小时前
MCU+WiFi与CPU+WiFi模块区别
单片机·嵌入式硬件
LCMICRO-133108477467 小时前
长芯微LD7940完全P2P替代AD7940,是一款14位、逐次逼近型模数转换器(ADC)
单片机·嵌入式硬件·fpga开发·硬件工程·dsp开发·模数转换器adc