程序編譯器:keil4 / 5
編程語言:C語言
設(shè)計編號:C0056
功能介紹
小車通過三個紅外探頭進行線路識別,兩個紅外傳感器識別停止的地點,手機連接WIFI后通過APP傳輸相關(guān)的送貨信息,小車行駛到相關(guān)對應(yīng)的送貨地點就停止卸貨。
1、裝置上具有紅外線感應(yīng)尋跡的功能,在指定軌道布線之內(nèi),小車能遵循路線的范圍行走,不跑偏、不失控,若未在指定的軌道上不做出任何反應(yīng)原地待命。
2、派送的地址通過手機APP進行信息傳輸,即具有APP地點配送功能,在APP設(shè)置配送的地點,小車走到相應(yīng)的地點后進行停止卸貨,若不小心走到的地點為非配送地點,則繼續(xù)行走到軌道外,等待人工重新操作。
3、機器人的電池供電具有方便的替換性,當供電電池沒電時,工作人員只需將備用電池進行更換即可,省去充電的麻煩。
以下為本設(shè)計資料展示圖:
? 51單片機最小系統(tǒng)相對簡單,除了主控芯片和電源供電外,只需要在外圍搭建一個晶振、和兩個起振電容即可,該系統(tǒng)中的晶振由單片機可支持的最大頻率有關(guān),一般在12MHZ左右,起振電容在15P到30P之間。系統(tǒng)的供電在5V左右,而系統(tǒng)的起振只需大于3V即可,系統(tǒng)中通常會加入一個復(fù)位按鍵,該按鍵的作用在于當系統(tǒng)運行著繁瑣的程序中,若該程序驅(qū)動的外圍器件初始化是一個相對較久的傳感器,而程序運行過程出現(xiàn)BUG如法繼續(xù)運行的情況下,手動按下復(fù)位按鈕即可完成系統(tǒng)的重啟,無需斷電。如下圖所示為該單片機最小系統(tǒng)。
原理圖
PCB
程序
main函數(shù)
#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; //計數(shù)變量
/********************************************************
函數(shù)名稱:void delayms(uint ms)
函數(shù)作用:毫毛延時函數(shù)
參數(shù)說明:ms為延時的毫秒數(shù)
********************************************************/
void delayms(uint ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
void delay (unsigned int a) //這是一個延時函數(shù)
{
unsigned char i;
while( --a != 0)
{
for(i = 0; i < 8; i++);
}
}
/********************************************************
函數(shù)名稱:void display()
函數(shù)作用:正常顯示
參數(shù)說明:
********************************************************/
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);
}
}
}
}
/********************************************************
函數(shù)名稱:void main()
函數(shù)作用:主函數(shù)
參數(shù)說明:
********************************************************/
void main()
{
LCD_init(); //LCD1602初始化
lcd1602_write_pic(0x00,pic);//將自定義字符“°”寫入到LCD1602中
ESP8266_uart();//ESP8266配置參數(shù)
ESP8266_init(); //ESP8266初始化
while(1) //死循環(huán)
{
display(); //顯示當狀態(tài)
}
}
設(shè)計說明書
設(shè)計背景
機器人賦予人的概念是替代人工做一些高效率或者難以完成的事,隨著物聯(lián)網(wǎng)時代的發(fā)展,目前市場上出現(xiàn)的相關(guān)機器人越來越多,比如送餐機器人,洗碗機器人,無人機監(jiān)控交通機器人等,不管是否具有人的外觀形態(tài),能幫助人工完成繁瑣而復(fù)雜的工作,具有人的替代性,就統(tǒng)稱機器人。
但隨著目前互聯(lián)網(wǎng)的發(fā)達,各種電商平臺的崛起,物流行業(yè)也跟著興旺起來,不管是從小公司還是知名上市大公司,物流分煉的分配大部分都是依靠人工,不僅效率慢而且還會隨著外部因素的增加導(dǎo)致分煉錯誤的事件發(fā)生,因為物流的人工運輸成本較高,工作質(zhì)量也隨著不同物流公司的管理制度出現(xiàn)不同的服務(wù)。尤其是購物節(jié)期間,物流物件的增多給人工的工作量帶來了很大的壓力,尤其是在總部公司的物件地方分煉,要保證精準高效率的分煉配送是相當?shù)挠须y度,若有一款智能分配物件派送地址并且制定的送貨區(qū)卸貨拉貨,豈不是方便快捷高效率很大,于是快遞機器人的想法就表現(xiàn)的非常具有意義性,本文的設(shè)計理念就是基于該現(xiàn)象提出的做法,相信在今后的市場肯定有廣闊應(yīng)用場景和一席之地。
主要完成的工作
要整體的實現(xiàn)快遞機器人的實驗,不僅僅要從理論的分析,還需要實際的設(shè)計,包括軟件和硬件的設(shè)計,將三者結(jié)合才能實現(xiàn)本次裝置設(shè)計的需求,所需要的研究內(nèi)容如下:
1、對快遞機器人的工作原理、結(jié)構(gòu)概念進行深入的研究和設(shè)計,提出多種可實行的方案,包括單片機以及相關(guān)傳感器的選型,分析這幾個選型方案的優(yōu)缺點,選出最佳的設(shè)計方案。
2、對選定的傳感器和單片機進行理論上的資源分析,包括該器件的控制方式、資源利用以及精度換算等,為后期的硬件設(shè)計和軟件編寫做鋪墊。
3、采用相關(guān)的原理圖繪制工具,對整體電路進行線路繪制,并導(dǎo)入PCB布線布局,再利用外圍器件將繪制的原理圖進行焊接實物利。
4、對硬件結(jié)構(gòu)焊接完成后,勾勒整體的程序流程圖,再采用相關(guān)的程序編寫軟件對主程序、各個子程序進行程序的編寫和調(diào)試。
設(shè)計文件
開發(fā)資料下載