経緯
三密のうち、「密閉」はCO2濃度で測れば良いらしい。
CO2センサーを複数(MH-Z19CとSCD41)買ってみた。自分で試している暇がないのと、丁度学生に何かIoT関連の課題をさせないといけないのがあって、CO2センサーをESP32で使わせてみた。
学生がネットで調べて、接続して、コンソールに数字が出るようになったけど、何故か5000ppmとしか表示されない。温度も表示しているが、そっちはそれなりの値になっているので、センサーは接続されていると思われる。
別の学生にもやらせてみたが、結果は同じ。センサーは、同じ種類を2個ずつ買ったので、交換させて試したけど結果が同じ。しょうがないので、自分で確認してみた。
調査
とりあえず今回は MH-Z19C で確認する。
下調べ
5000ppmになってしまうというエラーを探すと、あまり多くはないが、少し見つかる。
そこに載っている対策としては
- キャリブレーションしろ
- 電源電圧をちゃんと5Vにしろ
と書いてある。
キャリブレーションは、スペック表には書いてあるけど、ネットでMH-Z19Cの使い方を見ると、キャリブレーションの方法は、書いてあったりなかったり。これだと、キャリブレーションしないで使ってみるのは仕方ない。学生の発表資料を見る限り、誰もキャリブレーションはしていないように見える。
電源は、学生の資料を見ると、3.3Vに接続している。どうして5Vに接続しないのかと思ったら、使っているESP32には5Vのピンがなかった。別に入手したESP32には5Vピンがあったけど、幅の広いESP32で、手元にあるブレッドボードだとうまく挿さらない。(物理的には挿さるけど、端の穴なので、ピンが挿せない。)
しょうがないので、とりあえず3.3Vで試す。
確認
学生が使ったのと同じライブラリを使う。
https://github.com/nara256/mhz19_uart
動かしてみると、確かに 5000ppm になる。
上のライブラリの example の下に、キャリブレーションのサンプルがあったので、それを動かしてみた。30分かかるけど、結果 400ppm とか 500ppm の値になった。
(本当は、外気に入れ替えた状態にする必要があるけど、とりあえず動作確認なので気にせずそのままでやった。)
一度電源を切ってから、再実行してもほぼほぼ 400ppm から 500ppm の値になる。電源を切ってもデバイスが覚えているみたいだ。
試しに、もう一つ残っていたデバイスで確認すると、5000ppmになる。多分キャリブレーションすれば良いのだと思う。念のためにこっちはキャリブレーションしないままで残しておく。
SCD41の方は未確認だが、キャリブレーションコマンドはあると書いてある。
結論
CO2センサーを使う時は、(あるいは、値がおかしかったら、)必ずキャリブレーションしてから使う。
電源電圧は、3.3Vでも動くけど、仕様書通りの5Vが良いと思う(未確認)。