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