【9軸センサ】MPU9250の使い方とArduinoプログラム

ドローンを製作する上で,MPU9250という9軸(加速度,ジャイロ,磁気センサ)のセンサをArduinoを使用して使ってみました.(ちなみに温度も取れます)

使い方を理解するためにも,ライブラリを使用しないで動かしてみました.


  • 接続方法

まず,MPU9250はI2CとSPI通信が選択できますが,今回は,I2Cを選択しました.

I2Cは2端子しかないので接続はとても簡単です. SCLとSDL端子をそれぞれのデバイスのSCLとSDLに接続するだけです.

ただし,今回は,使用電圧が違うので途中にI2Cバス用双方向電圧レベル変換モジュール(PCA)を挟まないといけません.(Arduino Mega:5V,MPU9250:2.4 – 3.6V).

これは,信号の電圧を変換してくれるデバイスです.

回路図は以下の通りです. Arduino Megaの20番ピン(SDA)と,21番ピン(SCL)を使用しました.
「<ー」はArduinoのGNDです.
変換モジュールには,5Vと3.3Vの入力端子があり,5V側と3.3V側があるので注意しましょう.MPUの入力はすべて3.3Vです.


  • データの概要

まず,MPU9250の特徴として,加速度&ジャイロセンサと,地磁気センサは違うスレーブアドレスです.

つまり,2つのI2Cデバイスが1つのパッケージに入っているようなものです. よって,データを読み取るためには,データを2回に分けて取得する必要があります.

この2つを分けて説明していきたいと思います.


  • 加速度とジャイロのデータ取得方法

加速度とジャイロのスレーブアドレスは,0x68 です.

まず,最初に使用するレンジを設定します.

取得したデータは,内部レジスタの0x3bから14バイトに渡って,加速度X,Y,Z,ジャイロX,Y,Zの順で並んでいます.これをi2cReadを使用して読み取ります(この関数は,一番下にあります)

それぞれのデータは,16ビットですが,8ビットずつに2つに分かれています.よって,この2つの8ビットを足し合わせないといけません.

そして,単位を変換します.


  • 磁気センサのデータ取得方法

磁気センサのスレーブアドレスは,0x0c です.

磁気センサを使用するためには,まず設定が必要です.

磁気センサは,ST2というレジスタまで読み込まないと次の計測結果が入ってこないようになっています.

そして,データの単位を変更します.


  • 全体のプログラム

全体のプログラムです.無断転載を禁止します.

あとは,各自でジャイロのドリフトを補正したり,クォータニオン(おすすめ)などを使って工夫してみてください. ジャイロと加速度センサのレンジは変更できます.

1件のコメント

返信を残す

メールアドレスが公開されることはありません。