前回
前回は、.NET nanoFrameworkで加速度と角速度の情報を取得しました。
今回は、取得した加速度をグラフとしてM5StickC Plusの画面に描画します。
事前準備
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が内蔵されていて、画面を上にしておいた時の上下方向の加速度はZ軸の加速度であるという点について説明しました。
今回は、このZ軸方向の加速度を画面にグラフとして描画します。
Z軸の値について
Z軸の加速度は重力加速度を1Gとして、初期状態の測定範囲は±2Gで、0Gが自由落下状態となります。
今回のグラフについて
M5StickC Plusは縦の解像度が240dot、横の解像度が135dotとなります。
よって、±2Gの範囲を0~239dotにマッピングすればグラフが収まることになります。
1dot=0.016Gなので少しの揺れではグラフが変化しないかもしれないので、今回、グラフに描画する測定範囲は0~2Gの範囲にしてみたいと思います。
これであれば、Z軸方向には常に1Gの加速度が測定されるので、何もしなければ真ん中あたりに値がプロットされ、そこを中心として上下振動に応じたグラフの上下が描画されるはずです。
0~2Gを0~239dotにマップング
minValue=0、maxValue=2G、screenHeigh=240としたときに加速度をドットにマップングするには次のような式を使います。
(((value - minValue) * screenHeigh) / (maxValue - minValue))
グラフを描画する
「nanoFramework.M5StickCPlus」ライブラリには、点を描画するScreen.Writeメソッドはありますが、残念ながら直線などを描画するメソッドがありません。そこで、1つ前の測定値と現測定値を直線で結ぶ代わりに、その範囲を1ドットづつ点で描画することで疑似的にグラフを描画します。
今回は、20msごとにZ軸方向の加速度を取得してグラフ描画します。
gist.github.com
www.youtube.com
次回
次回はRTC(RealTimeClock)について調べてみたいと思います。
hatsune.hatenablog.jp