You are on page 1of 30

中 華 大 學

畢 業 專 題 報 告

多功能自走車之研究

The Study of Multi Function Automatic Vehicle

學 系 別:電機工程系

學號姓名:B10501004曾豪

指導教授:袁正績博士
中 華 民 國 一○八年 六月
摘要

以現在這個講究自動化的時代,高科技產業無不利用自動化設備來
降低人力與提高效率。本次專題所設計的自走車,是利用單晶片89S51
的可程式化控制能力來控制直流馬達與接收感測器所傳回的資訊,互相
配合而完成。
我會選擇用89S51來驅動我的程式不僅僅是因為在系上大三的課程中
學習其理論及實驗應用,更因為它的硬體架構及周邊設備完整、指令集
功能強大、程式可複寫功能等種種優勢,正符合我的需求,而利用程式
的模組化,副程式的應用,使程式組合起來,更容易閱讀及進行修改。
我之所以會稱我的自走車為多功能自走車是因為它不單只是根據我
要的需求而走,它還搭配了幾個周邊設備如:警示燈、觀測器等。
目錄
摘要.................................................................................................................................i
目錄................................................................................................................................ii
圖目錄..........................................................................................................................iii
第一章 緒論..................................................................................................................1
1.1 研究動機..............................................................................................................1
1.2 研究方法及製作步驟..........................................................................................1
第二章 系統整合與實作..............................................................................................2
2.1 開發環境..............................................................................................................2
2.1.1 Keil C51.........................................................................................................2
2.1.2 89S51.............................................................................................................3
2.2 系統元件..............................................................................................................4
2.2.1 HC-SR04超音波感測器................................................................................4
2.2.2 89S51.............................................................................................................5
2.2.3 藍芽通訊模組...............................................................................................6
2.2.4 馬達驅動模組...............................................................................................7
2.3 系統架構..............................................................................................................8
2.3.1 系統流程圖...................................................................................................8
2.3.2 APP流程圖....................................................................................................9
2.3.3 APP遙控模式..............................................................................................10
2.3.4 遙控模式之應用.........................................................................................11
2.3.5 APP自走模式..............................................................................................12
2.3.6 自走模式應用.............................................................................................13
第三章 自走車電路圖................................................................................................14
3.1 整體電路............................................................................................................14
第四章 製作過程及車體照片....................................................................................15
第五章 程式................................................................................................................16
第六章 結論與未來展望............................................................................................19
6.1 結論....................................................................................................................19
6.2 未來展望............................................................................................................19
附錄(程式)...................................................................................................................20
參考文獻......................................................................................................................24
全文完..........................................................................................................................24
圖目錄
圖 1 (KEIL UVISION4)............................................................................................................2

圖 2 (89S51單晶片)..............................................................................................................3

圖3 (自走車圖)......................................................................................................................4

圖4 (HC-SR04 超音波感測器).............................................................................................4

圖5 (HC-SR04 超音波感測器運作圖).................................................................................5

圖6 (藍牙模組 HC-06).........................................................................................................6

圖7 (馬達驅動模組L298N)...................................................................................................7

圖8 (系統架構程序流程圖)..................................................................................................8

圖9 (APP程序流程圖)...........................................................................................................9

圖10 (APP遙控介面圖).......................................................................................................10

圖11 (遙控程序圖)..............................................................................................................10

圖12 (機械手臂示意圖)......................................................................................................11

圖13 (攝影鏡頭示意圖)......................................................................................................11

圖14 (自走車程序圖)..........................................................................................................12

圖15 (掃地機器人)..............................................................................................................13

圖16 (山區示意圖)..............................................................................................................13

圖17 (吸壁機器人)..............................................................................................................13

圖18 (自走車全元件電路圖)..............................................................................................14

圖21 (自走車車體)..............................................................................................................15

圖19 (實體電路反面圖)......................................................................................................15

圖20 (實體電路正面圖)......................................................................................................15

圖22 (主程式流程圖)..........................................................................................................16

圖23 (中斷程式流程圖)......................................................................................................17

圖24 (RS232程式流程圖)...................................................................................................18
第一章 緒論

一.1 研究動機

現在是一個講求自動化的時代,機械和電子產品的廣泛運用於各個
層面,甚至於在我們的日常生活裡都用得到,使得我們行事更加方便,
生活品質大為提高。也因爲這樣,人們則更積極的發展能夠思考、具有
智慧的機器人,來替人們服務,相信未來機器人的普及是可見的。所以
經過大三修習的微算機與電機總整後,我便決定用89S51單晶片來控制步
進馬達和感測器,去製造一台感測型的小機器人,也就是大家熟知的自
走車。不單如此,我還打算再加入一些小功能如觀測器,跑馬燈等。雖
然只是一些微不足道的功能,但這也證明了自走車可以應每個階層的需
要而改變。

一.2 研究方法及製作步驟

1. 翻閱書籍查詢相關資料。
2. 規劃整體架構。
3. 程式撰寫。
4. 將程式燒到晶片中,並且在單晶片模擬板板上進行模擬及測試。
5. 規劃與設計硬體電路。
6. 利用麵包版製作簡易模擬電路。
7. 利用三用電表測試電路是否有誤。
8. 將電路元件銲接到麵包版上。
9. 在麵包版上進行測試,檢查銲接是否有誤。
10. 將軟體與硬體兩者進行組裝結合。

1
第二章 系統整合與實作

二.1 開發環境

二.1.1 Keil C51

圖 1 (Keil uVision4)

開發公司: Keil Software公司


穩定版本: uVision4
開發狀態: stable
程式語言: C語言
網站: https://www.keil.com/download/product
Keil C51是美國Keil Software公司(ARM公司之一)出品的51系列兼
容單片機C語言軟體開發系統。
與匯編相比,C語言在功能上、結構性、可讀性、可維護性上有明顯
的優勢,因而易學易用。Keil提供了包括C編譯器、宏匯編、連線器、庫
管理和一個功能強大的仿真調試器等在內的完整開發方案,通過一個集
成開發環境(uVision)將這些部分組合在一起。

2
二.1.2 89S51

圖 2 (89S51單晶片)

8051是一種8位元的單晶片微控制器,屬於MCS-51單晶片的一種,如
圖1.2所示8051單晶片,由英特爾公司於1981年製造。到現在,有更多的
IC 設計商,如ATMEL、飛利浦、華邦等公司,相繼開發了功能更多、更
強大的兼容產品。
8051單晶片是同步式的順序邏輯系統,整個系統的工作完全是依賴
系統內部的時脈信號,用以來產生各種動作周期及同步信號。在8051單
片機中已內建時鐘產生器,在使用時只需接上石英晶體諧振器(或其它
振蕩子)及電容,就可以讓系統產生正確的時鐘信號。
英特爾原來的8051系列的開發利用 NMOS 技術,但後來的版本中,
在其名稱加入字母C(例如,80C51),確定使用CMOS技術,這樣比NMOS
節省能源。這使它們更適合於電池供電設備。

二.2 系統元件

3
圖3 (自走車圖)

二.2.1 HC-SR04超音波感測器

圖 4 (HC-SR04 超音波感測器)

4
圖 5 (HC-SR04 超音波感測器運作圖)

超音波感測器是由超音波發射器、接收器和控制電路所組成。當它
被觸發的時候,會發射一連串40 k 的聲波並且從離它最近的物體接收
Hz
回音。超音波感測器總共有4個Pin腳(VCC, T Erig, G ,它可以
cho, ND)
探測的距離為 2cm-400cm,精度為0.3cm,感應角度為15度。

二.2.2 89S51

(1.)8位元CPU
(2.)4KB內部程式記憶體,最大可擴充至64KB。
(3.)128Bytes內部資料記憶體,最大可擴充至64KB。
(4.)具有邏輯代數運算功能(位元邏輯)。
(5.)4組可位元定址的I/O埠〈P0、P1、P2、P3〉。
(6.)2組16 位元計時/計數器〈T0、T1〉。
(7.)5個中斷源〈INT0、INT1、T0、T1、RXD、TXD〉。
(8.)1組全雙工串列埠〈UART〉。

5
二.2.3 藍芽通訊模組

圖6 (藍牙模組 HC-06)

H C - 0建
6 立 了 8 9 S 5與
1 手 機 的 通 訊 , 它 有 6 個 P i n腳 ( E N , R X D ,
TXD,VCC,GND,STATE),但通常只使用到其中4個(RXD,TXD,VCC,GND),最
主要運作的Pin腳是TXD和RXD,把接收的值傳給89S51(TXD), 或者是
89S51想傳送的值丟給藍牙模組 HC-06(RXD)。
另外藍牙透傳模塊只有4個AT指令,可以修改藍牙模組的設定,分別
是測試通訊、改名稱、改波特率、改配對密碼,AT指令必須從TXD和RXD
信號腳設置,不能通過藍牙信道設置。
STATE則代表藍牙連線的狀態,持續高電位,代表已連線;不停地輸
出高低脈衝,代表未連線。

二.2.4 馬達驅動模組

6
圖7 (馬達驅動模組L298N)

1. 無法利用正接或反接電池盒的方式,進行電流方向的改變,來控
制小車前進或後退。
2. 改採用H橋電路來控制電流方向。
A. L298N馬達驅動模組
B. 雙路H橋馬達驅動模組
C. 驅動電壓為7V-12V(+12V位置)的時候,可以引出5V電壓(+5V
位置)供外部使用。

二.3 系統架構

7
二.3.1 系統流程圖

前置準備 開啟

89S51 系統就緒
等待 Android APP
配對

藍牙
配對

自走 遙控
主要程序 模式選擇



自走模式 選 遙控模式

圖 8 (系統架構程序流程圖)

89S51開機和手機APP開啟後,會進行藍牙配對,藍牙配對成功後,
則可以開始選取模式,我們把模式分成2大類,自走模式和遙控模式,遙
控模式提供的功能是即時的遙控車子,自走模式提供的功能是對區域進
行探索,並且遇到障礙物會閃避。

8
二.3.2 APP流程圖

No
YES
APP 藍牙 YES 配對
啟動 就緒 成功

No
選取模式 選取模式
選取模式
自走模式

按鈕

前進 前進 前進 前進
圖 9 (APP 程序流程圖)

即時遙
在APP裡要先建立與藍牙的連線,沒有連線的話則會要求連線,接下

來根據選取的模式而會有不同的變化,選擇模式後會傳送訊號告知
89S51,介面上會有按鈕可以自動切換模式。

二.3.3 APP遙控模式

在遙控模式中,可在此介面設定你要的按鈕,依據你的需求設定不

9
同的按鍵,在此若設定切換模式按鈕,即可再按下瞬間切換模式。

APP 傳
送資料
89S51 接收資料
按鈕

圖 10 (APP 遙控介面圖)
左轉 右轉 後退 前進

輸出
動作
圖 11 (遙控程序圖)

APP會先與藍牙配對,配對成功後APP會透過藍牙傳送資料給89S51
會根據不同的訊號而有不同的行為。

二.3.4 遙控模式之應用

1. 惡劣環境之取物:
我們可以加裝機械手臂並且控制自走車前往惡劣環境下拿取物品,
例如讓自走車進入水溝,透過傳回的影像與機械手臂夾取物品。

10
APP 傳
送資料 89S51 接收資料

圖 12 (機械手臂示意圖)

2. 影像追蹤:
透過傳回的影像,對影像進行處理,找出特定特徵,並且循著這個
特徵去尋找,例如我們可以在暗處之中尋找光源。

圖 13 (攝影鏡頭示意圖)

二.3.5 APP自走模式

11
自動模式
按鈕

YES
右轉
遇到障礙物
NO

前進

圖 14 (自走車程序圖)

在APP中,可以選擇自走模式的切換鍵,89S51接收到訊息後車子自
動進入自走模式中,並且會依障礙物而有不同的行動,只要超音波在
10cm內偵測到障礙物,車子會先停止當前動作,再進行右轉的動作。

二.3.6 自走模式應用

1. 掃地機器人:
透過自走車去偵測需要清潔的範
圍,當偵測完畢後開始逐格搜索,整理
出哪邊是無法清潔之區域,匯出的地圖
可以當作輸入給掃地機器人,讓掃地機

12

圖 15 (掃地機器人)
器人能迅速判斷清潔的範圍。

2. 山區地面搜索:
山區的地面崎嶇且坡度起伏變
化大,但可以把區域當作是平面式
的,並且裝上坡度感測器與特殊輪
胎,就能對山區進行搜索,以縮短
登山客救援搜索的時間。

圖 16 (山區示意圖)

3. 吸壁機器人:
吸壁機器人可以應用在不同大
小的窗戶上面,對不同大小的窗戶
進行偵測,並且把結果存入內部儲
存空間,以便未來能快速取得地圖
並開始進行清潔。

圖 17 (吸壁機器人)

第三章 自走車電路圖

三.1 整體電路

13
圖18 (自走車全元件電路圖)

14
第四章 製作過程及車體照片

圖21 (自走車車體)

圖 19 (實體電路正面圖) 圖 20 (實體電路反面圖)

15
第五章 程式

圖 22 (主程式流程圖)

16 圖 23 (中斷程式流程圖)
圖 24 (RS232 程式流程圖)

第六章 結論與未來展望

六.1 結論

本專題涵蓋了89S51單晶片、感測器、馬達、藍牙等知識。從一開始
構思找資料、麵包板實驗到零件測試。其中遇到許多挫折與問題,例如
感測器的位置放那最適合,電力系統的選擇,還好經過多次的測試,找
出問題所在並解決使得此專題得以完成。在製作此自走車的過程中,我
發現自走車的週邊電路太多了,如直流馬達的驅動電路等皆可利用
89S51以軟體來完成。至於其他的功能如藍牙連接、超音波測距等其實都
沒遇到多大的問題。唯一的問題是當結合馬達和感測器的程式時遇到了
一些BUG的問題。不過經過慢慢的除錯之後就沒什麽問題了。其實我覺得
最難測的就是硬體的部分。有些硬體如LED、馬達等都還好測,但是像一
些比較小的零件如電阻,電容,電晶體之類的就比較難知道有沒有在測
試的過程中損壞。

六.2 未來展望

車聯網在未來會有很蓬勃的發展,雖然自動駕駛目前還需要克服的

17
問題有很多,但是現在已經有自動駕駛汽車的出現,相信在克服一些技
術成面的問題(例如圖像辨識、gps等問題),那麼我相信至會車就會在未
來劃下跨時代的一筆。
不僅如此,在微型控制車也能有非常多的應用,例如需要取得某一
個區域內的資訊,但是人難以到達或者是有危險的區域,就可以利用自
走車來達到目的,這樣可以先熟悉一個區域內的地形,並且現在越來越
多能夠克服崎嶇地形的車子出現,未來有一天可以使自走車去探測空氣
稀薄的高山,或者高溫的地底下,取得當時地區域影像或者其餘重要的
資訊。

18
附錄(程式)
#include"reg51.h"
//宣告-----------------------------------------------------
void delay( unsigned int s);
sbit P27 = P2^7;
sbit P32 = P3^2;
unsigned char PSW_BUF;
unsigned char SBUF_BUF;
unsigned char AUTO;
unsigned char DIST;
unsigned char DIST_BUF;
unsigned char ATEMP,PSWTEMP,DPLTEMP,DPHTEMP;
//主程式-------------------------------------------------
void main()
{
TMOD=0x21; // 0010 0001 B : Set Timer1 Mode2 8位元計時
Timer0 Mode1 16位元計時
//-Timer0-----------------------
PT0 = 1; //PT0=IP.1 : Set Timer0 為中斷優先權層次設定
//中斷優先順序:Timer0 >> Timer1 >> Serial
TF0 = 0; //TF0=TCON.5 :清除 Timer0 溢位
//20000us=20ms: ( 45536 )D = ( 1011 0001 1110 0000 )B
TH0 = (65536-20000)/256;
//Timer0 : ( 45536/256=177 )D = ( 1011 0001 )B
TL0 = (65536-20000)%256;
//Timer0 : ( 45536%256=224 )D = ( 1110 0000 )B
TR0 = 1; //TR0 = TCON.4 : Set Timer0 啟動

19
1 1 11059000
TH1 = 253; //Timer1: 鮑率 9600 = 2 ∗ 16 ∗ ( )( )(
12∗( 256−253 ) )
TR1 = 1; //TR1=TCON.6 : Set Timer1 啟動
PCON = 0x00; //SMOD=PCON.7 :(SMOD=0的鮑率:SMOD=1的鮑率)=(1:2)
SCON = 0x50; //串列埠模式1 : 8位元UART(通用非同步收發傳輸器)

2 MOD 1 fos c
// 鮑率 ¿ ( )( )(
2

16

( 12∗[ 256−TH 1 ] ) )
IE = 0x92; //中斷致能 : 1001 0010 B
//EA =IE.7 : 全體中斷控制
//ES =IE.4 : 串列埠中斷控制
//ET0=IE.1 :Timer0溢位中斷控制
P0 = 0x00; //設定初始值
P1 = 0x00;
P2 = 0x00;
AUTO = 0x00;
/// 主程式 ----------------------------------
while(1)
{
//超音波測距 -----------------------------
DIST = 0x00 // Reset DIST
P27 = 1; //Trig for 超聲波
delay(1); //等待12us = 1*12us
P27 = 0; //Trig for 超聲波
//-----------------------------------
delay(45); //echo wait 540us=45*12us
while(P32 == 1) //echo on(收到傳回的波時,P32=0)

{ //音速=340m/s -> ( 340s m∗t=2∗1 cm)-> t=58.8us


delay(5); //5*12us=60us大約58.8us

20
DIST = DIST + 1; // 距離增加 1cm
if (DIST > 250) // 如果距離大於250
{
DIST = 250; // 則距離最大顯示為250
}
} // echo off
DIST_BUF = DIST; // 在儲存一次距離值
//-----------------------------------
if (AUTO == 0xFF)
{
if (DIST_BUF > 10) // 如果距離大於10
{
P1 = 0x0A; // 則車子前進
}
else
{
P1 = 0x00;
delay(8333); // 延遲1秒
P1=0x06; // 車子左轉
delay(41667); // 延遲5秒
P1=0x00;
}
}
//-----------------------------------
} //Main-Flow***********************
}//Main 主程式結束 ------------------------------------

void delay(unsigned int s)


{

21
unsigned int m;
for (m=0;m<s;m++);
}
/***********************
: RS232中斷
*************/
void Serial(void) interrupt 4
{
PSW_BUF = PSW; // 儲存 PSW(程式狀態字元)
RI = 0; // 清除旗標 (因為每次發生中斷時RI=1)
SBUF_BUF = SBUF; // 儲存 SBUF
if (SBUF_BUF == 0x43)
{
AUTO = ~AUTO; // 若輸入為 0xff 則變為 0x00 ( 1 變 0)
P1 = 0x00;
}
PSW = PSW_BUF;
}
/**********************
:Timer0 int
*******************/
void Timer0(void) interrupt 1
{
ATEMP = ACC;
PSWTEMP = PSW;
DPLTEMP = DPL;
DPHTEMP = DPH;
TR0 = 0; //停止 Timer
TH0 = (65536-20000)/256; // Timer 0 計數重設

22
TL0 = (65536-20000)%256;
TR0 = 1; // 重啟Timer0

if (AUTO == 0x00)
{
if (SBUF_BUF == 0x51) //車子停止
{
P1 = 0x00;
}
else if (SBUF_BUF == 0x53) //車子後退
{
P1 = 0x05;
}
else if (SBUF_BUF == 0x44)//車子右轉
{
P1 = 0x09;
}
else if (SBUF_BUF == 0x41)//車子左轉
{
P1 = 0x06;
}
else if( SBUF_BUF == 0x57)//車子前進
{
if (DIST_BUF>10) //如果距離大於10
{
P1 = 0x0A; //車子前進
}
else
{

23
P1 = 0x00; //如果距離小於10車子停止
}
}

else
{}
}
//Return;
ACC = ATEMP;
PSW = PSWTEMP;
DPL = DPLTEMP;
DPH = DPHTEMP;
}

參考文獻
1. 作者 : 楊明豐,<< 8051入門—C語言輕鬆學>>,2014

https://www.books.com.tw/products/0010635083

2. 網昱多媒體[online]

http://swf.com.tw/?p=693

3. AYUSH SUBEDI [online]

http://www.ayushsubedi.com/2014/01/androidrccar.html

4. Bluetooth SPP Pro APP程式使用教學

http://web.htjh.tp.edu.tw/B4/105-2robot/%E8%97%8D%E7%89%99%E6%93%8D

%E6%8E%A7%E5%B0%8F%E8%BB%8A%E8%A1%8C%E9%80%B2.pdf

24
5. L298N馬達驅動模組介紹

http://web.htjh.tp.edu.tw/B4/105-2robot/L298N%E9%A6%AC

%E9%81%94%E9%A9%85%E5%8B%95%E6%A8%A1%E7%B5%84%E4%BB%8B

%E7%B4%B9.pdf

6. Keil C介紹

http://www.vr.ncue.edu.tw/esa/a1011/ch03.pdf

全文完

25

You might also like