「朝スッキリ起きるためのアイマスク」を作ってみた

この記事は[おうちハックAdvent Calendar 2018](https://qiita.com/advent-calendar/2018/ouch-hack)の10日目の記事です。

「朝スッキリ起きるためのアイマスク」というのを作ってみたので紹介したいと思います。
ここ3年、おうちハックAdventCalendarに投稿するためにハードウェアを製作している気がします。

## 何を作っているか

朝が苦手なので、スッキリ起きられるガジェットを製造しています。世の中には「光で起きる目覚まし」というジャンルがあり、設定した時間に部屋を明るくして起きることができるライトが市販されています ([Amazonでも多数売っている](https://www.amazon.co.jp/slp/%E5%85%89-%E7%9B%AE%E8%A6%9A%E3%81%BE%E3%81%97%E6%99%82%E8%A8%88/sk3s4rzds4fmdbq))。
これをおうちハック/IoT的にリメイクしたら面白いんじゃないかと考えています。

- スマホから起きる時刻を設定できる
- 眠りの深さを計測し、眠りのタイミングが浅いときに起こしてくれる
- 自分の好きな光の色で起こしてくれる
- 他の家電と連携して起きたあといい感じに暮らせる(エアコンがついたり)

## 何ができたか

こんな感じのものができました→[GUGENのページへのリンク](https://gugen.jp/entry2018/2018-100)。多くの市販製品はライト型ですが、今回はウェアラブルデバイスにしてみました。理由は2つあるのですが、
- 部屋全体を明るくして起こすのではなく個人ごとに別のタイミングで起こしたい(妻と夫で起床時刻が違うケースなど)
- 心拍センサを使って睡眠の深さを取得したい
です。

<img width="400" alt="sun.png" src="https://qiita-image-store.s3.amazonaws.com/0/42108/c2d53bbc-21fc-ae54-9208-814b372eed5b.png">

<img width="800" alt="Screen Shot 2018-12-09 at 3.01.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/42108/140abfa3-d229-a3c8-a60b-87c696782bae.png">

<img width="800" alt="Screen Shot 2018-12-09 at 3.39.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/42108/1ae87a75-ea59-408f-9ef6-ff28ebfebe95.png">


スマホアプリをつかって時刻と光らせたい色を設定すれば、指定した時刻に光ってくれます。スマホアプリとデバイスはBLEで接続されています。

ハードウェア側は比較的単純で
- BLE搭載のマイコンを使用して全体を制御する
- LEDで光らせる
- 心拍センサモジュールで生体信号を取る
という感じです。

[説明用動画(YouTube)へのリンクはこちら。](https://www.youtube.com/watch?v=HaIXZtm0ECo)


## Bluetoothモジュールについて

BLEを搭載したモジュールとして今回は[Adafruit Feather 32u4 Bluefruit LE](https://www.adafruit.com/product/2829)を使いました。物理的に小さく軽そうだったのと、Arduinoでサクッとプログラミングできそうだったので。
初めて使ってみたのですが、[公式ライブラリとサンプルコード](https://github.com/adafruit/Adafruit_BluefruitLE_nRF51/tree/master/examples)がかなり充実しており、一般的なBLEプログラミング、UART転送、HID、MIDIとかはサクッと始めることができます。今回はスマホと接続して一つのService上でコマンドやり取りするだけなのですが、今後も積極的に使っていきたいと思います。以下の感じでサクッとBLE接続待ちにできたりとか。

```C
Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST);

void setup(void) {
  if ( !ble.begin(VERBOSE_MODE) ) {
    error(F("Couldn't find Bluefruit module"));
  }

  /* Wait for connection */
  while (! ble.isConnected()) {
      delay(500);
  }
}

```

Beaconも簡単につくれます。

```C

void setup(void) {
  if ( !ble.begin(VERBOSE_MODE) ) {
    error(F("Couldn't find Bluefruit, make sure it's in CoMmanD mode & check wiring?"));
  }

  // AT+BLEBEACON=0x004C,01-12-23-34-45-56-67-78-89-9A-AB-BC-CD-DE-EF-F0,0x0000,0x0000,-54
  ble.print("AT+BLEBEACON="        );
  ble.print(BEACON_MANUFACTURER_ID ); ble.print(',');
  ble.print(BEACON_UUID            ); ble.print(',');
  ble.print(BEACON_MAJOR           ); ble.print(',');
  ble.print(BEACON_MINOR           ); ble.print(',');
  ble.print(BEACON_RSSI_1M         );
  ble.println(); // print line causes the command to execute

  // check response status
  if (! ble.waitForOK() ) {
    error(F("Didn't get the OK"));
  }
}
```

## LEDについて

NeoPixelとかを使ってピカピカさせようかとも思ったのですが、NeoPixelは結構電流を消費するイメージだったので、普通のフルカラーLEDとLEDドライバーICを使いました。アイマスクということで、
- できるだけ軽くしたい
- ケーブルを使って外部に電池をおいても悪くはないけどできれば電池もアイマスクに内蔵したい
- 顔のすぐそばに電池があるわけで、プロトタイプといえど事故がないようにしたく、比較的衝撃に弱い電子工作用のリチウムポリマー電池ではなく、市販のリチウムコイン電池を使ったほうが何かしらマシな気がした
という感じであまり電流を流せない構成だったためです。

LEDドライバとしては[Diode社のもの](https://www.digikey.com/product-detail/en/diodes-incorporated/BCR421UW6Q-7/BCR421UW6Q-7DICT-ND/5766093)を使っています。PWMを使ってサクッと制御できていい感じです。

## 心拍センサについて

心拍センサは[pulse sensorの心拍センサ](https://www.switch-science.com/catalog/1135/)を使用しました。脈波のパターンからリラックス度合いや睡眠の深さを推定する研究はかなり広く行われており、ストレスレベルを推定できるとするスマホアプリなども出てきています。脈と脈の間の間隔時間のばらつきを指標にするのが一般的なようです。

- [心拍変動から自律神経を推定する研究](https://www.jstage.jst.go.jp/article/jsmbe/54/6/54_261/_pdf)
- [脈拍からレム睡眠とノンレム睡眠を見分ける研究](http://jssr.jp/kiso/hito/hito05.html)
- [ストレススキャンアプリ](https://itunes.apple.com/jp/app/%E3%82%B9%E3%83%88%E3%83%AC%E3%82%B9%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3-%E3%82%AB%E3%83%A1%E3%83%A9%E3%81%A7%E6%89%8B%E8%BB%BD%E3%81%AB%E3%82%B9%E3%83%88%E3%83%AC%E3%82%B9%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF/id673503525?mt=8)

生脈波を取得した上で、脈と脈の間の間隔を取得して、フーリエ変換かけてしきい値きるだけやで！という話なのですが、まだできていません...がんばります。

## 電源について

電源はCR2450という大きめのコイン電池を使ってみました(Bluefruit LEは5V駆動のため、DCDCを使って昇圧しマイコンに入力)。LEDを光らせたときに十分な電流流れるか不安だったんですが、、、、最大光量で光らせようとすると十分な電流が引けず、Bluefruitがシャットダウンしてしまうという現象が発生してしまいました。一旦最大光量まで光らせないようにすると動作はするのですが、ここは今後要改善です。(いつも電源で失敗するのでどうにかしたい)

## で、おきれたのか？

試してみたのですが、やはり光量が弱く、いまいちスッキリ起きられた感じはしませんでした。。。
ただ、一度作ってみてはじめてのマイコンモジュールの使い方や重さに気を使いながらの設計・製造など結構勉強になったし、改善点も見えたので、今後更に育てて行ければと思っています！