Raspberry Pi Picoで6軸MPU6050モジュールの値を取得する方法

pico-mpu6050-gyro
  • URLをコピーしました!

今回は、Raspberry Pi PicoMPU6050モジュールを使用し、加速度、角速度、温度を取得して計算する方法について解説します。
Raspberry Pi Picoは小型のマイクロコントローラボードであり、MPU6050はMEMSアクセラレータとジャイロスコープを備えたセンサーモジュールです。
他のセンサーの関係上、流行りのPythonではなく、C言語で解説していきます。

目次

必要な材料と接続方法

出典:Raspberry Pi Pico(ピンヘッダ実装済) — スイッチサイエンス

まず、必要な材料と接続方法について説明します。

必要なもの
  • Raspberry Pi Pico
  • MPU6050モジュール
  • ジャンパーワイヤー
  • ブレッドボード

Raspberry Pi PicoとMPU6050の接続

Raspberry Pi PicoMPU6050ピンを接続します。
以下の接続を行ってください。

Raspberry Pi PicoMPU6050
GP4SDA
GP5SCL
3.3VVCC
GNDGND
Raspberry Pi PicoとMPU6050の接続

ソースコードの解説

それでは、実際にMPU6050から加速度角速度温度を取得するためのソースコードを解説します。
完成したソースコードがある参考サイトはこちらです。

MPU6050をリセットする関数

まず、mpu6050_reset関数は、MPU6050をリセットするための関数です。
MPU6050をリセットすることで、デバイスの初期状態に戻すことができます。
リセットのためには、I2C通信を使用して特定のレジスタにデータを書き込む必要があります。

以下はmpu6050_reset関数の詳細です。

この関数では、bufという配列に2つの要素を持たせ、最初の要素にはリセットするレジスタのアドレス「0x6B」を、2番目の要素にはリセットデータ「0x80」を設定します。
著者の場合は、2番目の要素のリセットデータを「0x00」にしないと上手く取得できませんでした

そして、i2c_write_blocking関数を使用して、I2C通信を介してMPU6050にデータを送信します。
addrMPU6050I2Cアドレスを指定する変数です。

センサーからデータを取得する関数

次のmpu6050_read_raw関数は、MPU6050から生の加速度、角速度、温度データを読み取るための関数です。
以下はmpu6050_read_raw関数の詳細です。

この関数では、まず6バイトのデータを読み取るためのバッファであるbuffer配列を定義します。
次に、val変数に読み取るデータの開始レジスタのアドレスを設定します。

i2c_write_blocking関数を使用し、i2c_defaultを介してMPU6050にアドレスを送信し、その後i2c_read_blocking関数を使用してデータを読み取ります。
accel配列とgyro配列には、バッファから読み取ったデータを適切な形式に変換して格納します。
また、temp変数には温度データが格納されます。

最後に、加速度角速度温度データを取得するためのレジスタのアドレスを変更し、同様の手順を繰り返します。
これらの関数を組み合わせることで、MPU6050から生のデータを読み取り、正確な物理単位に変換することができます。

メイン関数

それでは、これら上記の関数を使って取得した生のデータから、有用な値を求めるために計算していきます。
以下のソースコードをご覧ください。

このソースコードでは、I2Cを使用してMPU6050からデータを読み取ります。
まず、I2C初期化を行います。

次に、先程の関数MPU6050をリセットします。

そして、無限ループ内でMPU6050からデータを読み取ります。

上記のソースコードでは、mpu6050_read_raw関数を使用してMPU6050から生の加速度、角速度、温度データを読み取ります。
それぞれのデータは変数accelerationgyrotempに格納されます。

加速度と角速度の計算方法

取得した生の加速度角速度の値は、それ自体では直接的に有用な値ではありません。
したがって、これらの値を正確な物理単位に変換する必要があります。
具体的な変換方法は、MPU6050のデータシートに記載されています。
以下に変換方法の例を示します。

  • 加速度の単位は「G」(重力加速度)
  • 角速度の単位は「度/秒」

角速度±250deg/s加速度±2G想定です。

なので、取得した生データから、上で設定した変換係数で割ると、実際の単位でデータを得られます。

温度の計算方法

MPU6050から取得できる温度値は、データシートによると、デバイスの温度ではなく、チップ自体の温度です。
温度を摂氏に変換するには、データシートの計算式を使用します。(ここでは割愛します)

これらの計算方法を使用して、正確な加速度、角速度、温度を取得できます。

まとめ

この記事では、Raspberry Pi PicoMPU6050を使用して、加速度、角速度、温度を取得する方法について解説しました。
また、ソースコードを使用して、MPU6050から生のデータを読み取り、正確な物理単位に変換する方法を説明しました。

MPU6050は、制御系システムやロボットなどのプロジェクトで広く使用されるセンサーモジュールです。
この記事を参考に、Raspberry Pi PicoMPU6050を使ったプロジェクトを楽しんでください!

ソーテック社
¥2,618 (2024/11/08 16:10時点 | Amazon調べ)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次