5 ?軟件設(shè)計
軟件設(shè)計需要把程序流程確定好,要明確先運(yùn)行哪一步再到哪一步,然后根據(jù)相關(guān)流程把程序敲寫出來。由于本課題對紅外遙控器與藍(lán)牙遙控器都使用了,并且二者的使用思想和代碼編程大同小異,但值得注意的是:使用紅外遙控器不能通過PWM調(diào)節(jié)電機(jī)速度,因?yàn)檎{(diào)節(jié)PWM值會影響紅外的信號接收,至此本設(shè)計主要以藍(lán)牙遙控器為主。紅外遙控器以及藍(lán)牙遙控器如圖(a)和圖(b)。
圖5(a)紅外遙控器編碼????????
?
???????????
?圖5(b)藍(lán)牙遙控器按鍵編碼
5.1自由運(yùn)動模式設(shè)計
該模式下可通過遙控器控制小車各項(xiàng)運(yùn)動,通過控制小車左右二個進(jìn)步電機(jī)的正轉(zhuǎn)和反轉(zhuǎn)來控制小車的前后左右運(yùn)動。對此,先要確定電機(jī)驅(qū)動的真值表才能對小車的運(yùn)動精準(zhǔn)控制,小車電機(jī)驅(qū)動真值表如圖5.1.1所示,(1)根據(jù)其真值表,可以對小車的運(yùn)動進(jìn)行編寫代碼,當(dāng)引腳9和10為高電平,引腳8和9為低電平時,小車進(jìn)行前進(jìn),其他運(yùn)動方式設(shè)定雷同。(2)把這些運(yùn)動方式封裝和并進(jìn)行藍(lán)牙遙控實(shí)驗(yàn),當(dāng)按下字符’108’調(diào)用前進(jìn)模式,其他運(yùn)動雷同。
5.1.1電機(jī)驅(qū)動真值表
Left_go = 8 |
Left_back = 9 |
Right_go=10 |
Right_back=11 |
|
前進(jìn) |
0 |
1 |
1 |
0 |
后退 |
1 |
0 |
0 |
1 |
停車 |
0 |
0 |
0 |
0 |
左轉(zhuǎn) |
0 |
0 |
1 |
0 |
左旋轉(zhuǎn) |
1 |
0 |
1 |
0 |
右轉(zhuǎn) |
0 |
1 |
0 |
0 |
右旋轉(zhuǎn) |
0 |
1 |
0 |
1 |
在該模式中,還有個難點(diǎn)在于對機(jī)械臂的控制,機(jī)械臂的控制主要難度有二點(diǎn),一是該機(jī)械臂構(gòu)架材料用的時亞克力板,該板干脆易斷,使用螺絲扭進(jìn)機(jī)械臂里,螺絲扭太緊往往會讓機(jī)械臂轉(zhuǎn)動困難,螺絲扭太松又會時機(jī)械臂容易滑動,夾物體用不上力;二是對舵機(jī)的控制,控制舵機(jī)首先要明白舵機(jī)的PWM控制范圍。根據(jù)舵機(jī)的250份劃分原理可知道舵機(jī)的轉(zhuǎn)動可分為250份,并得到控制舵機(jī)轉(zhuǎn)動的PWM響應(yīng)范圍0.5MS---2.5Ms,則可得出舵機(jī)PWM的寬度為2MS = 2000uS;
因此,可通過舵機(jī)轉(zhuǎn)動的PWM響應(yīng)頻寬和轉(zhuǎn)動的劃分計算出控制轉(zhuǎn)動一份舵機(jī)最少需要頻寬為: ??????????????????2000uS÷250=8uS;
所以,舵機(jī)的PWM的控制精度為8us;
所以,可以以8uS的遞增控制舵機(jī)轉(zhuǎn)動與定位;
又因?yàn)椋鏅C(jī)可轉(zhuǎn)動角度為185度,那么可算出舵機(jī)轉(zhuǎn)動一份所占用的角度:
185度÷250=0.74度;
所以,舵機(jī)角度的控制精度為0.74度;
綜上所述,可得:時基寄存器內(nèi)的數(shù)值為250,舵機(jī)轉(zhuǎn)動角度共185度,分為250份,把每份記作1DIV,得到1 DIV = 8uS , 250DIV=2mS;
則:185÷250 = 0.74度 / DIV;
至此,可初步得到可通過PWM控制舵機(jī)函數(shù): 0.5MS + N×DIV;
0.5MS ≤ 0.5Ms+N×DIV ≤ 2.5MS。
據(jù)上可得,舵機(jī)轉(zhuǎn)動角度為0度到180度對應(yīng)的PWM為0.5MS到2.5MS,因而可以自行設(shè)計一個方波。
先設(shè)一個常量為X,先可以通過舵機(jī)轉(zhuǎn)動0度到180度的總脈寬2MS、總角度180度以及初始脈寬5MS算出常量X:2000uS=(180*X)+500uS;
得到X=11uS。
再根據(jù)常量算出對應(yīng)的角度所對應(yīng)的脈寬,設(shè)脈沖寬度函數(shù)為A,舵機(jī)角度函數(shù)為B,可得到計算脈沖寬度的公式A=(B*11uS)+500uS。
當(dāng)舵機(jī)轉(zhuǎn)動到90度時對應(yīng)的PWM寬度為1490uS,也就是1.5MS,至此可以設(shè)計軟件復(fù)位。當(dāng)值得注意的是由于調(diào)節(jié)了小車驅(qū)動的PWM以及多個負(fù)載以及考慮到信號串?dāng)_問題存在,使得本課題所設(shè)計的PWM脈沖寬度與實(shí)際使用的PWM發(fā)生一些偏差。不過,經(jīng)過多次測試,舵機(jī)運(yùn)行正常。除此之外,也可以使用Servo函數(shù)庫直接控制,此方法比較簡單,做一下簡單描述。首先使用Servo函數(shù)庫時,舵機(jī)處于連續(xù)轉(zhuǎn)動,機(jī)械臂卡板時,舵機(jī)一定會抖動,因而容易損壞舵機(jī)。因?yàn)榇谕ㄐ藕蛃ervo函數(shù)庫都使用了定時器的原因,畢竟,庫函數(shù)時別人寫的,核心內(nèi)容并不容易弄懂,往往會出現(xiàn)一些莫名的問題。但使用自行設(shè)計PWM時,舵機(jī)連續(xù)轉(zhuǎn)動抖動時,可以使用舵機(jī)非連續(xù)轉(zhuǎn)動的方法,本課題便使用了連續(xù)轉(zhuǎn)動加非連續(xù)轉(zhuǎn)動的方法。自由運(yùn)動模式程序流程圖如5.1.2所示。
圖5.1.2 自由運(yùn)動模式程序流程圖
5.2 尋跡模式設(shè)計
尋跡模式主要時通過車底的兩路尋跡傳感器完成,當(dāng)兩路紅外光線經(jīng)白色路面反射回來時,兩路紅外傳感器輸出高電平,小車調(diào)用停止模式;當(dāng)兩路紅外光線經(jīng)黑色路面吸收后,無反射的紅外光線,兩路紅外傳感器輸出高電平,小車調(diào)用停止模式;當(dāng)左邊的紅外光線經(jīng)白色路面反射回來紅外光線,右邊經(jīng)黑色路面,無反射紅外光線,則左邊尋跡傳感器輸出低電平,右邊尋跡傳感器輸出高電平,小車左轉(zhuǎn);反之,小車右轉(zhuǎn)。尋跡程序流程圖如圖5.2.1 所示、小車智能尋跡實(shí)物如圖5.2.2所示。
圖5.2.1 尋跡程序流程圖
圖5.2.2 小車智能尋跡實(shí)物圖
5.3 避障模式設(shè)計
小車常遇到的障礙物類型如圖5.3.1所示,(a)整個環(huán)境中均沒有障礙物;(b)小車只有前方才有障礙物;(c1)小車的左邊和前方有障礙物;(c2)小車前方和右方有障礙物;(d)小車處在U型通道里。
圖5.3.1 障礙物4種避障類型
針對以上五種常見模式做出了如圖5.3.2避障程序流程圖,當(dāng)輸入尋跡模式時,開始測量前方距離,如果前方距離小于15cm,剎車,后退減速,左右測距,如果左邊距離小于15cm并且右邊距離也小于15cm,旋轉(zhuǎn)調(diào)頭,否則判斷左邊是否比右邊大,如果是左轉(zhuǎn),剎車穩(wěn)定方向,否則右轉(zhuǎn),剎車穩(wěn)定方向,而其他條件下一直直行。
如圖5.3.2 避障程序流程圖
5.4 跟隨模式設(shè)計
跟隨常見的方法有:(1)使用左右二邊各一個紅外傳感器,中間一個紅外測距傳感器組合的方法實(shí)現(xiàn);(2)使用二個紅外傳感器裝在小車頭左右二邊,在其傳感器中間加上一個超聲波測距傳感器便可完成;(3)三個超聲波傳感器成排裝在小車頭部部分。第(1)種紅外測距傳感器成本較高,而且容易受光線影響大。經(jīng)過對比第(2)種整體性能適中,性價比高;第(3)種雖然精準(zhǔn)度高,但成本高,占用小車面積多,且笨重。本課題采用了第(2)種方法,當(dāng)左右傳感器輸出低電平時,小車超聲波傳感器測量前方距離大于9cm并且小于等于30cm,小車直行;當(dāng)左邊紅外傳感器輸出高電平時,左邊的紅外傳感器輸出低電平,小車左轉(zhuǎn),反之,當(dāng)右邊紅外傳感器輸出高電平時,左邊紅外傳感器輸出低電平,小車右轉(zhuǎn),其他情況小車直行;當(dāng)小車測量前方距離大于4cm并且小于等于9cm并且左右傳感器輸出低電平時,小車停車;當(dāng)小車測量前方距離大于0cm并且小于等于4cm并且左右傳感器輸出低電平時,小車后退,其他情況下,小車停車。跟隨程序流程圖如5.4.1所示。
5.4.1 跟隨程序流程圖
5.5測距顯示模式設(shè)計
本課題避障以及跟隨都使用了測量距量,而測量距量主要是根據(jù)聲波在空氣中的傳播速度為340m/s,以及測量時間得到的。下面來分析一下測距距離如何計算。
首先,設(shè)測量時間為X秒,測量距離為Y米。
因?yàn)椋瑴y量時間為超聲波反射進(jìn)障礙物反射回來接收到的時間,測量距離為超聲波傳感器到障礙物的距離;
所以,測量距離=(測量時間×聲波速度)/2;
所以,Y米=(X秒×340)/2;
所以,X秒=(2Y米)/(340);
得到, X秒=0.0058*Y米;
整理得到,厘米=微秒/58;
由此,測量距離(厘米)=測量時間(微秒)/58。
測量時間可以先給超聲波反射端2μs低電平,再給10μs高電平,然后持續(xù)給低電平,最后接收端所讀取高電平時間便是測量時間。編程好了測量距離便可以直接通過串口發(fā)送到藍(lán)牙遙控器。測距程序顯示流程圖如圖5.5.1所示。
5.5.1測距程序顯示流程圖
5.6軟件總流程設(shè)計
經(jīng)過測試,本課題可以在同一波特率下使用紅外遙控與藍(lán)牙遙控,在使用紅外遙控器中發(fā)現(xiàn)紅外遙控的誤碼率明顯比藍(lán)牙的高,查從多資料發(fā)現(xiàn)有可能是使用PWM調(diào)速時影響到紅外遙控的接收了,也有可能是本身的抗干擾能力比較弱的問題,但其傳輸速度快,價格便宜;藍(lán)牙遙控傳輸則會有一點(diǎn)點(diǎn)延遲,不過相對穩(wěn)定而360度傳輸,傳播距離更長,所以本課題以藍(lán)牙遙控為主。關(guān)于藍(lán)牙遙控的總流程如圖5.6.1所示。
5.6.1智能小車總流程圖文章來源:http://www.zghlxwxcb.cn/news/detail-784679.html
5.7本章小結(jié)
本章主要講述軟件設(shè)計,通過一個個模式的程序設(shè)計思想深層解析;分析舵機(jī)控制角度的計算以及超聲波傳感器測量距離的計算;最終根據(jù)一個個模式設(shè)計了智能小車軟件總流程,還通過實(shí)驗(yàn)對比說明了紅外遙控器與藍(lán)牙遙控器的優(yōu)缺點(diǎn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-784679.html
到了這里,關(guān)于智能尋跡避障清障機(jī)器人設(shè)計(第五章)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!