最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

フィットネス トラッカーのモデル化

この例では、Stateflow® で時相論理と外部関数呼び出しを使用してフィットネス トラッカーを実装する方法を説明します。フィットネス トラッカーは Simulink® モデルと、App Designer を使って作成された MATLAB® ユーザー インターフェイス (UI) で構成されています。モデルには 3 つのコンポーネントがあります。

  • Human_Simulator。アクティビティをモデル化するサブシステムです。このサブシステムは心拍数、速度、および歩いた歩数を表す信号を出力します。

  • Fitness Tracker。フィットネス トラッカーの中核となるロジックをモデル化する Stateflow チャートです。このチャートは時相論理を使用してアクティビティの状態 (睡眠、休息、歩行、または運動) を判定し、UI に通知を送ります。

  • UI Controller。UI におけるフィットネス トラッカーの表示を更新する Stateflow チャートです。このチャートにある外部関数呼び出しと UI にあるコールバック関数によって、モデルと UI 間に双方向の接続が作成されます。

シミュレーションの開始に際し、モデルは UI を開きます。例の実行中、1 秒間のシミュレーションは 1 分の運動時間を表します。UI ウィンドウを閉じるとStop Simulationブロックがモデルを停止します。

時相論理を使用したフィットネス トラッカーの出力判定

Fitness Tracker チャートはフィットネス トラッカーの UI の出力を制御します。このチャートは心拍数と速度に基づいてアクティビティ ステータスを記録します。4 つのサブチャートはアクティビティ ステータスの可能な値に対応します。チャートはアクティブな子ステートを監視し、この情報を出力データ Activity を介して UI Controller チャートに渡します。

チャートのデバウンス ロジックは、duration 演算子を使用して信号ノイズをフィルターで除外します。たとえば、休息中に、運動ではないが、すばやい動作を突然行うことがあります。チャートは、動作が 2 分 (シミュレーション時間で 2 秒) 以上続いた場合にのみ歩行または運動を行っていると判定します。

このチャート内のサブチャートは他の時相論理演算子を使って運動アクティビティを追跡します。これらのサブチャートは、次の場合に UI Controller チャートに Notification メッセージを送信します。

  • 睡眠または歩行が 5 分より長く続いた場合。Sleep および Walk サブチャートの exit アクションは elapsed 演算子を呼び出して、これらのサブチャートがアクティブだった時間を判定します。

  • 休息または運動が、UI で指定されたしきい値より長く続いた場合。Rest および Exercise サブチャートは after 演算子を呼び出して、これらのサブチャートがアクティブだった時間を判定します。

  • 心拍数が UI で指定されたしきい値を超える状態が 1 分より長く続いた場合。Exercise サブチャートは duration 演算子を呼び出して、心拍数がしきい値を上回っていた時間を判定します。

モデルとユーザー インターフェイス間の接続の確立

UI Controller チャートは Human_Simulator サブシステムおよび Fitness Tracker チャートからのデータを処理して、この情報を UI にリレーします。

UI と通信するために、チャートは UI で定義されているアプリ関数を呼び出します。これらのアプリ関数はコード生成でサポートされていないため、Init ステートはまずこれらのアプリ関数をcoder.extrinsicとして宣言します。この宣言により、DISPLAY ステートはアプリ関数を呼び出してアクティビティ ステータス、クロック、歩数カウンター、および心拍数の表示を UI で更新できるようになります。たとえば、チャートが通知メッセージを受け取るとき、サブステート Notification_and_Clock はアプリ関数 updateText を呼び出します。このアプリ関数はクロックの表示をカスタマイズされた通知に置き換えます。5 秒が経過した後、サブステートはアプリ関数 updateClock を呼び出し、クロックの表示を元に戻します。

シミュレーション時には、[Settings] ペインで値を変更して [Human Simulator] ペインのアクティビティ ボタンをクリックすることにより UI を操作できます。各操作の後、UI は関数set_paramを呼び出して Simulink モデル内のパラメーターを変更します。たとえば、UI で [Rest] ボタンをクリックすると、Human Simulator において、Activity Constant ブロックの値が列挙値 Activity.Rest に変化します。Human Simulator は、休息中のユーザーをモデル化する心拍数と速度の値の生成に応答します。

参考

| | | | |

関連するトピック