はつねの日記

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

.NET nanoFrameworkでM5StickC Plusにグラフを描画してみる

前回

hatsune.hatenablog.jp


前回は、.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