“探月小車”的設(shè)計(jì)與制作設(shè)計(jì)說明_第1頁
“探月小車”的設(shè)計(jì)與制作設(shè)計(jì)說明_第2頁
“探月小車”的設(shè)計(jì)與制作設(shè)計(jì)說明_第3頁
“探月小車”的設(shè)計(jì)與制作設(shè)計(jì)說明_第4頁
“探月小車”的設(shè)計(jì)與制作設(shè)計(jì)說明_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、系統(tǒng)設(shè)計(jì)文件 第 1 冊(cè) 共 1 頁 共 1 冊(cè)產(chǎn)品型號(hào) 產(chǎn)品名稱 “探月小車”的設(shè)計(jì)與制作產(chǎn)品圖號(hào)本冊(cè)容 技術(shù)說明、使用說明、安裝說明、測試說明 批準(zhǔn)舊底圖總號(hào) 年 月 日底圖總號(hào)日期簽名09.4.272009EJZ005目錄一、 技術(shù)說明.(4)1. 技術(shù)參數(shù)與規(guī)格.(4)2. 功能與用途.(4)3. 系統(tǒng)結(jié)構(gòu).(4)3.1 工作原理.(5)4. 焊裝調(diào)(10)4.1 焊接工具與耗材.(10)4.2 焊接注意安全事項(xiàng).(10)4.3 調(diào)試和常見故障.(10)5.程序.(11)5.1 程序流程圖.(12)(1) 小車主流程圖(12)(2) 循跡流程圖.(13)(3) 避障流程圖.(13)(4

2、) 無線流程圖.(14)二、 使用說明.(15)(1) 設(shè)備清單.(15)(2) 操作方法.(15)(3) 注意事項(xiàng).(16)三、 安裝說明.(16)四、 測試說明(21)五、 附錄一:程序清單(21)“探月小車”的設(shè)計(jì)與制作一、技術(shù)說明1.1模擬探月小車組成1) 模擬探月小車核心板-S3C2440開發(fā)板2) 模擬探月小車底板3) 模擬探月小車巡跡板和探測任務(wù)板4) 模擬探月小車攝像頭與萬用擴(kuò)展板5) 模擬探月小車四輪車體6) 模擬探月小車鋰電池組圖1.1模擬探月小車實(shí)物圖圖中,是攝像頭與加高的轉(zhuǎn)接板。圖中,是攝像頭的一塊固定板,也可以作為一個(gè)萬用擴(kuò)展板。圖中,是兩組電池,一組給電機(jī)供電,一組

3、給開發(fā)板、尋跡電路、探測任務(wù)板(圖中沒畫出)供電。圖中,是電路底板,集成了電源電路、比較器電路和開發(fā)板轉(zhuǎn)接電路。圖中,是一塊ARM開發(fā)板,型號(hào)為S3C2440,為本次嵌入式小車專用芯片。圖中,為小車的車體。圖1.2模擬探月小車底板實(shí)物圖圖中,是比較電路,主要是把紅外傳感器電壓轉(zhuǎn)換為數(shù)字電平;圖中,是電源電路,主要是可以穩(wěn)壓輸出5伏電壓和比較電路的供電;圖中,是ARM開發(fā)板2.0接口轉(zhuǎn)2.54接口電路;圖中,是一個(gè)攝像頭轉(zhuǎn)接口圖1.3模擬探月小車核心板-S3C2440開發(fā)板圖圖中用戶中斷按鍵,是模擬探月小車分段處理功能按鍵;圖中用戶Led燈,是模擬探月小車分段處理功能的指示燈。1.2模擬探月小車

4、的創(chuàng)新點(diǎn)1) 添加了按鍵分段處理功能,通過模擬探月車本身自帶操作鍵能夠以劃分模塊任務(wù)形式分段來完成整個(gè)模擬探月小車的軟、硬件調(diào)試;2) 在模擬探月小車巡跡中,采用了模糊控制技術(shù);自主研發(fā)了圖像識(shí)別算法,識(shí)別率較高,能夠自動(dòng)跟蹤物體1.3模擬探月小車的功能介紹1) 能夠的完成模擬探月環(huán)境的自主行駛;2) 能夠沿著指定的線路進(jìn)行巡跡;3) 能夠進(jìn)行圖像采集以與基本圖形數(shù)據(jù)識(shí)別;4) 能夠測量出不同環(huán)境的溫度;5) 能夠測量出被探測物體直徑與面積;6) 能夠通過無線網(wǎng)絡(luò)傳送采集的各種數(shù)據(jù);7) 能夠通過遠(yuǎn)程控制端對(duì)模擬探月小車進(jìn)行遠(yuǎn)程控制;8) 能夠通過模擬探月車按鍵分段處理功能完成一些日常教學(xué)與科

5、研任務(wù)。1.4模擬探月小車系統(tǒng)結(jié)構(gòu) 模擬探月小車系統(tǒng)劃分為小車的電源模塊、電機(jī)驅(qū)動(dòng)模塊、循跡模塊、圖像識(shí)別模塊、測距和測溫模塊、無線評(píng)分通信系統(tǒng),其中循跡模塊由電壓比較電路和關(guān)電傳感器組成,模擬探月小車的任務(wù)探測板包含測距、測溫等模塊,無線評(píng)分通信系統(tǒng)是通過無線網(wǎng)絡(luò)和評(píng)分系統(tǒng)實(shí)現(xiàn)模擬探月小車的遠(yuǎn)程通訊和評(píng)分。系統(tǒng)結(jié)構(gòu)圖如下1、技術(shù)參數(shù)與規(guī)格1) “探月小車”底盤:21mm×165mm。 2) 電路額定工作電壓V給核心板與其他外圍電路提供電壓,8V直接為電機(jī)提供電壓。3) 正常工作溫度圍為:030攝氏度,相對(duì)濕度在35%90%。4) 外圍電路由灰度傳感器、L298芯片來驅(qū)動(dòng)直流電機(jī)(P

6、M-33126000-30k)、超聲波、光電開關(guān)傳感器(E3F-DS30C4)無線接收(TL-WN321G+)和電源(8V鋰電池YSD-08180)組成“探月小車”系統(tǒng),溫度傳感器(DS18B20)。5) “探月小車”主體電路是以三星公司S3C2440為核心芯片進(jìn)行設(shè)計(jì),合理利用了該芯片上豐富的資源。2、功能與用途2.1 小車的功能9) 我們?cè)O(shè)計(jì)的“探月小車”這一系統(tǒng)主要是讓小車自主的完成模擬“月球環(huán)境”的行走。10) 在循跡過程中,可以探測出前方的標(biāo)志物,并且能夠避開障礙物,沿標(biāo)記路線行走。11) 具有攝像頭模塊,通過對(duì)標(biāo)志物的圖像采集,將采集的數(shù)據(jù)以數(shù)字信號(hào)方式通過無線通信網(wǎng)絡(luò)發(fā)送到上位機(jī)

7、的控制臺(tái)。12) 在循跡過程中,可以測量出不同環(huán)境的溫度。2.2 控制臺(tái)的功能1) 通過無線通信網(wǎng)絡(luò)接收小車發(fā)送過來的圖像數(shù)據(jù)。2) 具有圖像識(shí)別功能,能夠辨別各種圖像并在液晶屏顯示。3) 遠(yuǎn)程控制“探月小車”,通過按鍵方式利用無線通信控制小車的基本動(dòng)作。2.3 小車的用途我們?cè)O(shè)計(jì)的“探月小車”這一體系的控制核心芯片是采用三星公司的S3C2440,軟件系統(tǒng)驅(qū)動(dòng)直流電機(jī),通過紅外傳感器實(shí)現(xiàn)了小車自動(dòng)識(shí)別路線,選擇正確的路線。在循跡過程中判斷并自動(dòng)躲避障礙,利用攝像頭對(duì)障礙物拍照,通過無線的方式將采集的圖像發(fā)送到上位機(jī)的控制臺(tái),在控制臺(tái)上通過按鍵可以控制小車的基本動(dòng)作,該技術(shù)可以應(yīng)用于探測月球環(huán)境

8、,無人駕駛機(jī)動(dòng)車,無人工廠,倉庫等領(lǐng)域。3、系統(tǒng)結(jié)構(gòu)我們?cè)O(shè)計(jì)的“探月小車”系統(tǒng)劃分為小車的電源模塊、電機(jī)驅(qū)動(dòng)模塊、循跡模塊、攝像頭模塊、超聲波測距模塊,探測物體模塊,無線通信模塊,其中循跡模塊由電壓比較電路和灰度傳感器組成,無線通信模塊是通過無線網(wǎng)卡實(shí)現(xiàn)小車與上位機(jī)的控制臺(tái)的連接。圖(1-1) 系統(tǒng)功能方框圖1) 工作原理:“探月小車”主體電路是以三星公司S3C2440為核心芯片進(jìn)行設(shè)計(jì),合理利用了該芯片上豐富的資源。在多種傳感器的控制下,“探月小車”可以實(shí)現(xiàn)自動(dòng)循跡、探測障礙物,同時(shí)對(duì)障礙物進(jìn)行圖像采集,通過無線通信方式發(fā)送到上位機(jī)的控制臺(tái),實(shí)現(xiàn)了“探月小車”的智能化。l 電源模塊 我們采用

9、兩個(gè)8V蓄電池為電路提供電源,其中一個(gè)8V蓄電池直接為直流電機(jī)供電;由于外圍電路是無源傳感器以與一些芯片組成,所以另一塊8V蓄電池通過LM7805芯片降壓,穩(wěn)壓到5V為核心板與外圍電路供電,再利用LM117芯片再降壓、穩(wěn)壓到3.3V給ARM芯片供電。蓄電池必須要具有較強(qiáng)的電流驅(qū)動(dòng)能力以與穩(wěn)定的電壓輸出性能,所以我們采用鋰電池供電。圖(1-3) 5V電壓穩(wěn)壓到3.3Vl 控制模塊小車的電機(jī)驅(qū)動(dòng)模塊是由專用芯片L298來實(shí)現(xiàn)的。該芯片的主要特點(diǎn)是:工作電壓高,最高工作電壓可達(dá)46V;輸出電流大,瞬間峰值電流可達(dá)3A,持續(xù)工作電流為2A;含兩個(gè)H橋的高電壓大電流全橋式驅(qū)動(dòng)器,可以用來驅(qū)動(dòng)直流電動(dòng)機(jī)和

10、步進(jìn)電動(dòng)機(jī)、繼電器、線圈等感性負(fù)載;在比賽中我們用來驅(qū)動(dòng)直流電機(jī),采用標(biāo)準(zhǔn)TTL邏輯電平信號(hào)控制;具有兩個(gè)使能控制端,在不受輸入信號(hào)影響的情況下允許或禁止器件工作;有一個(gè)邏輯電源輸入端,使部邏輯電路部分在低電壓下工作;可以外接檢測電阻,將變化量反饋給控制電路。該芯片有兩個(gè)差分驅(qū)動(dòng)門,可以同時(shí)驅(qū)動(dòng)兩個(gè)直流電機(jī),該芯片引腳介紹如下:引腳符號(hào)功能115SENSING ASENSING B此兩端與地連接電流檢測電阻,并向驅(qū)動(dòng)芯片反饋檢測到的信號(hào)23OUT 1OUT 2此兩腳是全橋式驅(qū)動(dòng)器A的兩個(gè)輸出端,用來連接負(fù)載4Vs電機(jī)驅(qū)動(dòng)電源輸入端57IN 1IN2輸入標(biāo)準(zhǔn)的TTL邏輯電平信號(hào),用來控制全橋式驅(qū)

11、動(dòng)器A的開關(guān)611ENABLE AENABLE B使能控制端.輸入標(biāo)準(zhǔn)TTL邏輯電平信號(hào);低電平時(shí)全橋式驅(qū)動(dòng)器禁止工作。8GND接地端,芯片本身的散熱片與8腳相通9Vss邏輯控制部分的電源輸人端口1012IN 3IN 4輸入標(biāo)準(zhǔn)的TTL邏輯電平信號(hào),用來控制全橋式驅(qū)動(dòng)器B的開關(guān)1314OUT 3OUT 4此兩腳是全橋式驅(qū)動(dòng)器B的兩個(gè)輸出端,用來連接負(fù)載該芯片控制邏輯電平如下:EnableA(B)INPUT 1INPUT 2電機(jī)工作情況HHL正轉(zhuǎn)HLH反轉(zhuǎn)HHH停止HLL停止L××停止L298作為電機(jī)驅(qū)動(dòng)電路,可靠性高,可以方便的控制電機(jī)正反轉(zhuǎn),原理圖如下:圖(1-4) 電機(jī)

12、驅(qū)動(dòng)原理圖l 超聲波測距模塊超聲波是一種振動(dòng)頻率高于聲波的機(jī)械波,由換能晶片在電壓的激勵(lì)下發(fā)生振動(dòng)產(chǎn)生的,它具有頻率高,波長短、繞射現(xiàn)象小,特別是方向性好,能夠成為射線而定向傳播等特點(diǎn)。超聲波測距模塊是用來測距并且避障用的。超聲波測距的原理如下:Sdh目標(biāo)首先超聲波傳感器向空氣中發(fā)射聲脈沖, 聲波遇到被測物體反射回來, 若可以測出第一個(gè)回波達(dá)到的時(shí)間與發(fā)射脈沖間的時(shí)間差t,利用,即可算得傳感器與反射點(diǎn)間的距離s , 測量距離,若s>>h 時(shí),則d s。對(duì)于接收探頭,因?yàn)榻邮盏某暡ㄐ盘?hào)很微弱而且考慮到干擾的因素,接收端有放大電路與濾波電路。當(dāng)接收到超聲波時(shí),IO口即為高電平,通過I

13、O口來確定是否檢測到超聲波,因此通過計(jì)算測的距離障礙物的距離然后就可以判斷是否轉(zhuǎn)彎。l 探測物體模塊小車探測物體采用的是光電開關(guān)傳感器E3F-DS30C4,它是數(shù)字傳感器,NPN常開型光電開關(guān),即數(shù)字電路中的低電平和高電平,正常狀態(tài)輸出高電平。檢測到目標(biāo)時(shí)輸出低電平,它利用被測物對(duì)光束的遮擋或反射,有同步回路選通電路,接收器在根據(jù)接收到光線的強(qiáng)弱或者有無對(duì)目標(biāo)物體進(jìn)行探測,我們?cè)谛≤嚨那懊嫜b了兩個(gè)光電開關(guān)傳感器,可以探測到路邊的標(biāo)志物,同時(shí)調(diào)整電機(jī)的轉(zhuǎn)速,對(duì)標(biāo)志物進(jìn)行拍照?qǐng)D像處理,最后通過無線通信網(wǎng)絡(luò)發(fā)送到上位機(jī)的控制臺(tái)。l 循跡模塊小車的循跡是由灰度傳感器和電壓比較電路組成,而灰度傳感器是由

14、光敏電阻和發(fā)光二級(jí)管組成,光敏電阻是利用半導(dǎo)體的光電效應(yīng)制成的一種電阻值隨入射光的強(qiáng)弱而改變的電阻器;在不同光照條件下的伏安特性曲線斜率不同,相應(yīng)的光敏電阻阻值也不同在給定偏壓下,光照度越大,電流也越大在一定光照下,電壓越大,電流也越大,我們把灰度傳感器輸出的信號(hào)進(jìn)入LM358進(jìn)行電壓比較,產(chǎn)生標(biāo)準(zhǔn)TTL電平,穩(wěn)定性能得到提升。當(dāng)小車底部的某邊遇到白帶時(shí)輸入電平為高電平,反之為低電平。在調(diào)試過程中,通過小車的循跡過程。我們調(diào)節(jié)電位器的靈敏度,以滿足小車在不同光度的環(huán)境中能夠行走正確路線。這樣利用灰度傳感器檢測智能小車行駛道路上的白色標(biāo)志線,就可以實(shí)現(xiàn)智能小車的自動(dòng)循跡。圖(1-5) 灰度傳感器

15、原理圖l 無線通信模塊無線通信模塊是小車與控制臺(tái)通過無線網(wǎng)卡建立起來的,在模擬“月球環(huán)境”下,小車?yán)脭z像頭將途中所遇到的標(biāo)志物記錄下來,把采集的圖像通過無線網(wǎng)卡發(fā)送到上位機(jī)的控制臺(tái),在控制臺(tái)顯示標(biāo)志物的圖片,并且通過按鍵可以控制“探月小車”的基本動(dòng)作。圖(1-6) 無線通信結(jié)構(gòu)圖4、焊裝調(diào)1) 焊接工具和耗材工具和耗材數(shù)量備注工具和耗材數(shù)量備注數(shù)字萬用表一塊/尖嘴鉗一把20CM長恒溫烙鐵,烙鐵夾一臺(tái)功率可調(diào),配 不同的烙鐵頭斜口鉗一把20CM長助焊劑和焊錫絲各一份/尖頭鑷子、彎頭鑷子各一把15CM長平口,十字起子各一把20CM長銅柱、螺母各四個(gè)直徑120Mil熱風(fēng)臺(tái)一臺(tái)/吸錫器一個(gè)/膠槍一把

16、/焊錫絲架一個(gè)/壓線鉗一把/塑膠棒若干/剪刀一把/接線柱若干大小不等2) 焊接流程圖1-4 焊接流程圖2) 焊接注意安全事項(xiàng)l 電焊鐵良好接地,防靜電。l 調(diào)節(jié)好電烙鐵的焊接溫度,以免溫度過高對(duì)元件產(chǎn)生影響。溫度一般控制在比焊錫絲的熔點(diǎn)高50度左右,或稍微高點(diǎn)。l 對(duì)元器件的焊接時(shí)間保證在3S焊完一個(gè)點(diǎn),以防溫升對(duì)元件有損壞。l 按上焊接流程,以保證電路板能正常工作,元器件都能焊上。l 銅柱的作用是以防電路板下有金屬引發(fā)短路。l 加電前注重檢查電解電容、保護(hù)管、穩(wěn)壓管的極性等。l 一定要查詢清電路板的技術(shù)參數(shù)組電路板加能承受得住的電壓值。5、程序5.1 主程序流程圖5.2 循跡流程圖5.3 避

17、障流程圖5.4 無線通信流程圖5.5 程序清單(附錄一)二、使用說明:1、設(shè)備清單1) 若干支撐銅柱和螺母。2) RS-232串口下載線一條。3) 兩個(gè)直流電機(jī)(PM-33126000-30k)。4) 小車底盤:210mm×150mm。5) 傳感器:灰度傳感器、超聲波,光電開關(guān)傳感器。6) 兩個(gè)8V鋰電池電源(YSD-08180)。7) 無線網(wǎng)卡(TL-WN321G+)。8) 交叉網(wǎng)線2m。2、操作方法1) 將若干銅柱分別安裝在電路板的制定位置,柱子在電路板下方,螺母在上方,旋緊便可。2) 檢查各個(gè)模塊和電源接線是否良好。3) 將8V直流電源(自備)通過降壓給各個(gè)模塊供電,開啟并檢測

18、是否有異常。4) 根據(jù)現(xiàn)場具體情況,對(duì)攝像頭和灰度傳感器稍加調(diào)整,以適應(yīng)場地環(huán)境。5) 下載程序時(shí)應(yīng)將RS-232下載線的一頭插在電路板的串口下載九針接口的母頭上,另一端插在PC機(jī)上的九針母頭上。6) 我們借助PC機(jī)上的虛擬機(jī)與我們的核心板建立交叉編譯環(huán)境,并且把程序燒到核心板部。7) 程序下載完成后,我們要對(duì)電機(jī)的旋轉(zhuǎn)方向、攝像頭的清晰度、灰度的靈敏度、超聲波的距離加以調(diào)整,達(dá)到最佳效果。8) 調(diào)試完成后,則可以將小車放到起始線等候出發(fā)指令。9) 在控制臺(tái)控制小車的開始和停止。10) 在控制臺(tái)上可以觀看“探月小車”傳回來的圖片和距離以與相關(guān)數(shù)據(jù)。3、注意事項(xiàng)1) 核心板電源電壓不得超過6V,

19、以免燒壞核心板。2) 不得在過于潮濕的地方使用此電路板,防止電機(jī)線圈受潮運(yùn)得時(shí)而發(fā)熱量過大燒毀線圈。3) 在檢測線路時(shí)若出現(xiàn)識(shí)別效果不佳等相關(guān)問題,可以適當(dāng)?shù)恼{(diào)整電位器,以增加其循跡的靈敏度。4) 電機(jī)驅(qū)動(dòng)供電不得大于10V。三、安裝說明(1) 準(zhǔn)備必要的安裝工具。(2) 檢查各個(gè)模塊清單和相關(guān)器件是否齊全。l 小車框架裝配圖:小車裝配平面圖車體安裝說明:1循跡模塊1,3mm螺絲固定2循跡模塊2,3mm螺絲固定3循跡模塊3,3mm螺絲固定4循跡模塊4,3mm螺絲固定5循跡模塊5,3mm螺絲固定7超聲波測障支架,3mm2螺絲固定8核心板放置位,3mm4螺絲固定,6mm銅柱對(duì)主板升高9左電機(jī)3mm

20、4螺絲固定10右電機(jī)3mm4螺絲固定11紅外光電傳感器 3mm螺絲固定 12電壓比較電路3mm2螺絲固定,4mm銅柱對(duì)其升高小車接線圖: 小車具體引腳的接法:主板(CON4)芯片的輸入輸出引腳名稱功能15V5V電源輸出25V5電源輸出3GND地9GPF0循跡輸入510GPF1循跡輸入411GPF2循跡輸入312GPF3循跡輸入213GPF4循跡輸入118GPG3左電機(jī)正反轉(zhuǎn)20GPG5右電機(jī)正反轉(zhuǎn)28GPG2光電開關(guān)傳感器15GPF6光電開關(guān)傳感器17GPG1電機(jī)驅(qū)動(dòng)輸入25GPE11電機(jī)驅(qū)動(dòng)輸入23GPG10電機(jī)驅(qū)動(dòng)輸入22GPG9超聲波27GPE13電機(jī)驅(qū)動(dòng)輸入31TOUT0左電機(jī)速度控制

21、pwm34溫度傳感器32TOUT1右電機(jī)速度控制pwm循跡(電壓比較電路)引腳功能1循跡模塊12循跡模塊23循跡模塊34循跡模塊45循跡模塊56備用7備用8備用5V5V電源輸入GND接地電機(jī)驅(qū)動(dòng)模塊引腳功能GPG3左電機(jī)正、反轉(zhuǎn)控制TOUT0左電機(jī)速度控制輸出pwmTOUT1右電機(jī)速度控制輸出pwmGPG5右電機(jī)正、反轉(zhuǎn)控制GPG1電機(jī)驅(qū)動(dòng)輸入GPE11電機(jī)驅(qū)動(dòng)輸入GPG10電機(jī)驅(qū)動(dòng)輸入GPE13電機(jī)驅(qū)動(dòng)輸入VCC8V電池直接為芯片提供電壓GND接地四、測試說明測試前整個(gè)輪子組裝完整,并且各個(gè)功能模塊正常。測試步驟:a) 測試灰度傳感器將小車放在模擬月球環(huán)境下的標(biāo)志線上,從左邊第一個(gè),在白線附

22、近左右移動(dòng),在白線上的信號(hào)指示燈是否熄滅,灰線上是否點(diǎn)亮 若在白線上指示燈點(diǎn)亮,順時(shí)針旋轉(zhuǎn)模擬數(shù)字轉(zhuǎn)換板上對(duì)應(yīng)的精密可調(diào)電阻,將調(diào)到指示燈熄滅即可,樣一次把五個(gè)灰度傳感器調(diào)整好,后啟動(dòng)循跡測試程序,照上述說明將循跡模塊調(diào)整到最優(yōu)狀態(tài)。b) 測試紅外光電開關(guān)傳感器在紅外光電傳感器正前方20cm處放置一個(gè)物體,看傳感器背部指示燈是否點(diǎn)亮,若沒有點(diǎn)亮,則順時(shí)針旋轉(zhuǎn)背部的旋鈕,直到指示燈點(diǎn)亮為止,反之逆時(shí)針旋轉(zhuǎn)至熄滅狀態(tài)即可。說明:設(shè)置紅外光電傳感器的距離小于等于20cm是為了防止小車檢測到模擬月球環(huán)境四周的擋板而引起小車的誤判。c) 測試超聲波傳感器在超級(jí)終端里面運(yùn)行程序,將標(biāo)志物放置在超聲波傳感器

23、的正前方,通過改變標(biāo)志物的距離,觀察超聲波測試的距離。d) .測試溫度傳感器在超級(jí)終端運(yùn)行溫度測試程序,觀察顯示的溫度與環(huán)境溫度是否一樣。e) .整體測試將探月小車放在模擬月球的環(huán)境下的起始點(diǎn),將電源打開,并隨機(jī)放置三個(gè)標(biāo)志物,在上位機(jī)的控制臺(tái)上啟動(dòng)小車,同時(shí)觀察小車傳回來的數(shù)據(jù)。附錄一:程序清單:Main.c#define _turn_back_L1 700#define _turn_back_L2 700#define _turn_L1 0#define _run1 2500 #define _other_turn1 400#define _run2 2000#define _other_

24、turn2 520#define _run3 400#define _round 200 /1 is white line , 0 is black line#define WHITE_LINE 1#define PWM_IOCTL_SET_FREQ1#define PWM_IOCTL_STOP0#define LCNT 5#define L0 0#define L1 1#define L2 2#define L3 3#define L4 4#define L5 5#define L6 6#define L7 7#define FL1 1#define FL2 7#define FR1 9#d

25、efine FR2 10#define DIS 6#define STOPDIS 200#define MINDIS 300#define LOW 0#define HIGHT 1#define HIGHT2 0x18#define LOW2 0x03#define FWD 0#define BCK 1#define LEFT -1#define RIGHT 1#define NOTURN 0#define BIGLEFT -2#define BIGRIGHT 2#define LONGRUN 4#define GET_IMG 1#define NO_IMG 0#define TURE 1#d

26、efine FALSE 0extern char Color20;extern char result;/float TC=0;char strings4000;char start_check_way = FALSE;int debug_flag = 1; int OUTIO_fd;int INIO_fd;int last_turn=0;int img_cn=0;char Flag_END =0;long len_way=0;struct _freqs int freq1; int freq2;struct _freqs myfreqs;static int PWM_fd = -1;stat

27、ic void close_buzzer(void);void openINIO(void);int car_turn_degree(int x, int direct, int Fg);/ m=1 -> 1msvoid delay(int m) int i,j,k; for (i=0;i<m;i+)for (j=0;j<34000;j+);void delayus(int m) int i,j; for (i=0;i<m;i+) for (j=0;j<34;j+);static void open_buzzer(void)PWM_fd = open("

28、/dev/newpwm", 0);if (PWM_fd < 0) perror("open pwm_buzzer device");exit(1);/ any function exit call will stop the buzzeratexit(close_buzzer);return;static void close_buzzer(void)if (PWM_fd >= 0) ioctl(PWM_fd, PWM_IOCTL_STOP);close(PWM_fd);PWM_fd = -1;static void set_buzzer_freq(s

29、truct _freqs freqs)/ this IOCTL command is the key to set frequency/-printf( "Set myfreqs1:%d, myfreqs2:%d. n",freqs.freq1,freqs.freq2);int ret = ioctl(PWM_fd, PWM_IOCTL_SET_FREQ, &freqs);if(ret < 0) perror("set the frequency of the buzzer");exit(1);void forward()ioctl(OUT

30、IO_fd,0,FL1);ioctl(OUTIO_fd,1,FL2);ioctl(OUTIO_fd,0,FR1);ioctl(OUTIO_fd,1,FR2);void back()ioctl(OUTIO_fd,1,FL1);ioctl(OUTIO_fd,0,FL2);ioctl(OUTIO_fd,1,FR1);ioctl(OUTIO_fd,0,FR2);void turn_big_left()ioctl(OUTIO_fd,1,FL1);ioctl(OUTIO_fd,0,FL2);ioctl(OUTIO_fd,0,FR1);ioctl(OUTIO_fd,1,FR2);void turn_big_

31、right()ioctl(OUTIO_fd,0,FL1);ioctl(OUTIO_fd,1,FL2);ioctl(OUTIO_fd,1,FR1);ioctl(OUTIO_fd,0,FR2);static void stop_buzzer(void) int ret = ioctl(PWM_fd, PWM_IOCTL_STOP);if(ret < 0) perror("stop the buzzer");exit(1);void openOUTIO(void) OUTIO_fd = open("/dev/OUTIO", 0);if (OUTIO_fd

32、 < 0) perror("open device OUTIO");exit(1); void openINIO(void)INIO_fd = open("/dev/INIO", 0);if (INIO_fd < 0) perror("open device INIO");exit(1);int check_wich_turn( unsigned char flag ) static int last_big_right=100, last_big_left=100; if ( last_turn = BIGLEFT )

33、last_big_left=1; else last_big_left+; if ( last_turn = BIGRIGHT ) last_big_right=1; else last_big_right+; if ( (flag & (1<<L2) ) return NOTURN; /榪囧崄瀛? if ( ( (flag & HIGHT2) >>3) > 0) && (flag & LOW2)>0) ) return LONGRUN; if ( flag = (1<<L3) ) return RIGHT

34、; if ( flag = (1<<L1) ) return LEFT; /if ( (flag & (1<<0) && (flag & (1<<4) ) return NOTURN; /if ( (flag & (1<<1) && (flag & (1<<3) ) return NOTURN; /闃叉宸彸鏅? /if ( ( flag & (1<<L4) ) && (last_turn = BIGLEFT ) return NOTUR

35、N; / if ( ( flag & (1<<L0) ) && (last_turn = BIGRIGHT ) return NOTURN;if (debug_flag) printf(" Flags: %dn", flag); if ( flag & (1<<L4) ) return BIGRIGHT; if ( flag & (1<<L0) ) return BIGLEFT;/* if ( flag & (1<<L4) ) if (last_big_left <= 6)

36、 car_run(100,0); return NOTURN; else return BIGRIGHT; if ( flag & (1<<L0) ) if (last_big_right <= 6) car_run(100,0); return NOTURN; else return BIGLEFT;*/ / if ( flag & (1<<L0) ) return BIGLEFT; if ( flag = (1<<L1) | (1<<L2) ) return LEFT; if ( flag = (1<<L2)

37、 | (1<<L3) ) return RIGHT; if (flag = 0 ) && (last_turn=BIGLEFT) | (last_turn=BIGRIGHT) ) ) return last_turn; return NOTURN; /printf("Current INIO: %sn",NOW_INIO); /printf( "left:%d, right:%dn", left,right);void turn(int turn_flag) long int=0; if (turn_flag = BIGLEF

38、T) / if (debug_flag) printf("BIGLEFTn"); turn_big_left(); delay(10); myfreqs.freq1 = 400; /LEFT, BCK /10 old myfreqs.freq2 = 400; /RIGHT, FWD /10 old set_buzzer_freq(myfreqs); delay(5); /10 old /stop_buzzer(); else if (turn_flag = BIGRIGHT ) / if (debug_flag) printf("BIGRIGHTn");

39、 turn_big_right(); delay(10); myfreqs.freq1 = 400; /LEFT FWD /10 old myfreqs.freq2 = 400; /RIGHT BCK /10 old set_buzzer_freq(myfreqs); delay(5); /10 old /stop_buzzer(); else if (turn_flag = LEFT) / if (debug_flag) printf("LEFTn"); forward(); myfreqs.freq1 = 0; /LEFT F1 myfreqs.freq2 = 1; /

40、RIGHT F2 set_buzzer_freq(myfreqs); delay(10); /10 else if (turn_flag = RIGHT) /if (debug_flag) printf("RIGHTn"); forward(); myfreqs.freq1 = 1; /LEFT F1 myfreqs.freq2 = 0; /RIGHT F2 set_buzzer_freq(myfreqs); delay(10); else if ( turn_flag = LONGRUN) printf("turn LOMGRUNn"); forwar

41、d(); myfreqs.freq1 = 1; /10 myfreqs.freq2 = 1; set_buzzer_freq(myfreqs); delay(100); /here len_way+=10; printf("len_way=%dn",len_way); else / if (debug_flag) printf("NOTURN n"); forward(); myfreqs.freq1 = 1; /10 myfreqs.freq2 = 1; set_buzzer_freq(myfreqs); delay(10); len_way+; pr

42、intf("len_way=%dn",len_way); last_turn = turn_flag;/check Line Color, if white then unsigned check_flag(unsigned char flag) if ( WHITE_LINE ) return( ( flag ) & 0x1F ); else return flag;unsigned char tohex(unsigned char *IN) int i; unsigned char result; result = 0; for (i = 0 ; i <

43、5; i+) if ( INi = '1') result |= (1<<i); result = check_flag(result); return result;void SaveHtml(int count) int h_fd; char str60; int i; int len; int TC; char *string10; int dis; /printf("Open! n"); TC=get_Tc( ); dis=get_dis();h_fd = open("/index.html", O_WRONLY |

44、O_CREAT | O_TRUNC);sprintf(str,"<html> <body> <meta -equiv="refresh" content="5"> "); write(h_fd,str, strlen(str); sprintf(str,"<div align="center"> <img src="img%ld.jpg" /> </div>n",count - 1); write(h_f

45、d,str, strlen(str); sprintf(str,"Len%ld is %ld mm TC=%d ,sanjianxing color is %s ",count -1, dis,TC,Color); strcat(strings,str); write(h_fd,strings,strlen(strings); for (i=0; i<count; i+) sprintf(str, "<div align="center"><a href="img%ld.jpg"> Image%

46、ld </a></div>n", i,i); len = strlen(str); write(h_fd,str, len); /printf("%d n %sn", strlen(str),str); sprintf(str,"</body> </html>n"); write(h_fd,str,strlen(str); close(h_fd);/ Forward RUNint car_run(int x, int Fg) int i; unsigned char Flag; char curr

47、ent_INIO9; int dis; forward(); myfreqs.freq1 = 1000; myfreqs.freq2 = 1000; set_buzzer_freq(myfreqs); for (i=0; i<x; i+) delay(1); read(INIO_fd, current_INIO, sizeof current_INIO); Flag = tohex(current_INIO);if ( (Fg=1) && ( Flag & 0x3 ) > 0) ) return 1; /stop_buzzer(); return 0;/ba

48、k wayint car_back(int x, int Fg) int i; unsigned char Flag; char current_INIO9; back(); myfreqs.freq1 = 800; myfreqs.freq2 = 800; set_buzzer_freq(myfreqs); for (i=0; i<x; i+) delay(1); read(INIO_fd, current_INIO, sizeof current_INIO); Flag = tohex(current_INIO);if ( (Fg=1) && ( Flag &

49、 0x4 ) > 0) ) stop_buzzer(); delay(10); return 1; stop_buzzer(); delay(500); return 0;/Turn degree , Fg is if check lineint car_turn_degree(int x, int direct, int Fg) int i; unsigned char Flag; char current_INIO9; if ( direct = LEFT) printf("turn leftn"); turn_big_left(); delay(200); myfreqs.freq1 = 400; /0 -old myfreqs.freq2 = 400; set_buzzer_freq(myfreqs); for (i=0 ; i<x; i+) read(INIO_fd, current_INIO, sizeof current_INIO); Flag = tohex(current_INIO);if ( (Fg=1) &&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論