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

必要な材料と接続方法

まず、必要な材料と接続方法について説明します。
- Raspberry Pi Pico
- MPU6050モジュール
- ジャンパーワイヤー
- ブレッドボード

Raspberry Pi PicoとMPU6050の接続
Raspberry Pi PicoとMPU6050のピンを接続します。
以下の接続を行ってください。
Raspberry Pi Pico | MPU6050 |
---|---|
GP4 | SDA |
GP5 | SCL |
3.3V | VCC |
GND | GND |
ソースコードの解説
それでは、実際にMPU6050から加速度、角速度、温度を取得するためのソースコードを解説します。
完成したソースコードがある参考サイトはこちらです。
MPU6050をリセットする関数
まず、mpu6050_reset
関数は、MPU6050をリセットするための関数です。
MPU6050をリセットすることで、デバイスの初期状態に戻すことができます。
リセットのためには、I2C通信を使用して特定のレジスタにデータを書き込む必要があります。
以下はmpu6050_reset
関数の詳細です。
この関数では、buf
という配列に2つの要素を持たせ、最初の要素にはリセットするレジスタのアドレス「0x6B」を、2番目の要素にはリセットデータ「0x80」を設定します。
※著者の場合は、2番目の要素のリセットデータを「0x00」にしないと上手く取得できませんでした
そして、i2c_write_blocking
関数を使用して、I2C通信を介してMPU6050にデータを送信します。addr
はMPU6050のI2Cアドレスを指定する変数です。
センサーからデータを取得する関数
次の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から生の加速度、角速度、温度データを読み取ります。
それぞれのデータは変数acceleration
、gyro
、temp
に格納されます。
加速度と角速度の計算方法
取得した生の加速度と角速度の値は、それ自体では直接的に有用な値ではありません。
したがって、これらの値を正確な物理単位に変換する必要があります。
具体的な変換方法は、MPU6050のデータシートに記載されています。
以下に変換方法の例を示します。
- 加速度の単位は「G」(重力加速度)
- 角速度の単位は「度/秒」
角速度は±250deg/s、加速度が±2G想定です。
なので、取得した生データから、上で設定した変換係数で割ると、実際の単位でデータを得られます。
温度の計算方法
MPU6050から取得できる温度値は、データシートによると、デバイスの温度ではなく、チップ自体の温度です。
温度を摂氏に変換するには、データシートの計算式を使用します。(ここでは割愛します)
これらの計算方法を使用して、正確な加速度、角速度、温度を取得できます。
まとめ
この記事では、Raspberry Pi PicoとMPU6050を使用して、加速度、角速度、温度を取得する方法について解説しました。
また、ソースコードを使用して、MPU6050から生のデータを読み取り、正確な物理単位に変換する方法を説明しました。
MPU6050は、制御系システムやロボットなどのプロジェクトで広く使用されるセンサーモジュールです。
この記事を参考に、Raspberry Pi PicoとMPU6050を使ったプロジェクトを楽しんでください!


コメント