CO2 計測

ピンチヒッター経営者として 50 年暮らした長野県塩尻市から 東京の自宅に戻れることになったものの、 長年無人だった家は崩壊寸前で人が住める状態ではなく、 後継者のはずの出向社長への引継期間の一年間を活かして、 生涯で始めて自分自身の方針による建て替えを決断しました。

塩尻時代に暮らした家は夜間の寝室に雪が舞い込む昔ながらの構造から、 夏は暑く冬は寒い2x4構造の家まで、 すべて自然換気か、キッチン、バス、 トイレの換気扇を必要な時だけ動かすという、いいかげんな第3種換気で、 CO2 濃度を調べても外気と変わらない 400 ppm 程度でしたし、 自分で企画した職場の新社屋も、 CO2 管理が必要なのは床面積の割に人が多い一部の事務室だけで、 簡単な CO2 測定器で 1000 ppm を超えたら警報を出す程度で間に合いました。

つまり、これまで四度の引越しで暮らした家々は、 低断熱住宅故に CO2 管理など考えなくてもよかったわけですが、 高断熱第1種機械換気の住宅だと考えないわけにゆきません。 ただ、高精度の測定(注1)自体が簡単ではありませんし、 コンピュータで扱える製品が極めて少ないのが現状です。

幸い 気象庁のデータとか 東京都のデータを見ると、 外気については 400 ppm から大きく離れることはないようで、 常識的管理基準となる 1,000 ppm には余裕がありますから、 高い精度は要求しないことにして、 安価かつコンピュータでデータを取り込める製品を探してみると、

いずれも Windows アプリケーションしか用意していませんから、 通信プロトコルが公開されているか、 なければ自分で調べることになりますが、 CO2Mini の場合は USB Communication Protocol for CO2mini というシンプルな USB プロトコルが公開されていて、 必要なら USB パケットを解析すれば何とかなるだろうと、 試してみることにしました。

日本では 「(株)カスタム」が OEM 品を販売していて、購入は「モノタロウ」の 温度センサー付属CO2モニター が良いと思います。

ところがテストプログラムを書いて現物を動かしてみると、 得られたデータは公開プロトコルほど簡単ではありません。 単純な ASCII 文字データではなくて、 何らかの方法で encode されています。 こうなると、謎解きが必要で、 最悪 Windows アプリケーションのバイナリを解析ということになりますが、 既にこれをやった人が居て Reverse-Engineering a low-cost USB CO2 minitor が見つかりました。Linux の hidraw device を活かした無駄のない解析をしています。

これで仕事がずいぶん楽になって、あとは FreeBSD でどう扱うかですが、 FreeBSD-8.4, 10.3 の場合は HID device として /dev/uhidN (N = 0, 1, 2, ..) が割り当てられますので、 libusbhid(3) を使うことになりますが、 この設計が少し悪くて、 /dev/uhidN の N と HID device の VendorID, Product ID を対応付ける方法がありません。 そのための ioctl() が device driver に用意されていないのです。

運良く /dev/uhid0 しかない場合は簡単ですが、 /dev/uhid0, /dev/uhid1, .. と複数の HID device が存在するときは 困ってしまいます。 例えば手元の事例では Audinst HUD-mx1 なども /dev/uhidN に入れられます。

仕方ないので、/dev/uhid0 しかない状況でプログラムを書いて、 Audinst HUD-mx1 だけは除外するように確実とは言えない苦し紛れのコードを追加して、 複数の CO2mini を扱えるようにしてみましたが、 Linux の場合は VendorID, Product ID を指定できる hid_open() というライブラリ関数が用意されていますので、 遥かに簡単になります。

これで、実際に家屋のあちこちの CO2 濃度を測定してみると、 高気密省エネ住宅の住人は自衛目的の CO2 管理が不可欠といったことに気づきます。

  ソースコード (FreeBSD)
  ソースコード (Linux)

なお、CO2-mini は USB 接続ですから離れた場所に設置することは考えていませんが、 USB-RP40 を使うと 40 m までは延長できますので、 なかなか便利です。

複数の CO2-mini を使う場合、USB hub が必要になりますが、 再起動時に認識順序が一定してくれないと測定場所の特定ができません。 いくつか試したものの中では、 ANKER 7 PORT USB-3.0 HUB (B006TT91TW) という製品が 表示されたポート順に認識できて、 これで 4 ヶ所の測定ができています。

注1 - CO2 センサの校正

一般に CO2 濃度測定に使われるのはNDIR (Non Dispersive Infrared Gas Anaryzer 非分散型赤外線吸収法)センサですが、 赤外光源として使われる小型白熱電球の光強度の変化などによる 長期間使用時のドリフト対策として定期的校正が必要になります。ただ、 正確な校正を行うには窒素ガス(CO2 0 ppm 標準)と 標準気体(CO2 400 ppm の新鮮な空気など) が必要で、かなりの費用と手間がかかります。

多くの簡易測定器で使われているのは ABC Calibration(Automatic Baseline Calibration) と呼ばれる方法で、 週に一度は無人で CO2 発生源がなく、 測定場所の CO2 濃度が外気と同じになるだろうという期待に基づいたものです。 つまり、8 日間といった区間に於ける CO2 濃度の最低値(base line)を 400 ppm に校正してしまいます。 しかし、住宅、オフィスなどの施設は常時居住者が居て、 CO2 の最低レベルは 600 〜 800 ppm になりますから、 これを使うと実際の濃度より 200 〜 400 ppm 低い測定値が得られ、 大きな誤差が出ます。

そのため、 CO2mini を含めて、たいていの測定器では ABC Calibration をしないように設定できますから、 住宅内で使う場合はこの設定にしなければならないわけですが、 中には NetAtmo など、 この ABC 校正を止める方法がないものもあって、 住宅で使うには無理で、 何故これが住宅用として販売されるのか理解に苦しみます。

NDIR 最大の誤差要因となる光源のドリフト対策としては、 単一光源を二つのビームに分けて一方を強度測定のみ、 他方を NDIR 測定に使う dual beam 方式の製品があって、 最近は比較的安価なものも出て来ました。

平林 浩一, 2017-01-08