2020年12月31日木曜日

空調服を生体計測的にhack

  ほい。お久しぶりです。

今年はいろいろとありました。会社クビになったり、拾ってくれる会社があったり、拾われた所ではエンジニアのプライドがめっきり折られたりと…散々な感じですね。多分ですけど、1月末には契約が満期になって、また次の会社を探さないといけないですねぇ…。このご時世でどう探せばいいのやら…。


PSoCに逃げ込むぞ!!!


さて。


夏頃に「暑いけど、空調服は空調服のファンが回りっぱなしで身体が冷えすぎて良くないしなんかないかなー」と考えていました。思いつきでは「あ。生体計測していたし、体内調節機能と連動した空調服の制御が出来ないかな?」っと考えを広げていました。空調服で体内調節機能を連動したものは当時(2020年6月)ありませんでした。生体計測とは何かというと非侵襲、つまりは人体を切り開いたりせずに人体の様子を観察できるようにするという医療工学です。昔はこの分野に関わっていたので「どこ」を「どう」測れば「何が分かる」というのは分かりました。ただ今回のような空調服だとかなり難しいのです。なぜかと言うと次のような理由です。

  • 空調服は運動中に着用している。
  • 実験環境のような密室じゃないのでケーブルを吊り下げておけない
  • 野外に出るのであまりの重装備は怪しまれる。
  • 心電計は使えない(ディスポーザブル電極が手に入らない)
だからと言って雑な測定の仕方では生体情報の取得ができないので測定する範囲を絞ることで実現しようと考えました。空調服を制御する方針は次の通りです。
  • 脈拍を測定して運動負荷をみるようにする。
  • 脈拍数と体温は相関するはずなので、体温は測らない。
  • ボルグスケールに応じて空調服を制御する。
  • 外気の温度と湿度を測定して不快係数に応じて空調服を制御する。
このなかで難しいのは脈波測定です。アナログ回路から作る方法もあれば、センサーやモジュールを使うという方法もあります。アナログ回路から作ると大風呂敷になり過ぎるので脈波センサーを探すことにしました。探しているのは耳の血管で測定できるタイプの脈波センサーです。なぜ指ではダメかというときちんとした理由があります。安静時には心拍と末端の脈波はほぼ同じです。しかし運動時は心拍と末端の脈波は全く異なります。これは手先を動かすこともそうですが重力影響や血圧が変化するためです。末端の脈波の中で影響が比較的少ないのは耳や体幹で測ることの出来る脈波になります。
 おおよその方針が出来たので部品探しをしました。ただお目当ての「耳で測るタイプの脈波センサー」がありませんでした。基板から作ればいいのでしょうがそこまで行うエネルギーもなかったので指で測るタイプで妥協することにしました。


さて、使うセンサーの選定も行ったので全体設計を行いました。



メインはPSoC62xAでFreeRTOSが走っている状態です。(FreeRTOSが機能がシンプルで設計も実装も楽です…。)ユーザーボタンは割り込みで検知するようにしてvTaskNotifyGiveFromISR() でFreeRTOS内のタスクへ通知するようにします。そのほかはソフトウェアタイマーで定期的にセンサー値を取得してqueueに詰めて各タスクで使うような作りにしています。LCDならqueueでもらったデータを表示用のメモリに入れる。ファン制御の所はqueueでもらったデータを使ってファンのスピードを変更するというような切り分けです。私の図の書き方はFPGA屋さんのそれと同じなのでタスクはFPGA屋さんで言う所のモジュールみたいな立ち位置になっています。階層化したものを上から見るか横から見るかの差なだけでほとんどやっていることは同じです。

回路やら体表面用のメカ部品やらを作って、実装をするとこんな感じです。





今回は腕に着けられるようにしましたが、これだけでも怪しさが爆発ですね…。
あまりよろしくないです……。
すべてを組み立てた状態はこのような感じです。



プログラムの構造もすごくシンプルなのでかなり堅い作りかなと思います。
プラスアルファでフレームワークとかも入れていないのでメンテナンス性も良いコードになったと思います。

総括
良い感じ。ただ脈波センサーは変えないとかなり残念な感じになりそう。
今回の改造空調服は「バリアスーツ」と呼んで置きましょう。
今後はリュックに制御装置やらバッテリーが入るようにしようと思います。
どんどんプレデターに出てくるようなスーツのようになりそうです。
いっそ、肩からBB弾とかミサイルを発射出来るようにしてしまうのが
面白いかもしれませんね(当面その予定はないですが…)。
ではまたー。