崑¬科技學ir.lib.ksu.edu.tw/bitstream/987654321/512/1/廣告... · 崑¬科技學...

81
崑科技學 資訊 資訊 資訊 資訊程系 程系 程系 程系 專題製作告 專題製作告 專題製作告 專題製作告 告機器 ADVERTISEMENT ROBOT :楊佩佳 楊宗儒 許閔郁 童 指導老師:黃 祥 華國

Upload: others

Post on 23-Mar-2020

14 views

Category:

Documents


0 download

TRANSCRIPT

  • 崑山科技大學

    資訊資訊資訊資訊工程系工程系工程系工程系

    專題製作報告專題製作報告專題製作報告專題製作報告

    廣告機器人

    ADVERTISEMENT ROBOT

    學 生:楊佩佳 楊宗儒 許閔郁 童湘婷

    指導老師:黃 慶 祥

    中華民國 九十六 年 四 月

  • ii

    廣告機器人廣告機器人廣告機器人廣告機器人

    ADVERTISEMENT ROBOT

    學 生:楊佩佳 楊宗儒 許敏郁 童湘婷

    Student: Pei Chia–Yang 、Zong ru–Yang、

    Min Yu– Syu 、Siang Ting -Tong

    指導老師:黃 慶 祥 博士 Advisor:Dr.Ching-Shine Hwang

    崑山科技大學

    資訊工程系

    專題報告

    A Report

    Submitted to Department of Information Engineering

    Kun Shan University of Science and Technology

    in Partial Fulfillment of the Requirements

    for the Degree of Bachelor

    in

    Information Engineering

    June 2007

    Tainan, Taiwan, Republic of China

    中華民國九十六年 四 月

  • iii

  • iv

    廣告機器人廣告機器人廣告機器人廣告機器人

    學生學生學生學生::::楊佩佳楊佩佳楊佩佳楊佩佳 楊宗儒楊宗儒楊宗儒楊宗儒 許閔許閔許閔許閔郁郁郁郁 童湘婷童湘婷童湘婷童湘婷

    指導老師指導老師指導老師指導老師::::黃黃黃黃 慶祥博士慶祥博士慶祥博士慶祥博士

    崑山科技大學資訊工程系

    摘摘摘摘 要要要要

    在現在競爭激烈的時代,各大廠商無不用盡商業手法,來推銷自己產品及促銷

    訊息,我們將以自走車加上語音錄放的系統配合活動式看板,利用廣告機器人,

    吸引消費者的好奇心,為商品做最有利的宣傳手法、藉以達到促銷商品及提升買

    氣的功用,為廠商帶來極大的經濟利益之重要功能,目前常見的廣告模式有電視

    廣告、發傳單、平面廣告等等...雖然這些模式具有吸引消費者的功能,但是易於

    平凡已讓消費者麻痺且無新鮮感,本研究計畫提出廣告機器人,它是一部具有定

    時廣播功能的系統,在系統啟動後,將會開啟定時廣播系統,並且搭配鮮明的看

    版與可移動式的機器人,在賣場各處移動吸引消費者的目光,好奇的消費者即會

    對產品感到興趣而去購買,這樣的系統將大大的提升傳統廣告的功能反被動為主

    動 , 其 節 省 人 力 降 低 成 本 又 增 加 廣 告 效 果 , 可 說 是 事 半 功 倍 。

  • v

    Advertisement robot Student: Pei Chia–Yang 、Zong ru–Yang、

    Min Yu– Syu 、Siang Ting -Tong

    Advisor:Dr. Ching-Shine Hwang

    Department of Information Engineering

    Kun Shan University of Science and Technology

    AbstractAbstractAbstractAbstract

    Competes the intense time in the present, each big merchant exhausts

    the commercial technique all, sells the oneself product and the

    promotion news, we will add on pronunciation recording and sending out

    by the self-propelled vehicle the system coordination type to look at

    the version, the use advertisement robot, will attract consumer's

    curiosity, will make the most advantageous propaganda technique for

    the commodity, so as to achieved the promotion commodity and the

    promotion will buy the function which was mad, will bring the enormous

    economic for the merchant the important function.

  • vi

    誌 謝

    感謝主任這一年的細心教導還幫我們這組購買遙控汽車,也感謝多位同學的

    幫忙,也感謝仁德鄉的鐵工廠,特地挪出時間幫我們沖刷鋁片,感謝熱心的幫我

    們鑽孔的機車店老闆。

  • vii

    目目目目 錄錄錄錄

    英文封面 .........................................................................................................................Ⅱ

    授權書 .............................................................................................................................Ⅲ

    中文摘要 .........................................................................................................................Ⅳ

    英文摘要 .........................................................................................................................Ⅴ

    中文誌謝 .........................................................................................................................Ⅵ

    目錄 .................................................................................................................................Ⅶ

    圖列 .................................................................................................................................Ⅸ

    第一章 緒論 .....................................................................................................................1

    1.1 研究動機與目的..............................................................................................1

    1.2 研究背景 ...................................................................................................2

    1.3 研究方法與系統描述......................................................................................4

    1.4論文內容概述 ...................................................................................................5

    第二章 相關研究 .............................................................................................................6

    2.1 感測器之研究..................................................................................................6

    2.1.1 光感測器可分為反射型和遮斷型兩種 .............................................6

    2.1.2 紅外線感測器 .....................................................................................7

    2.2 馬達之研究......................................................................................................8

    2.2.1 減速馬達的運用(前馬達) .................................................................8

    2.2.2 直流馬達的控制原理(後馬達) .........................................................8

    2.3 語音IC之研究..................................................................................................9

    2.3.1 ISD 1420-20秒語音IC .......................................................................9

    2.3.2 ISD25120-120秒語音IC .....................................................................9

    2.4 電源電路之研究............................................................................................10

    2.5 廣告的呈現和外殼設計................................................................................10

    第三章 系統架構 ...........................................................................................................13

  • viii

    3.1 廣告機器人內部基本系統架構....................................................................13

    3.2 廣告機器人系統流程....................................................................................15

    第四章 電路硬體架構 ...................................................................................................16

    4.1 電源電路:....................................................................................................16

    4.2 感測電路........................................................................................................17

    4.2.1 感測電路之動作原理 .......................................................................17

    4.2.2 感測器放置位置 ...............................................................................18

    4.2.3 感測器測試步驟 ...............................................................................19

    4.3 馬達電路........................................................................................................20

    4.3.1 前馬達 ...............................................................................................20

    4.3.2 後馬達 ...............................................................................................22

    4.3.3 製作前、後馬達所遇到的問題: .....................................................24

    4.4 語音電路........................................................................................................29

    4.4.1 ISD 1420規格及使用說明(20秒語音IC) .......................................29

    4.4.2 ISD25120 規格及使用說明(120秒語音IC) ...................................33

    4.4.3 ISD1420 (20秒語音IC)操作說明 ...................................................37

    4.4.4 ISD25120(120秒語音IC)操作說明: .............................................38

    4.4.5 放大電路 ...........................................................................................39

    第五章 軟體流程圖 .......................................................................................................40

    5.1 程式撰寫環境介紹 ...............................................................................40

    5.2 廣告機器人軟體說明 ...........................................................................43

    第六章 系統實現 ...........................................................................................................47

    第七章 結論 ...................................................................................................................47

    參考文獻 .........................................................................................................................48

    附錄 程式 .....................................................................................................................R-1

  • ix

    圖圖圖圖 列列列列

    圖1.1 循跡自走車基本結構 ............................................................................................2

    圖1.2紅外線自走車 ..........................................................................................................3

    圖3.1 基本架構方塊圖 ...................................................................................................13

    圖3.2 系統流程圖 ...........................................................................................................15

    圖4.1 系統流程圖 ...........................................................................................................16

    圖4.2.1 感測器電路圖 ....................................................................................................17

    圖4.2.2.1感測器放置說明圖 ..........................................................................................18

    圖4.2.2.2 感測器放置圖 .................................................................................................18

    圖4.3.1.1 前馬達電路圖 .................................................................................................20

    圖4.3.1.2 此圖為測試前馬達的實作圖和前馬達實品 .................................................21

    圖4.3.2 後馬達電路圖 ....................................................................................................22

    圖4.3.2 此圖為測試後馬達轉速實作圖 ........................................................................23

    圖4.3.3.1 前馬達齒輪圖 .................................................................................................24

    圖4.3.3.2 前馬達製作圖 .................................................................................................24

    圖4.3.3.3 前馬達製作圖 .................................................................................................25

    圖4.3.3.4 前馬達最後固定圖 .........................................................................................25

    圖4.3.3.5 前馬達板燒毀圖 .............................................................................................26

    圖4.3.3.6 前馬達加裝散熱片圖 .....................................................................................26

    圖4.3.3.7 後馬達電路圖 .................................................................................................27

    圖4.3.3.7 後馬達電路圖 .................................................................................................28

    圖4.3.3.8 後馬達電路圖 .................................................................................................28

    圖4.4.1 ISD 1420 內部圖................................................................................................29

    圖4.4.2 ISD 1420 電路圖................................................................................................30

    圖4.4.3 20秒語音系統流程圖 ........................................................................................32

    圖4.4.2.1 ISD25120內部方塊圖.....................................................................................33

    圖4.4.2.2 語音電路圖 .....................................................................................................34

  • x

    圖4.4.2.3 120秒語音系統流程圖 ...................................................................................36

    圖4.4.2.4 120秒 分段播放指撥開關板 操作流程圖 .....................................................36

    圖4.4.3 20秒 實體圖 .......................................................................................................37

    圖 5.1 cygwin make的執行圖 .........................................................................................41

    圖 5.2 QuickWriter 的介面圖 .........................................................................................42

    圖5.2.1 程式流程圖 ........................................................................................................44

    圖5.2.2 20秒語音錄放板 程式流程圖 ...........................................................................45

    圖5.2.3 120秒語音錄放板 程式流程圖 .........................................................................46

  • 1

    第一章緒論

    1.1 研究動機與目的

    市場競爭激烈,加上人力成本長期上漲,人力難求,且不一定達到廣告效

    益,一般常見的宣傳手法大都是插宣傳旗幟、大聲吶喊宣傳商品、使用人力發宣

    傳單、發送贈品…等,這些都是屬於被動式的宣傳手法,廣告效果也不見增長又

    須浪費其人力的成本,相當不符合經濟效益。

    以傳統的宣傳方式在現今的環境下,已逐漸難以滿足需求,自動化廣告系

    統成為今日廣告系統最有效的工具,廣告機器人具備了語音廣播系統以及廣告插

    版,除了能看見當日特價品行情外還可經由廣播系統吸引在遠處看不到電子看版

    的人們。非常符合目前市場的需求。如果將廣告機器人放置於大賣場或是超市等

    地方,廣播的產品訊息不僅能吸引大人的目光,小孩也會因為廣告機器人可愛的

    外型感到新奇,對商家以及消費者都是一大福音。

    因此,在這樣的想法以及前瞻性之下,便對此感到興趣,希望能夠藉由這

    次的計畫發揮在學校中所獲得的知識,創造出一台「廣告機器人」,不僅可驗證

    所學,更可將此想法,應用在生活週遭的事物上,使未來的生活更為便利。

  • 2

    1.2 研究背景

    目前有許多關於自走車的研究,而本組的「廣告機器人」亦屬於自走車的範

    疇之一。

    1. 循跡自走車(Line following ):

    以紅外線感測器進行對地上之深色線條之感測,藉由感測器之傳回值為依

    據,進行車體之轉向運動,以使車體行進路線與地上預先描繪之線條相符,多半

    作為無人載具之行進方式。

    圖1.1 循跡自走車基本結構

    [資料來源(1) http://www.wa4dsy.net/robot/line/]

    本組之「廣告機器人」為紅外線感測器,而其中「循跡」為追蹤目標物之軌

    跡,追蹤原理為置於車頭兩個距離感測器所測得之距離與兩感測器之差值,作為

    追蹤與轉向之依據,以期達到最佳效能,該紅外線自走車如下圖。

  • 3

    圖1.2紅外線自走車

    [資料來源(2) http://bsd.cpu.com.tw/kh/kit/car/car.html]

    我們利用現代化科技改善保障每個人的生活需求,都是科技一日千里的原

    因。本研究計畫在廣告機器人上我們將會有令人好奇感極高的外觀架構,內部則

    是由自走車的感測系統來讓機器人循著預設的軌道在預設路線中前進,為了使廣

    告機器人更具吸引目光,我們也加入了廣告系統能讓機器人在行進之虞,大聲的

    廣告商品訊息,為了使自走車與廣告系統結合,整體架構不至於太過笨重,在行

    進中展現商品訊息,配合著語音播放這就是我們的廣告機器人。

  • 4

    1.3 研究方法與系統描述

    ㄧ台完整的廣告機器人的結構可分成車身,電源、感測器、輪子、馬達、定

    時廣播系統等。而我們將它分成五個模組:

    電源電路:

    本計劃在直流馬達的電源我們直接接上電池的輸出電壓13伏特,而IC與感測

    電路則是利用一顆LM7805穩壓IC來提供。LM7805的穩壓電路IC有三隻腳,分別為

    輸入端,共同接地端及輸出端。他的功用是作為穩定,輸出5伏特電壓。穩壓電路

    上的LM7805的電流相當大,所以一定要加裝ㄧ組故熱片,以保護IC燒掉。

    感測電路

    我們選擇紅外線感測器,所謂反射型就是光的發射器和接收器位於偵測物的

    同ㄧ側,利用光線的反射原理是否有接收來判斷是否有行走在軌道上。我們所使

    用的光感測器是紅外線發光及紅外線接收二極體,動作原理是利用紅外線去感測

    目前的所在地,如在軌道上,發射的紅外光則無法反射給接收器,此時接收器並

    無導通。

    直流馬達驅動電路

    本計劃因為驅動輪子需要較大的馬力,且在速度與動作上要較確實,所以我

    們選擇直流馬達來製作,直流馬達驅動器廣泛地使用在需要速度可調,良好的速

    度調整及經常啟動,制動和反轉的場所。

    語音廣播系統

    由美國ISD公司生產的新型單晶片語音錄放電路,具有專利技術的類比處理存

    儲方式,斷電後語音內容仍不遺失。

    電路內部由振盪器、語音存儲單元、前置放大器、自動增益

    控制電路、抗干擾濾波器、輸出放大器組成。

    最小的錄放系統僅由一個麥克風、一個喇叭、兩個按鈕、一

  • 5

    個電源及少數電阻、電容組成,幾乎不耗電儲存語音,具有省電模式,本身

    即可獨立錄放音,不須其它應用軟體,更改方便,且工作電壓只需5V。

    1.4論文內容概述

    以紅外線感測器進行對地上之深色線條之感測,藉由感測器之傳回值為依

    據,進行車體之轉向運動,以使車體行進路線與地上預先描繪之線條相符,多半

    作為無人載具之行進方式。

    本組之「廣告機器人」為紅外線感測器,而其中「循跡」為追蹤目標物之軌

    跡,追蹤原理為置於車頭兩個距離感測器所測得之距離與兩感測器之差值,作為

    追蹤與轉向之依據,以期達到最佳效能。

    我們參考了歷年來的學長、姐製作自走車的畢業專題,我們擷取了其中各式

    各樣自走車的優點後,加入自己的構思與創意並付諸實現於我們的專題,在未來

    完成之後能解決人力成本的過度浪費,並有效的吸引消費者的目光,達到宣傳商

    品的目的。

  • 6

    第二章 相關研究

    以傳統的宣傳方式在現今的環境下,如廣告車 、發傳單、電視廣告等,已逐

    漸難以滿足需求,自動化廣告系統成為今日廣告系統的新起之秀,廣告機器人具

    備了語音廣播系統,以及廣告看版,除了能看見多樣的商品訊息以及當日特價品

    行情之外,還可將廣告機器人放置於大賣場或是超市等地方,廣播的產品訊息,

    猶如傳統人力廣告的叫賣方式,不僅能吸引人群的目光,也可以節省廣告叫賣的

    人力資源,對商家以及消費者都是一大福音,除此之外,本系統具有固定路徑與

    節省人力的特性。

    2.1 感測器之研究

    感測電路在此專題 ”廣告機器人” 中,佔有相當重要的地位。它的重要

    性就如同人需要眼睛一樣;感測系統就是自走車的眼睛,主要目的在偵測自走車

    的所在位置與行走路徑是否正確,並提供確實狀況到CPU主板幫助作判斷,而感測

    器的數量與位置也會影響車體行進時的流暢度。

    2.1.1 光感測器可分為反射型和遮斷型兩種

    反射型:就是光發射器與光接收器都位於偵測物體的同一側,利用光反射的

    原理由接收器來判斷是否行走在軌道上、行走路徑是否正確。

    遮斷型:則市發射器與接收器位於車體的兩側,當車體通過時,光線即被遮

    斷,以這樣的方式來判斷是否有障礙物。

  • 7

    2.1.2 紅外線感測器

    紅外線感測器主要以紅外線發射器加上紅外線接收器所組合而成。而紅外線

    發射器事實上就是紅外線發光二極體(LED),LED是以砷化鎵(GaAs)系列材料發展

    為主,發光波長從850nm~940nm不等,屬冷性發光,壽命長達十萬小時以上;而接

    收器則是使用光電晶體來做接收的動作。

    優點:

    反應速度快(約在每秒10-9秒)

    體積小

    用電省

    具高可靠度

    容易取得與應用

    可製成極小或陣列式的元件

    本專題選用反射型的感測器(CNY70)來製作,因為車體是以循軌的方式來

    前進的,然後在參考了學長姐的製作資料與其他的相關資訊後,我們發現大部分

    循軌自走車都使用反射型的感測器(CNY70)來製作,相信用CNY70製作會有一定的

    穩定性,且它附有上面敘述之優點又被大多人所選用,在搜尋相關資料方面能有

    較多資訊,故我們選用反射型的感測器CNY70。

  • 8

    2.2 馬達之研究

    馬達電路在此專題 ”廣告機器人” 中,它是讓車體可以正常左右轉的;馬

    達系統就像廣告機器人的腳,主要目的在讓車體正常行走,放向是否正確,並提

    供確實的放向讓20秒語音系統正確播放內容。

    2.2.1 減速馬達的運用(前馬達)

    直流馬達其驅動的速度與扭力成反比,也就是速度越快,扭力會越小,反之速

    度越慢扭力則越大,但是就根一般手排的車子一樣有了慣性之後即可以加速,自走

    車之所以能在轉速與扭力間互相轉換,重點就是齒輪箱的齒輪能轉換成動能使自

    走車動作,所以我們也要用適當的減速齒輪來決定適當的轉速與扭力。我們預計的

    馬達額定電壓是9V轉速為6000rpm,而我們將會把轉速設為60rpm讓自走車順立承

    載重物行走。

    2.2.2 直流馬達的控制原理(後馬達)

    如果電壓大幅度的變化的話,會引起大量的電流流過電樞,很有可能損壞換

    向片,或降低其壽命,而馬達運轉在一定的速度時,電輸電壓增加,電樞電流也將增

    加,這樣會導致馬達轉舉增加,最後加速到馬達轉矩等於負載轉矩,使馬達穩定下

    來,此時馬達產生最大轉矩,而能力不變,所以它提供了定轉矩驅動。

  • 9

    2.3 語音IC之研究

    語音電路在此專題 ”廣告機器人” 中,佔有相當重要的地位。語音系統就

    是廣告機器人的靈魂,主要目的在播放商品訊息,可以分段,指定,並配合馬達

    系統,播放該方向的語音內容。

    2.3.1 ISD 1420-20秒語音IC

    ISD1400系列語音錄放IC,內由時鐘振盪器、128K位元E2PROM、微音放大器、

    自動增益控制電路、抗干擾濾波器、差動功率放大器等高品性語音錄放系統所需

    的全部基本功能電路。

    2.3.2 ISD25120-120秒語音IC

    ISD2500系列語音錄放IC,內由時鐘振盪器、480K位元E2PROM、微音放大器、

    自動增益控制電路、抗干擾濾波器、差動功率放大器等高品性語音錄放系統所需

    的全部基本功能電路。

  • 10

    2.4 電源電路之研究

    電源電路在此專題 ”廣告機器人” 中,電源系統就是自走車的心臟,主要

    目的在提供每個子系統的電源供應。

    現在要用遙控汽車既有的充電電池作為本系統最主要的供電系統,在直流馬

    達方面的電源直接接上電池的輸出電壓12伏特,而ARM則是利用一顆LM7805穩壓IC

    來提供。LM7805的穩壓電路IC有三隻腳,分別為輸入端,共同接地端及輸出端。

    他的功用是作為穩定,輸出5伏特電壓。最後與感測器、馬達和語音感測器三大主

    要部分進行電源之整合。

    2.5 廣告的呈現和外殼設計

    在車體的上方我們用材質較輕的紙板來當作機器人的外殼,減少車體的

    負載重量,在外殼方面我們設計可以放置廣告傳單的架子,可以在車體的兩側放

    置廣告傳單或是商品訊息,在搭配上語音系統,相輔相成而達成我們要的廣告效

    果,讓在大賣場逛街的顧客被廣告機器人的外觀所吸引,聽到特價商品的訊息,

    並拿取車上的廣告傳單,為廠商製造無限大的商機。

    圖2.5 廣告機器人的正面圖

  • 11

    圖2.6 廣告機器人的左側外觀圖

    圖2.7 廣告機器人的右側外觀圖

  • 12

    圖2.8 廣告機器人的內部圖

  • 13

    第三章系統架構

    由於廣告機器人播放廣告的需求,我們做了下列的考量,作為系統的架構,

    首先,本系統要有一顆具備處理能力的控制晶片,作為控制的核心,第二,是需

    要語音子系統,作為系統讀取的廣告訊息的來源,輸出於喇叭上,第三,行進控

    制子系統,除了依據我們預定的路線行走之外,本子系統還需控制廣告機器人與

    賣場人群的距離,避免與人車或其他路障發生碰撞。

    3.1 廣告機器人內部基本系統架構

    架構只要由五個部份組成:電源部份、語音部份、感測部分、主控部分、馬

    達驅動部份。圖3.1 顯示這五個主要部份的關係。

    圖3.1 基本架構方塊圖

    穩壓電路

    供電系統

    ARM 感測系統 前馬達 20秒語音系統 後馬達

    2分鐘語音系統

  • 14

    ARM 是英國GPS 公司是由通用電氣公司的普來積(Plessey) 半導体部門,以

    及馬可尼(Marconi) 電器部門合併而成,這家半導体公司開發出快速的32位元微

    處理器,屬於精簡指令集架構,並命名為ARM。

    在ARM主控板上送出訊號,讀入感測器所送回來的軌道狀態資料,緊接著送出

    這些資料給馬達板;而馬達板則負責控制左、右轉。在行進當中的修正,是以脈

    衝的分式使後馬達做斷斷續續的行走,直到修正到正確行使的軌道。語音系統收

    到ARM傳來的指令則會配合馬達,當左轉的時候會喊左轉,右轉時會喊右轉,在行

    進當中也會連續播放廣告詞,不受左右轉的影響而中斷,會繼續播放廣告內容。

  • 15

    3.2 廣告機器人系統流程

    本研究計畫在廣告機器人上我們將會有令人好奇感極高的外觀架構,內部則

    是由自走車的感測系統來讓機器人循著預設的軌道在預設路線中前進,為了使廣

    告機器人更具吸引目光,我們也加入了廣告系統能讓機器人在行進之虞,大聲的

    廣告商品訊息,為了使自走車與廣告系統結合,整體架構不至於太過笨重,在行

    進中展現商品訊息,配合著語音播放這就是我們的廣告機器人。如圖3.2所示

    圖3.2 系統流程圖

    電源

    感測電路 啟動定時廣播語音系統

    廣播商品的訊息 ARM接收訊號

    分段重複撥放 馬達判斷左、右轉直走啟動

    馬達驅動電路

    啟動馬達板

    啟動馬達正反轉

  • 16

    第四章電路硬體架構

    4.1 電源電路:

    現在我要用遙控汽車既有的充電電池作為本系統廣告機器人最主要的供電系

    統,在直流馬達方面的電源直接接上電池的輸出電壓12伏特,而ARM則是利用一顆

    LM7805穩壓IC來提供。LM7805的穩壓電路IC有三隻腳,分別為輸入端,共同接地

    端及輸出端。他的功用是作為穩定,輸出5伏特電壓。電路圖 如圖4.1

    圖4.1 系統流程圖

  • 17

    4.2 感測電路

    4.2.1 感測電路之動作原理

    +5V電壓經由電阻330Ω限制電流後,供應光感測器穩定電流,可持續地發射

    出紅外線不可見光。當光LED所發出的紅外線經反射物體反射至光電晶體接收時,

    光電晶體即飽和得VE接近5V,再經史密特反向觸發器4584處理,得到輸出0V 使LED

    不亮,再將信號送至主板。反之,若LED發出之紅外線未經反射物體反射回來電晶

    體則使得LED亮,再將信號送至主板。電路說明補充:在實驗製作上透過LED有無

    正確的亮與滅,便可清楚知道光感測器是否有正確動作。可節省檢查電路的時間。

    電路圖如4.2.1所示

    R1756K

    R18220

    3

    C4 12

    U6CNY70

    R1956K

    R20220

    3

    C4 12

    U7CNY70

    R1556K

    R16220

    3

    C4 12

    U5CNY70

    VCC

    34

    U4B

    MM74C04

    56

    U4C

    MM74C04

    12

    U4A

    MM74C04

    123456

    J9

    CON6

    VCC

    黑線感測

    圖4.2.1 感測器電路圖

  • 18

    4.2.2 感測器放置位置

    感測器放置位置需以車體大小、長寬為考量。若感測器間距離太大,將使得自

    走車在行進間要偏離導引線距離很大時,才會進行修正的動作而造成車體蛇行的

    情形。若距離太小則使得自走車太過敏感,時時在修正,也將造成車體抖行。因

    此適當的排列才能有助於自走車順著正確的路線行進,並能做出適當的修正動作。

    圖4.2.2是說明圖示:

    (橘色=感測器) (黑色=行走路徑)

    圖4.2.2.1感測器放置說明圖

    圖4.2.2.2 感測器放置圖

    (a) 距離太大 (b) 距離太窄 (c) 距離剛好

  • 19

    4.2.3 感測器測試步驟

    1. 車體向右走偏時,需發出左轉訊號使馬達驅動車體並啟動語音系統發出”左轉”聲音來修正車體行進路線。

    2. 車體向左走偏時,需發出右轉訊號使馬達驅動車體並啟動語音系統發出”右轉”聲音來修正車體行進路線。

    3. 感測器間距離是否太大造成車體蛇行。 4. 感測器間距離是否太小造成車體抖行。

  • 20

    4.3 馬達電路

    4.3.1 前馬達

    直流馬達其驅動的速度與扭力成反比,也就是速度越快,扭力會越小,反之速

    度越慢扭力則越大,但是就跟一般手排的車子一樣有了慣性之後即可以加速,自走

    車之所以能在轉速與扭力間互相轉換,重點就是減速馬達的高扭力能轉換成動能

    使自走車動作,所以我們也要用適當的減速馬達來決定適當的轉速與扭力,讓自走

    車順立承載重物行走。

    優點優點優點優點:

    1.可達使用者需求轉速

    2.因速度變慢馬達扭力變大又可降低成本

    R10

    1K

    +12

    R9

    1K

    12

    CN12 PIN/R_MOTO

    Q1647

    Q2

    647

    Q4468

    Q3

    468

    R14

    1K

    R11

    1K

    21CNR1

    24V

    +12

    IN 11

    IN 22

    IN 33

    IN 44

    IN 55

    IN 66

    IN 77

    COMMON8 CLAMP 9OUT 7 10OUT 6 11OUT 5 12OUT 4 13OUT 3 14OUT 2 15OUT 1 16

    J2CON6

    R810K

    R710K

    R610K

    R510K

    R410K

    R310K

    R210K

    R110K

    +12VCC

    1234567

    J1

    CON7

    VCC

    前輪驅動+ 1

    - 2

    MOTOR1直直直直

    圖4.3.1.1 前馬達電路圖

  • 21

    我們將達靈頓放大電路運用於此,在左方兩顆電晶體2955中只要上方的2955

    與右方兩顆電晶體3055中下方的3055通過電流導通時,馬達就會正轉,反之,就

    可以反轉,我們才得以藉此控制馬達的正反轉。

    圖4.3.1.2 此圖為測試前馬達的實作圖和前馬達實品

  • 22

    4.3.2 後馬達

    如果電壓大幅度的變化的話,會引起大量的電流流過電樞,降低其壽命,而馬

    達運轉在一定的速度時,電輸電壓增加,電流也將增加,這樣會導致馬達轉矩增加,

    最後加速到馬達轉矩等於負載轉矩,使馬達穩定下來,此時馬達產生最大轉矩,而

    能力不變,所以它提供了定轉矩驅動。

    優點優點優點優點:

    一般而言,同樣體積的直流馬達可以輸出較大的功率,並且直流馬達的轉速

    不受電源頻率限制,可以製作出高速馬達速度控制只要適當的控制電壓,比較簡

    單容易。

    圖4.3.2 後馬達電路圖

  • 23

    一般的電阻都是四分之ㄧ瓦,但是我們使用的是5瓦的水泥電阻,原因是因為

    後馬達所需電流大,功率也隨之放大!如果使用一般的電阻在後馬達ON跟OFF之間

    的瞬間電流會使電阻及電晶體過熱甚至燒毀,所以我們使用並聯水泥電阻來改善

    電晶體被燒毀的狀況,目的就是為了讓原本過快的直流馬達將速度放慢,進而感

    測黑線行走。

    圖4.3.2 此圖為測試後馬達轉速實作圖

  • 24

    4.3.3 製作前、後馬達所遇到的問題:

    因為控制前馬達的齒輪壞掉,而無法控制前輪的左右轉,我們想了很多方法,

    也試了很多方法。

    方法如下方法如下方法如下方法如下:

    1.到模型店找尋合適的齒輪,但是實作時還是失敗了,原因為齒輪經過數次的轉動

    之後,會導致齒輪孔擴大,久而久之即無法使前輪達到左右轉的動作。

    圖4.3.3.1 前馬達齒輪圖

    2.是我們使用PC版來搭配減速馬達,將PC版鑽孔至大約跟馬達轉軸符合的大小,但

    是經由實作發現由於PC版是纖維材質的版子,跟齒輪一樣會遇到孔漸增大的問題,

    一樣無法順利使前馬達左右轉。

    圖4.3.3.2 前馬達製作圖

  • 25

    3.後來的方法是使用牙刷柄來控制,再用市面上銷售的3M快乾膠,來暫時固定,效

    果奇佳,但是由於我們的轉彎會持續,所以還是不夠堅固,決定在使用鋁條來增加

    堅定度。

    圖4.3.3.3 前馬達製作圖

    4.最後的固定方法:

    圖4.3.3.4 前馬達最後固定圖

  • 26

    尋找了許多材料後,我們到鋁材行購買鋁材,並到工廠切割成所需大小後,並加

    入螺絲固定住減速馬達,使其不會因左右轉力量太強而斷裂或移位,跟之前的

    方法比較起來,不僅堅固了許多,也使得轉動更加有力量。

    5.前馬達電路板2955電晶體燒毀:

    圖4.3.3.5 前馬達板燒毀圖

    因為前馬達在實測的時候不停的轉動,導致電晶體2955燒毀,而且前馬達板也暫

    時無法動作,我們後來除了裝上新的2955之外,還檢查了電容、電晶體是否正常,

    後來找到了一顆電容也燒毀,換上新的之後才使馬達順利轉動。

    6.後馬達電晶體過熱:

    圖4.3.3.6 前馬達加裝散熱片圖

    散熱片

  • 27

    我們使用並聯水泥電阻來改善電晶體被燒毀的狀況,目的就是為了將原本過快的

    直流馬達將速度放慢,進而感測黑線行走,但是實作的時候電晶體也有燒毀的情

    況,所以我們加了散熱片,分散電晶體的過熱問題。

    判別左轉右轉及直走的方法判別左轉右轉及直走的方法判別左轉右轉及直走的方法判別左轉右轉及直走的方法:

    如果馬達轉向同一方向,而無法停止的話,勢必會跑出預設的黑線範圍,所以我

    們需要使用微動開關,並且配合程式來讓馬達知道什麼時候該停止轉動,做出預

    期的動作。

    動作原理動作原理動作原理動作原理:

    感應器先偵測黑線,再送回ARM,再由ARM給馬達板訊號,然後驅動馬達做正、反轉

    的動作,若輪子有確實左右轉,就會觸動到微動開關,然後ARM就會接收到訊息,

    知道馬達已經正確執行完成動作了。

    左轉時:

    圖4.3.3.7 後馬達電路圖

    判別輪胎往左偏移,當輪胎往左偏移到底時,置於車體右方的微動開關即會感應,

    如果右方有黑線輪胎需轉向右方,則使前馬達停止轉動,並轉向相反方向。

    右轉時:

  • 28

    圖4.3.3.7 後馬達電路圖

    判別輪胎往右偏移,當輪胎往右偏移到底時,置於車體左方的微動開關即會感應,

    如果左方有黑線輪胎需轉向右方,使前馬達停止轉動,並轉向相反方向。

    直走時:

    圖4.3.3.8 後馬達電路圖

    當微動開關是被押著時,代表直走而前馬達也是靜止的狀態,而微動開關一放開,

    即是代表車子有左轉或右轉的動作。

  • 29

    4.4 語音電路

    語音系統是廣告機器人的重點功能 ,語音系統提供商品訊息,可以分段撥出,

    指定撥出,並且重複播放,在廣告機器人行進時可以配合語音系統播放該方向的

    語音內容。

    4.4.1 ISD 1420規格及使用說明(20秒語音IC)

    ISD1400系列語音錄放IC,內由時鐘振盪器、128K位元E2PROM、微音放大器、

    自動增益控制電路、抗干擾濾波器、差動功率放大器等高品性語音錄放系統所需

    的全部基本功能電路。

    圖4.4.1 ISD 1420 內部圖

  • 30

    圖4.4.2 ISD 1420 電路圖

    位址功能介紹:

    位址控制

    (1動作)

    功能 典型應用 可同時使用的模式

    A0 信號檢索 播放下一段 A4

    A1 刪除結尾標誌 將結尾標誌至於最後 A3,A4

    A2 無用

    A3 循環 從位址0連續放音 A1

    A4 連續詢址 錄音/放音連續執行 A0,A1

    A5 無用

    A6、A7 選擇使用模式 切換位址模式與操作模式

    位址控制 功能

    REC 錄音

    MIC+、MIC- 麥克風

  • 31

    SP+、SP- 喇叭

    PLAYE

    (PE)

    輕按PLAYE鍵,這樣給PLAYE 腳一個低電位脈衝,電路進入

    放音狀態,直到放音結束。

    PLAYL

    (PL)

    按下PLAYL 按鍵(PLAYL 腳保持為低電位),電路進入放

    音狀態,直到PLAYL 變高或放音結束,電路重新進入準備狀

    態。

    依功能性需求將A6及A7設為1進入操作模式,A0資訊檢索允許使用者在內

    容跳轉瀏覽,而不必在乎每個資訊的實際物理位置。每個控制信號的低電位脈衝

    將內部位址指到下一個資訊位置。這種模式只能在放音中使用,通常與A4 操作

    同時應用正好符合錄放音系統的功能導向。在一般的操作中,當放音操作遇

    到結尾標誌(EOM)時,位址將復原到0。A4操作模式將禁止位址指針的重置,允

    許資訊能連續錄製和播放。當電路處於靜止狀態,不是處於錄音或放音狀態,即

    可的設置該腳為低電位將重置位址。

  • 32

    圖4.4.3 20秒語音系統流程圖

    電源開啟

    設定指撥開關

    1-on 2-on

    鍵入B鍵

    (Reset)

    C鍵壓住不放

    (開始錄音)

    放開C鍵

    (完成一段錄音)

    設定指撥開關

    1-off 2-off

    設定指撥開關

    1-on 2-on

    程式控制播放 手動播放 錄音

    鍵入A鍵

    (播放第一段)

    重複此步驟可錄製

    下一段語音

    再次鍵入A鍵可

    播放下一段語音

  • 33

    4.4.2 ISD25120 規格及使用說明(120秒語音IC)

    ISD2500系列語音錄放IC,內由時鐘振盪器、480K位元E2PROM、微音放大器、

    自動增益控制電路、抗干擾濾波器、差動功率放大器等高品性語音錄放系統所需

    的全部基本功能電路。

    圖4.4.2.1 ISD25120內部方塊圖

    採用直接類比量儲存技術DAST,再現優質原聲。訊息可儲存10年以上,可反覆

    錄放達10萬次之多。較強的選址能力,可把存儲器分成160段來進行管理。具有自

    動省電模式,此時僅需0.5μA的保持電流。工作電壓:5V,靜態電流:0.5~2μA

    工作電流:15~30mA。

  • 34

    圖4.4.2.2 語音電路圖

    利用指撥開關的設計,可依自己喜好撥方以錄好的內容。

    模式介紹模式介紹模式介紹模式介紹::::

    模式 功能 典型應用 可組合使用的模式

    M0 訊號檢索 快速進入訊號 M4、M5、M6

    M1 刪除WOM 在最後一條信息結束處放EOM M3、M4、M5、M6

  • 35

    M2 無用

    M3 循環 從0地址連續放音 M1、M5、M6

    M4 連續尋址 錄放連續的多段信息 M0、M1、M5

    M5 CE電位有效 允許暫停 M0、M1、M3、M4

    M6 按鍵模式 簡化外圍電路 M0、M1、M3

    由於ISD25120內建數種操作模式,因此可用最少的外部元件實現最多的

    功能。A0~A6分別對應七種工作模式(其中A2對應M2為保留待用模式)。A0~A6作為

    模式控制輸入時,高電位動作。例如:當A8、A9和A3均為高電位時,ISD251

    20 語音IC 在M3模式(循環播放)下工作。

    位址功能介紹位址功能介紹位址功能介紹位址功能介紹::::

    位址控制(1動作) 功能介紹

    P/R 錄音選擇控制。(高電位為放音,低電位為錄音。)

    PD 省電模式控制。M6中間有停止復位功能。

    CE 本端變低後(而且PD為低),允許進行錄放操作。IC在本

    端的下降沿鎖存地址線和P/R端的狀態。

    OVF 該端輸出低電位脈衝表示溢位,之後該端狀態跟隨CE端

    的狀態,直到PD端變高。

    EOM EOM標誌在錄音時由IC自動插入到該信息的結尾。放音遇到

    EOM時,本端輸出低電位脈衝。IC內部會檢測電源電壓以維

    護信號的完整性,當電壓低於3.5V時,本端變低,IC只能

    放音。

  • 36

    圖4.4.2.3 120秒語音系統流程圖

    圖4.4.2.4 120秒 分段播放指撥開關板 操作流程圖

    SP

    語音板開關

    ALL

    播放所有語音

    1~6

    選擇播放語音

    鍵入播放鍵

    開始播放

    電源開啟

    設定 錄音/播放

    指撥開關

    錄音

    設定分段放音板指

    撥開關

    按下錄音鈕不放

    開始錄音

    放開錄音紐完成

    一段錄音

    重覆此步驟可錄

    製六段語音訊息

    播放

    鍵入播放鍵開

    始播放

  • 37

    4.4.3 ISD1420 (20秒語音IC)操作說明

    圖4.4.3 20秒 實體圖

    AAAA:播放 BBBB:RESET CCCC:錄音 D:MIC(麥克風)

    EEEE:指撥開關 動作一:1-on 2-on 錄音

    動作二:1-off 2-off 程式控制

    動作三:1-off 2-on 手動播放

    本專題會用到兩顆語音IC分別為兩分鐘與20秒語音IC,以下為20語音IC之操作

    說明。開始播放前要先將聲音錄進語音IC中,錄音及操作方式如下:

    1. 電源開啟後,先將指撥開關撥為動作一動作一動作一動作一接著按一下 B鍵做 RESET 的動作。 2. 將 C鍵按住不放即開始錄音直到放開 C鍵完成一段錄音,以此類推。(20 秒語音 IC 音只提供左轉、右轉、前進提,故只設計分成三段)

    3. 將指撥開關撥到動作三動作三動作三動作三即用手動的方式聆聽錄音的內容,若想要修改播放內容,則可依照步驟 1的操作方式更改其內容。

    4. 將指撥開關撥到動作二時,播放的動作則是由程式控制的,當廣告車向左轉時則會播放”左轉”,向右轉則會播放”右轉”,前進時則會播放前進。

    AAAA BBBB CCCC DDDD

    EEEE

  • 38

    4.4.4 ISD25120(120秒語音IC)操作說明:

    1. 指撥開關撥到下,紅色的按鈕按下即開始錄音,放開錄音鈕後即完成一段錄音(一段錄音限定 20 秒,可錄製 6段)

    2. 指撥開關撥到上(P),紅色的按鈕按下即開始播放

  • 39

    3.指撥開關是可以指定要第幾段播放(SP可把兩分鐘錄音關掉、ALL播放全部)

    4.4.5 放大電路

    此電路是利用最基本的電晶體放大原理使音量放大無須花費太多的金錢最為實

    際。實體電路:

  • 40

    第五章 軟體流程圖

    5.1 程式撰寫環境介紹

    � Microsoft Visual C++ 6.0 用來編寫程式的工具,編寫完畢後存檔黨名main.c。

    � Cygwin:安裝 Cygwin

    I. 執行setup開始安裝,下一步後會有三個選項分別是Install from

    Interent、Download from Interent、Install from Local Directory選擇第三

    個選項,過來都是下一步,一直到他出現Select Packages這邊之後,用滑鼠去點

    選Default一下,這樣全部的Default字樣將會變成Install過來之後就可以一直安

    裝下去了。

    II. 先把檔名arm-elf-tools-linux.tar.gz複制到 \cygwin\usr\local底

    下,然後打開cygwin程式key入cd /usr/local 按enter,過來就要執行解壓縮的

    步驟打上指令tar zxvf arm-elf-tools-linux.tar.gz 按上enter他就會自己執行

    解壓縮這個步驟,以上程序作完就表示你的cygwin已經完全安裝完了。

    III. 過來把test這個資料夾複制到 \cygwin\user\下,這樣之後就可以編譯

    程式了,編譯程式則使用UltraEdit7.0來編寫main.c這個檔案,結束之後過則開

    放cygwin打上指令cd /home/user/test按enter,過來打make按enter,再來打make

    bin,除錯完畢。

  • 41

    圖 5.1 cygwin make的執行圖

  • 42

    QuickWriter:將除錯完的程式模擬,測試完畢後燒到ARM裡面。

    QuickWriter操作步驟:

    (1)將RS232連接到PORT1,接著啟動QuickWriter,在configurate設定中,

    bootstrap file設定XM7092.BIN,將板子RESET按下uart boot mode start之後

    erase與AUTO亮起表示板子正常。

    (2)在configurate設定中,bootstrap file設定指定檔案,將板子RESET按下,

    QuickWriter上的uart boot mode start之後可見到程式在ARM執行的結果。

    (3) 在configurate中設定bootstrap file選4190k093按下ok再按 uart boot

    mode start /erase /transmit程式燒入完成。

    圖 5.2 QuickWriter 的介面圖

  • 43

    5.2 廣告機器人軟體說明

    程式分為四部份,主程式、馬達處理程式、感測器處理程式及語音處理程式,

    主程式部分主要根據中斷副程式所提供的感測器狀態值,給馬達做出需要的動

    作,處理完後便回到主程式開重複動作。

    車體動作說明車體動作說明車體動作說明車體動作說明::::

    開始→左轉→右轉→中間碰到黑線,後輪開始動作→左或右方碰到黑線輪胎

    會轉到底然後回正。

    馬達處理程式馬達處理程式馬達處理程式馬達處理程式::::

    依馬達狀態變數呼叫馬達驅動程式(程式碼 143~171)每一個子程式都是的動

    作處理,以達到馬達正反轉的動作。

    感測器處理程式感測器處理程式感測器處理程式感測器處理程式::::

    主要的工作是將3組感測器依序致能及續讀回狀態後分別存入暫存器,delay

    一段時間後再重複上述動作,馬達處理程式的接收信號後做出動作。(程式碼

    173~180)

    語音處理程式語音處理程式語音處理程式語音處理程式::::

    20秒IC 有ARM控制 語音內容事先預錄好,再有語音副程式控制,當前進時會

    喊前進,120秒IC 語音內容也是事先錄好,在由副程式控制分段播出還是全部播

    出。(程式碼 182~228)

  • 44

    圖5.2.1 程式流程圖

    輪 胎 確 定 回

    感 測 判 斷 左

    右轉或直走

    判斷右方的感

    測是否出線

    判斷左方的感

    測是否出線

    啟動馬達

    依 照 程 式 所

    設 行 走 並 配

    合語音播放 否

    觸動左方微動開關

    馬達停止轉動

    觸動右方微動開關

    馬達停止轉動

    是 否 回 到

    感測線上

    開始

    否 是

  • 45

    圖5.2.2 20秒語音錄放板 程式流程圖

    開始

    是否左轉

    是否右轉

    是否前進

    播放左轉

    播放右轉

    播放前進

  • 46

    圖5.2.3 120秒語音錄放板 程式流程圖

    開始

    ALL 是 否

    為ON

    1~6 是否有

    ON

    播 放 所 有

    訊息

    播 放 設 為

    ON的段位

  • 47

    第六章系統實現

    設計一個車體平台,使自動隨行車可以承受負載(目前所能承受的負載會依照車體

    重量跟馬達扭力來估算負載大小),依據膠帶佈成的軌道行走且在自走車上加裝定

    時廣播系統、廣告活動看版,整個系統完成後,車體的部份裝上機器人的上半身,

    輪子變成機器人的雙腳,這樣就完成廣告機器人。

    第七章 結論

    製作一部自走廣告機器人,能在賣場中行走,播放賣場資訊,除了能有檢視賣場

    庫存的功能之外,當廣告機器人經過時,機器人身上感測器作為避免碰撞的依據,

    不論是賣場之目的,之後更進一步運用到各式機器上發展出更多可擴充之功能,

    且以後可以靈活運用在各個領域上。

  • 48

    參考文獻

    1. 8051 單晶片教學指引,金禾出版社,2002

    2. 鄧錦城,8051 單晶片實作寶典,益眾/宏友圖書出版 1999

    3. 盧正興、陳昭凌,8051 單晶片為電腦應用,高立出版,1998

    4. 大鳥實驗室http://www.dainau.com

    5. 自走車設計與製作網http://s07368.myweb.hinet.net/

    6. 2005 年崑山科技大學電子工程系莊國揚等人畢業專題(巡軌自走車)

    7. 2004 年崑山科技大學電子工程系李志遠等人畢業專題(無人自走車)

    8. 2002 年崑山科技大學電子工程系高弘霖畢業專題(無人操控自走車)

  • 附錄 程式

    #define REG_BASE 0x09000000

    #define OUT_DATA_PORT (REG_BASE + 0x1600)

    #define OUT2_DATA_PORT (REG_BASE + 0x1620)

    #define IN_DATA_PORT (REG_BASE + 0x1638)

    #define IN2_DATA_PORT (REG_BASE + 0x1608) //微動

    #define OUT_MUX_PORT (REG_BASE + 0x0000)

    #define OUT2_MUX_PORT (REG_BASE + 0x0010)

    #define IN_MUX_PORT (REG_BASE + 0x001c)

    #define IN2_MUX_PORT (REG_BASE + 0x0004)

    #define OUT_DIR_PORT (REG_BASE + 0x1604) //輸出

    #define OUT2_DIR_PORT (REG_BASE + 0x1624) //輸出

    #define IN_DIR_PORT (REG_BASE + 0x163c)

    #define IN2_DIR_PORT (REG_BASE + 0x160c)

    R-1

  • //input pin IN_D

    #define L_LIMIT 0x01 //ACTIVE 0 前面微動開關

    #define M_LIMIT 0x02 //ACTIVE 0

    #define R_LIMIT 0x04 //ACTIVE 0

    #define L_SEN 0x08 //ACTIVE 0 硬體

    #define M_SEN 0x10 //ACTIVE 0

    #define R_SEN 0x20 //ACTIVE 0

    #define LOOP_SEL 0x80 //0 = all messageloop 1= one message loop 開關all的指

    //input pin IN2_D

    #define MSG1_SEL 0x80 //ACTIVE 0 六段語音選擇 接到開關

    #define MSG2_SEL 0x40 //ACTIVE 0

    #define MSG3_SEL 0x20 //ACTIVE 0

    #define MSG4_SEL 0x10 //ACTIVE 0

    #define MSG5_SEL 0x08 //ACTIVE 0

    #define MSG6_SEL 0x04 //ACTIVE 0

  • //output pin OUT_D

    #define FM1 0x01 //ACTIVE 1 前馬達左

    #define FM2 0x02 //ACTIVE 1 前馬達又

    #define BM1 0x04 //ACTIVE 1 後馬達前

    #define PE 0x10 //ACTIVE 0 20秒的語音ic啟動

    #define A0 0x20 //ACTIVE 0 控制20秒撥放

    #define A4 0x80 //ACTIVE 0 20秒語音錄音

    //output pin OUT2_D

    #define A0_SEL 0x01 //輸出120秒的控制

    #define A3_SEL 0x02

    #define A4_SEL 0x04

    #define A5_SEL 0x08

    #define A6_SEL 0x10

    #define CE_SEL 0x20

    #define PD_SEL 0x40

    #define PR_SEL 0x80

  • //flag

    #define LINE 0x00 //定義

    #define LEFT 0x01

    #define RIGHT 0x02

    #define IN_LINE 0x00

    #define L_OUTSIDE 0x01

    #define R_OUTSIDE 0x02

    #define NON_FIND 0xff

    #define ERROR 0xfe

    #define ON_TIME 0x30 //ON 後馬達前進充電

    #define OFF_TIME 0x05 //OFF 後馬達的抑制速度

    unsigned char *OUT_D = (unsigned char *)OUT_DATA_PORT;

    unsigned char *OUT2_D = (unsigned char *)OUT2_DATA_PORT;

    unsigned char *IN_D = (unsigned char *)IN_DATA_PORT;

    unsigned char *IN2_D = (unsigned char *)IN2_DATA_PORT;

    int speak=0x55;

  • int go_flag=0x00; //00=off

    int on_flag=0x00; //00=off

    int act_cnt=ON_TIME; //計時後馬達的時間30or5

    int play_point=0xff; //disable 撥放的指標段落 0ff

    int re_play_time=1000; //1000*20ms=20sec

    int re_play_cnt; //計時

    /*ARM SWI 處理函數 */

    void swi_handler(unsigned long swi_number)

    {

    switch(swi_number)

    {case 0 :break;

    case 1 :break;

    default:break;

    }

    }

    /*ARM FIQ 處理函數*/

    void fiq_handler(void)

  • {}

    void irq_handler(void)

    {}

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

    **/

    void delay(unsigned int t) //延遲 100ms

    { int i; for(i=0;i

  • void wait_eom()

    {delay(50);}

    //播放完畢的指示

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

    **/

    void play_now() //現在的撥放20秒放音

    {

    *OUT_D=*OUT_D|A0;

    *OUT_D=*OUT_D|PE;

    delay(1);

    *OUT_D=*OUT_D&(~A0);

    *OUT_D=*OUT_D&(~PE);

    delay(1);

    *OUT_D=*OUT_D|PE;

    }

    //利用A0刪除結尾標幟然後播放

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

    **/

    void quit_1()

  • {

    *OUT_D=*OUT_D|A0;

    delay(1);

    *OUT_D=*OUT_D&(~PE);

    delay(1);

    *OUT_D=*OUT_D|PE;

    wait_eom();

    }

    //令A0控制訊號處於低電位指向下一段語音位址,在令A0為低電位即開始播放至

    結束

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

    **/

    void play_left()

    {reset_1420();play_now();}

    //先reset然後播放

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

    **/

    void play_right()

    {reset_1420();quit_1();play_now();}

  • //先reset在跳過一段,然後播放

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

    **/

    void play_go()

    {reset_1420();quit_1();quit_1();play_now();}

    //先reset在跳過兩段然後播放

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

    **/

    void f_stop()

    { *OUT_D=*OUT_D&(~FM1)&(~FM2);} //STOP FORD MOTO

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

    **/

    void turn_l() //控制硬體馬達左轉

    {

    if(*IN_D & L_LIMIT)

    {

    *OUT_D=(*OUT_D&0xfc)|FM1;

    if(speak!=LEFT){play_left();speak=LEFT;}

    }

  • else f_stop();}

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

    **/

    void turn_r()

    {

    if(*IN_D & R_LIMIT)

    {

    *OUT_D=(*OUT_D&0xfc)|FM2;

    if(speak!=RIGHT){play_right();speak=RIGHT;}

    }

    else f_stop();

    }

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

    **/

    void b_stop()

    { go_flag=0x00; *OUT_D=*OUT_D&(~BM1); } //MAIN MOTOR STOP

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

    **/

    void b_go()

  • {

    go_flag=0x01;

    act_cnt=ON_TIME;

    *OUT_D=*OUT_D|BM1;

    if(speak!=LINE){play_go();speak=LINE;} //MAIN MOTOR GO

    }

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

    **/

    int sen_in() //抓三個感測器

    {

    if(~*IN_D & L_SEN) return(L_OUTSIDE);

    else if(~*IN_D & M_SEN) return(IN_LINE);

    else if(~*IN_D & R_SEN) return(R_OUTSIDE);

    else if((*IN_D&0X38)==0) return(ERROR);

    else return(NON_FIND);

    }

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

    **/

    void loop_all_msg()//所有訊息

  • {

    *OUT2_D=0xa8;

    delay(1);

    *OUT2_D=*OUT2_D&(~CE_SEL);//硬體腳位

    //delay(1);

    //*OUT2_D=*OUT2_D|CE_SEL;

    }

    //利用 /CE high~/CE lo 動作播放完所有訊息

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

    **/

    void reset_msg()

    {

    *OUT2_D=*OUT2_D|PD_SEL;

    delay(30);

    *OUT2_D=*OUT2_D&(~PD_SEL);

    delay(30);

    }

    //一開始PD腳處於低電位 配合硬體線路動作

  • //(高電位:停止動作STOP、低電位:重置RESET)

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

    **/

    void quit1_msg() //跳過一段廣告

    {

    *OUT2_D=0Xb1;

    delay(30);

    *OUT2_D=*OUT2_D&(~CE_SEL);

    delay(30);

    *OUT2_D=*OUT2_D|CE_SEL;

    delay(50);

    }

    //硬體設定令PR為高電位PD為低電位,/CE由高電壓轉為低電壓 即開始播放,

    重複 /CE high~/CE lo 動作即可跳至下一段

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

    **/

    void play_msg() //撥放

    {

    *OUT2_D=0xb0;

  • *OUT2_D=*OUT2_D&(~CE_SEL);

    delay(30);

    *OUT2_D=*OUT2_D|CE_SEL;

    }

    //硬體設定令PR為高電位PD為低電位,/CE high~/CE lo 動作 即開始播放

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

    **/

    void stop_msg()

    {

    *OUT2_D=*OUT2_D|CE_SEL;

    delay(30);

    }

    //一開始PD腳處於低電位 配合硬體線路動作

    (高電位:停止動作STOP、低電位:重置RESET)

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

    **/

    void playx_msg(int i) //指定撥放(x)

    {

    reset_msg();

  • if(i!=0)

    {

    while(--i) quit1_msg();

    play_msg();

    }

    }

    //播放分段播放指撥開關 設好的位址

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

    **/

    int read_msg_sw()

    {

    re_play_time=1000;

    if((*IN_D&LOOP_SEL)==0) {

    re_play_time=6000;return(0);}//設定一段語音約為20秒

    else if((*IN2_D&MSG1_SEL)==0) return(1);

    else if((*IN2_D&MSG2_SEL)==0) return(2);

    else if((*IN2_D&MSG3_SEL)==0) return(3);

    else if((*IN2_D&MSG4_SEL)==0) return(4);

  • else if((*IN2_D&MSG5_SEL)==0) return(5);

    else if((*IN2_D&MSG6_SEL)==0) return(6);

    else return(0xff);

    }

    //抓取分段播放指撥開關 on是低電位

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

    **/

    void timer_proc() //程式任何時候都會執行的東西20ms隨時在檢查 後馬達2分鐘的

    檢查

    {

    delay(20);

    if(go_flag!=0)

    {

    if(--act_cnt==0)

    {

    if(on_flag==0)

    {

    *OUT_D=*OUT_D|BM1;

    on_flag=0x01;

  • act_cnt=ON_TIME;

    } //switch to on 充電

    else

    {

    *OUT_D=*OUT_D&(~BM1);

    on_flag=0x00;

    act_cnt=OFF_TIME; //switch to off 不充電

    }

    }

    }

    if(re_play_cnt--==0) //重播廣告詞的計時

    {

    re_play_cnt=re_play_time;

    if(play_point!=0xff)

    {

  • if(play_point!=0) // 等於0時 all撥放

    playx_msg(play_point);

    else

    {

    stop_msg();

    reset_msg();

    loop_all_msg();

    }

    }

    }

    }

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

    **/

    void my_main(void)

    {

    *(int *)OUT_DATA_PORT=0x00;

  • *(int *)IN_DATA_PORT=0xFF;

    *(int *)IN2_DATA_PORT=0xFF;

    *(int *)OUT2_MUX_PORT=0xff;

    *(int *)IN_MUX_PORT=0x3eb;

    *(int *)IN2_MUX_PORT=0xffff;

    *(int *)OUT_DIR_PORT=0x00;

    *(int *)OUT2_DIR_PORT=0x00;

    *(int *)IN_DIR_PORT=0xFF;

    *(int *)IN2_DIR_PORT=0xFF;

    *OUT2_D=0x30; //手動撥音 才有動作

    *OUT_D=0xb0;

    delay(1000);

    turn_l();

    while(*IN_D & L_LIMIT) delay(10);

  • f_stop();

    delay(1000);

    turn_r();

    while((*IN_D & M_LIMIT)==0) delay(10);

    f_stop();

    delay(100);

    while(IN_LINE != sen_in()) delay(10);

    delay(1000);

    reset_msg();

    re_play_cnt=10;

    play_point=read_msg_sw();

    b_go();

    while(1)

    {

    timer_proc();

    switch(sen_in()) //檢查前面3個感測器

    {

  • case(R_OUTSIDE):

    {

    f_stop();

    delay(100);

    turn_r();

    while(IN_LINE != sen_in())

    {

    if(~*IN_D & R_LIMIT) f_stop();

    timer_proc();

    } //waite for m sen in

    f_stop();

    b_stop();

    delay(100);

    turn_l(); //back

    while((*IN_D & M_LIMIT)==0) timer_proc();

    f_stop();

    delay(500);

    b_go();

  • }break;

    case(L_OUTSIDE):

    {

    f_stop();

    delay(100);

    turn_l();

    while(IN_LINE != sen_in())

    {

    if(~*IN_D & L_LIMIT) f_stop();

    timer_proc();

    } //waite for m sen in

    f_stop();

    b_stop();

    delay(100);

    turn_r(); //back

    while((*IN_D & M_LIMIT)==0) timer_proc();

    f_stop();

    delay(500);

  • b_go();

    }break;

    case(IN_LINE) :break;

    case(ERROR) :b_stop();break; //停止

    default:break;

    }

    }

    }