Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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

この例では、Stateflow® チャートと、App Designer で作成された MATLAB® アプリの間にインターフェイスを作成する方法を説明します。Stateflow チャートを MATLAB アプリに接続する方法のその他の例については、パワー ウィンドウ コントローラーのモデル化およびSimulate a Media Playerを参照してください。この例のバージョンのうち、MATLAB のスタンドアロン チャートを使用するものについては、スタンドアロン チャートを使用したフィットネス アプリのモデル化を参照してください。

この例では、MATLAB アプリがフィットネス トラッカーをモデル化します。シミュレーション中に、トラッカーの設定を調整し、アクティビティ ([Sleep][Rest][Walk][Exercise]) を選択します。[Exercise] を選択した場合、運動の強さも設定できます。

Stateflow チャート App Interface では、MATLAB アプリと、Simulink® モデルの制御およびプラント システムの間の双方向接続を使用できます。アプリのウィジェットを操作する場合、チャートは選択内容をモデル内の他のチャートに送信します。逆に、チャートはフィットネス トラッカーの出力を使用して、アプリの数値フィールドとテキスト フィールドを更新します。たとえば、アプリの [Rest] ボタンをクリックすると、App Interface チャートは出力 activity の値を、列挙値 Activity.Rest に設定します。Human Simulator チャートは、休憩中の人をモデル化するバイタル サイン値を生成して応答します。Fitness Tracker チャートはこれらの値を解析し、出力信号 statusActivity.Rest に設定します。App Interface チャートはこの信号を監視し、アプリの [Status] フィールドの内容を Rest に更新します。

この例を実行するには、Simulink モデルを開いて [実行] をクリックします。チャート App Interface はアプリを開き、Human Simulator および Fitness Tracker チャートを初期化します。例の実行中、1 秒間のシミュレーションは 1 分の運動時間を表します。シミュレーションを停止するには、[停止] をクリックするか、アプリを閉じます。

チャートと MATLAB アプリとの接続

チャート App Interface は MATLAB アプリ sf_fitness_app と通信するよう構成されています。

  • このアプリは chart というプロパティを使用して、チャート App Interface とのインターフェイスをとります。アプリ コールバックはこのプロパティを使用して、チャートの入力を読み取り、チャートの出力に書き込みます。たとえば、[Settings] ペインでいずれかのフィールドの値を変更すると、コールバックが出力構造体 threshold の対応するフィールドの値を更新します。同様に、新しいアクティビティを選択するか、[Human Simulator] ペインで運動の強さを変更すると、コールバックがチャート出力 activity および intensity の値を設定します。最後に、アプリを閉じると、UIFigureCloseRequest コールバックがチャート出力 stop の値を true に設定します。

  • チャートでは、InterfaceWithApp ステートの entry アクションがアプリ sf_fitness_app を実行し、戻り値をローカル データ オブジェクト app として保存します。チャートは、補助関数 updateStatusupdateClockupdateTextupdateSteps、および updateHeartRate を呼び出すときに、このローカル データ オブジェクトを使用します。アプリでは、これらの補助関数はアクティビティのステータス、時計、歩数計の各フィールドの内容を変更し、心拍と足跡のディスプレイのアニメーション効果を作成します。たとえば、チャートが notification メッセージを受け取るとき、サブステート MainDisplay は補助関数 updateText を呼び出します。この関数は、時計の表示の内容を、カスタマイズされた通知に置き換えます。5 秒が経過した後、サブステートは補助関数 updateClock を呼び出し、時計の表示を元に戻します。

MATLAB アプリと Stateflow チャートの間で双方向接続を作成する方法については、パワー ウィンドウ コントローラーのモデル化およびSimulate a Media Playerを参照してください。

アプリの操作に使用する関数はコード生成ではサポートされないため、InterfaceWithApp ステートは最初に関数 coder.extrinsic を呼び出して、これらの関数を外部 MATLAB コードとして宣言します。詳細については、Stateflow チャートでの外部 MATLAB 関数の呼び出しを参照してください。

アクティビティに基づくバイタル サインのシミュレーション

Human Simulator チャートは、アプリで選択したアクティビティを実行中の人のバイタル サインをモデル化します。このチャートは出力構造体 vitals を使用して、これらのバイタル サインをフィットネス トラッカーにリレーします。この構造体のフィールドは、心拍数、速度、歩数を表します。新しいアクティビティを選択したり、運動の強さを調整したりすると、チャートは関数 transition を呼び出して、これらのバイタル サインが時間の経過に伴い次第に変化するようにします。アクティビティや運動の強さの変化を検出する場合、チャートはhasChanged演算子を呼び出します。詳細については、データと式の値の変化の検出を参照してください。

フィットネス トラッカーの出力の判定

チャート Fitness Tracker は、フィットネス トラッカーの中核のロジックをモデル化します。このチャートは、実行される可能性があるアクティビティに対応する 4 つのサブチャートで構成されています。このチャートは、Human Simulator チャートで生成された心拍数および速度と、これらのサブチャート間での遷移に基づいて、アクティビティのステータスを登録します。信号ノイズを除外するため、このチャートはduration演算子を使用して単純なデバウンス ロジックを実装しています。たとえば、休息中に、運動ではないが、すばやい動作を突然行うことがあります。チャートは、動作が 2 分 (またはシミュレーション時間で 2 秒) 以上続いた場合にのみ歩行または運動を行っていると判定します。チャートはアクティブな子ステートを監視し、この情報を出力データ status を介して App Interface チャートに渡します。詳細については、アクティブ ステート データによるステート アクティビティの監視を参照してください。

チャートは他の時相論理演算子を使用して、各アクティビティに費やした時間を追跡し、アプリにいつ通知を送信するかを決定します。

  • 各サブチャートの exit アクションにより、elapsed演算子が呼び出され、サブチャートがアクティブだった時間の長さが判別されます。チャートはこの値と、心拍数や合計歩数などの他の情報を、出力構造体 display を使用して App Interface チャートに送信します。

  • チャートはafter演算子を使用して、5 分を超える睡眠または歩行、アプリで指定したしきい値より長い時間の休憩や運動、または 15 分を超える強い運動 (1 秒間で 4 歩を超えるペース) を判別します。どの場合についても、チャートは Notification メッセージを送信します。App Interface チャートはこのメッセージを受け取り、アプリのメイン ディスプレイに通知を表示します。通知の種類によって、通知ボタンの色が変わります。

参考

(Simulink) | | | | | (MATLAB Coder)

関連するトピック