2015年7月30日 星期四

利用MPU6050透過Arduino及Processing展現姿態演算

   MPU6050是一款近幾年無論在Maker界或是商業應用上皆十分熱門的慣性感測元件(Inertial Measurement Unit,IMU),其中融合了三軸加速度計及三軸陀螺儀。    這款InvenSense於2010年推出的IC能如此成功,除了其低成本、高靈敏度、應用範圍廣等特色以外,最大的功臣為內建的Digital Motion Processor(DMP),這內建功能強大的小模組可以直接在MPU6050內完成加速度計與陀螺儀的Sensor Fusion,傳出四元數、尤拉角,免去了以往繁複的矩陣轉換以及減輕微控制器的運算壓力。這麼好康的內建功能當然就是我們今天的主題啦!
(圖片截自:http://www.invensense.com/products/motion-tracking/6-axis/mpu-6050/)

首先我們去GitHub下載i2cdevlib


下載完之後我們將i2cdevlib-master資料夾解壓縮後放入(C:\Users\user\Documents\Arduino\libraries)的路徑內


接著我們開啟i2cdevlib-master資料夾,再進入裡面的Arduino資料夾並找到I2Cdev資料夾,將I2Cdev裡面的四個檔案複製貼上到MPU6050資料夾內

再將MPU6050資料夾內除了Examples資料夾以外的檔案全部複製並在Examples內的MPU6050_DMP6資料夾內貼上


接著開啟MPU6050_DMP6,並將第117行的//define OUTPUT_TEAPOT改成define OUTPUT_TEAPOT


接著選好我們的Arduino板子及COM Port就可以編譯上傳囉~

上傳完之後我們就可以開始拿出MPU6050

Arduino與MPU6050的接法為:
VCC <---> 3.3V
GND <---> GND
SDA <---> A4
SCL <---> A5
INT <---> D2

連接完我們打開Arduino IDE右上角的Serial Monitor,將Baud Rate設成115200

接著在上方文字框內隨意輸入任何文字(例如ArkLab)並按Send


如果有開始跑出數值的話就代表我們已經成功一半囉!
有了DMP的協助,現在MPU6050已經直接跑出YAW,PITCH,ROW的值了~
可是單單只有數字不過癮,我們當然要著手讓它圖像化,這時候Processing就該亮麗登場!

我們先下載最新版Processing以及需要的library--toxiclibs
同樣的我們安裝好Processing之後將toxiclibs-complete-0020資料夾解壓縮放到C:\Users\user\Documents\Processing\libraries資料夾內


接著我們就回到剛剛MPU6050_DMP6的資料夾內,發現上面居然有個Processing資料夾,讓我們開啟MPUTeapot.pde



按下左上角長得像播放鍵的Run




飛機的姿態就出來了!
趕快動一動手中的MPU6050模組,就會發現小飛機隨著手的姿態一起轉動囉~


延伸閱讀:



P.S.
我們的FB社團"Drone Maker-飛行器自造工坊"也時常會有各種學術討論
歡迎大家一起加入討論學習喔!








7 則留言:

  1. 請問它的gyro值會不會有偏差,偏差值該怎麼消除?轉的時候值是否會不準確?
    比如我想讓他轉90度會不會每次少轉一兩度,結果轉個幾次誤差越來越大?
    謝謝!

    回覆刪除
  2. 作者已經移除這則留言。

    回覆刪除
  3. 要註釋Arduiuno裡的//#define OUTPUT_READABLE_YAWPITCHROLL,Processing裡的String portName = "COM5";換去自己連接Arduino的port 最重要的兩個樓主沒解釋...

    回覆刪除
  4. 請問我按 RUN 鍵後出現
    the package "toxi" does not exist,you might be missing a libary
    No library found for toxi.geom
    No library found for toxi.processing
    Libraries must be installed in a folder named 'libraries' inside the 'sketchbook' folder.
    是我解壓縮少了什麼嗎

    回覆刪除
  5. 請問一下D2 是否一定要接?
    我在沒接的狀況下也是可以動作...?

    回覆刪除
  6. 請問一下D2 是否一定要接?
    我在沒接的狀況下也是可以動作...?

    回覆刪除
  7. 作者已經移除這則留言。

    回覆刪除