こんにちは!こんばんは!
ちゃとらです(・ω・)/
M5StackにはIMU(慣性計測ユニット)が搭載されているので、加速度やジャイロなどが測定可能です。
少し前のM5Stackに搭載されていたMPU9250というIMUとはプログラムの書き方が異なります。MPU6886の方が書き方が簡単です。
M5Stackに搭載されているMPU6886(IMU)でジャイロセンサを使う方法を分かりやすく解説していきます!




今回扱うM5Stack
M5Stackの種類 | M5Stack FIRE(V2.6) |
値段 | 49.90ドル(税別) (販売価格は7700円程 更新日現在) |
生産国 | 中国 |
サイズ | 5.4 x 5.4 x 3.05 cm |
僕は8000円ぐらいでM5Stack FIREを通販で購入しました。
M5Stackは機種によって搭載されているセンサが異なります。2021年の11月頃からV2.6となり、ほとんど物にはMPU6886が搭載され地磁気センサのBMM150が非搭載になっています。
ちなみに、MPU6886では加速度・ひねり(ジャイロ)・温度が測定可能ですが、磁力は測定できません。
ジャイロセンサについて
余談となってしまいますが、ジャイロセンサについて少し解説していきます。
ジャイロセンサーは別名「角速度センサー」とも呼ばれ、単位時間当たりの回転角度の変化を検出できます。これにより、回転方向や回転角度、振動などを検知することが可能になります。スマートフォンやデジタルカメラ、ゲーム機、カーナビゲーションシステム、ロボットや産業機器などさまざまな機器や装置に搭載され、振動の検出や手ブレの補正、姿勢制御などに活用されています。
引用元:エプソン|ジャイロセンサー技術
少し話が難しいですが、要はジャイロセンサとはどのくらい回転角度が変化したのかを測定する機器のことです。
身近な例ですと、ロボットの姿勢制御やデジカメの手ぶれ補正、ロケットの位置計測などに使用されています。
んじゃ、ジャイロセンサのどんな仕組みで計測してんの?
…………。
詳細は自分で調べて、どうぞ。
えぇ…(困惑)
ジャイロセンサの仕組みなんて知らん、というか調べるのがめんどくせぇ
ジャイロセンサの仕組みについて説明すると、数式とか図とかたくさん使うのでかなり長くなってしまいます…
なので、気になる人は個人で調べてみてください。
伝えることを諦めたわけじゃなねぇぞ!!
M5Stackに搭載されているMPU6886は以下の図のように角速度を測定します。


MPU6886では、それぞれの軸の角速度を単位をdeg/sとして測定します。
ちなみに、pitch(ピッチ)は傾斜や勾配、roll(ロール)は転がる、yaw(ヨー)は向きを変えるという意味から名付けられたそうです。
使い方
MPU6886のジャイロセンサを使うためには、何かライブラリをインストールしたり特別な設定は必要ないです。プログラムを書き込むだけで使うことができます。
ここでは、M5Stackのセットアップ(Arduino IDE)は完了していること前提で解説していきます。
M5Stackのセットアップ(Arduino IDE)がまだ完了していない人は以下の記事を参考にしてください!



プログラムを書いて実行
以下のプログラムをM5Stackに書き込んで動作させます。
// ↓の定義は#include <M5Stack.h>より前に!
#define M5STACK_MPU6886
#include <M5Stack.h>
// 取得するそれぞれの軸のジャイロデータを初期化
float pitch = 0.0F;
float roll = 0.0F;
float yaw = 0.0F;
void setup()
{
M5.begin();
M5.Power.begin(); // Powerモジュールを初期化
M5.IMU.Init(); // IMUを初期化
M5.Lcd.setTextSize(3);
}
void loop()
{
// ジャイロデータを取得
M5.IMU.getAhrsData(&pitch, &roll, &yaw);
// それぞれの軸のジャイロデータをシリアル通信で送信
Serial.print("pitch(dps):");
Serial.print(pitch);
Serial.print(",");
Serial.print("roll(dps):");
Serial.print(roll);
Serial.print(",");
Serial.print("yaw(dps):");
Serial.println(yaw);
// それぞれの軸のジャイロデータをM5Stackに表示
M5.Lcd.setCursor(0, 50);
M5.Lcd.setTextColor(BLUE, BLACK);
M5.Lcd.printf("pitch: %5.2f dps ", pitch);
M5.Lcd.setCursor(0, 100);
M5.Lcd.setTextColor(RED, BLACK);
M5.Lcd.printf("roll: %5.2f dps ", roll);
M5.Lcd.setCursor(0, 150);
M5.Lcd.setTextColor(GREEN, BLACK);
M5.Lcd.printf("yaw: %5.2f dps ", yaw);
delay(100);
}
14行目では、M5Stackの電源関係の機能を初期化をしています。
ちょくちょく出てきている単位のdpsはdegree per secondの略で角速度を表しています。
プログラムを作成できたら、シリアルポートとボードの設定を忘れずに行いましょう。
「ツール」→「シリアルポート」でM5Stackが接続されているポート番号を選び、
「ツール」→「ボード」→「ESP32 Arduino」で「M5Stack-Core-ESP32」を選びましょう。
それぞれ設定ができたら、M5Stackにプログラムを書き込みます。


こんな感じで表示されればOKです。また、シリアル通信でジャイロデータを送信しているのでM5Stackがパソコンと接続されていれば、シリアルプロッタでグラフ表示させることもできます。


グラフ表示させるときは通信速度を115200bpsに設定します。
M5Stackを様々な方向に捻ることで値が変わります。なんか株式チャートみたいになってますね(笑)
M5StackのMPU6886についての詳細が気になる人は以下のリンクを参考にしてください。
https://github.com/m5stack/M5Stack/blob/master/src/utility/MPU6886.cpp
まとめ
加速度センサもほぼ同じ手順で使用可能です!
今回はここまでです。
ちゃとら(・ω・)/
今回紹介した広告一覧