
對于大多數(shù)MPU6050的應(yīng)用來說,獲取到的原始數(shù)據(jù)并沒有多大用處,我們需要對原始數(shù)據(jù)進(jìn)行姿態(tài)融合解算,最終得到姿態(tài)數(shù)據(jù),也就是三個(gè)歐拉角:航向角(yaw)、橫滾角(roll)和俯仰角(pitch)。
MPU6050內(nèi)部自帶數(shù)字運(yùn)動(dòng)處理器(DMP)硬件加速引擎,配合運(yùn)動(dòng)驅(qū)動(dòng)庫直接輸出四元數(shù),進(jìn)而很方便的計(jì)算出歐拉角,大大降低了主控MCU的負(fù)擔(dān)。本篇使用MPU6050的驅(qū)動(dòng)庫來獲取姿態(tài)數(shù)據(jù)。
1. MPU6050驅(qū)動(dòng)庫安裝
MPU6050的驅(qū)動(dòng)庫有很多,我們可以在IDE中單擊「項(xiàng)目」—「加載庫」—「管理庫」,在搜索欄輸入"6050",可以看到不同的驅(qū)動(dòng)庫。

本篇我們使用的由國外大牛Jeff Rowberg開發(fā)的庫并沒有在列表中,需要下載后導(dǎo)入到Arduino。點(diǎn)擊跳轉(zhuǎn)到Github下載。

下載到的庫文件其實(shí)是多種設(shè)備的IIC驅(qū)動(dòng)庫,我們這里只需要兩個(gè)文件夾下的文件。解壓后,進(jìn)入"Arduino"文件夾,里面的"I2Cdev"和"MPU6050"就是我們需要的文件。

找到Arduino的libraries文件路徑,Windows下路徑為"C:\Users\Tony\Documents\Arduino\libraries",修改“Tony”為你的電腦用戶名。我們拷貝這兩個(gè)文件夾到該路徑下,至此庫文件安裝完成。

2. 實(shí)驗(yàn)材料
- Uno R3開發(fā)板
- 配套USB數(shù)據(jù)線
- 面包板及配套連接線
- MPU6050傳感器模塊
3. 實(shí)驗(yàn)步驟
1. 根據(jù)原理圖搭建電路圖。
MPU6050傳感器模塊的VCC、GND分別連接開發(fā)板的3.3V、GND,傳感器的SDA、SCL引腳連接開發(fā)板A4、A5引腳。
實(shí)驗(yàn)原理圖如下圖所示:

實(shí)物連接圖如下圖所示:

2. 新建sketch,拷貝如下代碼替換自動(dòng)生成的代碼并進(jìn)行保存。
/*
DMP
MPU6050姿態(tài)解算
*/
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
MPU6050 mpu;
uint8_t fifoBuffer[64];
Quaternion q;
VectorFloat gravity;
float ypr[3];
void setup()
{
Serial.begin(115200);
mpu.initialize();
mpu.dmpInitialize();
mpu.CalibrateAccel(6);
mpu.CalibrateGyro(6);
mpu.PrintActiveOffsets();
mpu.setDMPEnabled(true);
}
void loop()
{
if (mpu.dmpGetCurrentFIFOPacket(fifoBuffer))
{
mpu.dmpGetQuaternion(&q, fifoBuffer);
mpu.dmpGetGravity(&gravity, &q);
mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
Serial.print("ypr\t");
Serial.print(ypr[0] * 180 / M_PI);
Serial.print("\t");
Serial.print(ypr[1] * 180 / M_PI);
Serial.print("\t");
Serial.println(ypr[2] * 180 / M_PI);
}
}
3. 連接開發(fā)板,設(shè)置好對應(yīng)端口號(hào)和開發(fā)板類型,進(jìn)行程序下載。

4. 實(shí)驗(yàn)現(xiàn)象
打開串口監(jiān)視器,波特率設(shè)置成與程序中相一致的115200。監(jiān)視器中輸出三個(gè)歐拉角數(shù)據(jù),移動(dòng)MPU6050,數(shù)據(jù)發(fā)生變化。

關(guān)注公眾號(hào)「TonyCode」,后臺(tái)回復(fù)“提高”,獲取文中代碼。