目的
寝落ちや在宅ワークによる運動不足など不健康な生活を改善できるスマートバンド的なモノを作りたい!
今回は概要レベルの設計を行う。1
環境
- Raspberry Pi 3 ModelB
- M5StickC
- 心拍数取得用:心拍センサユニット(https://www.switch-science.com/catalog/5695/)
- 警告用:Vibrator Hat(https://www.switch-science.com/catalog/6127/)
- 腕時計アクセサリ(https://www.marutsu.co.jp/pc/i/33227880/)
構成イメージ
作業メモ
どんな機能を作るのか?
加速度/ジャイロ/心拍数をM5StickCで取得して、そこから寝落ちや運動不足を検知→ユーザーに警告、といった動きをさせる予定
設計
参考サイト
https://plantuml.com/ja/
- ユースケース図(ユースケース記述)/アクティビティ図にて概要レベルの設計を行う
- ユースケース図/アクティビティ図は 参考サイト のPlantUMLにて作成
ユースケース図
- PlantUMLのコード
@startuml
left to right direction
actor "User" as Men1
actor "raspberry pi" as Men2
rectangle M5StickC {
usecase "データを取得する" as Func1
usecase "寝落ちを検知する" as Func2
usecase "運動不足を検知する" as Func3
usecase "警告音を出力する" as Func4
}
Men1 -- Func1
Func1 -- Men2
Men1 -- Func2
Men1 -- Func3
Func2 --> Func4:include
Func3 --> Func4:include
@enduml
ユースケース記述
| ユースケース名 | データを取得する |
|---|---|
| 目的 | 加速度/ジャイロ/心拍数の値を定期的に取得し、取得したデータを外部機器へ送信する |
| アクター | User/raspberry pi |
| 事前条件 | 外部機器とネットワーク接続済み |
| 事後条件 | - |
| 基本系列 | 1.User(アクター)がこのユースケースを起動する |
| 2.加速度/ジャイロ/心拍数の値を定期的(数秒程度の周期)に取得し、取得したデータをRAMへ保持 | |
| 3.データが一定容量になるまで2を繰り返す | |
| 4.一定容量保持したデータを事前に定めたフォーマットに則り、raspberry pi(アクター)へ送信する | |
| 代替系列 | ・基本系列4でraspberry pi(アクター)への送信に失敗する場合、ネットワーク再接続を行う |
| 拡張 | - |
| 備考 | ・基本系列4の"フォーマット"は {日時} `{加速度},{ジャイロ},{心拍数}/{加速度},{ジャイロ},{心拍数}/・・・ |
| シナリオ | 1.UserはM5StickC(システム)をデータ取得モードに設定する |
| 2-1.M5StickCを身に着けた状態で1.5時間程度日常生活を行った | |
| 2-2.M5StickCを身に着けた状態で1.5時間程度睡眠した | |
| 3.raspberry piにてデータがフォーマット通りに送信されている事を確認できた |
| ユースケース名 | 寝落ちを検知する |
|---|---|
| 目的 | 加速度/ジャイロ/心拍数の値を定期的に取得し、取得値が定めた閾値を超える場合、寝落ちと判断し警告をする |
| アクター | User |
| 事前条件 | 閾値が設定されている |
| 事後条件 | 寝落ちを通知する警告音が出力されている |
| 基本系列 | 1.User(アクター)がこのユースケースを起動する |
| 2.加速度/ジャイロ/心拍数の値を定期的(数秒程度の周期)に取得し、閾値と比較する | |
| 3-1.一定時間連続で閾値を超えた場合、ユースケース「警告音を出力する」を呼び出し、Userへ寝落ちを通知する | |
| 3-2.上記以外の場合、2を繰り返す | |
| 代替系列 | - |
| 拡張 | - |
| 備考 | - |
| シナリオ | 1.UserはM5StickC(システム)を寝落ち検知モードに設定する |
| 2.M5StickCを身に着けた状態で日常生活を行った | |
| 3-1.10分連続でソファーで横になって眠ってしまった。M5StickC(システム)が寝落ちを判断し警告音が鳴ることで目が覚めた | |
| 3-2.5分×2回でソファーで横になって眠ってしまったが、10分連続ではないため、M5StickC(システム)が寝落ちと判断しなかった | |
| 3-3.ソファーで横になりながら長時間ネットサーフィンをしていたが、眠っているわけではないため、M5StickC(システム)が寝落ちと判断しなかった。 |
| ユースケース名 | 運動不足を検知する |
|---|---|
| 目的 | 加速度/ジャイロ/心拍数の値を定期的に取得し、取得値が定めた閾値を超える場合、運動不足と判断し警告する(運動を促す) |
| アクター | User |
| 事前条件 | 閾値が設定されている |
| 事後条件 | 運動不足を通知する警告音が出力されている |
| 基本系列 | 1.User(アクター)がこのユースケースを起動する |
| 2.User(アクター)が運動不足を検知する時間を設定する | |
| 3.加速度/ジャイロ/心拍数の値を定期的(数秒程度の周期)に取得し、閾値と比較する | |
| 4-1.一定時間連続で閾値を超えた場合、ユースケース「警告音を出力する」を呼び出し、Userへ寝落ちを通知する | |
| 4-2.上記以外の場合、3を繰り返す | |
| 代替系列 | - |
| 拡張 | - |
| 備考 | テレワークなどで運動不足になることを抑制するために検討した機能 |
| シナリオ | 1.UserはM5StickC(システム)を運動不足検知モードに設定する |
| 2.運動不足を検知する時間を設定した | |
| 3.M5StickCを身に着けた状態で日常生活を行った | |
| 4-1.設定時間以上にほとんど体を動かさず生活を送った。M5StickC(システム)は運動不足と判断し警告音が鳴ることで運動を促された | |
| 4-2.設定時間以内に適度に体を動かしつつ生活を送った。M5StickC(システム)は運動不足と判断せず警告音が鳴ることはなかった |
| ユースケース名 | 警告音を出力する |
|---|---|
| 目的 | アクターへ警告を出すため、気づくことができるような警告音を出力する |
| アクター | User |
| 事前条件 | 警告音は出力されていない(すでに警告音が出力されている場合は出力しないようにする) |
| 事後条件 | 警告音が出力されている |
| 基本系列 | ユースケース「寝落ちを通知する」、ユースケース「運動不足を通知する」を参照 |
| 代替系列 | ユースケースが起動されたとき、警告音が出力されている場合は追加で警告音を出力しない |
| 拡張 | - |
| 備考 | - |
| シナリオ | ユースケース「寝落ちを通知する」、ユースケース「運動不足を通知する」を参照 |
アクティビティ図
- PlantUMLのコード
@startuml
|User|
start
:モードを選択する;
|M5StickC|
switch (モード)
case (それ以外のモード(例外))
stop
case (寝落ち検知モード)
repeat
:データを取得する;
floating note left: モード変化があるまで\n繰り返し
repeat while(寝落ち検知の閾値) is (超えない) not (超える)
:警告音を出力する;
case (運動不足検知モード)
repeat
:データを取得する;
repeat while(運動不足検知の閾値) is (超えない) not (超える)
:警告音を出力する;
case (データ取得モード)
while ()
:データを取得する;
:データを送信する;
|raspberry pi|
:データを受信する;
endwhile
|M5StickC|
endswitch
stop
@enduml
まとめ
寝落ちや在宅ワークによる運動不足など不健康な生活を改善できるスマートバンド的なモノを作りたい!
今回は概要レベルだが設計を行う。
目標達成!
概要レベルでも設計することで、検討漏れを洗い出すことができたかなと思う。
次回から実装を行っていく。
-
Qiitaなどの投稿でソースコードは書かれているが仕様は書かれていない記事も多く、なぜこのコードになったのか分からないと感じるケースがあったので、残してみようと思った。 ↩


