monolithic kernel

UD-CO2S の温度と湿度を補正する

先日、UD-CO2S で CO2 濃度を可視化したのだが、実は UD-CO2S は温度と湿度も出力してくれる。といっても、値を見ると手持ちの他の温湿度計との乖離が大きくてよく分からず、当初は実用はできないのかなと思っていた。

ただ、調べてみるとセンサーの出力を補正してそれらしい値を得ることができるようだった。

これらを見るに、温度は単に 4.5 度高く、そのために温度によって決まる湿度もずれているようだ。水蒸気量は正しく測定できているようなので、補正前の飽和水蒸気量を使って水蒸気量を得た上で、補正後の温度における飽和水蒸気量で湿度を計算すればよい。

飽和水蒸気量は、温度を TT とすると E(T)=6.1078×107.5TT+237.3E(T)=6.1078×10^{\frac{7.5T}{T+237.3}} として近似できる。補正前の温度を T0T_0、補正後の温度を T04.5=T1T_0-4.5=T_1 とすると、補正後の湿度 H1H_1 は、補正前の湿度 H0H_0 を使って H1=H0×E(T0)E(T1)H_1=H_0×\frac{E(T_0)}{E(T_1)} となる。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 追記

説明の中で飽和水蒸気量の補正前と補正後が思い切り逆になっていたのを修正した。コードはもともと修正後の式に沿ったものだった。