智能機器人報告
智能機器人創(chuàng)新實踐報告循跡小車學 院 自動化科學與工程學院 學生姓名 陳志亮 學生學號 201130610255 指導教師 陳安 提交日期 年 月 日 1 / 18前言本文主要介紹了一種簡單的尋線小車的制作方法,下文將介紹設(shè)計過程中的各個細節(jié),遇到的問題,設(shè)計步驟,硬件組成,軟件設(shè)計原理??紤]到時間和硬件精度問題,我們這組的尋線小車的各個組成部分均在網(wǎng)上購買而來。主要包括了2輪驅(qū)動的智能小車底盤,直流電機驅(qū)動模塊,四路紅外對管尋線模塊,51單片機最小系統(tǒng)板。尋線小車是以智能小車底盤為基礎(chǔ),各部分的元器件通過螺絲固定在底盤上,形成一個小車的基本硬件模型。本組的智能小車采用4路紅外對管尋線模塊進行判斷是否轉(zhuǎn)彎,例如:當最左邊的紅外對管檢測到黑線的時候,小車進行“轉(zhuǎn)直角”,即左邊的輪子后退,右邊的輪子前進。從而修正小車的前進方向。小車主要由四部分組成,分別是單片機芯片部分,傳感器部分,電機驅(qū)動部分和電源部分。四部分協(xié)調(diào)工作,實現(xiàn)小車的前進,轉(zhuǎn)彎的動作。下面正文部分將介紹小車的各個元器件的功能,組成,驅(qū)動原理和控制系統(tǒng)設(shè)計等必要的敘述,詳細說明本組設(shè)計的思想。一、 硬件部分我負責的是硬件部分,以下是硬件部分的相關(guān)說明,包括硬件總體結(jié)構(gòu),各部分器件的構(gòu)造,原理,作用以及安裝搭建硬件時遇到的一些問題以及對應解決方法。1、 系統(tǒng)總框圖:電機電機驅(qū)動90C51紅外對管檢測模塊電源驅(qū)動本組的智能小車主要包括了四個模塊:分別是STC 90C516RD+主控模塊,四路紅外對管檢測模塊,電源模塊和電機驅(qū)動模塊。STC 90C516RD+主控模塊是智能小車的控制部分,相當于人的大腦。它接收四路紅外對管檢測模塊發(fā)出的信號,分析信號從而判斷小車將要采取的下一步動作,再輸出控制信號給電機驅(qū)動模塊,進而控制電機的運轉(zhuǎn),從而控制小車的前進方向。四路紅外對管檢測模塊是檢測和傳感模塊,相當于小車的眼睛,在小車前進的過程中,紅外對管感應路面的光線,將光線信號轉(zhuǎn)換為對應電信號傳送給主控模塊進行判斷,輔助主控模塊對電機驅(qū)動模塊進行控制,從而控制電機的運轉(zhuǎn)。電機驅(qū)動模塊,接受單片機發(fā)出的信號并作出相應動作,相當于整個控制系統(tǒng)的“肌肉”,實際上因為單片機輸出的信號太小,控制信號必須經(jīng)過驅(qū)動模塊放大,然后再驅(qū)動電機。電源模塊,在電源方面我們是直接采用USB接口供電,以達到不需頻繁更換電池的目的。2、 各部分元件說明:1) STC 90C516RD+主控模塊 STC 90C516RD+主控模塊是智能小車的控制部分,相當于人的大腦。它接收四路紅外對管檢測模塊發(fā)出的信號,分析信號從而判斷小車將要采取的下一步動作,再輸出控制信號給電機驅(qū)動模塊,進而控制電機的運轉(zhuǎn),從而控制小車的前進方向。2) 四路紅外對管檢測模塊四路紅外對管檢測模塊是檢測和傳感模塊,相當于小車的眼睛,在小車前進的過程中,紅外對管感應路面的光線,將光線信號轉(zhuǎn)換為對應電信號傳送給主控模塊進行判斷,輔助主控模塊對電機驅(qū)動模塊進行控制,從而控制電機的運轉(zhuǎn)。中控板:簡介:此模塊是為智能小車、機器人等自動化機械裝置提供一種多用途的紅外線探測系統(tǒng)的解決方案。使用紅外線發(fā)射和接收管等分立元件組成探頭,并使用LM339電壓比較器作為核心器件構(gòu)成中控電路。此系統(tǒng)具有的多種探測功能能極大的滿足各種自動化、智能化的小型系統(tǒng)的應用。3) 電機驅(qū)動模塊電機驅(qū)動模塊,接受單片機發(fā)出的信號并作出相應動作,相當于整個控制系統(tǒng)的“肌肉”,實際上因為單片機輸出的信號太小,控制信號必須經(jīng)過驅(qū)動模塊放大,然后再驅(qū)動電機。L9110特點: 低靜態(tài)工作電流; 寬電源電壓范圍:2.5V-12V; 每通道具有 800mA 連續(xù)電流輸出能力; 較低的飽和壓降; TTL/CMOS 輸出電平兼容,可直接連CPU; 輸出內(nèi)置鉗位二極管,適用于感性負載; 控制和驅(qū)動集成于單片 IC 之中; 具備管腳高壓保護功能; 工作溫度:0-80。輸入輸出的邏輯關(guān)系:典型應用電路:4) 電源模塊:本組電源模塊采用移動電源USB接口進行供電,避免了采用電池組供電的電壓不足,電源輸出電壓不穩(wěn)定,結(jié)構(gòu)臃腫,頻繁更換電池等問題,從而簡化了系統(tǒng),提高了工作效率。5) 底板底板是所有部件的載體,其規(guī)格如下:總體結(jié)構(gòu)圖:3、 硬件安裝搭建時遇到的困難及解決方法:1) 各部分硬件元件的安裝布局問題:由于底板的容量有限,在安裝各部分硬件元件時應當先對布局作出整體的構(gòu)思,然后再動手安裝。剛開始時由于構(gòu)思不成熟和經(jīng)驗不足導致了布局紊亂以及安裝不穩(wěn)等問題,后來經(jīng)過反復討論及多次嘗試安裝才理清思路,安裝完成。我們花時間認真讀懂了說明書,了解各個元器件的作用,又從網(wǎng)上收集了一些資料,經(jīng)過各個組員的討論,最終成功搭建了硬件的安裝結(jié)構(gòu)。2) 四路紅外對管檢測模塊與中控板LM339的連接問題;首先是對四個紅外對管檢測模塊與中控板的四組接口的測試,開始時是采用隨機配對方式,結(jié)果發(fā)現(xiàn)這樣做不容易理清思路,會使后面的編程陷入紊亂;后來經(jīng)過硬件與軟件的結(jié)合以及系統(tǒng)的簡化,將四個紅外對管檢測模塊按順序一一接到中控板的四組接口。3) STC 90C516RD+主控模塊與電機驅(qū)動單元的連接問題;開始時采用主控板的P1接口,發(fā)現(xiàn)電機不能按預定的規(guī)則進行運轉(zhuǎn),后來經(jīng)過查閱相關(guān)資料以及詢問,討論,發(fā)現(xiàn)P1口無對應上拉電阻,不能輸出高電平控制電機驅(qū)動單元;于是改用P0接口,有效地避免了前述問題。二、軟件設(shè)計部分(1) 流程圖開始初始化N2、3燈檢測到黑線1、4燈檢測到黑線Y有檢測到黑線嗎直走N小左轉(zhuǎn)小右轉(zhuǎn)2燈檢測到黑線N大右轉(zhuǎn)大左轉(zhuǎn)Y1燈檢測到黑線Y(二)軟件程序#include<reg52.h>#include<stdio.h>#define uint unsigned intsbit l1= P20; /四路尋跡模塊接口第一路sbit l2= P21; /四路尋跡模塊接口第二路sbit r1= P22; /四路尋跡模塊接口第三路sbit r2= P23; /四路尋跡模塊接口第四路sbit IN12=P05;/左馬達sbit IN11=P04;sbit IN22=P03;/右馬達sbit IN21=P02;int f1,f2; /標志位int m;#define Left_moto_go IN11=1,IN12=0; /左輪前進#define Left_moto_back IN11=0,IN12=1;/ 左輪后退#define Left_moto_stp IN11=0,IN12=0;/左輪停止 #define Right_moto_go IN21=1,IN22=0;/右輪前進#define Right_moto_back IN21=0,IN22=1;/右輪后退#define Right_moto_stp IN21=0,IN22=0;/右輪停止void delay(uint k) /延時函數(shù) uint x,y; for(x=0;x<k;x+) for(y=0;y<110;y+);void run() /前進函數(shù) Left_moto_go; Right_moto_go; delay(30); Left_moto_stp; Right_moto_stp; delay(10); /調(diào)節(jié)轉(zhuǎn)速void back(void) /后退函數(shù) Left_moto_back; Right_moto_back; delay(20); /調(diào)節(jié)轉(zhuǎn)速 Left_moto_stp; Right_moto_stp; delay(100); /調(diào)節(jié)轉(zhuǎn)速void left() /左電機不動,右電機前進 Left_moto_stp; Right_moto_go; delay(10); Left_moto_stp; Right_moto_stp; delay(40); void right() /左電機前進,右電機不動 Left_moto_go; Right_moto_stp; delay(10); Left_moto_stp; Right_moto_stp; delay(40); void stop() Left_moto_stp; Right_moto_stp; delay(10); Left_moto_go; Right_moto_go; delay(0);void bigright() /左電機前進,右電機后退 Left_moto_go; Right_moto_back; delay(10); Left_moto_stp; Right_moto_stp; delay(20);void bigleft() /左電機后退,右電機前進 Left_moto_back; Right_moto_go; delay(10); Left_moto_stp; Right_moto_stp; delay(20);void main() IN11=0; IN12=0; IN21=0; IN22=0; f1=0; f2=0; while(1) if(f1=0&&f2=0) if(l1=0&&l2=0&&r1=0&r2=0) m=0; if(l2) m=1; f1=0; f2=0; if(r1) m=2; f1=0; f2=0; if(l1|f1=1) m=3; f1=1; if(r2|f2=1) m=4; f2=1; switch(m) case 0: run(); break; case 1: left(); break; case 2: right(); break; case 3: bigleft(); break; case 4: bigright(); break; default : break; (三)程序說明1. 直走實現(xiàn):左右輪子同時前進,在實際調(diào)試過程中發(fā)現(xiàn),當沒有調(diào)速的時候,車速過快,導致轉(zhuǎn)彎的時候效果不理想,所以在寫程序的時候特意加上了調(diào)速部分,主要通過調(diào)節(jié)占空比實現(xiàn),具體實現(xiàn)如下:void run() /前進函數(shù) Left_moto_go; Right_moto_go; delay(30); /調(diào)節(jié)轉(zhuǎn)速 Left_moto_stp; Right_moto_stp; delay(10); /調(diào)節(jié)轉(zhuǎn)速 經(jīng)過多次的調(diào)試,我們得到了本組小車最好的占空比為3:1,既保持了速度上有一定的優(yōu)勢,也保證了轉(zhuǎn)彎的時候能夠順利完成。上面程序的占空比為3:1,通過調(diào)節(jié)占空比可以調(diào)節(jié)轉(zhuǎn)速。2. 左轉(zhuǎn)實現(xiàn):通過使左輪停止,右輪前進的方法,可以實現(xiàn)左轉(zhuǎn)的功能,同時也要注意占空比的選擇,個人認為占空比比前進函數(shù)中的占空比小為好。因為如果占空比太大的話,很容易就超出軌道的范圍,具體實現(xiàn)如下:void left() /左電機不動,右電機前進 Left_moto_stp; Right_moto_go; delay(10); Left_moto_stp; Right_moto_stp; delay(40); 現(xiàn)在左轉(zhuǎn)的右輪轉(zhuǎn)速占空比為1:4,比前進時的輪子轉(zhuǎn)速占空比大為降低,但是在實際調(diào)試的時候車子在轉(zhuǎn)彎的時候總有一點點的小停頓,這是不完美的地方之一。3. 右轉(zhuǎn)實現(xiàn):通過使左輪前進,右輪停止的方法,可以實現(xiàn)右轉(zhuǎn)的功能,其他同左轉(zhuǎn)。4. 左轉(zhuǎn)直角實現(xiàn):其實左轉(zhuǎn)直角的實現(xiàn)也可以直接用左轉(zhuǎn)的程序,但是考慮到節(jié)省時間,我們可以這樣來做:左輪后退,右輪前進,這樣的轉(zhuǎn)彎速度更快,具體實現(xiàn)如下:void bigleft() /左電機后退,右電機前進 Left_moto_back; Right_moto_go; delay(10); Left_moto_stp; Right_moto_stp; delay(20);5. 右轉(zhuǎn)直角實現(xiàn):跟左轉(zhuǎn)直角類似,左輪前進,右輪后退。6. 具體工作過程:開機的時候,四路紅外對管檢測模塊全部檢測到白板,所以小車前進。理想的情況是小車前進的時候一直走直線,但是由于車輪形狀不完全一樣等等原因,小車前進時方向跟前進方向有一定的偏離。當2燈檢測到黑線的時候,返回高電平給單片機,單片機給電機驅(qū)動模塊發(fā)出指令,實現(xiàn)左轉(zhuǎn),當左轉(zhuǎn)到一定的角度時,四路紅外對管有檢測到都是白板,繼續(xù)前進。當3燈檢測到黑線的時候,返回高電平給單片機,單片機給電機驅(qū)動模塊發(fā)出指令,實現(xiàn)右轉(zhuǎn),當右轉(zhuǎn)到一定的角度時,四路紅外對管有檢測到都是白板,繼續(xù)前進。當1燈檢測到黑線的時候,說明線路(只針對特定線路)上左方有直角,單片機判斷要進行左轉(zhuǎn)直角的動作,從而發(fā)命令給驅(qū)動模塊,實現(xiàn)左轉(zhuǎn)直角,一直到3燈檢測到黑線說明已經(jīng)成功轉(zhuǎn)了90度,則再次執(zhí)行右轉(zhuǎn)動作。當4燈檢測到黑線的時候,說明前進方向的右邊有直角出現(xiàn),所以單片機判斷要進行右轉(zhuǎn),從而控制驅(qū)動模塊實現(xiàn)右轉(zhuǎn)直角,一直到2燈檢測到黑線,說明右轉(zhuǎn)直角成功,再次執(zhí)行左轉(zhuǎn)動作。在此處鍵入