Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

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

この例では、Stateflow® チャートと、App Designer で作成された MATLAB® アプリの間にインターフェイスを作成する方法を説明します。Stateflow チャートを MATLAB アプリに接続する方法のその他の例については、パワー ウィンドウ コントローラーのモデル化およびメディア プレーヤーのシミュレーションを参照してください。この例のバージョンのうち、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 チャートの間で双方向接続を作成する方法については、パワー ウィンドウ コントローラーのモデル化およびメディア プレーヤーのシミュレーションを参照してください。

アプリの操作に使用する関数はコード生成ではサポートされないため、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)

関連するトピック