Main Content

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

スタンドアロン チャートを使用したフィットネス アプリのモデル化

この例では、複数のスタンドアロン Stateflow® チャートと 1 つの MATLAB® アプリで構成されるアプリケーションを作成する方法を説明します。これらのスタンドアロン チャートは、このアプリケーションの制御システムおよびプラント システムと、MATLAB アプリとのインターフェイスをモデル化します。スタンドアロン チャートと MATLAB アプリとの接続の詳細については、Stateflow チャートを使用したヒューマンマシン インターフェイスのロジックの設計を参照してください。この例で、Simulink® モデルで Stateflow チャートを使用するバージョンについては、フィットネス トラッカーのモデル化を参照してください。

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

スタンドアロン チャート sf_fitness_interface は、MATLAB アプリと、この例の他のスタンドアロン チャート (sf_fitness_human および sf_fitness_tracker) との間の双方向接続を提供します。これらのチャートは、前者はヒューマン シミュレーターをモデル化し、後者はフィットネス トラッカーの中核となるロジックを提供します。アプリのウィジェットを操作する場合、sf_fitness_interface チャートは選択内容をこの例の他のチャートに送信します。逆に、チャートはフィットネス トラッカーの出力を使用して、アプリの数値フィールドとテキスト フィールドを更新します。

この概略図は、この例のアプリとチャートの間での情報の移動を示しています。

この例を開始するには、sf_fitness_sfx_app アプリを実行します。このアプリは、sf_fitness_interface のチャート オブジェクトを作成します。一方、このチャートでは、この例で使用する他の 2 つのチャートのチャート オブジェクトを作成します。ヒューマン シミュレーターまた、このチャートは、チャートの心拍数に比例した頻度で 3 つのチャートすべてを実行する MATLAB timerオブジェクトも作成します。例の実行中、1 秒間のシミュレーションは 1 分の運動時間を表します。この例を停止するには、アプリを閉じます。

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

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

  • このチャートは、ローカル データ オブジェクト app を使用して、MATLAB アプリとのインターフェイスをとります。チャートは、補助関数 updateStatusupdateClockupdateTextupdateSteps、および updateHeartRate を呼び出すときに、このローカル データ オブジェクトを使用します。アプリでは、これらの補助関数はアクティビティのステータス、時計、歩数計の各フィールドの内容を変更し、心拍と足跡のディスプレイのアニメーション効果を作成します。たとえば、フィットネス トラッカーからの新しい通知がある場合、サブステート MainDisplay は補助関数 updateText を呼び出します。この関数は、時計の表示の内容を、カスタマイズされた通知に置き換えます。短い遅延の後、このサブステートは補助関数 updateClock を使用して時計の表示を復元します。

  • このアプリは chart というプロパティを使用して、チャートとのインターフェイスをとります。アプリはこのプロパティを使用して、チャートのローカル データを読み取ります。たとえば、補助関数 updateHeartRate および updateSteps は、それぞれチャートのローカル データ heart_rate および total_steps を読み取ります。さらに、アプリを閉じると、UIFigureCloseRequest コールバックは chart プロパティを使用し、チャート オブジェクトを削除して、この例のチャートの実行を停止します。

MATLAB アプリとスタンドアロン Stateflow チャートの間で双方向接続を作成する方法については、Stateflow チャートを使用したヒューマンマシン インターフェイスのロジックの設計を参照してください。

ヒューマン シミュレーターとフィットネス トラッカー チャートとの間で通信を確立するため、sf_fitness_interface チャートはチャート オブジェクトをローカル データ human および tracker として保存します。チャート レベルの MATLAB 関数 updateHuman および updateTracker はこれらのオブジェクトを使用して、チャートのローカル データの書き込みと読み取りを行います。たとえば、アプリの [Human Simulator] ペインで新しいアクティビティを選択したり、運動の強さを変更したりする場合、updateHuman はヒューマン シミュレーター チャートのローカル データ activity および intensity の値を設定します。同様に、アプリの [設定] ペインのフィールドのいずれかで値を変更すると、updateTracker はフィットネス トラッカー チャートで対応するローカル データの値を更新します。

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

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

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

チャート sf_fitness_tracker は、フィットネス トラッカーの中核のロジックをモデル化します。このチャートは、実行される可能性があるアクティビティに対応する 4 つのサブチャートで構成されています。このチャートは、ヒューマン シミュレーター チャートで生成された心拍数および速度と、これらのサブチャート間での遷移に基づいて、アクティビティのステータスを登録します。信号ノイズを除外するため、このチャートはcount演算子を使用して単純なデバウンス ロジックを実装しています。たとえば、休息中に、運動ではないが、すばやい動作を突然行うことがあります。チャートは、チャート オブジェクトの評価 2 回分より長く動作が続いた場合にのみ歩行または運動を行っていると判定します。

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

  • 各サブチャートの exit アクションにより、elapsed演算子が呼び出され、サブチャートがアクティブだった時間の長さが判別されます。

  • チャートはafter演算子を使用して、5 分を超える睡眠または歩行、アプリで指定したしきい値より長い時間の休憩や運動、または 15 分を超える強い運動 (1 秒間で 4 歩を超えるペース) を判別します。いずれの場合でも、チャートはローカル データ notification の値を更新します。sf_fitness_interface チャートはこの値を読み取り、アプリのメイン ディスプレイに通知を表示します。通知の種類によって、通知ボタンの色が変わります。

参考

| |

関連するトピック