RM新时代网站-首页

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>用Arduino讀取MPU9250傳感器

用Arduino讀取MPU9250傳感器

2022-10-19 | zip | 0.12 MB | 次下載 | 2積分

資料介紹

描述

主條目:使用 Arduino 讀取 MPU9250 傳感器

?

MPU-9250 是目前市場上最先進的加速度計、陀螺儀和指南針組合小尺寸傳感器之一。它取代了流行的 MPU-9150,降低了功耗,改善了陀螺噪聲和羅盤滿量程性能。它具有許多高級功能,包括低通濾波、運動檢測甚至可編程專用處理器。

它內(nèi)部包括 MPU-6500,其中包含一個 3 軸陀螺儀和一個 3 軸加速度計,以及AK8963 ,市場領(lǐng)先的 3 軸數(shù)字羅盤。MPU-9250 使用 16 位模數(shù)轉(zhuǎn)換器 (ADC) 對所有 9 個軸進行數(shù)字化。

陀螺儀

陀螺儀是一種用于測量或保持方向和角速度的設(shè)備。以每秒度數(shù)(或弧度)為單位測量的角速度是單位時間內(nèi)物體旋轉(zhuǎn)角度的變化。

根據(jù)方向的不同,角速率測量分為三種類型:

  • 偏航:從上方看物體時在平面上的水平旋轉(zhuǎn)。
  • 俯仰:從正面看物體時的垂直旋轉(zhuǎn)。
  • 滾動:從前面看物體時水平旋轉(zhuǎn)。

加速度計

加速度計傳感器是測量加速度的集成電路 (IC),加速度是每單位時間的速度變化。測量加速度可以獲取物體傾斜度和振動等信息。

通常,g用作加速度的單位,相對于標準重力 (1g = 9.80665m/s2)。

磁力計

磁力計提供有關(guān)設(shè)備傳感器檢測到的磁場的信息,理論上可以暴露用戶的位置。磁力計傳感器測量所有三個物理軸(x、y、z)的磁場,單位為 μT(微特斯拉)。

絕對方向傳感器是磁力計的常見用例之一,它代表地球平面的固定方向(固定到磁場矢量和重力矢量)。

接線圖

基本使用連接電源引腳和SDA 、SCL引腳,如下圖所示:

pYYBAGNOS7aAGaVsAADaa8uh5VY306.png
Arduino Nano 接線與 MPU9250
?

解釋數(shù)據(jù)

我們的官方存儲庫中有官方 MPU9250 數(shù)據(jù)表和寄存器圖。它描述了 MPU-9250 中每個寄存器的功能和內(nèi)容,包括磁力計。我們建議您閱讀十進制、二進制和十六進制表示的帖子,以輕松識別寄存器并理解其中內(nèi)容的含義。

poYBAGNOS7qATtJrAAFTsUcTF9E262.png
?

寄存器映射的前兩列表示十六進制和十進制格式的地址,后跟寄存器名稱。一些寄存器是只讀的(用 R 標記),而另一些則允許我們寫(用 R/W 標記)。寄存器的內(nèi)容用 8 位表示。在各種情況下,寄存器的值可能代表不止一個東西,換句話說,每個位或位組可能具有不同的含義,例如GYRO_CONFIG(寄存器27)。

MPU-9250 的每個傳感器都具有 16 位精度。這意味著使用兩個 8 位寄存器來表示輸出。我們將從每個寄存器中分別讀取 8 位數(shù)據(jù),然后將它們連接起來形成 16 位。

I2C 安裝 Arduino 庫

我們將使用 I2C 協(xié)議與寄存器交互并讀/寫數(shù)據(jù)。I2C 庫為此目的提供了一個非常簡單的接口,并且可以在使用 I2C 協(xié)議的其他項目中重用。它可以從我們的官方存儲庫中下載。

要導(dǎo)入庫,請打開 Arduino IDE,轉(zhuǎn)到 Sketch > Include Library > Add.ZIP Library,然后選擇從我們的 GitHub 存儲庫下載的庫文件。

poYBAGNOS6-AXK2tAABgOEnpXcY744.png
?

然后你可以簡單地使用include語句:

#include "I2C.h"

它將包含具有與寄存器交互的預(yù)定義函數(shù)的庫。

Arduino代碼

我們?yōu)槊總€原始傳感器數(shù)據(jù)定義了一個單獨的結(jié)構(gòu):gyroscope_raw 、accelerometer_raw 、magnetometer_rawtemperature_raw 每個原始結(jié)構(gòu)都有一個基于當前配置的數(shù)據(jù)規(guī)范化函數(shù)。人類可讀的標準化值存儲在另一個名為normalized的結(jié)構(gòu)中。

確保遵循上一步并導(dǎo)入 I2C 庫,以便將其與include語句一起使用:

#include "Wire.h"
#include "I2C.h"

#define MPU9250_IMU_ADDRESS 0x68
#define MPU9250_MAG_ADDRESS 0x0C

#define GYRO_FULL_SCALE_250_DPS  0x00
#define GYRO_FULL_SCALE_500_DPS  0x08
#define GYRO_FULL_SCALE_1000_DPS 0x10
#define GYRO_FULL_SCALE_2000_DPS 0x18

#define ACC_FULL_SCALE_2G  0x00
#define ACC_FULL_SCALE_4G  0x08
#define ACC_FULL_SCALE_8G  0x10
#define ACC_FULL_SCALE_16G 0x18

#define TEMPERATURE_OFFSET 21 // As defined in documentation

#define INTERVAL_MS_PRINT 1000

#define G 9.80665

struct gyroscope_raw {
  int16_t x, y, z;
} gyroscope;

struct accelerometer_raw {
  int16_t x, y, z;
} accelerometer;

struct magnetometer_raw {
  int16_t x, y, z;

  struct {
    int8_t x, y, z;
  } adjustment;
} magnetometer;

struct temperature_raw {
  int16_t value;
} temperature;

struct {
  struct {
    float x, y, z;
  } accelerometer, gyroscope, magnetometer;

  float temperature;
} normalized;

unsigned long lastPrintMillis = 0;

void setup()
{
  Wire.begin();
  Serial.begin(115200);

  I2CwriteByte(MPU9250_IMU_ADDRESS, 27, GYRO_FULL_SCALE_1000_DPS); // Configure gyroscope range
  I2CwriteByte(MPU9250_IMU_ADDRESS, 28, ACC_FULL_SCALE_2G);        // Configure accelerometer range

  I2CwriteByte(MPU9250_IMU_ADDRESS, 55, 0x02); // Set by pass mode for the magnetometers
  I2CwriteByte(MPU9250_IMU_ADDRESS, 56, 0x01); // Enable interrupt pin for raw data

  setMagnetometerAdjustmentValues();

  //Start magnetometer
  I2CwriteByte(MPU9250_MAG_ADDRESS, 0x0A, 0x12); // Request continuous magnetometer measurements in 16 bits (mode 1)
}

void loop()
{
  unsigned long currentMillis = millis();

  if (isImuReady()) {
    readRawImu();

    normalize(gyroscope);
    normalize(accelerometer);
    normalize(temperature);
  }

  if (isMagnetometerReady()) {
    readRawMagnetometer();

    normalize(magnetometer);
  }

  if (currentMillis - lastPrintMillis > INTERVAL_MS_PRINT) {
    Serial.print("TEMP:\t");
    Serial.print(normalized.temperature, 2);
    Serial.print("\xC2\xB0"); //Print degree symbol
    Serial.print("C");
    Serial.println();

    Serial.print("GYR (");
    Serial.print("\xC2\xB0"); //Print degree symbol
    Serial.print("/s):\t");
    Serial.print(normalized.gyroscope.x, 3);
    Serial.print("\t\t");
    Serial.print(normalized.gyroscope.y, 3);
    Serial.print("\t\t");
    Serial.print(normalized.gyroscope.z, 3);
    Serial.println();

    Serial.print("ACC (m/s^2):\t");
    Serial.print(normalized.accelerometer.x, 3);
    Serial.print("\t\t");
    Serial.print(normalized.accelerometer.y, 3);
    Serial.print("\t\t");
    Serial.print(normalized.accelerometer.z, 3);
    Serial.println();

    Serial.print("MAG (");
    Serial.print("\xce\xbc"); //Print micro symbol
    Serial.print("T):\t");
    Serial.print(normalized.magnetometer.x, 3);
    Serial.print("\t\t");
    Serial.print(normalized.magnetometer.y, 3);
    Serial.print("\t\t");
    Serial.print(normalized.magnetometer.z, 3);
    Serial.println();

    Serial.println();

    lastPrintMillis = currentMillis;
  }
}

注意:該片段是位于我們的 GitHub存儲庫中的 Arduino 項目的一部分,代碼分隔在不同的邏輯文件中。

測試

串行監(jiān)視器將每隔INTERVAL_MS_PRINT毫秒打印最后一次可用的傳感器數(shù)據(jù)(在上面的示例中,每秒一次),它應(yīng)該類似于:

pYYBAGNOS7-AGp6DAABNFLuK5-k804.png
?

通常方向是在物理模塊上繪制的,因此您可以輕松檢測 X、Y 和 Z 軸。

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學(xué)會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
RM新时代网站-首页