國立勤益科技大學 電子工程系...

32
1 國立勤益科技大學 電子工程系 專題製作報告 題目: 智慧自走車程式控制設計 班 級 : 四子三甲 組 員 : 曹祐銘、張景為 指 導 老 師 : 董 秋 溝 1 0 6 6

Transcript of 國立勤益科技大學 電子工程系...

1

國立勤益科技大學

電子工程系

專題製作報告

題目: 智慧自走車程式控制設計

班 級 : 四子三甲

組 員 : 曹祐銘、張景為

指 導 老 師 : 董 秋 溝

中 華 民 國 1 0 6 年 6 月

2

目錄

圖目錄.............................................................................................................................3

摘要 ................................................................................................................................4

一.簡介............................................................................................................................5

二.流程圖 ........................................................................................................................6

三.硬體架構 ....................................................................................................................7

1.架構圖 ......................................................................................................................7

2.車體介紹...................................................................................................................8

3.晶片介紹...................................................................................................................9

4.馬達介紹................................................................................................................. 10

5. HC-SR04 超音波感測器 ........................................................................................... 12

6. CNY70 紅外線感測器 .............................................................................................. 13

四.軟體程式 .................................................................................................................. 14

1.程式介紹................................................................................................................. 14

2.編譯軟體................................................................................................................. 24

3.燒錄軟體................................................................................................................. 24

五.結論.......................................................................................................................... 25

六.附錄.......................................................................................................................... 26

1.比賽規則................................................................................................................. 26

2.比賽照片................................................................................................................. 28

七.參考文獻 .................................................................................................................. 32

3

圖目錄

圖 2.1 流程圖 .................................................................................................. 6

圖 3.1 架構圖 .................................................................................................. 7

圖 3.4 A12-0030 min IC 8051 接腳圖 ............................................................. 9

圖 3.5 A12-0030 min IC 8051 開發板 ............................................................. 9

圖 3.6 A03-0017 直流馬達控制器................................................................ 10

圖 3.7 直流馬達 ............................................................................................ 11

圖 3.8 HC-SR04 超音波感測器 ..................................................................... 12

圖 3.10 音波感測動作圖 .............................................................................. 12

圖 3.11 CNY70 紅外線感測器....................................................................... 13

圖 3.12 CNY70 接腳圖................................................................................... 13

圖 3.13 CNY70 內部架構與電路圖............................................................... 13

圖 4.2 minIC.exe 燒錄程式 ........................................................................... 24

圖 6.1 智慧自走車比賽規則(一) .................................................................. 26

圖 6.2 智慧自走車比賽規則(二) .................................................................. 27

圖 6.3 修平科技大學比賽現場 .................................................................... 28

圖 6.4 台北海洋科技大學比賽現場(一) ...................................................... 28

圖 6.5 台北海洋科技大學比賽現場(二) ...................................................... 29

圖 6.6 台北海洋科技大學-自走車摸黑比賽場地 ....................................... 29

圖 6.8 場地練習與測試(二) .......................................................................... 30

圖 6.9 場地練習與測試(三) .......................................................................... 31

圖 6.10 內湖高工場次頒獎合影 .................................................................. 31

4

摘要

近幾年來科技突飛猛進的進展,從個人電腦的出現,再到個人電腦縮

小到人手一台的智慧型手機,科技越來越靠近人性也越來越追求自動

化,或許在不久的未來一台台能讓人類更方便生活的機器人就會出現

在平常的生活之中了,而我們這次主要研究的就是機械自走車,目的

也是為了能尋找能讓生活更便利的程式,程式方面我們是選擇用 C 語

言來控制 8051 單晶片,面對不同的地形撰寫出能相對應的程式。

5

一. 簡介

自動化,不透過人為操控而是由撰寫代替的程式來達到目的,自走車

也是如此,自動化的好處也相對不少,人類可能會有疲倦或是注意力

不集中的問題,自動化能將這些問題相對的解決,也大大的降低出錯

率,近幾年來汽車上也有許多自動化的設備,自動安全煞車.路邊停車

等等,甚至是最近幾年很紅的自動駕駛,也是利用超音波感測障礙

物,自動化就像能讓機械擁有判斷的智慧,也相對的能得到更便利的

生活與安全性,當然自動化也不單單用在車子行走上面,也有運用在

機器人方面,以前對機器人的印象可能是一個口令一個動作,透過程

式撰寫,機器人也能擁有自己判斷的能力,讓自動化的技術更進一

步。

6

二. 流程圖

圖 2.1 流程圖

7

三. 硬體架構

1. 架構圖

圖 3.1 架構圖

8

2.車體介紹

圖 3.2 車體正面

圖 3.3 車體背面

車體:益眾科技 A03-0518 SPEED CAR

a. A12-0030 min IC 8051 開發板

b.自走車電源開關

c. A03-0017 直流馬達控制器

d. HC-SR04 超音波感測模組*5

e. RA200013-50301R 直流馬達*2

f. 3 號 2 個電池盒*4

g. CNY70 紅外線感測模組*9

9

3.晶片介紹

圖 3.4 A12-0030 min IC 8051 接腳圖

內建 11.0592MHz 震盪器電路、Reset

電路,USB 插座除了提供燒錄功能

外,也可當作電源使用(電源為 USB

Port 提供的 5V/500mA),同時整合燒

錄、電源及通訊在一條線上。

尺寸:5cm X 1.8cm

圖 3.5 A12-0030 min IC 8051 開發板

10

4.馬達介紹

直流馬達控制器可用 4 個 TTL 的 IO 腳來控制兩個馬達的正反轉,IO 腳的 電

壓可使用 3.3V - 5V,馬達規格可使用 24V / 2A 以下 直流馬達控制卡的圖示如

圖 3.6 A03-0017 直流馬達控制器

(1) PWM 信號輸入,由左至右為 MF1、MR1、MF2、MR2。

(2) 馬達 1(左邊)電源輸入(POWER1)。

(3) 馬達 2(右邊)電源輸入(POWER2)。

(4) GND,提供與外部共地的接腳。

(5) 電源共接點。

(6) 馬達 1 接點(相對應於 POWER1)。

(7) 馬達 2 接點(相對應於 POWER2)。

11

圖 3.7 直流馬達

◎ 直流驅動

◎ 額定電壓 4.5V

◎ 最大可達 600rpm

◎ 可由正負極電流方向控制正反轉

12

5. HC-SR04 超音波感測器

圖 3.8 HC-SR04 超音波感測器 圖 3.9 HC-SR04 接腳圖

◎ 本模組性能穩定,測度距離精確。能和國外的 SRF05、SRF02 等超聲波測距

模組相媲美,模塊高精度,盲區(2cm)超近。

◎ 電源:DC5V/2mA

◎ 輸出電位( 1/ 0):5V/ 0V

◎ 精度:3mm

◎ 距離範圍:2 ~ 450cm

◎ 有效的角度:<15℃

◎ 觸發輸入信號:10uS TTL pulse

◎ ECHO 輸出信號: Input TTL lever signal and the range in proportion

◎ 接線方式:VCC、trig(控制端)、 echo(接收端)、 GND

◎ 尺寸:45(L) x 20(W) x 15(H)mm

圖 3.10 音波感測動作圖

13

6. CNY70 紅外線感測器

圖 3.11 CNY70 紅外線感測器

圖 3.12 CNY70 接腳圖

◎感應距離: 0 mm to 5 mm

◎集電極-發射極最大電壓 VCEO: 32 V

◎集電極最大電流: 50 mA

◎Vf - 順向電壓: 1.25 V

◎Vr - 反向電壓: 5 V

◎If - 順向電流: 50 mA

◎最高工作溫度: + 85 C

◎最低工作溫度: - 40 C

◎Pd - 功率消耗 : 200 mW

◎波長: 950 nm

◎尺寸:7(L) x 7(W) x 6(H)mm

圖 3.13 CNY70 內部架構與電路圖

14

四.軟體程式

1.程式介紹

/*******************************/

#include <REGX51.H>

#include <intrins.h>

#include <STDIO.H>

//超音波感測距離 範圍:5~50 公分

unsigned char LR=15,M=16,RR=15;

//馬達速度 範圍:1~9 段

unsigned char LS=1, FS=2,RS=1;

#define CLEDR P3_2

#define CLEDM P3_3

#define CLEDL P3_4

#define LLEDR P0_4

#define LLEDM P0_5

#define LLEDL P0_6

#define RLEDR P1_6

#define RLEDM P1_7

#define RLEDL P0_7

#define CCNYR P3_5

#define CCNYM P3_6

#define CCNYL P3_7

#define LCNYL P2_0

#define LCNYM P2_1

#define LCNYR P2_2

#define RCNYL P2_3

#define RCNYM P2_4

#define RCNYR P2_5

#define RX_M P1_3

#define TX_M P1_2

float SM=0;

//-----------------------

#define LEDR P3_2

#define LEDM P3_3

#define LEDL P3_4

#define MF0 P0_0

#define MR0 P0_1

#define MF1 P0_2

#define MR1 P0_3

unsigned int time=0;

unsigned int timer=0;

bit flag =0;

unsigned char stat=0,duty;

unsigned int temp=0;

#define T 11059200/12/1000

bit onoff=0;

void delay_1m(unsigned int dly)

{

int count;

while(dly>0)

{

count=120;

while(count>0)

count--;

dly--;

}

}

/*******************************/

15

void readUSM(void)

{

while(!RX_M);

//當 RX 為零時等待

TR0=1; //開啟計數

while(RX_M);

//當 RX 為 1 計數並等待

TR0=0; //關閉計數

time=TH0*256+TL0;

TH0=0;

TL0=0;

SM=(time*1.87)/100;

if(flag==1)

{

flag=0;

}

}

/*******************************/

void delayms(unsigned int ms)

{

unsigned char i=100,j;

for(;ms;ms--)

{

while(--i)

{

j=10;

while(--j);

}

}

}

/*******************************/

void zd0() interrupt 1

{

flag=1;

}

/*******************************/

void StartUSM()

{

TX_M=1;

_nop_();

_nop_();

_nop_();

TX_M=0;

}

/*******************************/

void USM()

{

StartUSM();

readUSM();

delayms(1);

}

/*******************************/

void FORWARD(void)

{

MF0=0;

MR0=1;

MF1=0;

MR1=1;

}

void BACK(void)

{

MF0=1;

MR0=0;

MF1=1;

MR1=0;

}

void LEFT(void)

{

MF0=1;

MR0=0;

MF1=0;

MR1=1;

}

16

void RIGHT(void)

{

MF0=0;

MR0=1;

MF1=1;

MR1=0;

}

void STOP(void)

{

TR1=0;

MF0=0;

MR0=0;

MF1=0;

MR1=0;

}

void BREAK(void)

{

TR1=0;

MF0=1;

MR0=1;

MF1=1;

MR1=1;

}

/*******************************/

//-----Speed change-----//

//stat=1

void SFORWARD(unsigned char duty1)

{

TR1=1;

duty=duty1%10;

if(duty==0)

//將 0-10 的 duty1 指定給全域的 duty

duty=1;

if(stat!=1)

{

onoff=0;

temp=65536-(T*duty);

TL1 = temp; // 設定 TL0 與 TH0

TH1 = temp>>8;

TR1=1; // Timer0 開始計時

stat=1;

}

}

//stat=2

void SLEFT(unsigned char duty1)

{

TR1=1;

duty=duty1%10;

if(duty==0)

//將 0-10 的 duty1 指定給全域的 duty

duty=1;

if(stat!=2)

{

onoff=0;

temp=65536-(T*duty);

TL1 = temp; // 設定 TL0 與 TH0

TH1 = temp>>8;

TR1=1; // Timer0 開始計時

stat=2;

}

}

17

//stat=3

void SRIGHT(unsigned char duty1)

{

TR1=1;

duty=duty1%10;

if(duty==0)

//將 0-10 的 duty1 指定給全域的 duty

duty=1;

if(stat!=3)

{

onoff=0;

temp=65536-(T*duty);

TL1 = temp; // 設定 TL0 與 TH0

TH1 = temp>>8;

TR1=1; // Timer0 開始計時

stat=3;

}

}

//stat=4

void SBACK(unsigned char duty1)

{

TR1=1;

duty=duty1%10;

if(duty==0)

//將 0-10 的 duty1 指定給全域的 duty

duty=1;

if(stat!=4)

{

onoff=0;

temp=65536-(T*duty);

TL1 = temp; // 設定 TL0 與 TH0

TH1 = temp>>8;

TR1=1; // Timer0 開始計時

stat=4;

}

}

/********************************

************************/

void T1_int(void) interrupt 3

{

onoff=~onoff;

if(!onoff)

{

temp=65536-(T*duty);

if(stat==1)

FORWARD();

else if(stat==2)

LEFT();

else if(stat==3)

RIGHT();

else if(stat==4)

BACK();

else if(stat==5)

BREAK();

else

STOP();

}

else

{

temp=65535-(T*(10-duty));

STOP();

}

TL1 = temp; // 設定 TL0 與 TH0

TH1 = temp >>8; // Timer0 開始計時

TR1=1;

}

18

void black1()

{

BREAK();//煞車

delay_1m(200);//煞車等待

SLEFT(5);//左轉

delay_1m(200);//左轉持續時間

SFORWARD(5);//直走

delay_1m(350);//直走持續時間

SRIGHT(5);//右轉

delay_1m(300);//右轉持續時間

SFORWARD(5);//直走

delay_1m(500);//直走持續時間

SRIGHT(5);//右轉

delay_1m(400);//右轉持續時間

SFORWARD(5);//直走

delay_1m(50);//直走持續時間

}

void black2()

{

BREAK();//煞車

delay_1m(200);//煞車等待

SRIGHT(5);//右轉

delay_1m(300);//右轉持續時間

SFORWARD(5);//直走

delay_1m(300);//直走持續時間

SLEFT(5);//左轉

delay_1m(400);//左轉持續時間

SFORWARD(5);//直走

delay_1m(600);//直走持續時間

SLEFT(5);//左轉

delay_1m(300);//左轉持續時間

SFORWARD(5);//直走

delay_1m(50);//直走持續時間

}

/*******************************/

void main(void)

{

unsigned char a=0;

TMOD=0x11;

//設 T0 為方式 1GATE=1;

TH1=0;

TL1=0;

TH0=0;

TL0=0;

TR0=1;

ET1=1;

ET0=1; //允許 T0 中斷

TR0=1;

TR1=1; //開啟計時器

TI=1;

EA=1; //開啟總中斷

while(1)

{

while(P2_1==0)

{

USM();

if(SM<M)//中央感測器有障礙物

{

if(LCNYR==1 || CCNYL==1)

//001100000

{

SLEFT(3);//左轉

delay_1m(50);

}

else if(CCNYR==1 || RCNYL==1)

//000001100

{

SRIGHT(3);//右轉

delay_1m(50);

}

19

else if(LCNYL==0 && LCNYM==0 &&

LCNYR==0 && CCNYL==0 &&

CCNYM==1 && CCNYR==0 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*置中*/

{

if(a==0)

{

LEDM=LEDL=LEDR=0;

black1();

LEDM=LEDL=LEDR=1;

a=1;

}

else if(a==1)

{

LEDM=LEDL=LEDR=0;

black2();

LEDM=LEDL=LEDR=1;

a=0;

}

}

}

//左感測

if(LCNYL==1 && LCNYM==0 &&

LCNYR==0 && CCNYL==0 &&

CCNYM==0 && CCNYR==0 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*100000000*/

{

LLEDL=0;

SLEFT(6);

}

else if(LCNYL==1 && LCNYM==0 &&

LCNYR==0 && CCNYL==1 &&

CCNYM==0 && CCNYR==0 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*100100000*/

{

LLEDL=0;

CLEDL=0;

SLEFT(5);

}

else if(LCNYL==1 && LCNYM==0 &&

LCNYR==0 && CCNYL==0 &&

CCNYM==1 && CCNYR==0 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*100010000*/

{

LLEDL=0;

CLEDM=0;

SLEFT(5);

}

else if(LCNYL==1 && LCNYM==0 &&

LCNYR==0 && CCNYL==0 &&

CCNYM==0 && CCNYR==1 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*100001000*/

{

LLEDL=0;

CLEDR=0;

SLEFT(5);

}

else if(LCNYL==1 && LCNYM==1 &&

LCNYR==0 && CCNYL==0 &&

CCNYM==0 && CCNYR==0 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*110000000*/

{

LLEDL=0;

LLEDM=0;

SLEFT(5);

}

20

else if(LCNYL==1 && LCNYM==1 &&

LCNYR==0 && CCNYL==1 &&

CCNYM==0 && CCNYR==0 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*110100000*/

{

LLEDL=0;

LLEDM=0;

CLEDL=0;

SLEFT(5);

}

else if(LCNYL==1 && LCNYM==1 &&

LCNYR==0 && CCNYL==0 &&

CCNYM==1 && CCNYR==0 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*110010000*/

{

LLEDL=0;

LLEDM=0;

CLEDM=0;

SLEFT(5);

}

else if(LCNYL==1 && LCNYM==1 &&

LCNYR==0 && CCNYL==0 &&

CCNYM==0 && CCNYR==1 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*110001000*/

{

LLEDL=0;

LLEDM=0;

CLEDR=0;

SLEFT(5);

}

else if(LCNYL==1 && LCNYM==1 &&

LCNYR==1 && CCNYL==0 &&

CCNYM==0 && CCNYR==0 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*111000000*/

{

LLEDL=0;

LLEDM=0;

LLEDR=0;

SLEFT(6);

}

else if(LCNYL==0 && LCNYM==1 &&

LCNYR==0 && CCNYL==0 &&

CCNYM==0 && CCNYR==0 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*010000000*/

{

LLEDM=0;

SLEFT(4);

}

else if(LCNYL==0 && LCNYM==1 &&

LCNYR==1 && CCNYL==0 &&

CCNYM==0 && CCNYR==0 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*011000000*/

{

LLEDM=0;

LLEDR=0;

SLEFT(3);

}

else if(LCNYL==0 && LCNYM==0 &&

LCNYR==1 && CCNYL==0 &&

CCNYM==0 && CCNYR==0 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*001000000*/

{

LLEDR=0;

SLEFT(3);

}

21

else if(LCNYL==0 && LCNYM==0 &&

LCNYR==1 && CCNYL==0 &&

CCNYM==1 && CCNYR==1 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*001011000*/

{

LLEDR=0;

CLEDR=0;

CLEDM=0;

SLEFT(3);

}

else if(LCNYL==0 && LCNYM==0 &&

LCNYR==1 && CCNYL==1 &&

CCNYM==1 && CCNYR==0 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*001110000*/

{

LLEDR=0;

CLEDL=0;

CLEDM=0;

SLEFT(3);

}

else if(LCNYL==0 && LCNYM==0 &&

LCNYR==1 && CCNYL==1 &&

CCNYM==0 && CCNYR==0 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*001100000*/

{

LLEDR=0;

CLEDL=0;

SLEFT(3);

}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

// 中感測

else if(LCNYL==0 && LCNYM==0 &&

LCNYR==0 && CCNYL==1 &&

CCNYM==0 && CCNYR==0 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*000100000*/

{

CLEDL=0;

SFORWARD(6);

if(LCNYL==1 || LCNYM==1 ||

LCNYR==1 )/*111000000*/

{

RLEDL=0;

SLEFT(3);

}

}

else if(LCNYL==0 && LCNYM==0 &&

LCNYR==0 && CCNYL==1 &&

CCNYM==1 && CCNYR==0 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*000110000*/

{

CLEDL=0;

CLEDM=0;

SFORWARD(7);

if(LCNYL==1 || LCNYM==1 ||

LCNYR==1 )/*111000000*/

{

RLEDL=0;

SLEFT(3);

}

}

22

else if(LCNYL==0 && LCNYM==0 &&

LCNYR==0 && CCNYL==0 &&

CCNYM==1 && CCNYR==0 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*000010000*/

{

CLEDM=0;

SFORWARD(8);

if(LCNYL==1 || LCNYM==1 ||

LCNYR==1 )/*111000000*/

{

RLEDL=0;

SLEFT(3);

}

}

else if(LCNYL==0 && LCNYM==0 &&

LCNYR==0 && CCNYL==0 &&

CCNYM==1 && CCNYR==1 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*000011000*/

{

CLEDM=0;

CLEDR=0;

SFORWARD(7);

if(LCNYL==1 || LCNYM==1 ||

LCNYR==1 )/*111000000*/

{

RLEDL=0;

SLEFT(3);

}

}

else if(LCNYL==0 && LCNYM==0 &&

LCNYR==0 && CCNYL==0 &&

CCNYM==0 && CCNYR==1 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==0)/*000001000*/

{

CLEDR=0;

SFORWARD(6);

if(LCNYL==1 || LCNYM==1 ||

LCNYR==1 )/*111000000*/

{

RLEDL=0;

SLEFT(3);

}

}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

//右感測

else if(LCNYL==0 && LCNYM==0 &&

LCNYR==0 && CCNYL==0 &&

CCNYM==0 && CCNYR==0 &&

RCNYL==1 && RCNYM==0 &&

RCNYR==0)/*000000100*/

{

RLEDL=0;

SRIGHT(3);

}

else if(LCNYL==0 && LCNYM==0 &&

LCNYR==0 && CCNYL==0 &&

CCNYM==0 && CCNYR==0 &&

RCNYL==1 && RCNYM==1 &&

RCNYR==0)/*000000110*/

{

RLEDL=0;

RLEDM=0;

SRIGHT(3);

}

else if(LCNYL==0 && LCNYM==0 &&

LCNYR==0 && CCNYL==0 &&

CCNYM==0 && CCNYR==0 &&

RCNYL==0 && RCNYM==1 &&

RCNYR==0)/*000000010*/

23

{

RLEDM=0;

SRIGHT(4);

}

else if(LCNYL==0 && LCNYM==0 &&

LCNYR==0 && CCNYL==0 &&

CCNYM==0 && CCNYR==0 &&

RCNYL==0 && RCNYM==1 &&

RCNYR==1)/*000000011*/

{

RLEDM=0;

RLEDR=0;

SRIGHT(5);

}

else if(LCNYL==0 && LCNYM==0 &&

LCNYR==0 && CCNYL==0 &&

CCNYM==0 && CCNYR==0 &&

RCNYL==0 && RCNYM==0 &&

RCNYR==1)/*000000001*/

{

RLEDR=0;

SRIGHT(5);

}

else if(LCNYL==0 && LCNYM==0 &&

LCNYR==0 && CCNYL==0 &&

CCNYM==0 && CCNYR==0 &&

RCNYL==1 && RCNYM==1 &&

RCNYR==1)/*000000111*/

{

RLEDL=0;

RLEDM=0;

RLEDR=0;

SRIGHT(5);

}

else

{

LLEDL=1;

LLEDM=1;

LLEDR=1;

CLEDL=1;

CLEDM=1;

CLEDR=1;

RLEDL=1;

RLEDM=1;

RLEDR=1;

}

}

}

}

24

2.編譯軟體

圖 4.1 Keil uVision5

◎ 一套整合性開發介面。

◎ 可編寫 C 語言的 C51 編譯器(ANSIC) 。

◎ 可編寫組合語言的 A51 組譯器。

◎ 除錯測試。

◎ 嵌入式系統程式(RTX51) 。

◎ 適用各種 51 核心。

3.燒錄軟體

圖 4.2 minIC.exe 燒錄程式

使用 ISP 燒錄程式 minIC.exe,將已編譯完成之機器碼(.hex 文件)燒錄至自走

車。

25

五.結論

平常在實習教室修改程式和練習的時候感覺都滿順利的,直到

第一次去全國競賽在賽前練習的時候,就慢慢的遇到平常沒遇到的

狀況,遇到新的狀況時才知到自己對程式的了解度還不夠深入,像

是紅外線感測的靈敏度、超音波感測的距離與馬達轉速的調適、左

轉右轉與直走的持續時間…等等,經過反覆的修改與研究才能找到

最合適的程式。在這裡理解程式的速度比坐在電腦前慢慢看還快上

許多,真正上過戰場才知道武器怎麼使用,經過多次的比賽之後能

更快速的修改和除錯,面對不同的場地拿出不同特點的程式,因此

遇到新問題時的解決能力也隨之提升了不少。

就算不斷修改,整體仍然有不足的地方,其中最大的問題就是

電池與供電,在測試時常常會有因電池的新舊問題而導致結果有所

差異,新電池的電壓太強而跑太快,舊電池的電壓不足而導致感測

失靈,因此需要一個穩壓的電源電路裝在電池後面,使電池的電壓

輸出可以穩定,從而避免比賽時發生變數。

透過這次的專題實務讓我們學到了不少知識和經驗,第一次使

用 8051 來操控車子,車子的轉彎是透過左輪與右輪的轉速差來進行

調整,而且光是要判斷走黑線就要寫出數十行的 If 程式,很謝謝有

老師、學長的指導以及同學的幫忙讓我們學到如此寶貴的經驗。

26

六.附錄

1.比賽規則

圖 6.1 智慧自走車比賽規則(一)

27

圖 6.2 智慧自走車比賽規則(二)

28

2.比賽照片

圖 6.3 修平科技大學比賽現場

圖 6.4 台北海洋科技大學比賽現場(一)

29

圖 6.5 台北海洋科技大學比賽現場(二)

圖 6.6 台北海洋科技大學-自走車摸黑比賽場地

30

圖 6.7 場地練習與測試(一)

圖 6.8 場地練習與測試(二)

31

圖 6.9 場地練習與測試(三)

圖 6.10 內湖高工場次頒獎合影

32

七.參考文獻 益眾科技 A03-0518 SPEED CAR說明書與光碟

益眾科技股份有限公司

http://www.icci.com.tw/index.html

HC-SR04 超音波感測器

http://coopermaa2nd.blogspot.tw/2012/09/hc-sr04.html

http://shop.cpu.com.tw/product/45466/info/

CNY70 紅外線感測

http://www.mouser.tw/ProductDetail/Vishay-

Semiconductors/CNY70/?qs=%2Fjqivxn91cdreAm7vR28%252bA%3D%3D 貿澤電子

http://eshare.stust.edu.tw/EshareFile/2013_6/2013_6_a90f2caa.pdf