《智能循跡小車設(shè)計(jì).docx》由會(huì)員分享,可在線閱讀,更多相關(guān)《智能循跡小車設(shè)計(jì).docx(9頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、智能循跡/避障小車研究工作報(bào)告一、 智能循跡小車程序結(jié)構(gòu)框圖二、 Proteus仿真圖三、 軟件程序設(shè)計(jì) 一、 智能循跡小車程序結(jié)構(gòu)框圖經(jīng)過幾天在網(wǎng)上的查找,對(duì)智能循跡/避障小車有了大致的了解,一般有三個(gè)模塊:1、最基本的小車驅(qū)動(dòng)模塊,使用兩個(gè)二相四線步進(jìn)電機(jī)對(duì)小車的兩個(gè)后輪分別進(jìn)行驅(qū)動(dòng),前輪最好用萬向輪,能使小車更好地轉(zhuǎn)彎; 2、小車循跡模塊,在小車底部有三個(gè)并排安裝的紅外對(duì)管,對(duì)黑色與白色的反射信號(hào)不同,經(jīng)單片機(jī)處理后對(duì)小車進(jìn)行相應(yīng)處理;3、避障模塊,我寫的程序中對(duì)于避障模塊是用中斷來處理的(即安裝在小車車頭的紅外對(duì)管檢測(cè)到有障礙物后,就會(huì)向單片機(jī)的P3_2口輸出一個(gè)高電平或是低電平,這時(shí)
2、中斷程序?qū)?duì)小車進(jìn)行預(yù)先設(shè)定好的避障處理),但是在程序結(jié)構(gòu)框圖中,我不太會(huì)表示中斷處理方式,所以就用查詢的方式畫了。啟動(dòng)小車 開始 避障? N Y 避障模塊 循跡模塊 停止? N Y 停止 二、Proteus仿真圖我用Proteus大概地仿真了小車的運(yùn)行狀態(tài)。圖中的兩個(gè)二相四線步進(jìn)電機(jī)就代表小車的左右輪(假定步進(jìn)電機(jī)順時(shí)針轉(zhuǎn)動(dòng)方向?yàn)樾≤嚽斑M(jìn)方向),網(wǎng)上有很多種驅(qū)動(dòng)芯片,在仿真時(shí)我只使用L298N芯片來驅(qū)動(dòng)步進(jìn)電機(jī)。用三個(gè)單刀雙制開關(guān)模擬用于小車循跡的三個(gè)紅外對(duì)管的輸出信號(hào),經(jīng)一個(gè)與門與三極管開關(guān)連接到P3_3口,中斷程序?qū)1_0, P1_1, P1_2三個(gè)口進(jìn)行檢測(cè),并做出相應(yīng)處理。同時(shí)因?yàn)?/p>
3、避障模塊的優(yōu)先級(jí)高于循跡模塊,所以將外部中斷0用于避障,外部中斷1用于循跡。P1_3口則用于檢測(cè)小車是否到達(dá)終點(diǎn)。1、小車驅(qū)動(dòng)模塊:使用一片298芯片驅(qū)動(dòng)一個(gè)二相四線步進(jìn)電機(jī),電機(jī)的電壓為12V。2、小車循跡模塊:左邊為三個(gè)單刀雙制開關(guān)模擬小車循跡使用的紅外對(duì)管的輸出信號(hào),經(jīng)一個(gè)與門和三極管開關(guān)送至P3_3口,有P1_4口定時(shí)響應(yīng)中斷程序。又經(jīng)或門送至P1_3口(圖因找不到或門,所以用7411和7404代替),檢測(cè)小車是否到達(dá)終點(diǎn).3、避障模塊: (用一個(gè)開關(guān)代替車頭紅外對(duì)管的輸出信號(hào))4、仿真結(jié)果:根據(jù)兩個(gè)步進(jìn)電機(jī)的轉(zhuǎn)動(dòng)情況,小車可以按照預(yù)先設(shè)計(jì)好的程序進(jìn)行循跡(轉(zhuǎn)彎,直走),避障處理,最后
4、停止前進(jìn)。三、軟件程序設(shè)計(jì)#include#define uchar unsigned charsbit P1_2=P12; /P1口的低三位作為小車循跡的三個(gè)紅外對(duì)管與單片機(jī)的信號(hào)接口sbit P1_0=P10;sbit P1_1=P11;sbit P1_3=P13; /三個(gè)循跡的紅外對(duì)管輸出口經(jīng)或門后的結(jié)果與P1_3接,用于實(shí)時(shí)檢測(cè)sbit P1_7=P17; /控制兩個(gè)二相四線步進(jìn)電機(jī)的啟動(dòng)與停止sbit P1_6=P16;sbit P1_4=P14; /為循跡中斷所用的定時(shí)/計(jì)數(shù)器0輸出口uchar i,j,ms;uchar dianji=0x11,0x22,0x44,0x88; /電
5、機(jī)的轉(zhuǎn)動(dòng)使小車前進(jìn)uchar back=0x88,0x44,0x22,0x11; /電機(jī)的轉(zhuǎn)動(dòng)使小車后退void delay(int z) /延時(shí)程序 int x,y; for(x=0;xz;x+) for(y=0;y500;y+);void goahead() /小車前進(jìn)程序,一個(gè)循環(huán)使小車的車輪轉(zhuǎn)動(dòng)一周 P1_6=1; P1_7=1; for(i=0;i4;i+) P2=dianjii; delay(50); void turnleft() /小車左轉(zhuǎn)程序,小車采用兩個(gè)步進(jìn)電機(jī)驅(qū)動(dòng),分別控制小車左右 兩個(gè)車輪的轉(zhuǎn)動(dòng)。小車左轉(zhuǎn)時(shí),左邊的電機(jī)停止轉(zhuǎn)動(dòng),右邊的電機(jī) P1_6=0; 仍然轉(zhuǎn)動(dòng),即實(shí)
6、現(xiàn)小車的左轉(zhuǎn)動(dòng)作;反之則是小車的右轉(zhuǎn)動(dòng)作 P1_7=1; for(i=0;i4;i+) P2=dianjii; delay(50); void turnright() /小車右轉(zhuǎn)程序 P1_6=1; P1_7=0; for(i=0;i4;i+) P2=dianjii; delay(50); void qianjin() /小車前進(jìn)程序,此程序是為小車遇到障礙時(shí)進(jìn)行躲避處理時(shí)小車前 進(jìn)程序,一個(gè)循環(huán)小車的車輪轉(zhuǎn)動(dòng)三周 P1_6=1; P1_7=1; for(j=0;j3;j+) for(i=0;i4;i+) P2=dianjii; delay(50); void goback() /小車后退程序,此程序也是小車避障環(huán)節(jié)中的為小車后退的程序, 一個(gè)循環(huán),小車的車輪向后轉(zhuǎn)動(dòng)三周 P1_6=1; P1_7=1; for(j=0;j3;j+) for(i=0;i=2) P1_4=!P1_4; ms=0;