51单片机送餐机器人
- 51单片机送餐机器人快递机器人_ESP8266_APP_WIFI(原理图+PCB+源码)
- 功能介绍
- 原理图
- PCB
- 程序
- main函数
- 设计说明书
- 设计背景
- 主要完成的工作
- 设计文件
51单片机送餐机器人快递机器人_ESP8266_APP_WIFI(原理图+PCB+源码)
原理图PCB:Altium Designer
程序编译器:keil4 / 5
编程语言:C语言
设计编号:C0056
功能介绍
小车通过三个红外探头进行线路识别,两个红外传感器识别停止的地点,手机连接WIFI后通过APP传输相关的送货信息,小车行驶到相关对应的送货地点就停止卸货。
1、装置上具有红外线感应寻迹的功能,在指定轨道布线之内,小车能遵循路线的范围行走,不跑偏、不失控,若未在指定的轨道上不做出任何反应原地待命。
2、派送的地址通过手机APP进行信息传输,即具有APP地点配送功能,在APP设置配送的地点,小车走到相应的地点后进行停止卸货,若不小心走到的地点为非配送地点,则继续行走到轨道外,等待人工重新操作。
3、机器人的电池供电具有方便的替换性,当供电电池没电时,工作人员只需将备用电池进行更换即可,省去充电的麻烦。
以下为本设计资料展示图:
51单片机最小系统相对简单,除了主控芯片和电源供电外,只需要在外围搭建一个晶振、和两个起振电容即可,该系统中的晶振由单片机可支持的最大频率有关,一般在12MHZ左右,起振电容在15P到30P之间。系统的供电在5V左右,而系统的起振只需大于3V即可,系统中通常会加入一个复位按键,该按键的作用在于当系统运行着繁琐的程序中,若该程序驱动的外围器件初始化是一个相对较久的传感器,而程序运行过程出现BUG如法继续运行的情况下,手动按下复位按钮即可完成系统的重启,无需断电。如下图所示为该单片机最小系统。
原理图
PCB
程序
main函数
#include //头文件#include#include#include/*****************灯、蜂鸣器、按键引脚定义*******************/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;}elseif(Hand("+IPD,0,1:B")) {temp_f=2;diqu_f=0;}elseif(Hand("+IPD,0,1:C")) {temp_f=3;}elseif(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(); //显示当状态}}
设计说明书
设计背景
机器人赋予人的概念是替代人工做一些高效率或者难以完成的事,随着物联网时代的发展,目前市场上出现的相关机器人越来越多,比如送餐机器人,洗碗机器人,无人机监控交通机器人等,不管是否具有人的外观形态,能帮助人工完成繁琐而复杂的工作,具有人的替代性,就统称机器人。
但随着目前互联网的发达,各种电商平台的崛起,物流行业也跟着兴旺起来,不管是从小公司还是知名上市大公司,物流分炼的分配大部分都是依靠人工,不仅效率慢而且还会随着外部因素的增加导致分炼错误的事件发生,因为物流的人工运输成本较高,工作质量也随着不同物流公司的管理制度出现不同的服务。尤其是购物节期间,物流物件的增多给人工的工作量带来了很大的压力,尤其是在总部公司的物件地方分炼,要保证精准高效率的分炼配送是相当的有难度,若有一款智能分配物件派送地址并且制定的送货区卸货拉货,岂不是方便快捷高效率很大,于是快递机器人的想法就表现的非常具有意义性,本文的设计理念就是基于该现象提出的做法,相信在今后的市场肯定有广阔应用场景和一席之地。
主要完成的工作
要整体的实现快递机器人的实验,不仅仅要从理论的分析,还需要实际的设计,包括软件和硬件的设计,将三者结合才能实现本次装置设计的需求,所需要的研究内容如下:
1、对快递机器人的工作原理、结构概念进行深入的研究和设计,提出多种可实行的方案,包括单片机以及相关传感器的选型,分析这几个选型方案的优缺点,选出最佳的设计方案。
2、对选定的传感器和单片机进行理论上的资源分析,包括该器件的控制方式、资源利用以及精度换算等,为后期的硬件设计和软件编写做铺垫。
3、采用相关的原理图绘制工具,对整体电路进行线路绘制,并导入PCB布线布局,再利用外围器件将绘制的原理图进行焊接实物利。
4、对硬件结构焊接完成后,勾勒整体的程序流程图,再采用相关的程序编写软件对主程序、各个子程序进行程序的编写和调试。
设计文件
###开发资料下载