換気で集中力アップ！お手軽IoTでCO2濃度を見える化

おはこんばんちは！YAMAPのフロントエンドエンジニアのcherenkovです。

これは YAMAP エンジニア Advent Calendar 2022 6日目の記事です。

https://qiita.com/advent-calendar/2022/yamap-engineers

## はじめに
突然ですが、みなさん換気していますか？
現在 私はフルリモートで仕事をしています。
ある日、PC作業中になんだかぼんやりすることがありました。
もしかして室内の換気不足で二酸化炭素濃度が上がっているのが原因なのでは？とふと気になりました。
そこで市販されているCO2センサーを買うかどうか、いろいろ調べてみましたが安物はどれも精度に不安があります。

https://www.amazon.co.jp/co2%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC/s?k=co2%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC&linkCode=ll2&tag=fb0-22&linkId=69d4761d9d1721847efc5c42ada8534c&language=ja_JP&ref_=as_li_ss_tl

安物買いの銭失いは絶対にしたくありません。
一方、値段が高いものでも、それが適正価格なのか素人にはわかりませんでした。
測定したデータをクラウドと連携する機能もほしいです。
もうそうなると自分でセンサーを選んで好きなマイコンでシステムを組んだほうが面白そうです。
面白ければ多少の出費は気になりません。

## CO2センサー選定
ハンダ付けするのもめんどいので楽ちん接続のGroveシステムに対応したちょうどいいセンサーを発見しました。
`Grove - CO2 & Temperature & Humidity Sensor - SCD41`

https://jp.seeedstudio.com/Grove-CO2-Temperature-Humidity-Sensor-SCD41-p-5025.html

SCD30（NDIR方式）を使った製品もありますが、SCD41の方が新しいモデルで測定技術がPhotoacoustic(光音響)方式が高精度で小型化されています。詳しくはぐぐってください。
入手は Digi-Keyで個人輸入しました。6000円以上で送料無料でAmazonと同じ感覚で使えました。スイッチサイエンスはずっと売り切れでした。

https://www.digikey.jp/short/t0h0jrh5
7月時点で7,718円


## マイコンはWio Node
むかし秋葉原で買ったまま寝かせていたやつを使います。（今だったらディスプレイが付いているM5Stackもいいと思います）
Wio NodeはGroveシステムに対応しており、GroveシリーズのセンサーとUSB電源を接続するだけで配線完了です。
ESP-WROOM-02でWiFi 802.11b/g/nに接続できてスマホのアプリでセットアップします。
センサーの値はseeed社が管理するサーバに一旦送られてインターネット経由のREST APIで取得できます。

## 配線
![IMG_4030.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3604/4b121705-7e68-bd39-71ff-f1ff1293f1a8.jpeg)




|元リリスクのrisanoちゃんでサイズ感を伝えています|
|--|
|![risano.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3604/e6cd9cf7-ffbb-50ca-063c-fe56ca7b28f9.jpeg)|





## seeedアカウント作成
注意点としてWio Nodeは接続するサーバーごとに対応センサーが別管理されています。
私が7月に触ったときはまだWio側がSCD41未対応で、TwitterでつぶやいていたらSeeedの中の人である松岡さんがJPサーバにSCD41を追加してくれました。感謝。
センサーの対応リクエストはこちらのIssueに書いてねと案内されました。
https://github.com/SeeedJP/Wio_Link/issues

日本サーバーでアカウントを作るやり方はこちら↓

https://lab.seeed.co.jp/entry/2022/01/25/120000


## セットアップ
最初にスマホのWio Linkアプリを使ってWio NodeをWiFi接続、センサー割り当て、アップロードするサーバを設定などをします。
このWiFi接続が一番苦労しました。何度繰り返してもタイミングが悪いのかアプリからの連携で失敗することがあります。2時間くらい試行錯誤してもダメなときはダメで諦めて数週間放置したこともあります。


|接続するセンサーを選びます|REST API|
|--|--|
| ![IMG_4039.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3604/76f417aa-de90-8e90-f807-519dfa7830fc.png) | ![IMG_4041.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3604/eecbcc79-0be1-28c7-0565-c4e8b78e1985.jpeg) |

無事に接続が済むとアプリにREST APIのURLが表示されているので、ブラウザでアクセスするとJSON形式で測定されたCO2濃度と温度と湿度を取得できます。
たったこれだけでネットさえ繋がれば世界中どこからでも、うちの部屋の二酸化炭素濃度を知ることができるようになりました。めでたいですね。


## クラウド連携
センサーで取得した値をクラウドに保存していきます。
保存先はGoogle スプレッドシートにします。Googleアカウントさえあれば無料で使えて便利です。
プロトタイピングに最適です。
スプレッドシートを新規作成したら Apps Script いわゆるGASでスクリプトを組みます。
手動でヘッダー行だけ定義して２行目にどんどん計測した値を追加していきます。

```js
function writeData() {
  const requestUrl = 'https://wiolink.seeed.co.jp/v1/node/GroveCo2SCD41I2C0/measurement?access_token=xxxxxxxxxxxxxxxxxx';
  try {
    const response = UrlFetchApp.fetch(requestUrl);
    if (response.getResponseCode() === 200) {
      const ss = SpreadsheetApp.getActiveSpreadsheet();
      const sheet = ss.getSheets()[0];
      const {concentration, temperature, humidity} = JSON.parse(response.toString());
      const data = [[new Date(), concentration, temperature, humidity]];
      const dataLength = data.length;
      const colLength = data[0].length;
      // 2行目に追加していく
      sheet.insertRows(2, dataLength);
      sheet.getRange(2, 1, dataLength, colLength).setValues(data);
    }
  } catch (error) {
  }
}
```

こんな感じで蓄積されていきます。
![スクリーンショット 2022-12-05 23.48.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3604/d73754e9-afd5-2780-2852-5a70381d1164.png)


## 二酸化炭素濃度とは
建築基準法などでは室内は1,000ppm以下にしたいですね、1,500ppm位まではまあいいよくらいの基準が設定されています。外は400ppm。
室内では、ざっくり1,000ppm以下が新鮮な空気の目安だと覚えておけばよさそうです。わかりやすい。

我が家の賃貸マンションには24時間換気システムとされるものが一応あり、ベランダ側に外気口があって浴室に24時間回している換気扇、それと台所の換気扇があります。

## モニタリングしてみよう

換気の効果をわかりやすくするために日中実験しました。下の図は２４時間の私の部屋の測定値をグラフ化したものです。ここで登場する換気扇は台所の換気扇です。
暖房は運転していません。室内はほぼ16℃に保たれています。上下ダウンウェアを着て過ごしています…
1. 12月で夜は寒いので就寝中は窓を閉めて換気扇を止めていました。朝になり目覚ましタイマーで起床して1,200ppmからじわじわ上がって最高が1,330ppmでした。そこから仕事のために起き上がって窓を開け換気扇ONしました。9:56 換気開始。
2. 700ppmまで下がりました。いつも換気して過ごしているときは大体このあたりが底です。11:22 換気停止
3. どこまで上がるか締め切った状態でPC作業をしていました。16:48 1,647ppmまで上がっていました。さすがに新鮮な空気を吸いたくなったのでここで換気開始。20分位で1,000ppm以下になりました。

温度と湿度のスパイクが気になります。センサー設置場所がブルレコの近くなのでもしかしたら排熱を拾ってノイズになっているかもしれません。（録画予約などで定期的にオンオフを繰り返している）
![スクリーンショット 2022-12-05 22.07.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3604/40fdf36a-37c1-afac-b240-51d6a3d9cdf3.png)


## まとめ
- CO2センサーとWio Nodeで二酸化炭素濃度を可視化してクラウド連携することができた。IoTでDX。
- 換気をすればCO2濃度が下がって、換気をしないとCO2濃度が上がることがわかった（進次郎）
- 換気することで集中力がアップしたかどうかは何とも言えないが、常に換気をして新鮮な空気を吸うぞという意識付けはできた。


## 採用情報
現在YAMAPでは電子工作・IoT・Idol・フロントエンド・登山・福岡など好きなエンジニアを積極採用中です！
リファラル採用も行っているので興味があればプロフィールからTwitterにでもお気軽にお声がけください。

https://corp.yamap.co.jp/recruit