基于51单片机垃圾箱自动分类加料机快递物流分拣器系统设计

基于51单片机垃圾箱自动分类加料机快递物流分拣器系统设计

本设计包含程序+原理图+PCB+视频解说

📚开发环境

程序编译器:keil 4
原理图PCB:Altium Designer
编程语言:C语言
设计编号:C0015

📚功能说明

本系统由STC89C52单片机、ULN2003步进电机驱动、RFID读卡器模块、

LCD1602液晶显示组成。

1、步进电机左右转动进行通道选择(或理解为传送带方向),

有2张卡,一个表示需要通向左侧通道,一个表示需要通向右侧通道。

2、如果RFID阅读器读到卡1,则步进电机左转一定角度,

停留片刻后,等待传送的物品通过,再返回到原位置即中间位置。

3、如果RFID阅读器读到卡2,则步进电机右转一定角度,

停留片刻后,等待传送的物品通过,再返回到原位置即中间位置。

📚实物图

📚原理图

📚PCB

📚程序代码

c 复制代码
/***************************/

sbit A1=P1^3; //定义步进电机连接端口
sbit B1=P1^2;
sbit C1=P1^1;
sbit D1=P1^0;

#define TIMELATERNUM 2000		//步进电机旋转时间

#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
#define Coil_D1 {A1=0;B1=1;C1=0;D1=1;}//D相通电,其他相断电//**All notes can be deleted and modified**//
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电

unsigned int timeLater=0;				 //步进电机转动时间
unsigned char zfFlag = 0;	//正反转标志
unsigned char needBack = 0;//需要返回到中间标志
unsigned int stayCount = 0;//停留时间
unsigned char UID[5];	 //卡号
unsigned char Temp[4] ;   //中间量

unsigned long time_3ms=0;	//定时器计数 初始值可以任意值 

unsigned char dis0[16];		//显示数组

void Init_Timer0(void);
void uartSendStr(unsigned char *s,unsigned char length);
void UART_Init(void);
void uartSendByte(unsigned char dat);

void main (void)
{     
	Init_Timer0();        //定时器0初始化
	UART_Init();
	time_3ms = 0;//初始化赋值
	
	LCD_Init();           //初始化液晶
	DelayMs(20);          //延时有助于稳定
	LCD_Clear(); 

	sprintf(dis0,"Where to go : ");//打印
	LCD_Write_String(0,0,dis0);//显示第二行

	LCD_Write_String(0,1," Middle channel ");//显示第二行

	PcdReset();//复位RC522
	PcdAntennaOn();//开启天线发射 

	while (1)         //主循环
	{
	 	if(PcdRequest(0x52,Temp)==MI_OK){	//检测到卡号	    
	      if(PcdAnticoll(UID)==MI_OK){	 //获取卡号成功	       
					if((UID[0]==leftID[0])&&(UID[1]==leftID[1])&&(UID[2]==leftID[2]))	 //左侧通道
					{
						zfFlag = 1;//左侧转动 
						timeLater=500; //转动时间
						needBack = 1;		//需要返回标志
						LCD_Write_String(0,1," Left channel   ");//显示第二行
					}
					else if((UID[0]==rightID[0])&&(UID[1]==rightID[1])&&(UID[2]==rightID[2]))//卡号为用户的 
					{
						zfFlag = 2;//右侧转动 
						timeLater=500; //转动时间		
						needBack = 1;		//该过程回到中间 不需要返回标志								
						LCD_Write_String(0,1," Right channel  ");//显示第二行
					}
					uartSendByte(0x00);
					uartSendStr(UID,4);		//调试打印卡号
					uartSendByte(0x00);
	      }
	    }
			if(needBack&&(timeLater==0)){ //转动结束 需要返回
					if((zfFlag == 1)&&(stayCount >= 300)){  //当前偏左 停留了600ms左右
						zfFlag = 2;//右侧转动 
						timeLater=500; //转动时间		
						needBack = 0;		//该过程回到中间 不需要返回标志						
					}
					else if((zfFlag == 2)&&(stayCount >= 300)){//当前偏右 停留了600ms左右
						zfFlag = 1;//左侧转动 
						timeLater=500; //转动时间		
						needBack = 0;		//该过程回到中间 不需要返回标志						
					}					
			}
			else if(!needBack&&(timeLater==0)){ //不需要返回情况下 运行结束 即回到中间位置
						zfFlag = 0;//不转动 
						timeLater=0; //转动时间		
						needBack = 0;		//该过程回到中间 不需要返回标志	
						LCD_Write_String(0,1," Middle channel ");//显示第二行
			}
	}
}

📚资料清单


资料下载链接:
https://docs.qq.com/doc/DS0dBVEZkdmtsTFNN

相关推荐
FreakStudio11 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
✎ ﹏梦醒͜ღ҉繁华落℘16 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
u1521096484916 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd84510150016 天前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼16 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
wohoo_wangzi16 天前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
✎ ﹏梦醒͜ღ҉繁华落℘17 天前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展17 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
集芯微电科技有限公司17 天前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
踏着七彩祥云的小丑17 天前
嵌入式测试学习第 37 天:异常场景测试:断电、拔插、干扰、非法指令
单片机·嵌入式硬件·学习