注目キーワード

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

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

 

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

created by Rinker
M5Stack
¥4,791 (2024/04/23 13:01:09時点 Amazon調べ-詳細)
画面付きで小型のマイコンです。旧版のM5StickCから、ディスプレイサイズ、バッテリ容量が変更になっています。ブザーも実装されました。通信(WiFi/Bluetooth)機能、6軸加速度センサーも搭載されています。
Aruduino で開発できます。

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

created by Rinker
¥3,089 (2024/04/23 22:27:28時点 Amazon調べ-詳細)
created by Rinker
¥2,310 (2024/04/23 18:10:07時点 Amazon調べ-詳細)
created by Rinker
技術評論社
¥3,278 (2024/04/23 22:27:29時点 Amazon調べ-詳細)
created by Rinker
¥2,420 (2024/04/23 22:55:52時点 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の傾きに応じた値が画面に表示されていますね。このデータを使えばドローンの制御などもできます。

 

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

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

 

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

created by Rinker
M5Stack
¥4,791 (2024/04/23 13:01:09時点 Amazon調べ-詳細)
画面付きで小型のマイコンです。旧版のM5StickCから、ディスプレイサイズ、バッテリ容量が変更になっています。ブザーも実装されました。通信(WiFi/Bluetooth)機能、6軸加速度センサーも搭載されています。
Aruduino で開発できます。

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

created by Rinker
¥3,089 (2024/04/23 22:27:28時点 Amazon調べ-詳細)
created by Rinker
¥2,310 (2024/04/23 18:10:07時点 Amazon調べ-詳細)
created by Rinker
技術評論社
¥3,278 (2024/04/23 22:27:29時点 Amazon調べ-詳細)
created by Rinker
¥2,420 (2024/04/23 22:55:52時点 Amazon調べ-詳細)

M5StickC Plus の他の記事はこちらからどうぞ!

すけろく んーどうしたものか。 げんろく どうした? 深刻な顔をして。 すけろく M5Stackにプログラムを書き込んだら 起動しなくなってな。 電源ON/OFFでも無理なのだ。 げんろく 書き込んだプログラムか、バッテリーの 過放電か。工場出荷時に戻してみてはどうだ? この記事では、M5Stackにプログラムを書き込んだ結果、うまく動作しなくなった場合の対処方法を記載します。 ご紹介するのは「工 […]

すけろく 以前、Bluetooth Serialを使って データをPCに送信したが、何か良い使い方はないかな。 げんろく 最近、土壌水分センサーとやらを手に入れた。 これで計測した水分量をPCに送信してみるか? すけろく それは良いな。 今後、使い道が広がっていきそうな予感がする。 この記事では、ディスプレイ付きマイコン「M5StickC Plus」に搭載されている「Bluetooth」を使って、 […]

すけろく 前回の記事で6軸IMUのデータをPCでグラフ化したが、 うまく傾き検知ができているようだ。 げんろく そうだな。 微細な傾きも検知できているようだ。 すけろく 傾き検知の機能を使って何かできないかな? げんろく なら、机を離れる時にノートなどの見守りを してくれる「デスク見守り君」を作るぞ! 今回の記事では、ディスプレイ付きマイコン「M5StickC Plus」を使って、「デスク見守り君 […]

すけろく これまで、M5StickC PlusでWi-Fi接続を使ったデータの やり取りは見てきたが、Bluetoothはまだだな。 げんろく 確かに。 Bluetoothについてはまだだった。 すけろく 近距離ならBluetooth通信も有効だ。 何か作れないかの。 げんろく では、今回はBluetoothを使った通信の一つ、 Bluetooth Serialについて触れてみよう。 この記事では […]

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

すけろく 前回作ったお天気表示プログラムは なかなか、評判が良いな。 げんろく うれしいな。 ただ、お天気情報は起動時のみ取得というところが 課題だ。 げんろく 今回は、1時間に1回お天気情報を後進するように してみよう。 この記事では、Arduino IDEを使ってM5StickC Plusのディスプレイに、お天気情報を1時間に1回更新表示する方法を紹介します。 画面描画は主に、Adafruit […]

すけろく 汎用ライブラリの「AdafruitGFX」にビットマップ画像を ディスプレイ表示するものがあるそうな。 げんろく いかにも。機能は実装されている。 ちょうど、アイコンをアニメーションさせたいと 思っておったわ。 すけろく うむ。 面白そうだな。やってみるか! げんろく わかった。 今回は、単色のアイコンを使って天気情報を 視覚的に伝える画面を作ってみよう。 この記事では、Arduino […]

すけろく 標準ライブラリでの画面描画はできた。 しかし、M5StickC Plus向けのライブラリなので 汎用性がないな。 げんろく たしかに。 M5Stackや他のAruduino機器でも使えるものが必要だな。 すけろく そのようなものがあるのか? げんろく よし。今回は、汎用的に使えるライブラリを紹介しよう。 Adafruit社が公開している「Adafruit_GFX」だ。 この記事では、Ar […]

すけろく 前回の記事でJSON形式データは取り扱うことができた。 これでインターネットにあるサービスを活用できるな。 げんろく そうだな。 今回は天気情報を提供しているサイトからJSON形式データを 取得してM5StickC Plusの画面に表示してみよう。 前回の記事では、次の画像のように、Arduino IDEを使い、M5StickC Plusのディスプレイにインターネットのサイトから取得した […]

すけろく 普段、何気なくブラウザでインターネットサイトを 見ているが、URLの最初のHttpsとはなんだ? げんろく httpsはHttpの通信を暗号化して行うものだ。 ちょっと違いを押さえてみるか。 すけろく あと、Arduino IDEでプログラムを作る際の 注意点なんかも頼む。 げんろく わかった。 プログラムに組み込む方法も見てみよう。 皆さんが普段パソコン(PC)やスマホ、タブレットのブ […]

すけろく Pythonなどでは、JSONでデータを扱っていたが、 Arduino IDEで扱うことはできるのか? げんろく それなら「ArduinoJSON」ライブラリがあるぞ! 取り扱うデータで使用するメモリサイズの 計算ツールもあるから便利だ。 この記事では、Arduino IDEを使ってM5StickC PlusのプログラムでJSON形式を取り扱う方法を紹介します。 今回使用するライブラリは […]

すけろく M5StickC Plusに英語を表示することは 画面制御の記事で行えたが、日本語は表示できないのか? げんろく いや、方法はあるぞ。 eFontライブラリをM5StickC Plusで実行できるように 修正して提供してくれているものを使うのだ。 すけろく ぜひ、やってみたいの~ この記事では、Arduino IDEを使ってM5StickC Plusのディスプレイに日本語を表示させるため […]

すけろく M5StickC Plusも時刻同期までできた。 うまくいっておるな。 げんろく ああ、「M5StickC」向けに作成したプログラムが 微修正で実行できるからありがたい。 すけろく そういえば、画面が大きくなったな。 値段も大きくなっているが。。。 げんろく 今回は新しいM5StickC Plusの 画面制御まわりを見てみるか。 この記事では、Arduino IDEを使ってM5Stick […]

  すけろく 前回はWiFi接続することができた。 次は時刻同期がしたいな。 げんろく たしかに。時刻同期は基本だからな。 以前M5StickCでやったプログラムをベースに 実装してみよう。   この記事では、M5StickC PlusをアクセスWi-Fiアクセスポイントに接続し、インターネットの時刻サービス(NTPサーバー)と時刻を同期する方法について紹介します。 今回使用す […]

すけろく M5StickC Plusの大まかな違いは分かった。 WiFi接続をしてみるか。 げんろく そうだな。 M5StickCと同じように使えるのか確認してみよう。 この記事では、M5StickC Plusに実装されているWiFi機能を使って、Wi-Fiルータに接続する方法について紹介します。 今回使用するマイコンはこちら! 画面付きで小型のマイコンです。旧版のM5StickCから、ディスプレ […]

すけろく なんか、M5StickCが「在庫なし」になっている。 げんろく ああ、新しい「M5StickC Plus」が出たからな。 旧版は在庫限りになっているのだろう。 すけろく うむ。画面が大きくなったな。 値段も大きくなっておる。 げんろく そうだな。 M5StickC PlusでLチカでもしてみるか。 今回の記事では、「M5StickC Plus」を開発環境であるArduino IDEを使っ […]