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