在前面我們使用了六軸傳感器MPU6050,通過調用DMP庫,直接讓傳感器輸出歐拉角或四元數。這種方式能減少單片機的運算負擔,但是我們無法調節裏面的濾波算法和 姿態解析。而且對於九軸傳感器MPU9250來說,調用DMP庫輸出的最大速度爲200HZ(百度的數據,具體多少我也不清楚)。因此如果我們需要更高頻率的輸出,我們可以直接讀取MPU9250的九個數據,然後在單片機處理,輸出四元數或歐拉角。
第一步,接線:
連接ESP8266的3.3V與傳感器的VIN和3.3;GND與GND;D1與SCL;D2與SDA。
第二步,燒錄代碼:
我的代碼是基於GitHub上一個項目移植修改後的訪問該項目
在該代碼的基礎上,我做了以下幾點調整:1,刪去了顯示模塊。2,修改針腳。3,修改MPU9250i2c地址
效果展示:
#include <Wire.h>
#define MPU9250_ADDRESS 0x68
#define WHO_AM_I_MPU9250 0x75 // Should return 0x71
void setup() {
Wire.begin();
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
byte c = readByte(MPU9250_ADDRESS, WHO_AM_I_MPU9250); // Read WHO_AM_I register for MPU-9250
Serial.println(c);
delay(1000);
}
uint8_t readByte(uint8_t address, uint8_t subAddress)
{
uint8_t data; // `data` will store the register data
Wire.beginTransmission(address); // Initialize the Tx buffer
Wire.write(subAddress); // Put slave register address in Tx buffer
Wire.endTransmission(false); // Send the Tx buffer, but send a restart to keep connection alive
Wire.requestFrom(address, (uint8_t) 1); // Read one byte from slave register address
data = Wire.read(); // Fill Rx buffer with result
return data; // Return data read from slave register
}
將上面這段代碼寫入到arduino,如果能夠輸出信息的話說明能夠正常驅動MPU9250
總結:該運動傳感器可以在後期通過WiFi模塊把數據上傳給上位機,例如電腦或者手機上,實現無線運動傳感器模塊。同時輸出頻率也是非常的大的,能夠滿足一般要求。