MPU6050 + Arduino Uno 實作
利用MPU6050取得空間姿態的數據(raw data)
GY-521的感測器(Sensor),其核心的晶片是MPU-6050,是一個內包含三軸陀螺儀以 及三軸加速計,結合在一起的數位運動處理器(簡稱DMP),以 I²C 輸出6軸的旋轉矩陣的數位資料。若再包含三軸的電子羅盤(BMP180)可以處理複雜的9軸MotionFusion運算。
GY-521規格:
1. 核心晶片:MPU-6050模塊(三軸陀螺儀 + 三軸加速度)
2. 供電電源:3-5v(內部低壓差穩壓)
3. 通信方式:標準 I²C通信協議
4. 晶片內置16bit AD轉換器,16位數據輸出
5. 陀螺儀範圍:±250 500 1000 2000 °/s
6. 加速度範圍:±2±4±8±16g
I²C函式庫:
MPU-6050靠 I²C和Arduino溝通,I²C函式庫(library)採用Jeff Rowberg寫的開放原始碼,可以到Github 頁面將原始碼下載下來,將其放到 Arduino 工作目錄中的 libraries 資料夾中。做法如下:
1. 到 I2Cdevlib 找到MPU6050的 library相關資料,點選Source的連結
2. 點選右下角的Download ZIP下載函式庫壓縮檔。
3. 下載後的檔案,解壓縮,找到其中MPU-6050 及 I2Cdev目錄,複製到Arduino的library資料夾中。
4. 重開Arduino IDE,就可以看到Example之下有MPU6050_raw的範例。
5. 如下圖載入 MPU6050_DMP6.ino 範例。
6. 驗證發生錯誤
D:\Arduino\libraries\MPU6050\MPU6050.cpp:1997:6: error: prototype for 'bool MPU6050::getMotionStatus()' does not match any in class 'MPU6050'
bool MPU6050::getMotionStatus() {
^
In file included from D:\Arduino\libraries\MPU6050\MPU6050.cpp:37:0:
D:\Arduino\libraries\MPU6050\MPU6050.h:611:17: error: candidate is: uint8_t MPU6050::getMotionStatus() uint8_t getMotionStatus();
7. 是因為 MPU6050.cpp的函式 getMotionStatus()
宣告為 bool MPU6050::getMotionStatus()
而 MPU6050.h 的函式 getMotionStatus()
宣告為 uint8_t MPU6050::getMotionStatus()
兩個宣告不一致,所以造成編譯錯誤。
8. 用文字編輯器(Notepad / Emedit / Ultraedit)打開MPU6050.h。
搜尋 getMotionStatus(), 更改如下後存檔。
=============================================================
uint8_t getMotionStatus(); ---> // uint8_t getMotionStatus();
在下一行增加 bool getMotionStatus();
=============================================================
接線
1. Arduino Uno +5V ---->GY-521 的 VCC。
2. Arduino Uno GND ---->GY-521 的 GND。
3. Arduino Uno A4 ---->GY-521 的 SDA。
4. Arduino Uno A5 ---->GY-521 的 SCL。
5. Arduino Uno D2 ---->GY-521 的 INT。
程式測試
1. 開範例 MPU6050_raw ,檢查代碼是否如下。
=============================================================
// initialize serial communication
// (38400 chosen because it works as well at 8MHz as it does at 16MHz, but
// it's really up to you depending on your project)
Serial.begin(38400);
=============================================================
2. 把範例上傳,之後就會開始運行了,打開串列埠可看到大量的訊號輸出,鮑率要改為38400。移動翻轉 GY-521 ,串列埠數字會明顯的改變。
MPU Teapot 3D 程式測試
1. 下載 processing IDE。
2. 執行processing IDE。
3. 打開偏好設定,檢查SketchBook 位置,一般是在 C:\Users\xxx\Documents\Processing
4. 下載 “Toxi” 函式庫,解壓縮會得到 toxiclibs-complete-0020 目錄,複製到C:\Users\xxx\Documents\Processing\Libraries,如果沒有Libraries目錄,須自己新建。
5. 複製Arduino IDE 的Libraries下的MPU6050目錄下的MPUTeapot目錄到C:\Users\xxx\Documents\Processing。
Processing
+libraries
| +toxiclibs-complete-0020
|
+MPUTeapot
-MPUTeapot.pde
6. 開啟上傳MPUMPU6050_DMP6,修改如下後上傳。
=============================================================
#define OUTPUT_READABLE_YAWPITCHROLL ---> //#define OUTPUT_READABLE_YAWPITCHROLL
//#define OUTPUT_TEAPOT ---> #define OUTPUT_TEAPOT =============================================================
7. 再用Processing IDE 開啟MPUTeapot.pde,修改如下後執行。
=============================================================
String portName = "/dev/ttyUSB1"; ----> //String portName = "/dev/ttyUSB1";
//String portName = "COM4"; ----> String portName = "COM4";
=============================================================
8. 圖形約需10秒才會穩定,待穩定後可翻轉GY-521,看3D圖形變化。