ガーミンアプリ開発18日目(通算12時間)
宮古島ワイドー(100kmのウルトラマラソン)に向けて、Garmin Fenix 5S(ランニング用ウォッチ)に、関門通過の目標時間を表示させようとしている。
前回の記事では、時計のラップボタンの押し下げで表示時間を切り替えるコードを作成することはできた。しかし、改めて考えてみると、ラップボタンでは、レース中に計測で使用するラップ機能が使えなくなってしまうため不便であることに気が付いた。
そこで、今回は、ラップボタンではなく、ランニングの距離で表示させる時間を切り替えるコードへの変更を試み、シミュレーションでの正常動作を確認した。
顛末を以下に記載する。
先ずは、宮古島ワイドーの目標時間!
コードも書かないとならないが、時計に目標時間を表示させるためには、表示させたい目標時間が必要だ。と言う訳で、大会側の制限時間と当方の走力から目標時間を定める。
始めに、大会側が設定している制限時間は以下の通り。
- 46.5km関門:8時間(レストステーションあり)
- 80km関門:11時間15分
- 90km関門:13時間
- 100kmゴール:14時間
続いて、当方の走力は前回の75km走から振り返る。以下に引用。
前半6~7分/km、後半8分/kmと想定するのが良さそう
更に、前述までの条件に以下を加味する。
- 制限時間は目一杯使う(今回は笑顔で完走!が最終目標)
- 46.5km地点にレストステーションがあるため、15分のレスト時間確保。
- 後半は歩くより遅くなっている可能性が高い(9"30/km程度のペースに設定)
と言う訳で導き出したのが、こちらの表。
12時間35分でのゴールを目指すこととした。
コードの書き換え
下のスクショは前回のコードからの書き換えであるが、変更箇所が結構多いので、大まかな流れを画像の下に箇条書きする。
- var v_distance:変数 v_distanceを宣言
- v_distance = 0:初期値として0を代入
- if (info.elapsedDistance == null):
ランニングの距離にデータが無い場合もv_distance = 0とする - else { v_distance = info.elapsedDistance / 1000
そうでないなら、ランニングの距離[m]を[km]に換算してv_distanceに代入 - if (v_distance < 46.5) {...
v_distance[km]の値に応じて表示させる値(return)を変化させる
テスト
上記のコードをシミュレータにて動作確認をしてみた。その結果がこちら。シミュレータでActivityをスタートし、ランニング距離が積み重なると共に、目標時間が以下のように変化することを確認できた。
- 46.5, 06:05(46.5km地点は6時間5分が目標)
- 80, 09:35(80km地点は9時間35分が目標)
- 90, 11:00(90km地点は11時間が目標
- 100, 12:35(100kmゴールは、12時間35分が目標)




なお、シュミレータのUnits(単位)をMetricに変更しておかないと、アクティビティのランニング距離を取得しようとしても[m]単位での値が返されないようであり、少々引っかかってしまった。
まとめ
兎にも角にも、今回の作業にて、ようやく、宮古島ワイドーのレース本番で使えそうな最小構成プログラムを作成することができた。
なお、当初に構想していたプログラムイメージは以下の通り。
構想とかなり違うじゃん!という話ではあるが、不用意にコード行数を増やすような豪華プログラムはバッテリー消耗的に宜しくない(前回の75km走で実感済み)。
人間、構想段階だと、ついつい大きな風呂敷を広げてしまいますね( ̄▽ ̄;)
さて次の課題
現時点では作成プログラムをシュミレータでしか使用できない。これをレース本番で使用するためには、時計にインストールする方法を探る必要がある。Garminのアプリストアに公開する作業になると思う。
そこで、次回からは、作成プログラムの実践投入には具体的に何をすればよいのか?を探ってゆく。