版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目 錄</b></p><p> 1前言錯(cuò)誤!未定義書(shū)簽。</p><p><b> 2總體方案設(shè)計(jì)3</b></p><p> 3安卓操作系統(tǒng)簡(jiǎn)介5</p><p> 3.1安卓操作系統(tǒng)發(fā)展5</p><p> 3.2安
2、卓開(kāi)發(fā)與建立5</p><p> 3.3安卓的應(yīng)用程序分析6</p><p> 3.4安卓的藍(lán)牙開(kāi)發(fā)技術(shù)7</p><p> 3.5安卓平臺(tái)的藍(lán)牙編程7</p><p> 4系統(tǒng)軟件程序設(shè)計(jì)12</p><p> 4.1C語(yǔ)言編程環(huán)境介紹:12</p><p> 4.2各
3、模塊的編程13</p><p><b> 5系統(tǒng)調(diào)試20</b></p><p> 5.1C語(yǔ)言的調(diào)試20</p><p> 5.2JAVA語(yǔ)言的調(diào)試23</p><p><b> 6總結(jié)與體會(huì)25</b></p><p><b> 7謝辭26
4、</b></p><p><b> 8參考文獻(xiàn)27</b></p><p><b> 附錄:程序:27</b></p><p> 第1章 前言(緒論)</p><p> 1.1智能小車(chē)的意義和作用 </p><p> 隨著科學(xué)技術(shù)的發(fā)展,機(jī)器人開(kāi)始
5、出現(xiàn)在人們的視野中,機(jī)器人的研究一直是科學(xué)家們熱衷的事,并努力把機(jī)器人運(yùn)用到生活的方方面面。目前機(jī)器人的發(fā)展已經(jīng)遍及機(jī)械、電子、冶金、交通、宇航、國(guó)防等領(lǐng)域。近年來(lái)機(jī)器人的智能水平不斷提高,并且迅速地改變著人們的生活方式。人們?cè)诓粩嗵接?、改造、認(rèn)識(shí)自然的過(guò)程中,制造能替代人勞動(dòng)的機(jī)器一直是人類(lèi)的夢(mèng)想。</p><p> 隨著科學(xué)技術(shù)的發(fā)展,機(jī)器人的感覺(jué)傳感器種類(lèi)越來(lái)越多,其中視覺(jué)傳感器成為自動(dòng)行走和駕駛的重要部
6、件。視覺(jué)的典型應(yīng)用領(lǐng)域?yàn)樽灾魇街悄軐?dǎo)航系統(tǒng),對(duì)于視覺(jué)的各種技術(shù)而言圖像處理技術(shù)已相當(dāng)發(fā)達(dá),而基于圖像的理解技術(shù)還很落后,機(jī)器視覺(jué)需要通過(guò)大量的運(yùn)算也只能識(shí)別一些結(jié)構(gòu)化環(huán)境簡(jiǎn)單的目標(biāo)。視覺(jué)傳感器的核心器件是攝像管或CCD,目前的CCD已能做到自動(dòng)聚焦。但CCD傳感器的價(jià)格、體積和使用方式上并不占優(yōu)勢(shì),因此在不要求清晰圖像只需要粗略感覺(jué)的系統(tǒng)中考慮使用接近覺(jué)傳感器是一種實(shí)用有效的方法。</p><p> 機(jī)器人要實(shí)
7、現(xiàn)自動(dòng)導(dǎo)引功能和避障功能就必須要感知導(dǎo)引線和障礙物,感知導(dǎo)引線相當(dāng)給機(jī)器人一個(gè)視覺(jué)功能。避障控制系統(tǒng)是基于自動(dòng)導(dǎo)引小車(chē)(AVG—auto-guide vehicle)系統(tǒng),基于它的智能小車(chē)實(shí)現(xiàn)自動(dòng)識(shí)別路線,判斷并自動(dòng)避開(kāi)障礙,選擇正確的行進(jìn)路線。使用傳感器感知路線和障礙并作出判斷和相應(yīng)的執(zhí)行動(dòng)作。</p><p> 該智能小車(chē)可以作為機(jī)器人的典型代表。它可以分為三大組成部分:傳感器檢測(cè)部分、執(zhí)行部分、CPU。機(jī)
8、器人要實(shí)現(xiàn)自動(dòng)避障功能,還可以擴(kuò)展循跡等功能,感知導(dǎo)引線和障礙物??梢詫?shí)現(xiàn)小車(chē)自動(dòng)識(shí)別路線,選擇正確的行進(jìn)路線,并檢測(cè)到障礙物自動(dòng)躲避?;谏鲜鲆?,傳感檢測(cè)部分考慮到小車(chē)一般不需要感知清晰的圖像,只要求粗略感知即可,所以可以舍棄昂貴的CCD傳感器而考慮使用價(jià)廉物美的紅外反射式傳感器來(lái)充當(dāng)。智能小車(chē)的執(zhí)行部分,是由直流電機(jī)來(lái)充當(dāng)?shù)模饕刂菩≤?chē)的行進(jìn)方向和速度。單片機(jī)驅(qū)動(dòng)直流電機(jī)一般不占用單片機(jī)資源,直接選擇有PWM功能的單片機(jī),這可以
9、由軟件模擬PWM輸出調(diào)制,需要占用單片機(jī)資源,難以精確調(diào)速,但單片機(jī)型號(hào)的選擇余地較大??紤]到實(shí)際情況,CPU使用STC89C52單片機(jī),配合軟件編程實(shí)現(xiàn)。</p><p> 1.2智能小車(chē)的現(xiàn)狀</p><p> 隨著計(jì)算機(jī)和控制技術(shù)的發(fā)展,智能移動(dòng)小車(chē)在很多行業(yè)都有實(shí)質(zhì)成果。工作的環(huán)境也從很單純的室內(nèi)環(huán)境發(fā)展成了各種復(fù)雜環(huán)境,如地面,水下,太空等等。在小車(chē)的功能發(fā)面,越來(lái)越多的新功
10、能被小車(chē)所運(yùn)用,如實(shí)現(xiàn)循跡、避障、檢測(cè)貼片、尋光入庫(kù)、避崖,拍攝,遠(yuǎn)程傳輸信號(hào)等等。國(guó)內(nèi)智能車(chē)輛研究現(xiàn)狀 相比于國(guó)外,我國(guó)開(kāi)展智能車(chē)輛技術(shù)方面的研究起步較晚,開(kāi)始于20世紀(jì)80年代。而且大多數(shù)研究處在于針對(duì)某個(gè)單項(xiàng)技術(shù)研究的階段。雖然我國(guó)在智能車(chē)輛技術(shù)方面的研究總體上落后于發(fā)達(dá)國(guó)家,并且存在一定得技術(shù)差距,但是我們也取得了一系列的成果,主要有: (1)中國(guó)第一汽車(chē)集團(tuán)公司和國(guó)防科技大學(xué)機(jī)電工程與自動(dòng)化學(xué)院與2003年研制成功我國(guó)第一
11、輛自主駕駛轎車(chē)。該自主駕駛轎車(chē)在正常交通情況下的高速公路上,行駛的最高穩(wěn)定速度為13km/h,最高峰值速度達(dá)170km/h,并且具有超車(chē)功能,其總體技術(shù)性能和指標(biāo)已經(jīng)達(dá)到世界先進(jìn)水平。 (2)南京理工大學(xué)、北京理工大學(xué)、浙江大學(xué)、國(guó)防科技大學(xué)、清華大學(xué)等多所院校聯(lián)合研制了7B.8軍用室外自主車(chē),該車(chē)裝有彩色攝像機(jī)、激光雷達(dá)、陀螺慣導(dǎo)定位等傳感器。計(jì)算機(jī)系統(tǒng)采用兩臺(tái)Sun10完成信息融</p><p> 第2章
12、 總體方案設(shè)計(jì) </p><p> 根據(jù)要求,確定如下方案:在現(xiàn)有玩具電動(dòng)車(chē)的基礎(chǔ)上,加裝紅外對(duì)光管,超聲波收發(fā)傳感器,實(shí)現(xiàn)對(duì)電動(dòng)車(chē)的速度、位置、運(yùn)行狀況的實(shí)時(shí)測(cè)量,并將測(cè)量數(shù)據(jù)傳送至單片機(jī)進(jìn)行處理,然后由單片機(jī)根據(jù)所檢測(cè)的各種數(shù)據(jù)實(shí)現(xiàn)對(duì)電動(dòng)車(chē)的智能控制。同時(shí)。加裝的藍(lán)牙模塊,可以輔助控制小車(chē),當(dāng)小車(chē)的循跡出現(xiàn)故障,或者需要手動(dòng)控制小車(chē)實(shí)現(xiàn)某種功能時(shí),可以使用手機(jī)上的安卓軟件,發(fā)出控制信號(hào)給藍(lán)牙,藍(lán)牙接收后傳給
13、小車(chē),實(shí)現(xiàn)對(duì)小車(chē)的控制。這種方案能實(shí)現(xiàn)對(duì)電動(dòng)車(chē)的運(yùn)動(dòng)狀態(tài)進(jìn)行實(shí)時(shí)控制,控制靈活、可靠,精度高,可滿(mǎn)足對(duì)系統(tǒng)的各項(xiàng)要求</p><p><b> 總體方案框圖</b></p><p> 循跡模塊;用兩只紅外對(duì)管,分別置于小車(chē)車(chē)身前軌道的兩側(cè),根據(jù)兩只光電開(kāi)關(guān)接受到白線與黑線的情況來(lái)控制小車(chē)轉(zhuǎn)向來(lái)調(diào)整車(chē)向,測(cè)試表明,只要合理安裝好兩只光電開(kāi)關(guān)的位置就可以很好的實(shí)現(xiàn)循跡
14、的功能</p><p> 避障模塊;用超聲波避障,聲波測(cè)距是通過(guò)不斷檢測(cè)超聲波發(fā)射后遇到障礙物所反射的回波,從而測(cè)出發(fā)射和接收回波的時(shí)間差T,然后求出距離L=CT。超聲波發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射時(shí)刻的同時(shí)開(kāi)始計(jì)時(shí),超聲波在空氣中傳播,途中碰到障礙物就立即返回來(lái),超聲波接收器收到反射波就立即停止計(jì)時(shí)。然后通過(guò)一定的電路把數(shù)據(jù)傳給單片機(jī),單片機(jī)通過(guò)和障礙物間的距離來(lái)決定小車(chē)是否需要調(diào)整前進(jìn)方向。</
15、p><p> 電源模塊;采用2支18650鋰電池電源供電,電源電壓足夠小車(chē)和單片機(jī)的運(yùn)行,可以很好的實(shí)現(xiàn)功能,鋰電池還可以充電,可以多次使用。</p><p> 無(wú)線模塊;用的無(wú)線模塊是當(dāng)今社會(huì)上便攜式設(shè)備中普遍具有的藍(lán)牙無(wú)線模塊,該模塊性能穩(wěn)定,傳輸速率快,穩(wěn)定可靠,傳輸距離可觀。該芯片使用簡(jiǎn)單,具有通用的串行通信端口,在市場(chǎng)中具有較高的知名度,且藍(lán)牙技術(shù)發(fā)展前景良好,廣受客戶(hù)的好評(píng)。該
16、設(shè)備最大的優(yōu)點(diǎn)是無(wú)需制作專(zhuān)門(mén)的遙控器,可直接通過(guò)手機(jī)上的藍(lán)牙設(shè)備發(fā)送相關(guān)的指令,操作方便快捷,界面人性化設(shè)計(jì),具有良好的人機(jī)對(duì)話(huà)界面</p><p> 第3章 安卓操作系統(tǒng)的簡(jiǎn)介</p><p> 3.1安卓操作系統(tǒng)的發(fā)展</p><p> 在20007年11月12日,開(kāi)放手機(jī)聯(lián)盟發(fā)布 google android sdk,android作為一個(gè)系統(tǒng),是一
17、個(gè)運(yùn)行在LINUX2.6核心上的Java基礎(chǔ)的操作系統(tǒng)。系統(tǒng)是非常輕量。Android應(yīng)用程序用Java開(kāi)發(fā)而且很容易被放置到新的平臺(tái)上。在此同時(shí),谷歌也宣布建立一個(gè)全球性質(zhì)的聯(lián)盟,這個(gè)組織由許多家手機(jī)的制造,軟件的開(kāi)發(fā)商,芯片制造商,運(yùn)營(yíng)這些產(chǎn)品的銷(xiāo)售商組成。這一聯(lián)盟將致力于谷歌發(fā)布手機(jī)操作系統(tǒng)的開(kāi)發(fā)以及它所涉及的應(yīng)用軟件的開(kāi)發(fā), </p><p> 3.2 安卓開(kāi)發(fā)建立</p><p&g
18、t; 一、 Android平臺(tái)所具有的特點(diǎn)</p><p> 1 開(kāi)放性,Android從底層被構(gòu)建,使開(kāi)發(fā)者可以創(chuàng)造隱忍注意的手機(jī)應(yīng)用程序并且能夠充分利用所有的付費(fèi)的手機(jī),它是真正的被構(gòu)建成開(kāi)放的。例如,一個(gè)應(yīng)用程序可以調(diào)用任一手機(jī)的核心功能,打短信,打電話(huà)等等。它允許開(kāi)發(fā)者為使用者創(chuàng)造平臺(tái)使其有身臨其境的體驗(yàn)。</p><p> 2所有的平臺(tái)都是平等建立的,打破了應(yīng)用程序局限,A
19、ndroid打破創(chuàng)建新的,創(chuàng)新的應(yīng)用程序的局限,例如,開(kāi)發(fā)者可以讓個(gè)人手機(jī)上的數(shù)據(jù)和網(wǎng)站上的數(shù)據(jù)連接在一起,如用戶(hù)的聯(lián)系人,日歷,位置提供了一個(gè)很有意義的用戶(hù)體驗(yàn),開(kāi)發(fā)者可以創(chuàng)建一個(gè)應(yīng)用程序,這個(gè)程序可以使用戶(hù)看到他們朋友的位置和改變后的位置,如果發(fā)現(xiàn)他們就在附近,就可以馬上和他們聯(lián)系了。</p><p> 3,快速并且簡(jiǎn)單的應(yīng)用程序的開(kāi)發(fā)。</p><p> Android提供了寬范
20、圍的有用類(lèi)庫(kù)和工具,用這些可以創(chuàng)建豐富的應(yīng)用程序,</p><p> 例如Android使開(kāi)發(fā)者可以獲得設(shè)備的地理位置,并允許設(shè)備通過(guò)同類(lèi)對(duì)同類(lèi)的方式和其他設(shè)備通信,另外Android包括一套完整的工具,這些工具提供開(kāi)發(fā)者高度的生產(chǎn)力和深度探究他們的應(yīng)用程序</p><p> 4。Google應(yīng)用;互聯(lián)網(wǎng)上的谷歌已經(jīng)有多年的歷史了,從開(kāi)始的只是搜索島現(xiàn)在各個(gè)方面的滲透,如谷歌地圖,郵件
21、等等,谷歌的這些服務(wù)已經(jīng)成為聯(lián)系用戶(hù)和互聯(lián)網(wǎng)的重要關(guān)系紐帶,安卓平臺(tái)的手機(jī)都可以完美的結(jié)合這些優(yōu)秀的服務(wù)。</p><p> 3.3Android應(yīng)用程序的分析</p><p> 對(duì)于一個(gè)Android應(yīng)用程序有四種部分構(gòu)成;</p><p> 1 activity</p><p> 2intent receiver</p>
22、;<p><b> 3service</b></p><p> 4content provider</p><p> 不是每一個(gè)的應(yīng)用程序都需要這四個(gè)部分,但是應(yīng)用程序?qū)?huì)用這些來(lái)組合編寫(xiě)。</p><p> 一但決定了應(yīng)用程序所需要的組件,就需要在一個(gè)叫Android manifest.xml文件中列出他們,這是一個(gè)XM
23、L文件,在里面需要聲明應(yīng)用程序的組件和他們的功能需求。</p><p> Activity是Android最普通的構(gòu)建模塊,它通常在應(yīng)用程序中是一個(gè)單獨(dú)的屏幕。每一個(gè)activity是被實(shí)現(xiàn)作為一個(gè)繼承于activity基類(lèi)的單獨(dú)的類(lèi)。例如;一個(gè)文本消息發(fā)送程序可能有一個(gè)顯示要發(fā)送信息的屏幕,有一個(gè)顯示給選中要發(fā)送的聯(lián)系人的屏幕。每一個(gè)這些屏幕都會(huì)被一個(gè)activity實(shí)現(xiàn)。</p><p&
24、gt; Android使用一個(gè)叫做intent的特殊類(lèi)來(lái)讓?xiě)?yīng)用程序從一個(gè)屏動(dòng)到另外一個(gè)屏幕。Intent描述了一個(gè)應(yīng)用程序想要干什么。Intent數(shù)據(jù)結(jié)構(gòu)的兩個(gè)最重要的部分是;要響應(yīng)的action和data。典型的action值是MAIN,VIEW,PICK,EDIT,等等,data表示成一個(gè)統(tǒng)一資源定界符。</p><p> Intent receiver 當(dāng)你想要在你的應(yīng)用程序中編碼來(lái)執(zhí)行對(duì)外部事件的響應(yīng)
25、,你可以使用一個(gè)intent receiver.例如當(dāng)電話(huà)響鈴,或當(dāng)數(shù)據(jù)網(wǎng)絡(luò)可用時(shí),或當(dāng)午夜時(shí),雖然intent receiver 不·顯示一個(gè)UI,但它們也許會(huì)顯示一個(gè)來(lái)通知和提醒用戶(hù)是否有令人感興趣的事件發(fā)生。intent receiver 也是在 Android manifest.XML 中被注冊(cè),但你也可以在代碼中使用 context.register receiver()來(lái)注冊(cè)它們,它的intent receiver
26、被調(diào)用時(shí),你的程序不是非得運(yùn)行;假如必要時(shí),</p><p> 當(dāng)一個(gè)intent receiver被觸發(fā)時(shí),系統(tǒng)將會(huì)調(diào)用你的應(yīng)用程序。</p><p> Service;一個(gè)service是長(zhǎng)期存活并且運(yùn)行時(shí)不帶UI的編碼,例如,當(dāng)在音樂(lè)播放器中播放歌曲時(shí),可能在這個(gè)播放器中能有一個(gè)或者更多的activity,這些activity允許用戶(hù)選擇歌曲和開(kāi)始播放歌曲。然而,音樂(lè)回放本身不應(yīng)
27、該被一個(gè)activity處理,因?yàn)橛脩?hù)將期望在導(dǎo)航到一個(gè)新的屏幕后音樂(lè)保持播放。</p><p> Content provider 應(yīng)用程序可以把他們的數(shù)據(jù)存儲(chǔ)到文件中,一個(gè)SQLite數(shù)據(jù)庫(kù)中,設(shè)置中,或者是任何其他的有意義結(jié)構(gòu)中。如果你想要你的應(yīng)用程序的數(shù)據(jù)和其他應(yīng)用程序共享,一個(gè)content provider是有用的。一個(gè)content provider是一個(gè)類(lèi),它實(shí)現(xiàn)了方法的一個(gè)標(biāo)準(zhǔn)設(shè)置來(lái)讓其他應(yīng)用
28、程序存儲(chǔ)和恢復(fù)被content provider處理的數(shù)據(jù)類(lèi)型。</p><p> 3.4Android 藍(lán)牙開(kāi)發(fā)技術(shù)</p><p> 在兩個(gè)不同設(shè)備上的應(yīng)用之間建立一條完整的通信道路,并在他們之 間保持一通信段,RFCOMM 是一個(gè)簡(jiǎn)單傳輸協(xié)議,它的目的是針對(duì)如何在兩個(gè)不同設(shè)備上的應(yīng)用上保證一 條完整的通信道路,并保持一通信段。RFCOMM 是為了兼容傳統(tǒng)的串口應(yīng)用,同時(shí)取代有線的
29、通信方式,藍(lán)牙協(xié)議棧需要提供 與有線串口一致的通信接口而開(kāi)發(fā)出的協(xié)議。</p><p> MAC 地址是燒錄在網(wǎng)卡里的.MAC 地址,也叫硬件地址,是由 48 比特長(zhǎng)(6 字節(jié)),16 進(jìn)制的數(shù)字組成.0-23 位叫做組織唯一標(biāo)志符(organizationally unique,是識(shí)別 LAN(局域 網(wǎng))節(jié)點(diǎn)的標(biāo)識(shí).24-47 位是由廠家自己分配。在網(wǎng)絡(luò)底層的物理傳輸過(guò)程中,是通過(guò)物理地址來(lái)識(shí)別主機(jī)的,它一般
30、也是 全球唯一的。MAC 地址就如同我們身份證上的身份證號(hào)碼。</p><p> 步驟一:Setting Up Bluetooth 通過(guò) BluetoothAdapter 得到藍(lán)牙的 Activity 發(fā)送藍(lán)牙連接意圖 通過(guò) e onActivityResult()得到藍(lán)牙連接意圖 。</p><p> 步驟二: Finding Devices 通過(guò)得到開(kāi)啟藍(lán)牙用戶(hù)名和 MAC 地址
31、配對(duì)藍(lán)牙 。</p><p> 步驟三:連接藍(lán)牙 就像 java 的聊天系統(tǒng)一樣用一個(gè)藍(lán)牙手機(jī)當(dāng)服務(wù)器,一個(gè)當(dāng)客戶(hù)端,在用一個(gè)類(lèi)當(dāng)做 連接的管理類(lèi)就行了。 </p><p> 3.5 android 平臺(tái)藍(lán)牙編程 </p><p> Android 平臺(tái)支持藍(lán)牙網(wǎng)絡(luò)協(xié)議棧,實(shí)現(xiàn)藍(lán)牙設(shè)備之間數(shù)據(jù)的無(wú)線傳輸。藍(lán)牙設(shè)備 之間的通信主要包括了四個(gè)步驟:設(shè)置藍(lán)牙設(shè)備、尋
32、找局域網(wǎng)內(nèi)可能或者匹配的設(shè)備、連接 設(shè)備和設(shè)備之間的數(shù)據(jù)傳輸。</p><p> 以下是建立藍(lán)牙連接的所需要的一些基本類(lèi):</p><p> 應(yīng)用程序里啟動(dòng)藍(lán)牙功能,首先通過(guò)調(diào)用靜態(tài)方法 getDefaultAdapter()獲取藍(lán)牙適配器 bluetoothadapter,以后你就可以 使用該對(duì)象了。如果返回為空,the story is over。其次,調(diào)用 isEnabled()
33、來(lái)查詢(xún)當(dāng)前藍(lán)牙設(shè)備的狀態(tài),如果返回為 false,則表示藍(lán)牙設(shè)備沒(méi)有 開(kāi)啟,接下來(lái)你需要封裝一個(gè) ACTION_REQUEST_ENABLE 請(qǐng)求到 intent 里面,調(diào)用 startActivityForResult()方法使能藍(lán)牙設(shè)備。</p><p> 查找設(shè)備:使用 bluetoothadapter 類(lèi)里的方法,你可以查找遠(yuǎn)端設(shè)備,在這次的設(shè)計(jì)中,藍(lán)牙MAC 地址確定,利用個(gè)信息,就可以選擇初
34、始化一個(gè)連接,當(dāng)設(shè)備配對(duì)好 之后,MAC會(huì)被保存下來(lái)并可以使用藍(lán)牙的 API 來(lái)讀取,使用已知的 MAC 地址就可以對(duì)遠(yuǎn)端的藍(lán)牙設(shè)備發(fā)起連接請(qǐng)求。</p><p><b> 客戶(hù)端的連接: </b></p><p> 為了初始化一個(gè)與遠(yuǎn)端設(shè)備的連接,需要先獲取代表該設(shè)備的一個(gè) bluetoothdevice 對(duì)象。 通過(guò) bluetoothdevice 對(duì)象來(lái)獲取
35、 bluetoothsocket 并初始化連接:具體步驟: 使用 bluetoothdevice 對(duì)象里的方法 createRfcommSocketToServiceRecord(UUID)來(lái)獲取 bluetoothsocket。UUID 就是匹配碼。然后,調(diào)用 connect()方法來(lái)。如果遠(yuǎn)端設(shè)備接收了 該連接,他們將在通信過(guò)程中共享 RFFCOMM 信道,并且 connect()方法返回。</p><p
36、><b> 安卓的系統(tǒng)構(gòu)架</b></p><p> Androi d總共分為了四個(gè)層,這四個(gè)層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層和Linux內(nèi)核層[9]</p><p> Android的開(kāi)發(fā)包及相應(yīng)軟件的建立</p><p> Android的開(kāi)發(fā)是可以在windows XP及其以版本、MACOS、Linux等系統(tǒng)
37、上進(jìn)行開(kāi)發(fā)的;首先呢,我們要進(jìn)入Google的官方網(wǎng)站下載windows XP版本的java開(kāi)發(fā)包JDK,我們選擇的版本是JDK1.6.0以上的版本。在應(yīng)用開(kāi)發(fā)平臺(tái)方面,我們采用的是eclipse,因?yàn)間oogle提供了基于eclipse的android開(kāi)發(fā)插件ADT,在隨時(shí)更新的插件幫助下,可以很快幫助我們完成android手機(jī)終端的相關(guān)應(yīng)用開(kāi)發(fā)。 </p><p> 1、安裝JDK和配置java開(kāi)發(fā)環(huán)境
38、 首先,安裝JDK時(shí),安裝包中有JDK和JRE兩部分,點(diǎn)擊安裝程序,指定安裝目錄,然后點(diǎn)擊下一步,等待安裝完成即可。安裝完成之后,點(diǎn)擊“我的電腦”,選擇“屬性”里面的“高級(jí)”選項(xiàng),選擇環(huán)境變量,找到path變量,如果沒(méi)有,就自己添加一個(gè),按后命名path就行,完成之后,點(diǎn)擊編輯,添加JDK安裝目錄的“l(fā)ib”文件路徑;之后點(diǎn)擊確定,然后再找到CLASSPATH變量,在路徑輸入“.”,然后點(diǎn)擊確定。 </p><p&
39、gt; 2、檢測(cè)安裝 安裝配置完成之后,需要測(cè)試是否安裝成功。點(diǎn)擊開(kāi)始——運(yùn)行輸入“cmd”,打開(kāi)命令模式。輸入“java—version”,檢測(cè)JDK安裝是否成功,如果現(xiàn)實(shí)結(jié)果,則安裝成功。 </p><p> 3、安裝eclipse 打開(kāi)安裝包,點(diǎn)擊安裝,彈出workspace對(duì)話(huà)框,確定創(chuàng)建項(xiàng)目的保存路徑。 </p><p> 4、SDK和ADT的安裝和配置 首先,解壓
40、安裝包,運(yùn)行“SDK Setup.exe”。其次,在“Android SDK and Avd manager”的窗口左側(cè)選擇“setting”,選中“Force https://......”然后返回“Installed packges”,點(diǎn)擊“Update all”。點(diǎn)擊“Available Packges”,選擇要安裝的API版本以及USB驅(qū)動(dòng)和SDK文檔,我們都選擇了。 這個(gè)過(guò)程很漫長(zhǎng),一定要保證網(wǎng)速快的情況下來(lái)安裝,要不會(huì)出
41、現(xiàn)安裝不了的情況,最少安裝這個(gè)也要一天的時(shí)間,所以要耐心等待。下載完成之后,選擇所有選項(xiàng),然后全部安裝,安裝完成之后,配置SDK,SDK的配置更JDK是一樣的。 </p><p> 5、ADT的安裝和配置 啟動(dòng)eclipse,點(diǎn)擊“Help”菜單,選擇“Install New Software”之后,點(diǎn)擊“Add”按鈕,點(diǎn)擊Archive指向下載的ADT壓縮包,然后點(diǎn)擊“ok”,選中所需要安裝的插件即可。 &
42、lt;/p><p> 6、Android虛擬機(jī)的搭建 打開(kāi)菜單“windows”,一次選擇“Android SDK and AVD Manager”,打開(kāi)界面;然后點(diǎn)擊NEW新建模擬機(jī),彈出選項(xiàng)卡,根據(jù)選項(xiàng)卡填寫(xiě)自己所需要的內(nèi)容,即可創(chuàng)建。 </p><p> 7、建立好項(xiàng)目名后,即可啟動(dòng)虛擬機(jī)。</p><p> 第4章 系統(tǒng)軟件程序設(shè)計(jì)</p>
43、<p> 4.1 c語(yǔ)言編程環(huán)境介紹</p><p> 由于本次設(shè)計(jì)中程序系統(tǒng)用C語(yǔ)言編寫(xiě)程序。此次設(shè)計(jì)所選用的單片機(jī)是AT89C52單片機(jī),其C語(yǔ)言語(yǔ)法和結(jié)構(gòu)和標(biāo)準(zhǔn)C語(yǔ)言基本相同,只是有了相應(yīng)的擴(kuò)充,用到的編譯軟件是Keil C。下面結(jié)合我的程序編譯簡(jiǎn)要介紹以下Keil C的編譯環(huán)境的特點(diǎn)。 Keil C51軟件提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開(kāi)發(fā)調(diào)試工具,全Windows界面。另外重要的一
44、點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解。Keil C51是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。Keil提供了包括C編譯器、宏匯編、連接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開(kāi)發(fā)方案,通過(guò)一個(gè)集成開(kāi)發(fā)環(huán)境(uVisio
45、n)將這些部分組合在一起。</p><p> Keil C51軟件提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開(kāi)發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解。在開(kāi)發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語(yǔ)言的優(yōu)勢(shì)。</p><p> C51工具包的整體結(jié)構(gòu),uVision與Ishell
46、分別是C51 for Windows和for Dos的集成開(kāi)發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個(gè)開(kāi)發(fā)流程。開(kāi)發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及C51編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由LIB51創(chuàng)建生成庫(kù)文件,也可以與庫(kù)文件一起經(jīng)L51連接定位生成絕對(duì)目標(biāo)文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進(jìn)
47、行源代碼級(jí)調(diào)試,也可由仿真器使用直接對(duì)目標(biāo)板進(jìn)行調(diào)試,也可以直接寫(xiě)入程序存貯器如EPROM中。</p><p> 4.2 各部分模塊編程 </p><p><b> 1 循跡部分 </b></p><p> 循跡部分使用紅外線 檢測(cè)黑線,將信號(hào)傳給單片機(jī),通過(guò)單片機(jī)來(lái)控制小車(chē)實(shí)現(xiàn)循跡功能,流程圖如下。</p><p&g
48、t;<b> 2 避障部分</b></p><p> 主程序完成初始化工作、各路超聲波發(fā)射和接收順序的控制。定時(shí)中斷服務(wù)子程序完成三個(gè)方向超聲波的輪流發(fā)射,外部中斷服務(wù)子程序主要完成時(shí)間值的讀取、距離計(jì)算、結(jié)果的輸出等工作。</p><p><b> 3 藍(lán)牙部分</b></p><p> 藍(lán)牙模塊輸入的信息進(jìn)行存
49、儲(chǔ)分析,來(lái)控制電機(jī)驅(qū)動(dòng),以達(dá)到控制小車(chē)的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)。在這個(gè)過(guò)程中,單片機(jī)首先進(jìn)行初始化,包括設(shè)置單片機(jī)各個(gè)端口的方向,各個(gè)變量的初始化,以及單片機(jī)振蕩頻率的校準(zhǔn)等。單片機(jī)定時(shí)對(duì)藍(lán)牙模塊串口讀數(shù)據(jù),如果串口的數(shù)據(jù)讀出,則對(duì)讀出的數(shù)據(jù)進(jìn)行分析,讀出的數(shù)據(jù)如果為A、B、C、D則分別對(duì)應(yīng)小車(chē)的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)。小車(chē)硬件系統(tǒng)軟件設(shè)計(jì)的流程圖</p><p><b> 是</b>&l
50、t;/p><p> 手機(jī)端程序的設(shè)計(jì) 本程序是基于Android 2.1系統(tǒng),所用開(kāi)發(fā)工具為Eclipse集成開(kāi)發(fā)環(huán)境,Eclipse是著名的跨平臺(tái)的自由集成開(kāi)發(fā)環(huán)境(IDE)。最初主要用來(lái)Java語(yǔ)言開(kāi)發(fā),但是目前亦有人通過(guò)插件使其作為其他計(jì)算機(jī)語(yǔ)言比如C++、Python和Android的開(kāi)發(fā)工具,在此開(kāi)發(fā)環(huán)境下開(kāi)發(fā)軟件非常的方便。首先設(shè)計(jì)本系統(tǒng)手機(jī)端軟件的程序界面,為了盡快實(shí)現(xiàn)程序的功能,本程序沒(méi)有對(duì)軟
51、件界面設(shè)計(jì)做特別美化的設(shè)計(jì),僅包含我們所用到的幾個(gè)按鈕和圖形顯示,以實(shí)現(xiàn)我們的功能為最大目標(biāo)。 下面介紹Android相關(guān)資源文件的作用[16、17]: 1、assets 文件夾:此文件夾也可以存放資源文件,而且/assets目錄下的資源文件不會(huì)在R.java自動(dòng)生成ID,所以讀取/assets目錄下的文件必須指定文件的路徑(url的路徑為:)。除此之外,我們還可以通過(guò)AssetManager類(lèi)來(lái)訪問(wèn)這些文件。打開(kāi)文件時(shí),會(huì)把a(bǔ)pk
52、文件當(dāng)做zip文件進(jìn)行解壓讀取。但是有文件大小有限制:不能超過(guò)1M(android2.2好像放寬(或者取消)了這個(gè)限制(至少可以存放>10M,具體沒(méi)有測(cè)試。))。</p><p> layout文件夾:布局文件夾。此文件夾的名字也是可以起到屏幕適配的功能的。①橫豎屏:layout-land|port;②分辨率:layout-1280x720 (6) values文件夾:存放常量值的文件夾。里面常見(jiàn)的xm
53、l文件為arrays.xml : 資源數(shù)組;colors.xml : 顏色值;dimens.xml : 像素值; strings.xml :字符串值;tyles.xml : 樣式值。此文件夾,也有屏幕適配作用。比如:dimens在不同分辨率下的值。同樣的是加-1280x720這樣的后綴。對(duì)于strings,有各種語(yǔ)言的版本對(duì)應(yīng)。默認(rèn)為英文。中文的文件夾名字應(yīng)該是:values-zh-rCN,values-zh-rTW。 (7) ra
54、w文件夾:存放不需要系統(tǒng)編譯成二進(jìn)制的文件,例如字體文件等同assets文件夾類(lèi)似。 (8) xml文件夾存放xml</p><p><b> 文件。 </b></p><p><b> 否</b></p><p><b> 是</b></p><p><b&g
55、t; 否</b></p><p><b> 是</b></p><p><b> 否</b></p><p><b> 是</b></p><p><b> 是</b></p><p><b> 藍(lán)
56、牙通信流程圖</b></p><p> 以下是手機(jī)端實(shí)現(xiàn)功能的程序流程圖如圖5.2所示</p><p> 手機(jī)界面程序設(shè)計(jì) 在設(shè)置手機(jī)界面的時(shí)候,在Eclipse集成開(kāi)發(fā)環(huán)境下,首先新建一個(gè)android項(xiàng)目工程,興建路徑是File—New—android project—project name 選擇android 1.6版本,工程名命名為Bluetooth-ca
57、r,選擇Create Activity,則自動(dòng)創(chuàng)建了一個(gè)Activity.在創(chuàng)建Activity時(shí),需要注意一下四個(gè)要點(diǎn): 1、一個(gè)Activity就是一個(gè)類(lèi),并且這個(gè)類(lèi)要繼承Activity。 2、需要復(fù)寫(xiě)Oncreate方法(當(dāng)一個(gè)Activity第一次運(yùn)行顯示在手機(jī)上或者虛擬機(jī)上的時(shí)就會(huì)調(diào)用Oncreate方法)。 3、每一個(gè)Activity都需要在Androidmanifast.xml文件當(dāng)中配置。 4、為Activity
58、添加必要的控件。如圖5.3所示,在制作藍(lán)牙小車(chē)手機(jī)界面的時(shí)候,我用到了Textview 文本控件和 Butten按鈕控件,并且在添加控件時(shí)采用相對(duì)布局形式[18、19]。兩個(gè)Textview文本控件分別命名為:后備軍官學(xué)院和藍(lán)牙控制系統(tǒng),在layout布局文件下可以任意改變控件的位置、字體</p><p> 二、手機(jī)監(jiān)聽(tīng)程序設(shè)計(jì) 在Eclipes開(kāi)發(fā)平臺(tái)上,首先在Layout文件中采用相對(duì)布局的形式設(shè)
59、計(jì)完成手機(jī)界面以后,就要考慮為我們的每個(gè)Butten按鍵綁定監(jiān)聽(tīng)程序,以實(shí)現(xiàn)在每個(gè)按鍵按下時(shí),就能通過(guò)手機(jī)藍(lán)牙發(fā)送相應(yīng)的數(shù)據(jù)到小車(chē)藍(lán)牙接收模塊。首先在Layout文件中,每添加一個(gè)控件,都會(huì)為這個(gè)控件設(shè)置一個(gè)ID,(如android:id="@+id/button1"),然后在R.JAVA文件就會(huì)自動(dòng)生成一個(gè)ID地址。然后在主程序里面編寫(xiě)監(jiān)聽(tīng)程序,當(dāng)按鍵按下的時(shí)候,通過(guò)監(jiān)聽(tīng)按鍵的ID地址的不同,采用switch結(jié)構(gòu),
60、跳轉(zhuǎn)到不同的case里,向小車(chē)藍(lán)牙模塊發(fā)送不同的數(shù)據(jù)。在程序里直接寫(xiě)進(jìn)小車(chē)藍(lán)牙模塊的藍(lán)牙地址(00:12:10:31:01:70),當(dāng)程序開(kāi)始運(yùn)行時(shí),將會(huì)自動(dòng)搜索該地址的藍(lán)牙芯片,當(dāng)進(jìn)行過(guò)一次配對(duì)連接以后,將會(huì)記憶該地址,以后每次只要打開(kāi)手機(jī)界面,開(kāi)始運(yùn)行時(shí)就會(huì)自動(dòng)進(jìn)行搜索配對(duì)連接好[20、21]。 * 按鈕點(diǎn)擊事件. </p><p> * @param v */ public void onClic
61、k(View v) { switch (v.getId()) { //轉(zhuǎn)寫(xiě)按鈕 case R.id.button1: message[0] = (byte) 0x41; vibrator(); Toast.makeText(this, "前進(jìn)", Toast.LENGTH_LONG).show(); bluesend(message); break; /
62、/設(shè)置按鈕 case R.id.button2: message[0] = (byte) 0x44</p><p> vibrator();</p><p> Toast.makeText(this, "后退", Toast.LENGTH_LONG).show(); bluesend(message); break; case R.id.
63、button3: message[0] = (byte) 0x43; vibrator(); Toast.makeText(this, "左轉(zhuǎn)", Toast.LENGTH_LONG).show(); bluesend(message); break; case R.id.button4: message[0] = (byte) 0x42; vibrator();
64、 Toast.makeText(this, "右轉(zhuǎn)", Toast.LENGTH_LONG).show(); bluesend(message); break; case R.id.button5: message[0] = (byte) 0x61; vibrator(); Toast.makeText(this, "停止</p>&l
65、t;p><b> break; </b></p><p><b> 第5章 系統(tǒng)調(diào)試</b></p><p> 5.1·C語(yǔ)言的調(diào)試 軟件的調(diào)試包括程序本身語(yǔ)法的調(diào)試和在電路板上功能的調(diào)試兩種。在編程過(guò)程中,為了得到滿(mǎn)足要求的用戶(hù)程序,一般都需要有一個(gè)對(duì)程序的調(diào)試過(guò)程,甚至需要經(jīng)過(guò)多次反復(fù)的調(diào)試才能完成。在調(diào)試程序前為了
66、調(diào)試方便,避免程序出錯(cuò)時(shí)將單片機(jī)拆來(lái)拆去的麻煩,在電路板上做了一個(gè)下載口,可以將下載線直接插到電路板上進(jìn)行調(diào)試,這樣就可以一邊進(jìn)行調(diào)試,一邊修改程序。程序用Keil C軟件寫(xiě)好后,先用該軟件的編譯功能編譯一下所寫(xiě)的程序,檢查程序是有語(yǔ)法錯(cuò)誤或其他的錯(cuò)誤。如果有錯(cuò)誤則根據(jù)提示進(jìn)行分析將錯(cuò)誤改過(guò)來(lái)直至編譯成功為止。當(dāng)完成了語(yǔ)法調(diào)試后,再根據(jù)定時(shí)開(kāi)關(guān)插座設(shè)計(jì)的功能要求修改程序完成系統(tǒng)的各個(gè)功能。在編寫(xiě)程序的時(shí)候一定要根據(jù)系統(tǒng)實(shí)現(xiàn)的功能和連接方
67、式,認(rèn)真分析,畫(huà)出系統(tǒng)主程序、時(shí)鐘程序、設(shè)置程序的流程圖,并根據(jù)畫(huà)出的流程圖一步一步的去寫(xiě)出程序。 根據(jù)系統(tǒng)的特點(diǎn),軟件系統(tǒng)應(yīng)該按模塊進(jìn)行調(diào)試,當(dāng)各個(gè)模塊調(diào)試通過(guò)后再將各個(gè)模塊整合起來(lái),進(jìn)行綜合調(diào)試,直到得到預(yù)期結(jié)果。 與純粹的C語(yǔ)言編程不同的是,單片機(jī)編程要考慮到硬件的設(shè)計(jì),所有程序的編寫(xiě)都是根據(jù)硬件資源進(jìn)行。本次設(shè)計(jì)的智能小車(chē),有三個(gè)主要</p><p><b> 1;循跡部分的調(diào)試</
68、b></p><p> 進(jìn)入程序后,根據(jù)紅外傳感器檢測(cè)的值,讓程序做出判斷,然后判斷轉(zhuǎn)向,完成沿著黑線行走,直到走完整個(gè)賽道,根據(jù)檢測(cè)情況調(diào)用相應(yīng)的函數(shù),控制小車(chē)的行進(jìn)、停止、左轉(zhuǎn)及右轉(zhuǎn)。它的調(diào)試成功圖如下。</p><p><b> 2;避障部分</b></p><p> 這個(gè)部分的主程序完成初始化工作和超聲波發(fā)射和接收順序的控制
69、以及根據(jù)數(shù)據(jù)控制小車(chē)運(yùn)動(dòng),其中定時(shí)中斷服務(wù)子程序完成超聲波的輪流發(fā)射,外部中斷服務(wù)子程序主要完成時(shí)間值的讀取、距離計(jì)算、結(jié)果的輸出等工作。它的調(diào)試成功圖如下。</p><p><b> 3,藍(lán)牙部分;</b></p><p> 藍(lán)牙部分分為兩部分的調(diào)試,一部分手機(jī)上的安卓程序和小車(chē)連接收發(fā)信號(hào)的調(diào)試,另一部分為藍(lán)牙接收到信號(hào)和單片機(jī)之間的傳輸?shù)恼{(diào)試,藍(lán)牙主要根據(jù)手
70、機(jī)上發(fā)送的命令傳給單片機(jī),單片機(jī)在根據(jù)這些命令控制小車(chē)的運(yùn)動(dòng)。藍(lán)牙和單片機(jī)調(diào)試成功圖如下。</p><p> 5.2.JAVA語(yǔ)言的調(diào)試 將做好的工程添加進(jìn)入Eclipes開(kāi)發(fā)環(huán)境中,檢查各個(gè)文件夾下面的程序有沒(méi)有出現(xiàn)打紅色X的問(wèn)題以及警告,點(diǎn)開(kāi)下方的problem的文件,檢查該工程有沒(méi)有出現(xiàn)問(wèn)題,當(dāng)排除了所有的問(wèn)題以后。配置一個(gè)2.2版本的模擬器,然后啟動(dòng)模擬器,在模擬器上運(yùn)行該工程,在模擬器上將會(huì)出現(xiàn)
71、已經(jīng)做好的手機(jī)界面,運(yùn)行完成,調(diào)試成功。然后將手機(jī)連接到電腦上,打開(kāi)安卓手機(jī)的USB接口。接下來(lái)點(diǎn)擊運(yùn)行整個(gè)工程項(xiàng)目,在手機(jī)上出現(xiàn)前面那個(gè)做好的藍(lán)牙小車(chē)控制界面。點(diǎn)擊各個(gè)按鈕,都無(wú)問(wèn)題,證明該JAVA程序沒(méi)有問(wèn)題。 系統(tǒng)整體的調(diào)試,藍(lán)牙控制小車(chē)的硬件模塊和軟件模塊分別調(diào)試通過(guò)后,接下來(lái)就可以進(jìn)行系統(tǒng)的整體測(cè)試。首先檢查各個(gè)模塊之間,以及電機(jī)驅(qū)動(dòng)與電機(jī)的連接都沒(méi)有出錯(cuò)的情況下,打開(kāi)給各個(gè)模塊提供的5V電源以及打開(kāi)給電機(jī)提供的另一個(gè)6V電源
72、。此時(shí)最小系統(tǒng)模塊指示燈點(diǎn)亮,表示單片機(jī)供電正常,藍(lán)牙模塊指示燈開(kāi)始閃爍,表示藍(lán)牙模塊也供電正常。此時(shí)打開(kāi)安卓手機(jī)的藍(lán)牙,搜索該藍(lán)牙芯片,進(jìn)行配對(duì)。然后打開(kāi)我們做好的手機(jī)界面,當(dāng)界面打開(kāi)之后,開(kāi)始自動(dòng)搜索藍(lán)牙芯片的地址進(jìn)行連接,當(dāng)藍(lán)牙芯片的指示燈有閃爍轉(zhuǎn)變</p><p> 在調(diào)試的過(guò)程中也遇到一些問(wèn)題,就是最開(kāi)始電機(jī)驅(qū)動(dòng)輸出端控制的電機(jī)卻不會(huì)轉(zhuǎn)動(dòng)。通過(guò)分析,可能有兩個(gè)原因?qū)е码姍C(jī)不會(huì)轉(zhuǎn)動(dòng),其一,電機(jī)驅(qū)動(dòng)的輸出
73、端的接線出現(xiàn)了錯(cuò)誤,導(dǎo)致電機(jī)轉(zhuǎn)動(dòng)出現(xiàn)問(wèn)題;其二,電機(jī)驅(qū)動(dòng)端接的給電機(jī)供電的電壓達(dá)不到驅(qū)動(dòng)電機(jī)的最低電壓,最后通過(guò)查詢(xún)資料和用萬(wàn)用表測(cè)驅(qū)動(dòng)模塊的輸出端的各個(gè)引腳的高低電平,發(fā)現(xiàn)輸出端的電平也能隨輸入端的改變而變化,當(dāng)最后測(cè)試VCC和GND兩端,發(fā)現(xiàn)無(wú)明顯的壓降,再用萬(wàn)用表的測(cè)電阻值測(cè)兩端的阻值,發(fā)現(xiàn)問(wèn)題是電機(jī)驅(qū)動(dòng)模塊輸出端的供電端VCC與GND端短路,導(dǎo)致外接電源不能給電機(jī)供電。最后我通過(guò)直接從芯片的引腳接線到電源端,則電機(jī)能夠正常轉(zhuǎn)動(dòng)。
74、</p><p><b> 第6章 總結(jié)與體會(huì)</b></p><p> 本次畢業(yè)設(shè)計(jì)是一個(gè)基于單片機(jī)AT89C52的智能小車(chē)控制,包括方案選擇、軟硬件設(shè)計(jì)、單片機(jī)最小系統(tǒng)、電機(jī)驅(qū)動(dòng)電路和藍(lán)牙電路、硬件測(cè)試結(jié)果及解決在電路調(diào)試時(shí)遇到的問(wèn)題。在此期間主要完成的工作包括以下幾個(gè)方面: </p><p> (1)設(shè)計(jì)初期收集電機(jī)驅(qū)動(dòng)、單片機(jī)等
75、相關(guān)資料,對(duì)智能小車(chē)的實(shí)現(xiàn)原理有比較清晰的了解。 (2)確定系統(tǒng)框圖,對(duì)電源模塊、單片機(jī)最小系統(tǒng)模塊、藍(lán)牙電路模塊和電機(jī)及其驅(qū)動(dòng)電路模塊等的實(shí)施方案進(jìn)行比較,確定最終的智能小車(chē)控制的設(shè)計(jì)方案。 (3)根據(jù)智能小車(chē)控制的原理圖制作出電路連接圖。 (4)根據(jù)系統(tǒng)要實(shí)現(xiàn)前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)等功能編寫(xiě)出小車(chē)端的軟件程序。 (5)在eclipes開(kāi)發(fā)環(huán)境下,應(yīng)用JAVA程序編寫(xiě)手機(jī)界面程序,并且通過(guò)模擬器來(lái)檢測(cè)手機(jī)界面程序。 (6)軟
76、硬件調(diào)試通過(guò)后進(jìn)行整體調(diào)試,并查找該系統(tǒng)存在的缺陷,進(jìn)行完善。 (7)最終小車(chē)能夠?qū)崿F(xiàn)前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)等功能,達(dá)到老師給出的基本要求。 本次設(shè)計(jì)完成了基于安卓手機(jī)的智能小車(chē)控制系統(tǒng)。該系統(tǒng)采用51單片機(jī)AT89C52編程控制電機(jī)的正反轉(zhuǎn)來(lái)實(shí)現(xiàn)小車(chē)前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn),而電機(jī)的正反轉(zhuǎn)則由電機(jī)驅(qū)動(dòng)L298N輸出端的邏輯電平來(lái)控制。 從整個(gè)設(shè)計(jì)的過(guò)程來(lái)看前期的充分的準(zhǔn)備顯得非常的重要,經(jīng)過(guò)前期充分的準(zhǔn)備,和對(duì)嵌入式系統(tǒng)開(kāi)發(fā)的學(xué)習(xí)
77、,避免了很多在后續(xù)的設(shè)計(jì)中可能出現(xiàn)的問(wèn)題。 MCU端的軟硬件設(shè)計(jì)因?yàn)榕c所學(xué)知識(shí)相關(guān)</p><p> 主要的問(wèn)題出現(xiàn)在android端的軟件設(shè)計(jì)上,由于對(duì)android開(kāi)發(fā)環(huán)境的不熟悉,缺乏一些在編寫(xiě)JAVA程序時(shí)的一些技巧性問(wèn)題,所以剛剛開(kāi)始時(shí)總是出現(xiàn)很多問(wèn)題,并且出現(xiàn)的問(wèn)題都需要查找相關(guān)資料才能解決。通過(guò)學(xué)習(xí)一些android相關(guān)的學(xué)習(xí)視頻,最后對(duì)android環(huán)境有了一個(gè)系統(tǒng)的了解在開(kāi)發(fā)的過(guò)程中也得心應(yīng)
78、手些。 Android端圖形界面的設(shè)計(jì)也是一大難點(diǎn),基于Java的圖形界面設(shè)計(jì)不論是從設(shè)計(jì)平臺(tái)還是Java語(yǔ)言的掌握都是一想挑戰(zhàn),但幸于Java軟件的開(kāi)發(fā)技術(shù)已經(jīng)成熟,且可查閱的資料多且詳盡,所以圖形界面的設(shè)計(jì)達(dá)到設(shè)計(jì)時(shí)的五項(xiàng)按鍵要求,功能實(shí)現(xiàn)良好,除界面的友好程度可以更加優(yōu)化外,其余完成任務(wù)。 總體來(lái)看,我進(jìn)行了比較充分的準(zhǔn)備,在實(shí)踐過(guò)程中通過(guò)查閱相關(guān)資料和咨詢(xún)有關(guān)人員,克服了系統(tǒng)設(shè)計(jì)過(guò)程中的絕大多數(shù)困難,基本都以達(dá)到設(shè)計(jì)要求,并
79、通過(guò)了軟件測(cè)試。</p><p> 第7章 謝辭(致謝)</p><p> 畢業(yè)設(shè)計(jì)完成了,在這個(gè)過(guò)程中我學(xué)到了很多東西。首先我要感謝我的導(dǎo)師張岷濤老師,他在我完成論文的過(guò)程中,給予了我很大的幫助。在論文開(kāi)始的初期,我對(duì)于論文的結(jié)構(gòu)以及文獻(xiàn)選取等方面都有很多問(wèn)題,是在老師的幫助下進(jìn)行修改和完善的。本畢業(yè)設(shè)計(jì)是在張岷濤老師悉心的關(guān)懷與指導(dǎo)下完成,在此對(duì)老師獻(xiàn)上最衷心地感謝。張岷濤老師從畢
80、業(yè)設(shè)計(jì)一開(kāi)始就對(duì)我們嚴(yán)格要求,每周的周一都會(huì)和我們開(kāi)見(jiàn)面會(huì),詢(xún)問(wèn)我們的畢設(shè)進(jìn)度并了解我們遇到的困難,積極協(xié)助我們解決設(shè)計(jì)過(guò)程中的各種難題,并要求我們每天記錄在畢業(yè)設(shè)計(jì)中所作的工作進(jìn)度及遇到的問(wèn)題,讓我們?nèi)グl(fā)現(xiàn)問(wèn)題,解決問(wèn)題。在我遇到難已解決的問(wèn)題心中急躁時(shí),張岷濤老師總是及時(shí)的給予鼓勵(lì),使我能夠有勇敢的克服困難,把畢設(shè)繼續(xù)進(jìn)行下去。張岷濤老師對(duì)學(xué)生的高度關(guān)注和對(duì)工作高度負(fù)責(zé)的精神值得我們尊敬,也是我今后走向工作崗位的榜樣。通過(guò)本次畢業(yè)設(shè)
81、計(jì),我不僅是對(duì)我們所學(xué)知識(shí)的一個(gè)匯總,同時(shí)也是考驗(yàn)我們學(xué)習(xí)能力和動(dòng)手能力的一個(gè)平臺(tái);讓我們能學(xué)到更多的相關(guān)知識(shí),更重要的是學(xué)到了面對(duì)困難的不放棄、不氣餒的態(tài)度,不驕不躁的辦事風(fēng)格,奮發(fā)向上的精神,這些在我今后的生活和學(xué)習(xí)中都是一筆寶貴的財(cái)富。</p><p><b> 第8章 參考文獻(xiàn)</b></p><p> [1]郭惠,吳迅.單片機(jī)C語(yǔ)言程序設(shè)計(jì)完全自學(xué)手冊(cè)[
82、M].電子工業(yè)出版社,2008.10:1-200.</p><p> [2]王東鋒,王會(huì)良,董冠強(qiáng). 單片機(jī)C語(yǔ)言應(yīng)用100例[M]. 電子工業(yè)出版社,2009.3:145-300.</p><p> [3]韓毅,楊天. 基于HCS12單片機(jī)的智能尋跡模型車(chē)的設(shè)計(jì)與實(shí)現(xiàn)[J].學(xué)術(shù)期刊,2008,29(18):1535-1955.</p><p> [4] 王
83、曉明. 電動(dòng)機(jī)的單片機(jī)控制[J]. 學(xué)術(shù)期刊,2002,13(15):1322-1755.</p><p> [5] 胡萍.超聲波測(cè)距儀的研制.計(jì)算機(jī)與現(xiàn)代化,2003.10 </p><p> [6] 華兵.MCS-51單片機(jī)原理應(yīng)用.武漢:武漢華中科技大學(xué)出版社,2002 .5 </p><p> [7] 李華.MCU-51系列單片機(jī)實(shí)用接口技術(shù).北京
84、:北京航空航天大學(xué)出版社, 1993. 6 </p><p> [8] 《STC12C5A系列單片機(jī)中文資料》 </p><p> STC宏晶單片機(jī)官方網(wǎng)站</p><p> 附錄:(換頁(yè)。之前空一行,空行為小四)</p><p> 安卓手機(jī)上藍(lán)牙程序設(shè)計(jì)</p><p><b> 主界面布局<
85、;/b></p><p> 在res\layout下新建fragment_main.xml。其中添加4個(gè)Button,分別控制小車(chē)的前后左右;1個(gè)ToggleButton來(lái)控制重力感應(yīng)的開(kāi)啟。兩個(gè)TextView做裝飾。源碼如下:</p><p> [html] view plaincopy</p><p> <RelativeLayout xml
86、ns:android="http://schemas.android.com/apk/res/android" </p><p> xmlns:tools="http://schemas.android.com/tools" </p><p> android:layout_width="match_parent" &l
87、t;/p><p> android:layout_height="match_parent" </p><p> android:paddingBottom="@dimen/activity_vertical_margin" </p><p> android:paddingLeft="@dimen/activ
88、ity_horizontal_margin" </p><p> android:paddingRight="@dimen/activity_horizontal_margin" </p><p> android:paddingTop="@dimen/activity_vertical_margin" </p>&
89、lt;p> tools:context="com.android.bluetoothcar.MainActivity$PlaceholderFragment" > </p><p> <ToggleButton </p><p> android:id="@+id/toggleButton1" </p>&
90、lt;p> android:layout_width="wrap_content" </p><p> android:layout_height="wrap_content" </p><p> android:layout_centerHorizontal="true" </p><p&g
91、t; android:layout_centerVertical="true" </p><p> android:layout_marginBottom="94dp" </p><p> android:textOff="@string/gravity_off" </p><p> andr
92、oid:textOn="@string/gravity_on" /> </p><p><b> <Button </b></p><p> android:id="@+id/btnf" </p><p> android:layout_width="wrap_conte
93、nt" </p><p> android:layout_height="wrap_content" </p><p> android:layout_above="@+id/toggleButton1" </p><p> android:layout_centerHorizontal="tr
94、ue" </p><p> android:layout_marginBottom="24dp" </p><p> android:text="@string/forward" /> </p><p> <TextView </p><p> android:id
95、="@+id/textView1" </p><p> android:layout_width="wrap_content" </p><p> android:layout_height="wrap_content" </p><p> android:text="@string/
96、title" /> </p><p><b> <Button </b></p><p> android:id="@+id/btnl" </p><p> android:layout_width="wrap_content" </p><p>
97、; android:layout_height="wrap_content" </p><p> android:layout_alignParentLeft="true" </p><p> android:layout_centerVertical="true" </p><p> and
98、roid:layout_marginRight="28dp" </p><p> android:layout_toLeftOf="@+id/toggleButton1" </p><p> android:text="@string/left" /> </p><p><b>
99、 <Button </b></p><p> android:id="@+id/btnr" </p><p> android:layout_width="wrap_content" </p><p> android:layout_height="wrap_content"
100、 </p><p> android:layout_alignParentRight="true" </p><p> android:layout_centerVertical="true" </p><p> android:layout_marginLeft="25dp" </p&g
101、t;<p> android:layout_toRightOf="@+id/toggleButton1" </p><p> android:text="@string/right" /> </p><p><b> <Button </b></p><p> an
102、droid:id="@+id/btnb" </p><p> android:layout_width="wrap_content" </p><p> android:layout_height="wrap_content" </p><p> android:layout_alignLeft
103、="@+id/btnf" </p><p> android:layout_below="@+id/btnr" </p><p> android:layout_marginTop="25dp" </p><p> android:text="@string/backward"
104、; /> </p><p> <TextView </p><p> android:id="@+id/textView2" </p><p> android:layout_width="wrap_content" </p><p> android:layout_heig
105、ht="wrap_content" </p><p> android:layout_below="@+id/toggleButton1" </p><p> android:layout_centerHorizontal="true" </p><p> android:layout_marg
106、inTop="34dp" </p><p> android:text="@string/beta" </p><p> android:textAppearance="?android:attr/textAppearanceLarge" </p><p> android:textColor=
107、"#FF0000" /> </p><p> </RelativeLayout> </p><p> 2.在res\layout下新建search_bt.xml。用來(lái)設(shè)置搜索藍(lán)牙的界面。</p><p> [html] view plaincopy</p><p> <?xml vers
108、ion="1.0" encoding="utf-8"?> </p><p> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" </p><p> android:layout_width="fill_pa
109、rent" </p><p> android:layout_height="fill_parent" </p><p> android:orientation="vertical" > </p><p> <TextView </p><p> android:
110、id="@+id/title_paired_devices" </p><p> android:layout_width="fill_parent" </p><p> android:layout_height="wrap_content" </p><p> android:backgro
111、und="#666" </p><p> android:paddingLeft="5dp" </p><p> android:text="@string/paired_devices" </p><p> android:textColor="#fff" </p&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設(shè)計(jì)、正文
- 畢業(yè)設(shè)計(jì)正文.rtf
- 采暖畢業(yè)設(shè)計(jì)正文
- 采礦畢業(yè)設(shè)計(jì)正文
- 畢業(yè)設(shè)計(jì)正文.doc
- 畢業(yè)設(shè)計(jì)正文.doc
- 畢業(yè)設(shè)計(jì)正文.wps
- 畢業(yè)設(shè)計(jì)正文.doc
- 畢業(yè)設(shè)計(jì)正文.doc
- 畢業(yè)設(shè)計(jì)(正文).doc
- 畢業(yè)設(shè)計(jì)正文.doc
- 畢業(yè)設(shè)計(jì)正文.docx
- 畢業(yè)設(shè)計(jì)正文.doc
- 畢業(yè)設(shè)計(jì)正文.doc
- 畢業(yè)設(shè)計(jì)(正文).doc
- 畢業(yè)設(shè)計(jì)正文.doc
- 畢業(yè)設(shè)計(jì)正文.doc
- 畢業(yè)設(shè)計(jì)正文.doc
- 畢業(yè)設(shè)計(jì)正文.doc
- 畢業(yè)設(shè)計(jì)(正文).doc
評(píng)論
0/150
提交評(píng)論