注目キーワード

【Arduino】ディスプレイ付きマイコン「M5StickC Plus」の6軸IMUを使って傾きを測定してみる!

すけろく
M5StickC Plusには、筐体の動きや傾きを検知する
センサーが標準で搭載されているらしいな。
げんろく
6軸IMUのことか。
加速度、角速度を測るセンサーだ。
計算で姿勢角度も分かる。
すけろく
んんっ!?
難しい単語が出てきたな。。
げんろく
よし。
物体の動きを計測する要素について
M5StickC Plusを使って試してみるぞ!
この記事では、ディスプレイ付きマイコン「M5StickC Plus」に搭載されている「6軸IMU」を使います。
「M5StickC Plus」を動かした際に、動きを検知する仕組みを説明して、簡単なプログラムにします。

 

今回使用するマイコンはこちら!

M5StickC Plus
画面付きで小型のマイコンです。旧版のM5StickCから、ディスプレイサイズ、バッテリ容量が変更になっています。ブザーも実装されました。通信(WiFi/Bluetooth)機能、6軸加速度センサーも搭載されています。
Aruduino で開発できます。Amazonで確認

これからはじめる方にお勧めの参考図書はこちら!

動きを検知?IMUってなに?

IMU(慣性計測装置)とは、3次元の慣性運動(直行3軸方向の並進運動および回転運動)を検出する装置です。加速度センサ[m/s2]により並進運動を、角速度(ジャイロ)センサ[deg/sec]により回転運動を検出します。

IMUには、搭載されているセンサーの数により3つの種類があります。

  • 3軸IMU
    加速度センサー、角速度センサー単体の装置です。
  • 6軸IMU
    加速度センサー、角速度センサーの2つを搭載した装置です。加速度と角速度を使って姿勢角度を計算して出力します。
    姿勢角度の精度は、9軸IMUに比べ低くなります。
  • 9軸IMU
    加速度センサー、角速度センサーに加えて地磁気センサーを搭載した装置です。6軸IMUより精度が高くなるようです。

 

今回使う「M5StickC Plus」に搭載されているのは、6軸IMU(MPU6886)です。

ここでは、6軸IMUについて説明していきます。

加速度とは?

子供の頃、球や車を、スロープを使って動かして遊ぶおもちゃがあったことを覚えていますか?

スロープに球を置いて、転がすとスロープを下っていきますよね?

その際に発生しているのが「加速度」です。物体が動く際に発生します。

物理の公式だと「α=Δv/Δt 」です。
(Δvは単位時間の速度変化量[m/s]、Δt は単位時間[s]です。)
単位はm/s^2(メートル/毎秒毎秒)

以下の記事が、わかりやすいので、参照してみてください。

任天堂ホームページ

Nintendo Switchにはゲームをより楽しむために「モーションセンサー」という技術が入っているのを知っていますか…

 

この加速度が3次元の3軸(X、Y、Z)に対してどう変化したかを測るのが加速度センサーになります。

 

角速度とは?

ジャイロって聞いたことがありますか?

ハンドスピナーのようにくるくると回転するものを傾けると、ハンドスピナーから手に対して力が加わりますよね?

この力を利用して、回転軸がどの方向にどれだけ回転したかを表すのが角速度です。

物理の公式だと「ω=Θ/Δt 」です。
(Θは単位時間に回転した角度[rad]、Δt は単位時間[s]です。)
単位はrad/s radは弧度法の単位で、Θ=Θ°×π/180で表されます。
(180°の場合、Θ=π[rad])

以下の記事がわかりやすいので参照してみてください。

任天堂ホームページ

前回のおさらい『ARMS』のように、手の動きをゲームの中に伝えるためにJoy-Conには「加速度センサー」と「ジャイロセ…

 

この角速度が3次元の3軸(X、Y、Z)に対してどう変化したかを測るのが角速度センサー(ジャイロセンサー)です。

 

姿勢角度とは?

水平に対しての傾きをあらわす角度です。

重力の向きを測定して、重力がかかっている方向から、現在の角度を計算します。

重力以外の方法で求める場合もあります。

「M5StickC Plus」のIMUライブラリには、「ロール・ピッチ・ヨー」(X軸、Y軸、Z軸)を使って姿勢角度が出力されています。
加速度センサーの値を使用して計算することができます。
Roll(ロール:X軸に対する角度)Θ
Pitch(ピッチ:Y軸に対する角度)ω
Yaw(ヨー:Z軸に対する角度)φ
Acc:加速度センサー値(x、y、z)

M5StickC Plusの6軸IMUの軸は?

M5StickC Plusに搭載されているIMUの軸は次のようになっています。※画面を上に水平に置いた場合

 

 

M5StickC Plus のIMU測定値から姿勢角度を求める

それでは、実際にプログラミングしてみましょう。

IMUの制御に使用する関数は、M5ライブラリクラスに含まれています。

関数名 説明
M5.Imu.Init() IMUの初期化をします。
M5.IMU.getAccelData(float x, float y, float z) 加速度センサーからのデータを取得します。
M5.IMU.getGyroData(float x, float y, float z) 角速度センサーからのデータを取得します。
M5.IMU.getAhrsData(pitch, roll, yaw) ピッチ、ロール、ヨーの計算結果を取得します。
※今回はこれは使用せず、計算します。

 

IMUを使った姿勢角度表示プログラム

Arduino IDEを起動して、「ファイル」メニューから「新規ファイル」を選択し、表示されるスケッチに以下のように記述します。

 Arduino IDE スケッチ例

 

 M5StickC Plusへの書き込み

  1. 「ファイル」メニューから「名前を付けて保存」で任意の名前を付けて保存します。
  2. 「ツール」メニューから「ボード」情報を確認し、M5StickC Plusであるか確認します。
    この際、「シリアルポート」にマイコンを接続したCOMポートが指定されているかも確認します。
  3. 「ツール」メニューから「Patition Scheme」を「”No OTA(Large APP)”」にします。
    ※ここを変更しないと、スケッチが大きいというエラーになります。
  4. 「ツール」メニューから「シリアルモニタ」を選択してシリアルモニタを起動します。
  5. 「スケッチ」メニューから「マイコンボードに書き込む」を選択します。

 

 プログラム実行結果

M5StickC Plusのディスプレイに以下のとおり表示されれば成功です。

 

編集後記

いかがだったでしょうか。

M5StickC Plusの傾きに応じた値が画面に表示されていますね。このデータを使えばドローンの制御などもできます。

 

今回の記事は以上になります。

最後までご覧いただきありがとうございました。

 

今回使用したマイコンはこちら!

M5StickC Plus
画面付きで小型のマイコンです。旧版のM5StickCから、ディスプレイサイズ、バッテリ容量が変更になっています。ブザーも実装されました。通信(WiFi/Bluetooth)機能、6軸加速度センサーも搭載されています。
Aruduino で開発できます。Amazonで確認