はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

.NET nanoFrameworkでM5StickC Plusの加速度と角加速度を取得してみる

前回

hatsune.hatenablog.jp


前回は、.NET nanoFrameworkで電源状態を取得しました。
今回は、加速度と角速度の情報を取得します。

事前準備

Install the nanoFramework firmware

M5StickC PlusにはnanoFrameworkは標準インストールされていないので、nanoFrameworkをインストールします。

接続ポート番号の確認

USBでM5StickC PlusをPCに接続したら、USB Serial Portのポート番号を確認します。今回の環境では「COM6」が該当しました。

Flasherアプリケーションのインストール

OSの[スタート]メニューから「Developer PowerShell for VS2022」を起動します。

dotnet tool install --global nanoff

nanoFrameworkfファームウェアをインストール

M5StickC Plusをターゲットにして「COM6」経由でnanoFrameworkをアップロードします。

nanoff --target M5StickCPlus --update --serialport COM6

Visual Studioの準備

Visual Studioを機能拡張する

Visual Studioには.NET nanoFramework Extensionをインストールして機能拡張しておきます。
この機能拡張によりnanoFrameworkアプリのテンプレートが追加されます。
このテンプレートで作成したプロジェクトには、NuGetから自動的に「nanoFramework.CoreLibrary」ライブラリが追加されています。

「nanoFramework.M5StickCPlus」ライブラリを追加する

M5StickC Plusの画面などハードウェアにアクセスするために、M5StickC Plus用のライブラリを追加します。

ここまでが、M5StickC Plusを使うアプリ開発を行う上での共通の事前準備となります。

加速度計とジャイロ計の情報を取得する

M5StickC Plusには、6軸姿勢センサーMPU6886が内蔵されています。
6軸とは、X軸Y軸Z軸方向の加速度に加えて、X軸Y軸Z軸の角加速度も取得できるので6軸となります。

これによりどちら方向に進んでいるのか、どちら向きに(画面の)方向を変えようとしているのかが分かります。

キャリブレーション

MPU6886を使うときは起動時にキャリブレーション(補正)を実行します。
例えば、100回試行して補正するときは次のようにします。

M5StickCPlus.AccelerometerGyroscope.Calibrate(100);

もちろん補正中はM5StickC Plusを静止させておくことが必要ですから、今回は初期だけではなくM5ボタンをクリックしたときも補正できるようにしておきます。

加速度を取得する

「M5StickCPlus.AccelerometerGyroscope」で加速度を取得するには「GetAccelerometer」メソッドを実行します。

M5StickCPlus.AccelerometerGyroscope.GetAccelerometer();

初期設定の範囲は±2G(重力加速度の2倍まで測定)となります。
測定範囲は「AccelerometerScale」で±2G、±4G、±8G、±16Gから選択できます。測定範囲が大きいほど精度は下がります。

角加速度を取得する

「M5StickCPlus.AccelerometerGyroscope」で加速度を取得するには「GetGyroscope」メソッドを実行します。

M5StickCPlus.AccelerometerGyroscope.GetGyroscope();

初期設定の範囲は±250dps (degree per second=1秒間に250度の回転まで測定=1分間に約41回転以下なら測定可)となります。
測定範囲は「GyroscopeScale」で±250 dps、±500 dps、±1000 dps、±2000 dpsから選択できます。測定範囲が大きいほど精度は下がります。

コード全体(0.5秒ごとに表示)

gist.github.com

次回

次回はスクリーン描画について調べてみたいと思います。
hatsune.hatenablog.jp