慣性測量單元「Inertial measurement unit,簡稱 IMU」可以幫助我們在三維空間中獲取物體當前三維位置的值,這些值可以用來幫助我們確定物體的精確位置,例如檢測智能手機的水平或傾斜狀態或是使用IMU傳感器來追蹤運動狀態等。IMU傳感器在汽車、自平衡機器人、四軸飛行器、慣性導航等設備上廣泛應用。
六軸姿態傳感器MPU6050是IMU傳感器系列的一種,本篇介紹如何驅動其獲取原始數據。
1. MPU6050傳感器介紹
IMU傳感器通常包含兩個或多個功能,按優先級分別是加速計、陀螺儀、磁力計和測高儀。MPU6050傳感器採用單芯片封裝,將一個加速度計、一個陀螺儀和一個溫度傳感器集成在一起,提供六軸姿態數值輸出。
主要參數
- 電壓:3-5V
- 通訊:標準IIC通訊協議
- 16Bit AD轉換器
- 數字溫度傳感器
- 集成數字運動處理器(DMP)
- 預留接口可用於與磁力計等其他IIC設備通訊
引腳說明
- VCC:電源
- GND:地
- SCL:IIC通訊時鐘引腳
- SDA:IIC通訊數據引腳
- XDA:外接IIC設備數據引腳
- XCL:外接IIC設備時鐘引腳
- ADO:IIC從地址LSB
- INT:用於指示數據準備就緒的中斷引腳
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
更多內容,歡迎關注我的公衆號。 微信掃一掃下方二維碼即可關注: