CO2 計測 - USB

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

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

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

幸い 気象庁のデータとか 東京都のデータを見ると、 外気については 400 ppm から大きく離れることはない(注2)ようで、 常識的管理基準となる 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 が必要になりますが、 再起動時に認識順序が一定してくれないと測定場所の特定ができません。 いくつか試したものの中では、 StarTeck.com ST7300USB3B (7 Port Super-Speed USB 3.0 HUB) という製品が表示されたポート順に認識できて、 これで 7 ヶ所の測定ができています。

住人の居場所すべての CO2 濃度を 24 時間連続測定してみると、 高断熱第1種機械換気の住宅の換気設計の難しさが実によくわかります。 昔の住宅と違って局所換気ができず、 家屋全体の総換気量の変更が困難で、しかも、 部屋毎の換気量配分調整が極めて難しいのです。

現時点で実用化されている住宅構造では、 人が長時間居る場所には CO2 濃度計を設置するべきだと思います。 停電時にも必要な機能ですから、 停電時はバッテリ稼働ができる機種がよいでしょう。

1 年間暮らしてみた結論としては、住人の すべての居場所に CO2 濃度センサを設置し、 コンピュータ制御可能な給・排気ダクトのダンパーや給・排気口シャッタを 使う on demand 制御を採用するしかないと思います。 日本は為政者から見ると大成功した思考力を奪う文部省教育により、 創造力を必要とするコンピュータ技術を活かす発想が遅れているのが大きな欠陥です。

注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 方式の製品があって、 最近は比較的安価なものも出て来ました。

注2 - 外気 CO2 変動と気象条件

ところが、計測システムを整備して観測を始めてみると、 400 ppm を切る程度から 700 ppm 程度まで、 大きな変動があることがわかりました。 建築法規や過去の設計ルールが役にたたないほどの値ですから、 1000 ppm 以下を目標とする屋内換気は極めて難しくなります。

観測場所は小田急線豪徳寺駅から 3 分程度の住宅地で、 近くには多量の自動車が通る幹線道路はありません。 夕方から夜間かけて上昇し、 深夜から明け方にかけて下降するパターンが多く、 それにベースラインの変動が加わるのですが、 当初は原因がわかりませんでした。

その後 2 年間の気象観測データにより、CO2 濃度ベースラインの変動が 大気の流れに起因する地域全体の換気によるものであることがわかりました。 風速が大きければ外気 CO2 濃度が下がるのです。 現在の建築法規や設計基準は外気 CO2 濃度 400 ppm を前提としていますから、 風が弱い大都市では換気不足が常態化することを意味します。

平林 浩一, 2017-01-08