6.3 - 6軸モーショントラッキング¶
MPU-6050は、3軸ジャイロスコープと3軸加速度計を組み合わせた6軸モーショントラッキングデバイスです。
加速度計は、適切な加速度を測定するツールです。例えば、地球上で静止している加速度計は、地球の重力による加速度を直上方向に測定します。その値はおおよそ g ≈ 9.81 m/s2 です。
加速度計は産業や科学で多くの用途があります。例としては、航空機やミサイルの慣性航法システム、タブレットやデジタルカメラの画像を垂直に保つためなどがあります。
ジャイロスコープは、デバイスの方向や角速度を測定するために使用されます。ジャイロスコープの応用例としては、自動車の反転防止やエアバッグシステム、スマートデバイスのモーションセンシングシステム、ドローンの姿勢安定化システムなどがあります。
必要なコンポーネント
このプロジェクトで必要なコンポーネントは以下の通りです。
一式をまとめて購入するのが便利です。詳細は以下のリンクを参照してください:
名前 |
このキットに含まれるアイテム |
購入リンク |
---|---|---|
ケプラーキット |
450+ |
以下のリンクから個々に購入することもできます。
SN |
コンポーネント説明 |
数量 |
購入リンク |
---|---|---|---|
1 |
1 |
||
2 |
マイクロUSBケーブル |
1 |
|
3 |
1 |
||
4 |
数本 |
||
5 |
1 |
回路図
配線
コード
注釈
kepler-kit-main/arduino/6.3_6axis_motion_tracking
のパスにある6.3_6axis_motion_tracking.ino
ファイルを開いてください。または、このコードを Arduino IDE にコピーアンドペーストしてください。
Upload ボタンをクリックする前に、ボード(Raspberry Pi Pico)と正確なポートを選択することを忘れないでください。
ここでは
Adafruit_MPU6050
ライブラリを使用しています。Arduino IDEに追加する方法については、 ライブラリを追加 を参照してください。
プログラムを実行した後、3軸加速度計の値と3軸ジャイロスコープの値が出力に順次表示されます。 この時点でMPU6050をランダムに回転させると、これらの値はそれに応じて変化するでしょう。 変化を容易に確認するために、出力ラインの一つをコメントアウトして、別のデータセットに焦点を当てることができます。
動作原理
MPU6050
オブジェクトをインスタンス化します。
#include <Adafruit_MPU6050.h>
#include <Wire.h>
Adafruit_MPU6050 mpu;
MPU6050を初期化し、その精度を設定します。
void setup(void) {
Serial.begin(115200);
while (!Serial)
delay(10); // will pause Zero, Leonardo, etc until serial console opens
Serial.println("Adafruit MPU6050 test!");
// Try to initialize!
if (!mpu.begin()) {
Serial.println("Failed to find MPU6050 chip");
while (1) {
delay(10);
}
}
Serial.println("MPU6050 Found!");
// Set range
mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
mpu.setGyroRange(MPU6050_RANGE_500_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
Serial.println("");
delay(100);
}
新しいセンサーイベントとその読み取り値を取得します。
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
これにより、データ a.acceleration.x
、 a.acceleration.y
、 a.acceleration.z
、 g.gyro.x
、 g.gyro.y
、 g.gyro.z
でリアルタイムの加速度と角速度の値を取得できます。
Serial.print("Acceleration X: ");
Serial.print(a.acceleration.x);
Serial.print(", Y: ");
Serial.print(a.acceleration.y);
Serial.print(", Z: ");
Serial.print(a.acceleration.z);
Serial.println(" m/s^2");
Serial.print("Rotation X: ");
Serial.print(g.gyro.x);
Serial.print(", Y: ");
Serial.print(g.gyro.y);
Serial.print(", Z: ");
Serial.print(g.gyro.z);
Serial.println(" rad/s");