- 微小型無人系統(tǒng)設(shè)計(jì)與制作
- 張金等
- 2869字
- 2020-07-02 15:28:17
3.3 軟件設(shè)計(jì)
Arduino虛擬現(xiàn)實(shí)感知小車的功能實(shí)現(xiàn)需要Arduino UNO R3主板、驅(qū)動模塊、電源模塊及其他硬件模塊相互配合,統(tǒng)一協(xié)調(diào)。這就需要使用Arduino程序?qū)⒏鱾€模塊連接成一個相互關(guān)聯(lián)的系統(tǒng)。Arduino UNO R3主板相當(dāng)于小車的大腦。Arduino程序就是這個大腦所擁有的思想,根據(jù)軟件指令,控制各個模塊完成自己的動作,從而最終完成任務(wù)所要求的動作。Arduino程序可以用PC端的Arduino IDE編譯軟件進(jìn)行編寫。
由于Arduino虛擬現(xiàn)實(shí)感知小車采用模塊化多功能設(shè)計(jì),各個控制系統(tǒng)之間相互獨(dú)立(這是為了不讓小車出現(xiàn)連帶損害,小車不會因?yàn)橐粋€系統(tǒng)故障而影響其他系統(tǒng)的正常工作),因此各個系統(tǒng)的控制程序也是相對獨(dú)立的。模塊化多功能設(shè)計(jì)的優(yōu)點(diǎn),首先是每個模塊的程序結(jié)構(gòu)相對簡單,任務(wù)明確,易于編寫、調(diào)試和修改;其次是程序可讀性好,對特定模塊的程序修改可局部進(jìn)行,不會干擾其他模塊的程序,有利于調(diào)試。另外,對于在程序中高頻率使用的子程序,我們建立了子程序庫,以便于在編寫各個模塊的程序時可以快速調(diào)用。
Arduino虛擬現(xiàn)實(shí)感知小車的程序主要由無線數(shù)據(jù)傳輸程序、模式識別程序、電動機(jī)驅(qū)動程序、舵機(jī)程序、各種傳感器程序等組成。由控制端向小車的信號接收端發(fā)送指令,信號接收端將信息傳給Arduino UNO R3主板,由Arduino UNO R3主板進(jìn)行解碼,進(jìn)而執(zhí)行相應(yīng)的子程序。Arduino虛擬現(xiàn)實(shí)感知小車的程序總體設(shè)計(jì)圖如圖3.16所示。

圖3.16 Arduino虛擬現(xiàn)實(shí)感知小車程序總體設(shè)計(jì)圖
1.程序整體結(jié)構(gòu)框架
Arduino虛擬現(xiàn)實(shí)感知小車的程序由7部分組成。其中,防護(hù)預(yù)警系統(tǒng)程序由6個傳感器的相應(yīng)程序組成。6個傳感器采集到的信息由Arduino程序進(jìn)行分析處理,發(fā)出相應(yīng)的警報(bào)信號,同時將信息經(jīng)無線數(shù)據(jù)傳輸模塊發(fā)回控制端,供指揮員決策。Arduino虛擬現(xiàn)實(shí)感知小車程序整體結(jié)構(gòu)框架如圖3.17所示。

圖3.17 Arduino虛擬現(xiàn)實(shí)感知小車程序整體結(jié)構(gòu)框架
2.程序結(jié)構(gòu)
Arduino語言以setup()函數(shù)作為程序初始化,以loop()函數(shù)作為循環(huán)。setup()函數(shù)用來初始化變量、管腳模式及調(diào)用庫函數(shù)等,在整個程序運(yùn)行過程中只執(zhí)行一次。loop()函數(shù)是一個循環(huán)函數(shù),函數(shù)內(nèi)的語句周而復(fù)始地循環(huán)執(zhí)行,功能類似C語言中的main()函數(shù)。
(1)遙控通信程序的實(shí)現(xiàn)
Arduino虛擬現(xiàn)實(shí)感知小車采用Arduino APC 220 USB無線數(shù)據(jù)傳輸模塊與Arduino開源無線遙控手柄配合進(jìn)行控制。Arduino開源無線遙控手柄的程序主要由初始化函數(shù)setup()和循環(huán)函數(shù)loop()組成,首先進(jìn)行按鍵編碼、定義、初始化,然后設(shè)置波特率,與無線數(shù)據(jù)傳輸模塊建立通信協(xié)議,最后讀取按鍵變化值,并發(fā)送數(shù)據(jù)。Arduino開源無線遙控手柄的程序流程圖如圖3.18所示。

圖3.18 Arduino開源無線遙控手柄的程序流程圖
無線數(shù)據(jù)傳輸模塊接收到由Arduino開源無線遙控手柄發(fā)送的信息后,將信息傳送給Arduino UNO R3主板,由Arduino UNO R3主板判斷所接收到的信號,從而執(zhí)行相應(yīng)的動作。比如,Arduino UNO R3主板解析到接收的信號為djqj(電動機(jī)前進(jìn)),就會控制小車向前移動。其相應(yīng)的程序?yàn)?/p>

(2)電動機(jī)控制程序的實(shí)現(xiàn)
步進(jìn)電動機(jī)是將電脈沖信號轉(zhuǎn)變?yōu)榫€位移或角位移信號的開環(huán)控制部件。在不超載的情況下,步進(jìn)電動機(jī)的停止位置、轉(zhuǎn)速只取決于輸入電脈沖信號的脈沖數(shù)和頻率,不受負(fù)載變化的影響,當(dāng)步進(jìn)驅(qū)動器接收到一個電脈沖信號時,就會驅(qū)動步進(jìn)電動機(jī)按設(shè)定的方向轉(zhuǎn)動一個固定的角度(稱為步距角)。其旋轉(zhuǎn)是以固定的角度一步一步進(jìn)行的,可以通過控制電脈沖信號的脈沖數(shù)來控制角位移,從而達(dá)到準(zhǔn)確定位的目的;同時,可以通過控制電脈沖信號的頻率來控制步進(jìn)電動機(jī)轉(zhuǎn)動的加速度和速度,從而達(dá)到改變速度的目的。步進(jìn)電動機(jī)可以作為一種用于控制的特種電動機(jī),利用其沒有積累誤差(精度為100%)的特點(diǎn),廣泛應(yīng)用于各種開環(huán)控制。
Arduino程序通過調(diào)整PWM占空比來控制兩組四個步進(jìn)電動機(jī)的轉(zhuǎn)速,即通過改變PWM的占空比來控制步進(jìn)電動機(jī)的供電電壓,從而控制步進(jìn)電動機(jī)的轉(zhuǎn)速,實(shí)現(xiàn)差速轉(zhuǎn)向、切邊轉(zhuǎn)向、中心轉(zhuǎn)向三種轉(zhuǎn)彎模式。Arduino虛擬現(xiàn)實(shí)感知小車步進(jìn)電動機(jī)驅(qū)動程序流程圖如圖3.19所示。

圖3.19 Arduino虛擬現(xiàn)實(shí)感知小車步進(jìn)電動機(jī)驅(qū)動程序流程圖
差速轉(zhuǎn)向是通過調(diào)節(jié)轉(zhuǎn)彎時兩側(cè)步進(jìn)電動機(jī)的轉(zhuǎn)速,使得內(nèi)側(cè)步進(jìn)電動機(jī)的轉(zhuǎn)速大于外側(cè)步進(jìn)電動機(jī)的轉(zhuǎn)速,從而完成轉(zhuǎn)彎的。其轉(zhuǎn)彎半徑較大,適用于行進(jìn)過程中及路面較寬闊情況下的轉(zhuǎn)彎。切邊轉(zhuǎn)向是使內(nèi)側(cè)步進(jìn)電動機(jī)的轉(zhuǎn)速為零,外側(cè)步進(jìn)電動機(jī)的轉(zhuǎn)速大于零,小車依靠外側(cè)履帶完成旋轉(zhuǎn)式轉(zhuǎn)彎。其轉(zhuǎn)彎半徑介于差速轉(zhuǎn)向與中心轉(zhuǎn)向之間,適用于道路較狹窄時的轉(zhuǎn)彎、變向等。中心轉(zhuǎn)向是使外側(cè)步進(jìn)電動機(jī)的轉(zhuǎn)速大于零,內(nèi)側(cè)步進(jìn)電動機(jī)的轉(zhuǎn)速小于零,通過外側(cè)前進(jìn)、內(nèi)側(cè)后退的方式在原地完成轉(zhuǎn)彎。其轉(zhuǎn)彎半徑是三種轉(zhuǎn)彎模式中最小的,適用于狹窄地段的方向變更。Arduino虛擬現(xiàn)實(shí)感知小車步進(jìn)電動機(jī)控制程序流程圖如圖3.20所示。

圖3.20 Arduino虛擬現(xiàn)實(shí)感知小車步進(jìn)電動機(jī)控制程序流程圖
PWM(Pulse Width Modulation)是一種方波控制信號。其高電平的寬度在一個周期里所占的比例被稱為占空比(Duty Cycle)。改變PWM的占空比,可以改變輸出信號的平均電壓。
Arduino UNO R3主板的3、5、6、9、10、11接口可以通過語句analogWrite(pin,duty-Cycle)來確定指定占空比的PWM。其中,pin的值在3、5、6、9、10、11接口中選擇,dutyCycle的值在0~255之間,0代表占空比為0%,127代表占空比為50%,255代表占空比為100%。這種方式下,PWM信號的頻率是固定的默認(rèn)值,為1000Hz左右,在analogWrite(pin,dutyCycle)之后,占空比會一直保持不變,除非下一個analogWrite(pin,dutyCycle)執(zhí)行。我們可以手動切換高電平和低電平,并在中間加入延時函數(shù)delay(),就可以實(shí)現(xiàn)自定義頻率的PWM。
Arduino UNO R3主板有三個Timer,即Timer0、Timer1、Timer2。三個Timer都可以自定義調(diào)節(jié)頻率,但各有特點(diǎn)。Timer0負(fù)責(zé)控制delay()等函數(shù),如果改變Timer0的頻率,就會導(dǎo)致計(jì)時函數(shù)不準(zhǔn)確;Timer1的計(jì)數(shù)器是16位的,與Timer0、Timer2的8位計(jì)數(shù)器是不一樣的;Timer2的頻率可調(diào)擋位更多,有7擋預(yù)除數(shù),我們選擇Timer2。Arduino UNO R3主板離線存儲的步進(jìn)電動機(jī)調(diào)用函數(shù)為

小車在接收到遙控信號后,通過判斷執(zhí)行相應(yīng)的動作。
(3)初始化部分源代碼
Arduino語言的初始化部分由setup()執(zhí)行。Arduino虛擬現(xiàn)實(shí)感知小車的初始化部分源代碼為

3.編譯環(huán)境
Arduino虛擬現(xiàn)實(shí)感知小車使用Arduino IDE進(jìn)行編譯。Arduino IDE是一款專業(yè)的Arduino開發(fā)工具,主要用于Arduino程序的編寫和開發(fā),擁有開放源代碼的電路圖設(shè)計(jì),支持ISP在線燒錄,兼容Flash、Max/Msp、VVVV、PD、C、Processing等多種程序,是廣受歡迎的編譯環(huán)境。Arduino語言是建立在C/C++語言基礎(chǔ)上的,基本與C語言相通。其實(shí)也就是基礎(chǔ)的C語言,Arduino語言只不過把與AVR單片機(jī)(微控制器)相關(guān)的一些寄存器參數(shù)、設(shè)置等都函數(shù)化了,不需使用者了解底層,有利于進(jìn)行開發(fā)。
Arduino IDE的編程特色:
特色一:開放源代碼的電路圖設(shè)計(jì),程序開發(fā)接口免費(fèi)下載,也可依需求自己修改。
特色二:使用低價格的微處理控制器(ATmega8或ATmega128),可以采用USB接口供電,不需外接電源,也可以使用外部9VDC供電。
特色三:支持ISP在線燒錄,可以將新的bootloader固件燒入ATmega8或ATmega128芯片,有了bootloader之后,即可通過串口或USBtoRs232更新固件。
特色四:可依據(jù)官方提供Eagle格式的PCB和SCH電路圖簡化Arduino模組,完成獨(dú)立運(yùn)作的微處理器控制,各種電子元器件的連接非常方便。
特色五:支持多種互動程序,如Flash、Max/Msp、VVVV、PD、C、Processing等。
特色六:利用Arduino可突破以往只能使用鼠標(biāo)、鍵盤、CCD等輸入裝置的互動內(nèi)容,可以更簡單地達(dá)成單人或多人互動。
Arduino IDE界面截圖如圖3.21所示。

圖3.21 Arduino IDE界面截圖
所完成的Arduino虛擬現(xiàn)實(shí)感知小車的實(shí)物圖如圖3.22所示。

圖3.22 Arduino虛擬現(xiàn)實(shí)感知小車的實(shí)物圖
- 鄒為誠《綜合英語教程(5)》(第3版)學(xué)習(xí)指南【詞匯短語+課文精解+練習(xí)答案】
- 基礎(chǔ)會計(jì)學(xué)習(xí)指導(dǎo)(第4版)
- 微型計(jì)算機(jī)系統(tǒng)原理及應(yīng)用:國產(chǎn)龍芯處理器的軟件和硬件集成(實(shí)訓(xùn)篇)
- Flutter移動應(yīng)用開發(fā)
- 光滑粒子流體動力學(xué)方法及應(yīng)用
- 周維權(quán)《中國古典園林史》(第3版)配套題庫【名校考研真題+章節(jié)題庫+模擬試題】
- 基礎(chǔ)心理學(xué)
- 行為公司金融(原書第2版)
- 長三角一體化與上海國際航運(yùn)中心建設(shè)
- 畬族服飾文化變遷及傳承
- 立體構(gòu)成藝術(shù)
- 特殊兒童心理評估(第2版)
- 江平《民法學(xué)》(第2版)【教材精講+考研真題解析】講義與視頻課程【60小時高清視頻】
- 《毛澤東思想和中國特色社會主義理論體系概論》(2010年修訂版)筆記和課后習(xí)題(含考研真題)詳解
- 丁樹杞《大學(xué)俄語(3)》(東方老版)學(xué)習(xí)指南【詞匯短語+課文精解+單元語法+全文翻譯+練習(xí)答案】