一·项目和设计思路介绍
随着物流和自动化技术的发展,自动分拣系统在仓储管理和生产线中扮演着越来越重要的角色。本项目旨在设计并实现一款基于51单片机的自动分拣装置,以提高物品分拣的效率和准确性。
二·方案框图和原理图介绍
方案框图:
该系统以51单片机为核心,实现对传送带的控制和物体重量的检测。系统主要模块包括继电器模块、减速电机、传送带、按键设置功能、LCD显示屏、以及HX711称重传感器。
原理图:
- 电源提供系统所需的电力。
- 用户通过按键输入设置目标操作。
- 51单片机处理用户输入,并通过继电器模块控制减速电机的运行状态。
- 传送带在减速电机的带动下运转,将物体移动。
- Hx711传感器检测到的重量数据传输至单片机。
- 处理后的重量信息显示在LCD1602上
器件介绍:
1. 电源模块
电源为整个系统提供必要的工作电压,确保各个模块稳定运行。
2. 控制模块
51单片机:作为系统的控制核心,单片机负责接收按键输入、传感器数据处理、驱动继电器模块,并更新LCD显示屏。
3. 输入模块
按键设置功能:该模块允许用户通过按键设置操作模式,如剥皮、停止、加上限和减上限。
4. 显示模块
LCD1602液晶显示屏:用于实时显示物体的重量信息以及系统的工作状态,便于用户监控和操作。
5. 执行模块
继电器模块:接受单片机指令,用于控制电源的通断以及电机的正反转,进而调节减速电机的运行状态。
减速电机:通过继电器模块的控制,带动传送带运行,实现物体的移动。
6. 传感器模块
Hx711称重传感器:用于检测传送带上物体的重量,并将信号反馈给单片机进行处理。
三·设计中用到来自指定厂商元器件及设计方向
厂商元器件简介
- AT89C51:由Atmel公司生产的8位微控制器,
- 电阻:TE Connectivity 提供各种电子连接器和被动元件。
四·PCB设计介绍以及实物展示
布局:
- 板上有多排连接器,以及分布的一些其他元件,这些元件通过大量的通孔进行布设。
- 元件之间的距离较为紧凑,适用于紧凑设计需求。
- 从布局看,信号走线之间保持一定距离以减少串扰。
布线:
- 布局采用了较为密集的走线,铜线宽度适中,适合中等电流应用。
- 电路板通过过孔(黄色孔)实现顶层与底层之间的连接。
实物图
正面布局图
通电显示图
PCB背面布线图
接下来看一下实物演示
原理就是重量合格进行前进分拣,不合格就传送带倒退挑拣出去
五·软件代码介绍
主函数部分
这段程序通过按键输入和传感器读取来控制电机运行。
void main()
{
unsigned char i = 0;
bit bobao_flag = 0;
unsigned char time_G = 0;
Init1602(); // 初始化显示屏
LED = 1;
Get_Maopi(); // 获取毛皮重量
DelaySec(1); // 延迟约1秒
delay_nms(100); // 延迟,等待传感器初始化稳定
while (1) // 进入循环
{
Get_Weight(); // 获取重量
Display_1602(Weight_Shiwu, WARNING_A); // 更新显示
if ((Weight_Shiwu > 200) && (Weight_Shiwu < 300))
{
dj1 = 1; // 停止标志
dj2 = 0; // 电机正传
}
else
{
dj1 = 0;
dj2 = 1;
}
Key(); // 扫描按键
}
}
按键函数
作为按键输入时数值修改的控制逻辑使用。
void Key() // 按键函数
{
if (Key1 == 0) // 检测按键1是否按下
{
while (Key1 == 0); // 等待按键1释放
Get_Maopi(); // 获取毛皮重量
}
if (Key2 == 0) // 检测按键2是否按下
{
while (Key2 == 0); // 等待按键2释放
WARNING_A += 10; // 增加10
if (WARNING_A > 4000)
{
WARNING_A = 0; // 超过4000则重置为0
}
}
if (Key3 == 0) // 检测按键3是否按下
{
while (Key3 == 0); // 等待按键3释放
WARNING_A -= 10; // 减少10
if (WARNING_A > 4000) // 处理数值减小导致的溢出问题
{
WARNING_A = 4000;
}
}
}
六·总结
以上就是我设计的基于51单片机的自动分拣系统,首先感谢硬禾学堂提供的机会和平台,让我有机会通过这个活动使用一些未曾尝试过的芯片来做一些不大但很有意义的制作。这之中虽然遇到了很多难题,比如电路板的腐蚀问题(断线,相交),因为挑战部分设计时间较为仓促,如有错误,欢迎指正。