Arduino提高篇16—六軸姿態MPU6050

六軸姿態MPU6050

慣性測量單元「Inertial measurement unit,簡稱 IMU」可以幫助我們在三維空間中獲取物體當前三維位置的值,這些值可以用來幫助我們確定物體的精確位置,例如檢測智能手機的水平或傾斜狀態或是使用IMU傳感器來追蹤運動狀態等。IMU傳感器在汽車、自平衡機器人、四軸飛行器、慣性導航等設備上廣泛應用。

六軸姿態傳感器MPU6050是IMU傳感器系列的一種,本篇介紹如何驅動其獲取原始數據。

1. MPU6050傳感器介紹

IMU傳感器通常包含兩個或多個功能,按優先級分別是加速計、陀螺儀、磁力計和測高儀。MPU6050傳感器採用單芯片封裝,將一個加速度計、一個陀螺儀和一個溫度傳感器集成在一起,提供六軸姿態數值輸出。

MPU6050

主要參數

  • 電壓:3-5V
  • 通訊:標準IIC通訊協議
  • 16Bit AD轉換器
  • 數字溫度傳感器
  • 集成數字運動處理器(DMP)
  • 預留接口可用於與磁力計等其他IIC設備通訊

引腳說明

  • VCC:電源
  • GND:地
  • SCL:IIC通訊時鐘引腳
  • SDA:IIC通訊數據引腳
  • XDA:外接IIC設備數據引腳
  • XCL:外接IIC設備時鐘引腳
  • ADO:IIC從地址LSB
  • INT:用於指示數據準備就緒的中斷引腳

MPU6050引腳

2. 實驗材料

  • Uno R3開發板
  • 配套USB數據線
  • 麪包板及配套連接線
  • MPU6050傳感器模塊

3. 實驗步驟

1. 根據原理圖搭建電路圖。

MPU6050傳感器模塊的VCC、GND分別連接開發板的3.3V、GND,傳感器的SDA、SCL引腳連接開發板A4、A5引腳。

實驗原理圖如下圖所示:

實驗原理圖

實物連接圖如下圖所示:

實物連接圖

2. 新建sketch,拷貝如下代碼替換自動生成的代碼並進行保存。

#include<Wire.h>
const int MPU6050_addr = 0x68;
int16_t AccX, AccY, AccZ, Temp, GyroX, GyroY, GyroZ;
void setup() {
  Wire.begin();
  Wire.beginTransmission(MPU6050_addr);
  Wire.write(0x6B);
  Wire.write(0);
  Wire.endTransmission(true);
  Serial.begin(9600);
}
void loop() {
  Wire.beginTransmission(MPU6050_addr);
  Wire.write(0x3B);
  Wire.endTransmission(false);
  Wire.requestFrom(MPU6050_addr, 14, true);
  AccX = Wire.read() << 8 | Wire.read();
  AccY = Wire.read() << 8 | Wire.read();
  AccZ = Wire.read() << 8 | Wire.read();
  Temp = Wire.read() << 8 | Wire.read();
  GyroX = Wire.read() << 8 | Wire.read();
  GyroY = Wire.read() << 8 | Wire.read();
  GyroZ = Wire.read() << 8 | Wire.read();
  Serial.print("AccX = "); Serial.print(AccX);
  Serial.print(" || AccY = "); Serial.print(AccY);
  Serial.print(" || AccZ = "); Serial.print(AccZ);
  Serial.print(" || GyroX = "); Serial.print(GyroX);
  Serial.print(" || GyroY = "); Serial.print(GyroY);
  Serial.print(" || GyroZ = "); Serial.print(GyroZ);
  Serial.print(" || Temp = "); Serial.println(Temp / 340.00 + 36.53);
  delay(500);
}

3. 連接開發板,設置好對應端口號和開發板類型,進行程序下載。

程序下載

4. 實驗現象

打開串口監視器,波特率設置成與程序中相一致的9600。監視器中數據會隨着傳感器的角度變化而變化。

實驗現象

5. 程序分析

程序中使用了通用IIC庫「Wire」進行驅動,按照數據手冊從指定寄存器中獲取數據,注意要把兩個字節組合得到16Bit的原始數據。當然MPU6050也有很多驅動庫,將IIC通訊過程進一步封裝。


關注公衆號「TonyCode」,後臺回覆“提高”,獲取文中代碼。
Arduino學習交流羣:868283450
更多內容,歡迎關注我的公衆號。 微信掃一掃下方二維碼即可關注:
掃碼加入微信公衆號:TonyCode

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章