UD-CO2S の温度と湿度を補正する
先日、UD-CO2S で CO2 濃度を可視化したのだが、実は UD-CO2S は温度と湿度も出力してくれる。といっても、値を見ると手持ちの他の温湿度計との乖離が大きくてよく分からず、当初は実用はできないのかなと思っていた。
ただ、調べてみるとセンサーの出力を補正してそれらしい値を得ることができるようだった。
UD-CO2Sのシリアル出力と専用アプリ出力の関係、温度はシリアル出力値から4.5引けば良くて、湿度はシリアル出力の値を4/3倍すればざっくりOKっぽい(下図)。 https://t.co/odgLaefctg pic.twitter.com/kFay2t64Wa
— さ く ら だ (@sakura_sakusaku) February 13, 2023
UD-CO2Sの温湿度補正
— リュナン (@rynan4818) February 18, 2023
温度補正 t1 = t0-4.5
補正前温度(t0)の飽和水蒸気圧
E(t)0 = 6.1078 * 10^(7.5 * t0 / (t0 + 237.3))
補正後温度(t1)の飽和水蒸気圧
E(t)1 = 6.1078 * 10^(7.5 * t1 / (t1 + 237.3))
補正前水蒸気分圧 = 補正前湿度 * E(t)0 / 100
補正後湿度 = 補正前水蒸気分圧 / E(t)1 * 100
これらを見るに、温度は単に 4.5 度高く、そのために温度によって決まる湿度もずれているようだ。水蒸気量は正しく測定できているようなので、補正前の飽和水蒸気量を使って水蒸気量を得た上で、補正後の温度における飽和水蒸気量で湿度を計算すればよい。
飽和水蒸気量は、温度を とすると として近似できる。補正前の温度を 、補正後の温度を とすると、補正後の湿度 は、補正前の湿度 を使って となる。chissoku
の出力を jq
で補正すると以下のようになる。
./chissoku /dev/ttyACM0 | jq -c '{"timestamp":.timestamp,"co2":.co2,"temperature":(.temperature - 4.5),"humidity":(.humidity * (pow(10; (7.5 * .temperature / (.temperature + 237.3)))) / (pow(10; (7.5 * (.temperature - 4.5) / ((.temperature - 4.5) + 237.3)))))}'
# 6.1078 は分母と分子の両方に出てくるので消せる (消した)。
これで他の温湿度計と近い値が取れるようになった。
2023-09-12 追記
説明の中で飽和水蒸気量の補正前と補正後が思い切り逆になっていたのを修正した。コードはもともと修正後の式に沿ったものだった。