世界で一番、プログラマっぽいCO2モニタを作る

# はじめに

プログラマが愛してやまないOctocatをCO2モニタにしてみました。
カフェであなたがプログラマだとアピールできる、世界で最高のデバイスです！

左がVer.1で、足に埋め込んだ5LED(光ファイバー経由)の色と点灯でCO2を表示。
右がVer.2で、5x5 LEDマトリクスに数字でRound(CO2ppm / 100)を表示。
![CO2センサのVer1とVer2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141013/e377cea8-1840-307f-e4c7-d5eda2899b48.png)

Wifi経由でWebブラウザから２４時間の履歴が見れます。

![graph](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141013/dcb2fe48-b549-9ed2-ce07-6559e42ca92e.png)


最近、コロナ対策の換気の目安としてCO2センサが注目を浴びるようになってきました。
二酸化炭素は集中力にも影響するのでプログラマにも大事な問題ですね！

精度が高いと言われるNDIR式のCO2センサが安価（2480円）に買えるようになっており、
電子工作界隈で流行っているようです。

子供の夏休みのMicro:bit自由研究に触発されて
大人も自由研究してみることにしました。

写真で右側に写っているVer.2の回路図やArduinoのコードを公開します。




## 部品と回路図

- [Octocatフィギュア 3インチ (GitHub Shop)](https://thegithubshop.com/products/octocat-figurine)
- [M5Stack Atom Matrix　（スイッチサイエンス）](https://www.switch-science.com/catalog/6260/)
- [CO2センサ MH-Z19C (秋月電子)](https://akizukidenshi.com/catalog/g/gM-16142/)
- [5V出力昇圧DCDCコンバーター (秋月電子)](https://akizukidenshi.com/catalog/g/gK-13065/)
- 0.15V以上降圧する、ダイオード(手持ちの1S2076Aを使った）
    - MH-Z19Cの動作電圧が4.9V-5.1Vと狭いので、USBの電圧(5V±5%)だと外れうる
    - USB電圧をダイオードで降圧させてから、5V出力昇圧DCDCで5V出力する
- 電解コンデンサ 47uF
- セラミックコンデンサ 0.1uF
- [USB-C以外から５V給電したい場合はDCジャックなど](https://akizukidenshi.com/catalog/g/gC-06342/)


![回路図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141013/c6e90163-2156-1bcf-ac12-c629122e6076.png)

回路図



## ケース（Octocat）加工


![ケース加工](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141013/013f323b-2810-b9ff-a4bb-ce05208d7a68.png)

USB-Cでソフトの書き換えができるようにUSB-Cを外向きにして配置します。
ジャンパケーブルを４本、端子を９０度に曲げてM5Stackに差し込み、UVレジンで固めます。
ケーブルは熱収縮チューブでまとめて、Octocatの顎に開けた穴に通します。

CO2センサは、頭の後ろを少し切り抜いて、ピンソケットを埋め込み、装着します。
DCDCコンバーターは、頭の中に埋め込みます。
DCジャックは頭に差し込んで、内側からナットで固定します。

Octocatフィギュアはクラフトナイフで簡単に切り裂けます。
手術するような気持ちですが、バッサリといきましょう。




## ソフトウェア

ソースコードはこちらです。
https://github.com/komasayuki/co2-monitor

Arduino IDEは依存ライブラリなどが渡しにくいのでPlatformIOを使います。Macな人は

```shell
% brew install platformio
```
でインストールできます。Macじゃない人は[PlatformIO公式サイト](https://platformio.org/install)からどうぞ。


リポジトリからソースコードを持ってきたら
まず、自分のWiFi設定を書き込むためのファイルを作成します。

```shell
% cp ./src/config_CHANGE_ME_.h ./src/config.h
```

./src/config.hのSSIDとPASSWORDを自宅のWiFiの情報に書き換えてください。

```cpp
#define WIFI_SSID ("xxxxxx")
#define WIFI_PASSWORD ("yyyyyyyyyyyy")
```



あとはビルドして、M5Stack Atom Matrixに書き込みしましょう。

```shell
# build
% platformio run

# upload to M5Stack Atom Matrix
% platformio run -t upload
```


## CO2の読み方と使い方

LEDマトリクスに `Round(CO2ppm / 100)` の値が表示されます。
表示は4~19まで表示できます。
4-7が緑色
8-9が黄色
10-19が赤色
で表示されます。

2000ppmを超えている場合は真っ赤な四角が表示されます。

config.hで指定したmDNS名でブラウザからアクセスして、２４時間のCO2遷移を確認できます。
デフォルトでは [http://octocat.local](http://octocat.local) です。

MH-Z19Cはオートキャリブレーション機能を持っていますが、停止しています。
完成したら、CO2センサの手動キャリブレーションをしましょう。


外に持っていってCO2グラフを見ながら値が下がり切るのを待ちます。数分かかります。
[http://octocat.local/calibrate](http://octocat.local/calibrate)
をブラウザで一度開くと、その値を400ppmとしてセンサがキャリブレーションされます。

M5Stack Atom MatrixのLEDマトリクスはボタンにもなっています。
ボタンを押し続けるとWifiをON/OFFします。

気温表示はこのセンサーの隠し機能で、非常に不正確です。


## 最後に

Ver.1はNeoPixel LEDx5でモジュールを作って、Octocatの足に光ファイバーを通す涙ぐましい苦労をしたのに、発光が微妙でした・・・

![スクリーンショット 2021-08-31 14.13.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141013/0fd8323d-89c6-ba64-995f-54710115755f.png)


３インチのOctocatフィギュアは単三電池よりちょっと大きいぐらいです。
M5Stack Atom Matrixは小さくて、LEDマトリクス内蔵で、
USB-Cからソフトを書き換えできてとても使いやすいです。

有機EL液晶は２４時間稼働で使っていると焼けてくるかと思うので
LEDマトリクスなら長く使えることを期待しています。

![スクリーンショット 2021-08-31 14.14.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141013/93a1dfd4-649b-a1c3-d7a5-70fd62e7a135.png)

なお、Octocatは種族名で、Monalisaが個体名です。知ってましたか？