秋月電子で取り扱いの始まったCO2センサーMH-Z19CをArduino Nano Everyで使ってみました。
この記事はQiitaに投稿した記事を再掲したものです。
MH-Z19Cについて
MH-Z19CはNDIR方式のCO2センサで、電源電圧は5.0±0.1V、データの出力はPWMかUART(3.3Vで5.0Vにも対応)です。測定できる範囲はPWMを使うと公称値は400~2000ppm(実測では400~5000ppm)、UARTでは400~5000ppmです(CO2濃度は大気中で約400ppm、室内で約1000ppm、呼気で約30000ppmが目安)。ピンヘッダは2.54mmピッチですが、ピンヘッダとピンヘッダとの間隔が合わずユニバーサル基板に挿すのは難しいので注意してください。
ここでは5V駆動のArduino Nano Everyを使い、PWMとUART両方のデータを読んでみます。
ハードウェア
使ったもの
- MH-Z19C
- Arduino Nano Every
- 5V出力昇圧DCDCコンバーターとコンデンサー
Arduinoの5V OUTピンの電圧を測ると4.72-4.78Vでセンサーの電圧の範囲から外れていたので、一応4.9~5.1V出力(実測4.98V)のDCDCコンバーターと100μFのコンデンサーをつけました。
接続
MH-Z19C | |
---|---|
Vin | DCDCコンバーター ← Arduino 3.3V |
GND | Arduino GND |
PWM | Arduino A7 |
Hd | Arduino A6 |
Rx | Arduino TX1 |
Tx | Arduino RX1 |
ソフトウェア
MH-Z19Cの仕様
データシートはここで読めます。以下の画像はデータシートのものです。
UART
UARTでCO2濃度の読み取りと自動キャリブレーションの設定ができます。
PWM
データシートでは上のようになっていますが、Cppm=5*(パルス幅[ms]-1.2)とするとUARTと同じデータが読み込めました。Arduino Nano EveryのpulseInかセンサーのPWM出力のどちらかが原因だと思います。
手動キャリブレーションはHdピンを使うのでPWMでもできますが、自動キャリブレーションの設定はPWMだけではできません。デフォルトでは24時間ごとに自動キャリブレーションが行われます。(キャリブレーション時にどんな濃度でもそれを400ppmと認識するのではなく、24時間経ったあたりで400ppmに近い状態と判断するとキャリブレーションを行うようです)
プログラム
|
|
測定結果
Arduino IDEのシリアルプロッタを使って可視化しました。縦軸がCO2濃度[ppm],横軸が起動からの時間(1が100ms)です。
換気したとき
人が部屋に入ってきたとき
横軸1600ぐらいで部屋に入っています。直接息をふきかけたとき
息をふきかけた直後に値が上昇しました。