微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

51单片机送餐机器人快递机器人_ESP8266_APP_WIFI原理图+PCB+源码

51单片机送餐机器人快递机器人_ESP8266_APP_WIFI(原理图+PCB+源码)

原理图PCB:Altium Designer

程序编译器:keil4 / 5

编程语言:C语言

设计编号:C0056

功能介绍

小车通过三个红外探头进行线路识别,两个红外传感器识别停止的地点,手机连接WIFI后通过APP传输相关的送货信息,小车行驶到相关对应的送货地点就停止卸货。

1、装置上具有红外线感应寻迹的功能,在指定轨道布线之内,小车能遵循路线的范围行走,不跑偏、不失控,若未在指定的轨道上不做出任何反应原地待命。

2、派送的地址通过手机APP进行信息传输,即具有APP地点配送功能,在APP设置配送的地点,小车走到相应的地点后进行停止卸货,若不小心走到的地点为非配送地点,则继续行走到轨道外,等待人工重新操作。

3、机器人的电池供电具有方便的替换性,当供电电池没电时,工作人员只需将备用电池进行更换即可,省去充电的麻烦。

img

以下为本设计资料展示图:

​ 51单片机最小系统相对简单,除了主控芯片和电源供电外,只需要在外围搭建一个晶振、和两个起振电容即可,该系统中的晶振由单片机可支持的最大频率有关,一般在12MHZ左右,起振电容在15P到30P之间。系统的供电在5V左右,而系统的起振只需大于3V即可,系统中通常会加入一个复位按键,该按键的作用在于当系统运行着繁琐的程序中,若该程序驱动的外围器件初始化是一个相对较久的传感器,而程序运行过程出现BUG如法继续运行的情况下,手动按下复位按钮即可完成系统的重启,无需断电。如下图所示为该单片机最小系统。

原理图

img

PCB

img

img

程序

img

main函数

#include<reg52.h>	   //头文件
#include<LCD1602.h>
#include<ESP8266.h>
#include<EEPROM.h>
/*****************灯、蜂鸣器、按键引脚定义*******************/
sbit red1    = P2^0;  
sbit red2    = P2^1;  
sbit red3    = P2^2; 
sbit red4    = P2^3;  
sbit red5    = P2^4;  

sbit moto1	= P3^4;	 //
sbit moto2	= P3^5;	 //
sbit moto3	= P3^6;	 //
sbit moto4	= P3^7;	 //
/************************变量定义***********************/
uchar temp_f=0,diqu_f=0,diqu_f2=0; 		  	
uchar T0_num=100;		//计数变量

/********************************************************
函数名称:void delayms(uint ms)
函数作用:毫毛延时函数
参数说明:ms为延时的毫秒数
********************************************************/
void delayms(uint ms)
{
	unsigned char i=100,j;
	for(;ms;ms--)
	{
		while(--i)
		{
			j=10;
			while(--j);
		}
	}
}
void delay (unsigned int a)	   //这是一个延时函数
{
	 unsigned char i;
	 while( --a != 0)
	 {
	 	for(i = 0; i < 8; i++);
	 }         
}
/********************************************************
函数名称:void display()
函数作用:正常显示
参数说明:
********************************************************/
void display()
{	
	if(ESP8266_f==1)//接收到WIFI控制指令
	{
		if(Hand("+IPD,0,1:A"))	  
		{
			temp_f=1;
		}
			else
				if(Hand("+IPD,0,1:B"))	  
				{
					temp_f=2;		diqu_f=0;	
				}
					else
						if(Hand("+IPD,0,1:C"))	  
						{
							temp_f=3;
						}
							else
								if(Hand("+IPD,0,1:D"))	 
								{
									temp_f=4;
								}										
		clearBuff();	      //清除缓存
	}	
	if(temp_f==0)
	{
			moto1=0;moto2=0;moto3=0;moto4=0;
		  lcd1602_write_character(0,2," Waiting status ");
	}	
	else
	{
		if(temp_f==1)
		{
				 lcd1602_write_character(0,2," Location one   ");
				 if(red4==1&&red5==1)//第一个地点识别到
				 {
							temp_f=0;	
							lcd1602_write_character(0,1,"  one finish    ");
				 }
				else
				{
					lcd1602_write_character(0,1,"  one working   ");
					if((red1==1&&red2==1&&red3==1)||(red1==0&&red2==0&&red3==0))//三个都检测到黑线或者白线停止
					{
						 moto1=0;moto2=0;moto3=0;moto4=0;
					}
					if((red1==1&&red2==0&&red3==0)||(red1==1&&red2==1&&red3==0))//右边检测到  
					{
							moto1=0;moto2=1;moto3=1;moto4=0;delay(50); moto3=0;delay(100-50);  
								
					}
					if((red1==0&&red2==0&&red3==1)||(red1==0&&red2==1&&red3==1))//左边检测到  
					{
						
						 moto1=1;moto2=0;moto3=0;moto4=1;delay(50); moto1=0;delay(100-50); 	
					}
					if((red1==0&&red2==1&&red3==0))//中间
					{
						moto1=0;moto3=0;
					  moto2=moto4=1;                 
					  delay(50);                 
					  moto2=moto4=0;                 
					  delay(100-50); 
					}
				}	
		}

		if(temp_f==2)
		{
			   lcd1602_write_character(0,2," Location two   ");
			    if(diqu_f<2)
					{
							lcd1602_write_character(0,1,"  two working   ");
							if((red1==1&&red2==1&&red3==1)||(red1==0&&red2==0&&red3==0))//三个都检测到黑线或者白线停止
							{
								 moto1=0;moto2=0;moto3=0;moto4=0;
							}
							if((red1==1&&red2==0&&red3==0)||(red1==1&&red2==1&&red3==0))//右边检测到  
							{
									moto1=0;moto2=1;moto3=1;moto4=0;delay(50); moto3=0;delay(100-50);  									
							}
							if((red1==0&&red2==0&&red3==1)||(red1==0&&red2==1&&red3==1))//左边检测到  
							{							
								 moto1=1;moto2=0;moto3=0;moto4=1;delay(50); moto1=0;delay(100-50); 		
							}
							if((red1==0&&red2==1&&red3==0))//中间
							{
								moto1=0;moto3=0;
								moto2=moto4=1;                 
								delay(50);                 
								moto2=moto4=0;                 
								delay(100-50); 
							}
							if(red4==0&&red5==0)	diqu_f2=0;
							if(red4==1&&red5==1&&diqu_f2==0)
							{
									diqu_f++;
							  	diqu_f2=1;
								  lcd1602_write_character(0,1,"  two working 1 ");
							}
					}
					else
					{
							temp_f=0;
							diqu_f=0;diqu_f2=0;
					    lcd1602_write_character(0,1,"  two finish    ");
					}		
		}

		if(temp_f==3)
		{
			   lcd1602_write_character(0,2," Location three ");
			    if(diqu_f<3)
					{
							lcd1602_write_character(0,1,"  three working ");
							if((red1==1&&red2==1&&red3==1)||(red1==0&&red2==0&&red3==0))//三个都检测到黑线或者白线停止
							{
								 moto1=0;moto2=0;moto3=0;moto4=0;
							}
							if((red1==1&&red2==0&&red3==0)||(red1==1&&red2==1&&red3==0))//右边检测到  
							{
									moto1=0;moto2=1;moto3=1;moto4=0;delay(50); moto3=0;delay(100-50);  									
							}
							if((red1==0&&red2==0&&red3==1)||(red1==0&&red2==1&&red3==1))//左边检测到  
							{							
								 moto1=1;moto2=0;moto3=0;moto4=1;delay(50); moto1=0;delay(100-50); 		
							}
							if((red1==0&&red2==1&&red3==0))//中间
							{
								moto1=0;moto3=0;
								moto2=moto4=1;                 
								delay(50);                 
								moto2=moto4=0;                 
								delay(100-50); 
							}
							if(red4==0&&red5==0)	diqu_f2=0;
							if(red4==1&&red5==1&&diqu_f2==0)
							{
									diqu_f++;
							  	diqu_f2=1;
							}
					}
					else
					{
							temp_f=0;
							diqu_f=0;diqu_f2=0;
					    lcd1602_write_character(0,1,"  three finish  ");
					}		
		}	
	
		if(temp_f==4)
		{							
							if((red1==1&&red2==1&&red3==1)||(red1==0&&red2==0&&red3==0))//三个都检测到黑线或者白线停止
							{
								 moto1=0;moto2=0;moto3=0;moto4=0;
							}
							if((red1==1&&red2==0&&red3==0)||(red1==1&&red2==1&&red3==0))//右边检测到  
							{
									moto1=0;moto2=1;moto3=1;moto4=0;delay(50); moto3=0;delay(100-50);  									
							}
							if((red1==0&&red2==0&&red3==1)||(red1==0&&red2==1&&red3==1))//左边检测到  
							{							
								 moto1=1;moto2=0;moto3=0;moto4=1;delay(50); moto1=0;delay(100-50); 		
							}
							if((red1==0&&red2==1&&red3==0))//中间
							{
								moto1=0;moto3=0;
								moto2=moto4=1;                 
								delay(50);                 
								moto2=moto4=0;                 
								delay(100-50); 
							}	
		}			
	}	

}	
/********************************************************
函数名称:void main()
函数作用:主函数
参数说明:
********************************************************/
void main()
{	
	LCD_init();				    //LCD1602初始化
	lcd1602_write_pic(0x00,pic);//将自定义字符“°”写入到LCD1602中
	ESP8266_uart();//ESP8266配置参数
	ESP8266_init();			    //ESP8266初始化
	while(1)			        //死循环
	{	
		display();	        //显示当状态
	}
}

设计说明书

img

设计背景

机器人赋予人的概念是替代人工做一些高效率或者难以完成的事,随着物联网时代的发展,目前市场上出现的相关机器人越来越多,比如送餐机器人,洗碗机器人,无人机监控交通机器人等,不管是否具有人的外观形态,能帮助人工完成繁琐而复杂的工作,具有人的替代性,就统称机器人。

但随着目前互联网的发达,各种电商平台的崛起,物流行业也跟着兴旺起来,不管是从小公司还是知名上市大公司,物流分炼的分配大部分都是依靠人工,不仅效率慢而且还会随着外部因素的增加导致分炼错误的事件发生,因为物流的人工运输成本较高,工作质量也随着不同物流公司的管理制度出现不同的服务。尤其是购物节期间,物流物件的增多给人工的工作量带来了很大的压力,尤其是在总部公司的物件地方分炼,要保证精准高效率的分炼配送是相当的有难度,若有一款智能分配物件派送地址并且制定的送货区卸货拉货,岂不是方便快捷高效率很大,于是快递机器人的想法就表现的非常具有意义性,本文的设计理念就是基于该现象提出的做法,相信在今后的市场肯定有广阔应用场景和一席之地。

主要完成的工作

要整体的实现快递机器人的实验,不仅仅要从理论的分析,还需要实际的设计,包括软件和硬件的设计,将三者结合才能实现本次装置设计的需求,所需要的研究内容如下:

1、对快递机器人的工作原理、结构概念进行深入的研究和设计,提出多种可实行的方案,包括单片机以及相关传感器的选型,分析这几个选型方案的优缺点,选出最佳的设计方案。

2、对选定的传感器和单片机进行理论上的资源分析,包括该器件的控制方式、资源利用以及精度换算等,为后期的硬件设计和软件编写做铺垫。

3、采用相关的原理图绘制工具,对整体电路进行线路绘制,并导入PCB布线布局,再利用外围器件将绘制的原理图进行焊接实物利。

4、对硬件结构焊接完成后,勾勒整体的程序流程图,再采用相关的程序编写软件对主程序、各个子程序进行程序的编写和调试。

设计文件

###开发资料下载

img

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐