MPU-9250 加速度センサー、ジャイロスコープ、磁力計 コード
このチュートリアルでは、加速度計、ジャイロスコープ、磁力計を1つのコンパクトなモジュールに統合したMPU-9250センサーの使い方を探ります。このガイドの終わりまでには、センサーデータを読み取り、その意味をプロジェクトに解釈できるようになります。このセンサーは、ロボティクスやドローンのようなアプリケーションに特に役立ち、向きや動きの追跡が重要です。設定やコードに関する追加の説明については、動画を参照できます(動画の00:20にて)。
ハードウェアの説明
MPU-9250モジュールは、加速度計、ジャイロスコープ、磁力計の3つのセンサーを統合しています。加速度計は加速度を測定し、速度と向きを判断することができます。ジャイロスコープは角速度を提供し、時間の経過に伴う向きの変化を理解するのに役立ちます。最後に、磁力計はコンパスとして機能し、ナビゲーションに役立つ磁場データを提供します。
このセンサーの組み合わせは、ドローンやスマートフォンなど、精密な動きの追跡が必要なアプリケーションで特に有益です。MPU-9250はI2CまたはSPIを介して通信を行い、異なるマイクロコントローラーのセットアップに対して柔軟性を持っています。
データシートの詳細
| 製造者 | インベンセンス |
|---|---|
| 部品番号 | MPU-9250 |
| 論理/入出力電圧 | 1.8 V (入出力), 3.3 V (供給) |
| 供給電圧 | 2.4 - 3.6 V |
| 出力電流(チャネルごと) | 3.2 mA(通常動作) |
| ピーク電流(チャネルごと) | 19.8 mA(最大) |
| PWM周波数ガイダンス | N/A |
| 入力ロジックしきい値 | 0.3 * VDD(低)、0.7 * VDD(高) |
| 電圧降下 / RDS(オン)/ 飽和 | N/A |
| 熱的限界 | -40から85 °C |
| パッケージ | QFN |
| ノート / バリアント | 内部電圧レギュレーターを含む |
- モジュールが損傷しないように、適切な電圧供給(2.4 - 3.6 V)を確保してください。
- ブレイクアウトボードにすでに含まれていない場合は、SDAおよびSCLラインにプルアップ抵抗を使用してください。
- I2Cアドレス(デフォルトは0x68)を確認し、代替アドレスに応じてADOピンを調整してください。
- 接続の安定性を確認して、誤った読み取りを防ぎます。
- センサーを定期的にキャリブレーションして、正確な測定を行ってください。
配線手順


MPU-9250をArduinoに接続するには、まずMPU-9250のVCCピンをArduinoの5Vピンに接続します。このモジュールは内部レギュレーターを備えているため、5Vでの電源供給は安全です。次に、GNDピンをArduinoのグラウンド(GND)に接続します。データ通信のために、SDAピンをArduinoのA4ピンに、SCLピンをA5ピンに接続します。この構成は多くのArduinoボードで標準的です。
Arduino Megaを使用している場合、SDAおよびSCLピンはそれぞれピン20および21にあります。接続が確実であることを確認して、通信エラーを避けてください。MPU-9250のI2Cアドレスを変更する必要がある場合は、ADOピンを5Vに接続して0x69に設定します。切断すると0x68に戻ります。
コード例と解説
Arduinoのスケッチでは、まずMPU9250ライブラリをインクルードし、センサーのインスタンスを作成します。
#include "MPU9250.h"
MPU9250 IMU(Wire,0x68);
コードはセンサーを初期化し、通信を開始します。setup()機能:
void setup() {
Serial.begin(115200);
status = IMU.begin();
if (status < 0) {
Serial.println("IMU initialization unsuccessful");
while(1) {}
}
}
内でloop()機能として、センサーデータを継続的に読み取り、印刷します:
void loop() {
IMU.readSensor();
Serial.print("AccelX: ");
Serial.print(IMU.getAccelX_mss(),6);
// More print statements for other axes
}
このセクションでは、加速度センサー、ジャイロスコープ、磁力計の値を読み取り、それらをシリアルモニターに表示します。完全な実装のために、記事の下にロードされたコード全体を確認してください。
デモンストレーション / 期待すること
コードを実行すると、センサー値がシリアルモニターでリアルタイムに更新されるのが見えるはずです。加速度計の値はセンサーを動かすと変動し、ジャイロスコープの値は回転速度を示します。磁力計は三軸の磁場強度を提供し、方向を決定するのに利用できます。浮動小数点入力には注意が必要です。正確な読み取り値を得られない可能性があるためです(動画の12:30参照)。
章
- イントロダクション (00:00)
- ハードウェアの解説 (01:30)
- 配線指示 (04:00)
- コード例とウォークスルー (06:00)
- デモンストレーション (10:00)
/*
* Library: https://github.com/bolderflight/MPU9250
Basic_I2C.ino
Brian R Taylor
brian.taylor@bolderflight.com
Copyright (c) 2017 Bolder Flight Systems
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
* Updated by Ahmad Shamshiri on July 9, 2018 for Robojax.com
* in Ajax, Ontario, Canada
* Watch instruction video for this code:
For this sketch you need to connect:
VCC to 5V and GND to GND of Arduino
SDA to A4 and SCL to A5
S20A is 3.3V voltage regulator MIC5205-3.3BM5
*/
#include "MPU9250.h"
// An MPU9250 object with the MPU-9250 sensor on I2C bus 0 with address 0x68
MPU9250 IMU(Wire,0x68);
int status;
void setup() {
// Serial to display data
Serial.begin(115200);
while(!Serial) {}
// Start communication with IMU
status = IMU.begin();
if (status < 0) {
Serial.println("IMU initialization unsuccessful");
Serial.println("Check IMU wiring or try cycling power");
Serial.print("Status: ");
Serial.println(status);
while(1) {}
}
}
void loop() {
// Read the sensor
IMU.readSensor();
// Display the data
Serial.print("AccelX: ");
Serial.print(IMU.getAccelX_mss(),6);
Serial.print("\t");
Serial.print("AccelY: ");
Serial.print(IMU.getAccelY_mss(),6);
Serial.print("\t");
Serial.print("AccelZ: ");
Serial.println(IMU.getAccelZ_mss(),6);
Serial.print("GyroX: ");
Serial.print(IMU.getGyroX_rads(),6);
Serial.print("\t");
Serial.print("GyroY: ");
Serial.print(IMU.getGyroY_rads(),6);
Serial.print("\t");
Serial.print("GyroZ: ");
Serial.println(IMU.getGyroZ_rads(),6);
Serial.print("MagX: ");
Serial.print(IMU.getMagX_uT(),6);
Serial.print("\t");
Serial.print("MagY: ");
Serial.print(IMU.getMagY_uT(),6);
Serial.print("\t");
Serial.print("MagZ: ");
Serial.println(IMU.getMagZ_uT(),6);
Serial.print("Temperature in C: ");
Serial.println(IMU.getTemperature_C(),6);
Serial.println();
delay(200);
}
リソースと参考文献
-
外部GitHubからMPU-9250ライブラリを取得してください。github.com
-
外部MPU-9250 レジスタマップinvensense.com
-
外部MPU-9250のデータシートinvensense.com
ファイル📁
ファイルは利用できません。