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