obnizの力を借りて、スポーツ後の靴を早く乾かす

obniz Advent Calendar 8 日目の記事です。

## ダイエットの冬

最近、ランニングをしている人を良く見かけます。
皆さんは運動した後のシューズケアしていますか？
IoT の力を借りて、シューズケアをしましょう。

## できたもの

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">これを靴の中に入れる <a href="https://twitter.com/hashtag/obniz?src=hash&amp;ref_src=twsrc%5Etfw">#obniz</a> <a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a> <a href="https://t.co/xG6nIKBSyy">pic.twitter.com/xG6nIKBSyy</a></p>&mdash; Takahiro Mitsuoka (@t_mitsuoka) <a href="https://twitter.com/t_mitsuoka/status/1194600655299567616?ref_src=twsrc%5Etfw">November 13, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## 用意したもの

- Obniz
    - https://obniz.io/ja/products#obnizBoard
    - ¥4,500
- 湿度センサー：CHS-UGR
    - https://product.tdk.com/ja/search/sensor/sensor/humidity/info?part_no=CHS-UGR
    - ¥3,500
- LED：WS2811
    - http://akizukidenshi.com/catalog/g/gI-08411/
    - ¥40
- ファン：DC 超小型冷却ファン
    - http://akizukidenshi.com/catalog/g/gP-11820/
    - ¥350
- スピーカー：圧電スピーカー
    - http://akizukidenshi.com/catalog/g/gP-04118/
    - ¥30
- シューキーパー
    - ダイソーで売ってるもの
    - ¥150

締めて¥8,570 でした。

## システム構成

Obniz と各種センサーを使って以下のような構成で作りました。
![グループ 9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90087/027b2509-a4c9-4636-661a-ed9382ca938c.png)

### ピン接続

ピンは以下の通り接続します。

- スピーカー
    - signal: 2, gnd: 0

![10911238722523.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90087/f4cf51c8-8f53-0b2d-5572-2d43c8aa149a.jpeg)

- フルカラーLED
    - gnd: 6, vcc: 5, din: 4

![10911238731664.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90087/ce47dc68-661b-b0ee-1743-0101046ecdbd.jpeg)

- DC ファン
    - vcc: 8, gnd: 7

![10911238781825.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90087/bc0a7337-27d7-991c-23a9-4c989950fdb8.jpeg)

![10911238764264.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90087/d5d0112e-2ec5-3650-0b22-e0d4566b39a6.jpeg)

- 湿度センサー
    - vcc: 11, gnd: 10, din: vout: 9

![10911238896730.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90087/96daffdc-8e9f-a4a4-a5a6-7d11727b02b8.jpeg)

![10911238890552.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90087/12abf6e9-74a3-cc90-fe6e-8de8b4e4eb8a.jpeg)

全部つなぐとこんな感じになりました。
![10911238668239.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90087/86009a78-4266-0254-8cfb-1dffef1ebea8.jpeg)


## ソースコード

Node.js で書きました。
ソースコード全量は GitHub からご覧いただけます。(https://github.com/mono0423/pos-shoes-care)

```javascript
const Obniz = require('obniz');
const obniz = new Obniz('OBNIZ_ID_HERE');

obniz.onconnect = async function() {
  const leds = obniz.wired('WS2811', {gnd: 6, vcc: 5, din: 4}); // フルカラーLED
  const speaker = obniz.wired('Speaker', {signal: 2, gnd: 0}); // スピーカー

  obniz.io11.output(true); // 湿度センサーのvcc
  obniz.io10.output(false); // 湿度センサーのgnd

  obniz.io7.output(false); // DCファンのgnd

  while (true) {
    let ave = 0; // 湿度を1秒間におよそ100回測定して、平均を取る
    for (let i = 0; i < 100; i++) {
      const voltage = await obniz.ad9.getWait(); // 湿度センサーのvoutの値を読み取る
      const humid = voltage * 100; // 電圧->湿度の変換(%)
      ave = ave + humid;
      await obniz.wait(10);
    }
    ave = ave / 100; // 100回の平均を取る
    const humid = ave > 100 ? 100 : ave; // 湿度100%以上になる場合、100%にする
    console.log('湿度: ' + humid + ' %');

    let rgb = [0, 0, 255];
    if (humid > 90) {
      rgb = [255, 0, 0]; // LEDを赤色に変更
      obniz.io8.output(true); // DCファンを回す
      speaker.play(1000); // スピーカーを鳴らす
    } else if (humid > 60) {
      rgb = [255, 255, 0]; // LEDを黄色に変更
      obniz.io8.output(true); // DCファンを回す 
      speaker.play(800); // スピーカーを鳴らす
    } else {
      rgb = [0, 0, 255]; // LEDを青色に変更
      obniz.io8.output(false); // DCファンを止める
      speaker.play(0); // スピーカーを止める
    }

    leds.rgbs([rgb]); // LEDの色を変える
  }
};
```

## いざ実践

上記で作成したものをシューキーパーに貼り、実際にランニングシューズの中に入れてみる。
![10911509568750.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90087/80ca67f2-d88c-3fe6-4e99-9222f58cbd66.jpeg)

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">これを靴の中に入れる <a href="https://twitter.com/hashtag/obniz?src=hash&amp;ref_src=twsrc%5Etfw">#obniz</a> <a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a> <a href="https://t.co/xG6nIKBSyy">pic.twitter.com/xG6nIKBSyy</a></p>&mdash; Takahiro Mitsuoka (@t_mitsuoka) <a href="https://twitter.com/t_mitsuoka/status/1194600655299567616?ref_src=twsrc%5Etfw">November 13, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

わかりにくいですが、ランニング後の僕の靴は湿度 90％超のようでした。
これで臭い靴とはおさらば！

## 振り返り

- シューキーパーに全部の装置を収める・貼り付けるのがとても難しかった。安定感を求めるなら、ちょうど良い容器を見つけるか 3D プリントする必要があると感じた。
- 環境を測定→制御→測定→…のループを実装出来てよかった。
- たまに電圧をかけても DC ファンが回らないことがある。ハードのトラブルシューティングの知識を身に着けたい。
- 小型化とか電池駆動できるようにしたい。

## 12/9の記事は…

@kohbis さんの「◯◯◯◯」です！