ラズベリーパイで除湿器自動運転

muninで部屋の温湿度がロギングできるようになりましたが、GPIOからSSR(ソリッドステートリレー)をON/OFFしてまずは除湿器をON/OFFできるようにしてみました。

ソリッドステートリレーは、秋月電子のソリッド・ステート・リレー(SSR)キット 25A(20A)タイプを使用します。このSSRにラズベリーパイのGPIOポートを直接接続することで、ラズベリーパイからSSRをON/OFFすることが可能です。

GPIOの詳しい話はraspberrypi/Raspberry PiでIO制御この辺を見て頂ければと思いますが、非常に簡単に制御できます。

なので、ある湿度以上になったら除湿器ON、OFFと言うのは、非常に簡単に出来てしまいます。

先回の記事のスクリプトを少し改造して、絶対湿度が13gを超えたら除湿器ON、それ以下ならOFFという風にしてみます。

#!/bin/zsh

USBRH="/usr/local/bin/usbrh"

#USBRHコマンドから温度と相対湿度を取得
values=(`$USBRH`)

#温度取得
t=$values[1]

#相対湿度取得
rh=$values[2]

#飽和水蒸気圧eを計算、Tetensの式
e=$((6.11*10**(7.5*$t/($t+237.3))))

#水蒸気量(g/m^3)を計算
ah=$((217*$e/($t+273.15)*$rh/100))

#不快指数 DIを計算
DI=$((0.81*$t+0.01*$rh*(0.99*$t-14.3)+46.3))

echo "絶対湿度    "$ah

#GPIOの設定
#17番ピンは除湿器
/usr/local/bin/gpio -g mode 17 out

#目標絶対湿度を計算
X=`echo "$ah > 13" | bc`

if [ $X -eq 1 ]; then
        $(/usr/local/bin/gpio -g write 17 1)
else
        $(/usr/local/bin/gpio -g write 17 0)
fi

後は、スクリプトが単体で動くことを確認し、CRONに登録します。私の場合、とりあえず10分に一度スクリプトが起動するようにしていますが、いい感じですね。

次は、こういった設定をWebから設定できるようにPHPでスクリプト書いてみよう…

 

遅ればせながらラズベリーパイ

現在自宅は一条工務店で契約も済み、これから着工という段階ですが、一条工務店は高断熱・高気密をアピールしています。

高断熱・高気密ですと、家全体が魔法瓶のような物になり、熱の出入りが少なくなるため、空調が効きやすくなり、温度がコントロールしやすいと考えられます。

そこで、この温度コントロールを自動化することを視野に入れて、遅ればせながらラズベリーパイで色々やってみようと思い、まずはラズベリーパイと高精度USB温湿度計を購入し、自室の温湿度をロギングしてみることにしました。

とりあえず購入後、ラズベリーパイ USB温湿度計 でググってmuninでグラフを書くところまで作りました。(こちらのサイトを参考にしました)

将来的には、ラズベリーパイのGPIOでソリッドステートリレーをコントロールし、除湿器や加湿器をON/OFFすることを考えると、不快指数や絶対湿度もロギングしたくなり、/usr/share/munin/plugins/usbrh  スクリプトを次のように改造することで、絶対湿度と不快指数をロギングすることにしました。

#!/bin/zsh
 #%# family=auto
 #%# capabilities=autoconf

USBRH="/usr/local/bin/usbrh"
available="yes"
case $1 in
config)
        echo "graph_title USBRH Tempreture/Humidity"
        echo "graph_category sensors"
        echo "graph_vlabel Temp(C) / Humid(%)"
        echo "graph_args -l 0 --base 1000"
        echo "humidity.label RelativeHumidity"
        echo "humidity.draw LINE2"
        echo "tempreture.label Tempreture"
        echo "tempreture.draw LINE2"
        echo "absolutehumidity.label AbsoluteHumidity"
        echo "absolutehumidity.draw LINE2"
        echo "discomfortindex.label DiscomfortIndex"
        echo "discomfortindex.draw LINE2"
        exit 0
        ;;
autoconf)
        if [ "$available" = "yes" ]; then
            echo "yes"
            exit 0
        else
            echo "no (daemon isn't running)"
            exit 1
        fi
        ;;
snmpconf|suggest)
        exit 0
        ;;
*)
        ;;
esac

# USBRHコマンドから温度と相対湿度を取得
values=(`$USBRH`)

#温度取得
t=$values[1]

#相対湿度取得
rh=$values[2]

#飽和水蒸気圧eを計算、Tetensの式
e=$((6.11*10**(7.5*$t/($t+237.3))))

#水蒸気量(g/m^3)を計算
a=$((217*$e/($t+273.15)*$rh/100))

#不快指数 DIを計算
DI=$((0.81*$t+0.01*$rh*(0.99*$t-14.3)+46.3))

echo "tempreture.value" $t
echo "humidity.value" $rh
echo "absolutehumidity.value" $a
echo "discomfortindex.value" $DI

注意点としては、このスクリプトはzshシェルスクリプトです。Bashでは、小数点と累乗が計算出来ないので、zshを使って下さい。なおちょっとハマったのですが、zshは配列の添字は1から始まります。

このようなスクリプトを書くことで、次のようなグラフが得られます。USBRH

 

 

 

 

 

 

 

で、こうやってロギングしていると、次のようなことが解りました。

まず、今の季節、冷房をつけずにほうっておくと、大体部屋の温度が32℃位になります。また、断熱性も気密性も悪そうな築20年のマンションなので、冷房を切るとあっという間に32℃に戻ります。冷房をつけると、設定温度まですぐに冷えてくれますが、その時に相対湿度も下がります。これは、冷房をかけるだけで除湿も同時に行われていることになります。何故かと言うと、部屋の空気がエアコン室内機の冷たい熱交換器に触れるとそこで結露し、結露水はドレンホースから室外機の方に排出されるからです。しかしながら、部屋の温度が設定温度に達すると、あまり冷房されないため、除湿もあまりされなくなるため、徐々に湿度が上がってきます。(グラフの赤丸部分)

ここで、部屋の中に除湿機を持ち込んで、除湿運転すると、部屋の温度は設定温度のままで段々と湿度が下がってくることが分かります。(グラフの青丸部分) 除湿器を運転すると、もちろんそれだけで除湿されるのも有りますが、除湿器を運転することで部屋の温度が上がり、結果的に冷房で除湿されるのもあると思います。

こういうデータを収集しながら、加湿器や除湿器、エアコンをコントロールできると、ちょっとスマートハウスっぽいですね。

他にも屋外の温湿度をモニターすれば、エアコンをつければいいのか、単に窓を開けて網戸にすればいいのかなども定量的に判断できますし、冬はインフルエンザ予防のために絶対湿度をある一定上に保つよう加湿する、夏はカビ予防のために絶対湿度をある程度下げるなど、色々応用できると思います。