劉一鐘+劉文浩
摘 要:系統(tǒng)程序基于c語言來控制Arduino對(duì)陀螺儀,加速器進(jìn)行取值,通過pid算法調(diào)控電機(jī)驅(qū)動(dòng)的pwm從而實(shí)現(xiàn)小車平衡,通過藍(lán)牙芯片建立手機(jī)app和Arduino的連接,從而實(shí)現(xiàn)遙控。
關(guān)鍵詞:Arduino;平衡;藍(lán)牙連接;
由西北民族大學(xué)電氣工程學(xué)院"雙E"項(xiàng)目資助(項(xiàng)目編號(hào):20161816)
1 引言
Arduino自平衡小車是通過對(duì)陀螺儀取得當(dāng)前三軸偏移數(shù)據(jù),通過pid算法進(jìn)行平衡調(diào)整,再對(duì)速度取值從而對(duì)其速度進(jìn)行調(diào)控,把數(shù)據(jù)轉(zhuǎn)換為信號(hào)給電機(jī)驅(qū)動(dòng),實(shí)現(xiàn)平衡和移動(dòng),在通過藍(lán)牙芯片與手機(jī)進(jìn)行通信。
2 社會(huì)背景
當(dāng)前在進(jìn)入一個(gè)越來越智能化的社會(huì),繼智能家居、智能穿戴、智能辦公之后,智能電動(dòng)平衡車也已經(jīng)進(jìn)入人們的日常生活。智能平衡車是一款于13年前發(fā)明、于近兩年才火爆的產(chǎn)品,它也是代步工具類中最新的智能產(chǎn)品。智能類的產(chǎn)品總給人一種異常方便、簡(jiǎn)潔優(yōu)雅的感覺,電動(dòng)平衡車也是如此。經(jīng)過調(diào)查發(fā)現(xiàn),目前市面上平衡車還十分稀缺,對(duì)于未來市場(chǎng),方便攜帶的平衡車肯定會(huì)代替其他大型代步車輛,選用 Arduino 單片機(jī)控制自平衡小車肯定會(huì)大有前景,令人眼前一亮。
3 基礎(chǔ)功能的實(shí)現(xiàn)
對(duì)稱的搭建車體,將各個(gè)模塊平均的分布在車體上,連接各個(gè)模塊,使用Arduino作為主控控制各個(gè)模塊,采集數(shù)據(jù),應(yīng)用算法得到因能夠給電機(jī)的占空比,從而實(shí)現(xiàn)平衡。通過Android Studio來編寫能接能接收小車藍(lán)牙信號(hào),發(fā)出信號(hào)的app,通過app調(diào)整其小車移動(dòng)。
4算法
比例調(diào)節(jié)的公式是:u(t) = Kp * e(t),e(t) = r(t) – c(t)
其中:r(t) 是設(shè)定值,就是你想讓被控系統(tǒng)某個(gè)參數(shù)所要保持的狀態(tài)值; c(t)是系統(tǒng)的這個(gè)參數(shù)的實(shí)際狀態(tài)值。
比例調(diào)節(jié)的過程就是即時(shí)成比例地反應(yīng)控制系統(tǒng)的偏差信號(hào)e(t),偏差一旦產(chǎn)生,通過 Kp * e(t) 產(chǎn)生控制作用以減小偏差。理想的情況是有多大的誤差,通過這個(gè)調(diào)節(jié)作用之后,就能將誤差消除。但實(shí)際情況并非都是那么理想,Kp小了,修正不到位,Kp大了就會(huì)出現(xiàn)矯枉過正的現(xiàn)象。
5陀螺儀MPU6050 的應(yīng)用
為避免糾纏于電路細(xì)節(jié),我們直接使用集成的MPU6050模塊。MPU6050的數(shù)據(jù)接口用的是I2C總線協(xié)議,因此我們需要Wire程序庫的幫助來實(shí)現(xiàn)Arduino與MPU6050之間的通信。請(qǐng)先確認(rèn)你的Arduino編程環(huán)境中已安裝Wire庫。
雖然6050模塊能夠輸出三軸加速度和三軸角速度的數(shù)據(jù),但實(shí)際應(yīng)用的時(shí)候,直接使用的確不是這些量,而是需要根據(jù)這些數(shù)據(jù)解算出三軸的角度數(shù)據(jù)。比如平衡小車,需要算出 模塊的俯仰角,然后控制算法根據(jù)角度大小控制小車輪子的移動(dòng)。四軸飛行器需要根據(jù)俯仰角度、滾轉(zhuǎn)角度,和飛行指令來調(diào)節(jié)四個(gè)電機(jī)的轉(zhuǎn)速。
從6軸的原始數(shù)據(jù)得到三軸的角度計(jì)算是一個(gè)比較復(fù)雜的運(yùn)動(dòng)學(xué)解算過程,有的童鞋可能會(huì)說,不就是三軸角速度積分不就行了嗎?這就是沒有實(shí)踐,想當(dāng)然的說法。有三點(diǎn)需要注意的問題:
1.三軸姿態(tài)的解算不能直接積分。因?yàn)槿S是有耦合的,只有在三軸角度為小角度的時(shí)候可以這么算,角度大了以后,比如60度了,這么算的誤差就很大。標(biāo)準(zhǔn)的做法是用四元數(shù)的方法做姿態(tài)解算,積分的方法可以用4階龍格-庫塔法,或者4階Gill法。詳情請(qǐng)參考:航空航天器運(yùn)動(dòng)的建?!w行動(dòng)力學(xué)的理論基礎(chǔ) 肖業(yè)倫著 北京航空航天大學(xué)出版社。
2.積分運(yùn)算的累積誤差。角速度積分運(yùn)算是有累積誤差的,累積誤差在短時(shí)間內(nèi)表現(xiàn)不明顯,只要零點(diǎn)漂移處理得好了,1分鐘以內(nèi)的漂移都不大,但時(shí)間長(zhǎng)了,就會(huì)有累積誤差,5分鐘就漂到不知道哪里去了。
3.角速率零點(diǎn)漂移。所謂零點(diǎn)漂移就是模塊靜止的時(shí)候,我們認(rèn)為正常的輸出應(yīng)該是0,或者均值為0的數(shù)據(jù),但是實(shí)際上6050的輸出不是,可能在2°/s或者其他,而且每次都不一樣,如果不校準(zhǔn),別說1分鐘了,10秒鐘誤差就有20度。
用加速度計(jì)算的確也是一種方法,但使用加速度也有三方面的問題:
1.無法在動(dòng)態(tài)情況下使用,使用重力的來解算姿態(tài)的前提條件是模塊本身沒有加速度,因此模塊輸出的三軸加速度值,正好是重力在模塊本體坐標(biāo)系下的分量,從而能夠求出俯仰和滾轉(zhuǎn)的姿態(tài)角度。一旦模塊運(yùn)動(dòng)起來,這種方法就傻了,因?yàn)槟K無法分辨出哪些是重力的分量,那些是模塊本身的加速度引起的。目前市面上很多傾角儀就是這種思路,但問題就是沒法在動(dòng)態(tài)情況下使用,最簡(jiǎn)單的測(cè)試方法就是把模塊水平放置桌面上,緩慢運(yùn)動(dòng),發(fā)現(xiàn)X,Y軸的角度基本不變化,都在0度左右,一旦快速運(yùn)動(dòng)起來,X,Y軸就顯示有很大的角度了。而實(shí)際上模塊一直水平,沒有變化。
2.精度差。6050模塊的加速度本身的精度不高,就算是在靜態(tài)情況下,角度測(cè)量的精度也只能到1°左右。
3.三軸耦合問題。利用加速度求解姿態(tài)的時(shí)候,也會(huì)有三軸耦合的問題,因?yàn)樽藨B(tài)表示與坐標(biāo)旋轉(zhuǎn)順序有關(guān),這樣只有一種一個(gè)軸能用反正切值計(jì)算,另一個(gè)軸不能用反正切值計(jì)算。
6項(xiàng)目創(chuàng)新點(diǎn)
1.通過手機(jī)app控制更是滿足了大部分人的需求。
2.兩輪自平衡更加穩(wěn)定更加新穎,體積較小。
3.應(yīng)用芯片較少,減少成本。