少し前に久しぶりに電車に乗ったところ、外が寒くなったせいか明らかに以前よりも窓の開き具合が小さくなり、社内のエアコンも動かなくなっていました。そのため、車内の空気の流れも明らかに少なくなっていて、コロナの感染拡大防止という観点では環境が悪化したと感じていました。
そこで、以前から考えていたポータブル型のCO2モニタの作成に着手しました。先に作った1号機はESP32を搭載していて自力でWiFi接続してサーバにMQTTでデータをアップロードできて定点の連続観測向きではあるのですが、長さが154mmもあり、厚さも29mmと持ち運びに便利とは言い難いものでした。また、OLEDで表示ができるのですが、以前購入したTTGO T-Cameraに付属のOLEDは連続で表示し続けると点灯している画素が劣化して、表示にムラがでてきています。ですので、今回は表示は液晶を使用して表示し続けても問題がないように作りたいと思います。
ハードウェアの構成
ハードウェアは一品物ですので、以下の条件で考えました。
- 開発(ハードウェア、ソフトウェア)が楽であること
- 電池である程度の時間動作すること
- 小型でポケットに入る大きさになること
- センサーは実績のあるMH-Z19Bを使用すること
(これは2個目をAliExpressで購入してありましたが、これが実は・・・(;_;)) - できるだけ手持ちの部品で構成できること
これらの条件から、以下の構成としました。
- CPUボードはSeeeduino Xiaoを使用、開発環境は Arduino
これは秋月電子で買ったSeeeduino Xiaoをテストしてみたところ消費電流がかなり少なそうだと感じたためです。実際には、USBの消費電流を測るおもちゃが低消費電流域ではどうも値が小さめにでているようで、それで騙されていたっぽいです。ちゃんとテスターで測ると実際にはもっと大きめでした・・・。
液晶を接続する端子を確保した上で、MH-Z19Bを接続するUART端子、明るさを測定するCDSを接続するADCの端子とCDSへの電源供給をするGPIOを確保しても端子が足りて、小型であるのも理由です。 - 表示はジャンク箱に入っていたNokia5100液晶(昔Aitendoで買った残り)を使用
表示するのは基本的には測定値とトレンドグラフだけにしようと思ったので、解像度が高くないグラフィック液晶、ということで使用しました。当初はCDSを使って明るさを検知し、周囲が暗い場合には液晶のバックライトを点灯しようと思っていたのですが、CDSを取り付ける実装方法が思いつかなかったためにCDSは実装していません。 - 電源はAliExpressで購入したLiPoバッテリーの充電モジュールと5Vへの昇圧コンバータモジュールを使用
LiPoバッテリーについては以前購入したおもちゃのクアッドコプターの予備のLiPoバッテリー(500mAh)を使用することにしました。なお、5Vへの昇圧コンバータは別に必要なことを忘れていて、実装に苦労しました。
Seeeduino Xiaoの開発環境
Seeeduino Xiaoでの開発環境はSeeedStudioのこちらのページを参照して行いました。ボードマネージャで設定するURLもこのページの真ん中あたりに記述があります。
また、Arduinoで使用する端子の記述はインストールが済むと
~/.arduino15/packages/Seeeduino/hardware/samd/1.8.1/XIAO_m0/variant.h
にあります。
結線図
めんどくさいし、回路図を書くほどのものでもないので、いつも結線図で済ませてしまいます。Seeeduino Xiaoに接続する各モジュール配線表は以下のとおりです。
Seeeduino Xiao ピン番号 | Seeeduino Xiao 端子機能 | 接続先 |
1 | D0 | 未使用 |
2 | D1 | NOKIA LCD SCE(pin3) |
3 | D2 | NOKIA LCD RESET(pin4) |
4 | D3 | NOKIA LCD D/C(pin5) |
5 | D4/SDA | CDSセンサ端子(最終的には未使用) GNDとの間に4.7kΩを接続 |
6 | D5/SCL | CDSセンサ端子(最終的には未使用) GPIOとして電源供給 |
7 | D6/TX | MH-Z19B RX(pin5) |
8 | D7/RX | MH-Z19B TX(pin6) |
9 | D8/SCK | NOKIA LCD SCLK(pin7) |
10 | D9/MISO | NOKIA LCD LED+(pin8) |
11 | D10/MOSI | NOKIA LCD SDIN(pin6) |
12 | 3V3 | NOKIA LCD VCC(pin1) |
13 | GND | NOKIA LCD GND(pin2) MH-Z19B GND(pin3) DCDCコンバータGND |
14 | 5V | MH-Z19B Vin(pin4) DCDCコンバータ出力 |