モーションセンサー(LSM303AGR)出力をリアルタイムに可視化する
Webベースの加速度データ可視化ツール。
Visualizer: MCUからUART経由で送られる加速度データをリアルタイムに可視化します。
Analyzer: CSV出力データからグラフを復元し、パラメータを動的に変更して採点分析を行います。
WearableMotionAnalyzer-uTKernel/
└── MCU側(uT-Kernel3)
├── app_main.c # センサー制御・UART出力
└── ...
wearable-motion-visualizer/
├── server.js # Node.jsサーバ(シリアル→WebSocket中継)
├── public/
│ ├── index.html # ブラウザUI(Visualizer/Analyzer/Settingsタブ)
│ ├── app.js # Visualizer: WebSocketクライアント+グラフ描画
│ ├── js/
│ │ └── analyzer.js # Analyzer: CSV解析・パラメータ変更・採点分析
│ └── style.css
├── logs/ # ログファイル保存先(自動生成)
│ ├── sensor_log.csv # リアルタイムログ
│ ├── sessions/ # セッションごとのCSVファイル
│ ├── raw/ # 生データ保存
│ └── edge-impulse/ # Edge Impulse用データ(JSON形式)
├── example/ # サンプル・テストファイル
└── package.json
MCU(micro:bit等)からUART経由で送られる
加速度データを Node.js 経由でブラウザにリアルタイム表示します。
X,Y,Z軸の時系列加速度データをパラメータ解析し、得点・評価に寄与するパラメータを調査するために使用しています。動作の有無、波形類似度(相関係数)、Feature類似度など複数指標の総合スコアを算出し、各パラメータの寄与度を分析することで、ラベル付けとデータ構築を効率化し、Edge Impulse TinyMLによるAI化に向けたデータ収集・解析を支援します。
| 項目 | 推奨バージョン |
|---|---|
| Node.js | v18.x 以上 |
| npm | v9.x 以上 |
| ブラウザ | Chrome / Edge 最新版 |
| MCU | micro:bit(uT-Kernel3, LSM303AGR搭載) |
cd wearable-motion-visualizer
npm installnpm start実行後、コンソールに以下のようなメッセージが出ればOK:
Serial port open: /dev/tty.usbmodemXXXX
Server running on http://localhost:3000
http://localhost:3000
MCUはUART経由で以下のようなテキストを出力します:
[CONFIG] ODR=200Hz, SCALE=±8g, MODE=HR, SHIFT=4
[SENSOR] 123,-456,789,96000,128000,-102400
[CONFIG]:現在のセンサー設定を表す行(起動時1回送信)[SENSOR]:各軸の加速度値(LSBおよびmg単位)- 出力順序: X軸 (raw), Y軸 (raw), Z軸 (raw), X軸 (mg), Y軸 (mg), Z軸 (mg)
- Node.js/Webアプリでは、後半の mg (ミリg) 単位の値(X, Y, Z の順)を利用します。
Node.jsはこのデータを自動的にWebSocketで配信し、
ブラウザ上でリアルタイムに描画します。
| ボタン | 機能 |
|---|---|
| Connect / Disconnect | WebSocket接続の開始・終了 |
| Stop | データ受信を停止し、CSVを自動保存 |
| Clear | グラフをクリア |
| グラフ描画一時停止 / 再開 | 描画負荷を抑えるために一時停止可能 |
| モーションセンサー設定値取得 | [CONFIG] 情報をブラウザに表示 |
| ファイル選択 | 保存済みCSVファイルを再描画 |
| 列名 | 説明 |
|---|---|
| x_raw, y_raw, z_raw | センサー生データ(LSB) |
| ax, ay, az | 換算加速度(mgまたはg) |
| timestamp | 記録時刻(UNIX ms) |
ファイル名例:
motion-2025-10-06T12-00-31-612Z.csv
- UARTは**一方向通信(MCU→Node.js)**のみ使用。
tm_printf()とUART送信が同一ポートのため、
Node.js経由のコマンド送信は行いません。- センサー設定変更はMCUソースコードを変更して再ビルドしてください。
| 現象 | 対応 |
|---|---|
| MCUのAボタンで動かない | UART競合。init_uart()呼出し位置を確認 |
| 「Serial port not found」 | USBポート名(/dev/tty.usbmodem****)を確認 |
| グラフが重い | 「グラフ描画一時停止」を利用。サンプル数を減らす |
- オフライン分析機能(CSV読込・統計分析)
- 周波数解析(FFT表示)
- モーション自動識別(機械学習連携)
このプロジェクトは、Wearable Motion Analyzerシステムの一部です:
-
WearableMotionAnalyzer-uTKernel
micro:bit上でμT-Kernel 3.0で動作するメインアプリケーション。LSM303AGR加速度センサーで手首動作を測定し、基準動作と比較動作を記録・分析します。 -
lsm303agr-utkernel
micro:bit v2.21の内蔵加速度センサーLSM303AGRのキャリブレーションライブラリ。データシート準拠の正確なスケール計算を実装し、WearableMotionAnalyzer-uTKernelで使用されています。
このツールは、研究・教育用途を主目的とする参考実装です。
- 研究・教育用途: Apache-2.0ライセンスに基づき、自由に使用・改変・配布できます
- 実サービスへの組み込み: 可能ですが、クレジット表示とリンクをお願いします
- 例: "Based on wearable-motion-visualizer by Ryuji Mori (https://github.com/mnrj-vv-w/wearable-motion-visualizer)"
このツールは、TRONコンテスト2025への応募作品「Wearable Motion Analyzer on μT-Kernel」の開発過程で生まれました。
- Project: Wearable Motion Analyzer
- Base: μT-Kernel 3.00
- Visualization: Node.js + WebSocket + Chart.js
- Maintainer: Ryuji Mori