いや~今年も寒いですね~。
我が家は寒い地方なので、特に身に沁みます。
どのくらい寒いかというと、朝、サンルームに干した洗濯物が端から凍っていくくらいです。(サンルームはリビングの外側にあり、屋根やガラスの壁に囲まれているものの、半分屋外みたいな感じです。)
流石に屋内はものが凍るほど寒くはありませんが、今より暖かくしたい場所があります。
それは、"リビングと風呂場を繋ぐ廊下"です。
"玄関の上り口"と"リビングと風呂場を繋ぐ廊下"が繋がっていることで、"リビングと風呂場を繋ぐ廊下"の暖房効果が低く、石油ファンヒーターを使っても暖まりにくいのです。
これでは入浴前後のヒートショックが心配です。
そこで考えたのが、"玄関の上り口"と"リビングと風呂場を繋ぐ廊下"の間にカーテンをつけることでした。
ニトリと100円ショップでシャワーカーテンと突っ張り棒を購入し、簡易的な間仕切りを設置しました。
ペラペラ生地のカーテンですが、なんとなく体感的に効果があるような気がします。
家族もいいかもと言っています。
しかし!数値で確認しないと気が済まないのが理系の性。
そこで、カーテンの外側(玄関側)の温度をRaspberry Piで定点観測することにしました。
用意した部品
- Raspberry Pi Zero W(GPIOハンマーヘッダーでGPIOピン(メス)を取り付け済み)
- 1-wire接続デジタル温度センサー(DS18B20)
- ミニブレッドボード
- ジャンパーコード
↓をクリックするとAmazonのDS18B20の商品ページが開きます。
組み立て
下記のように配線しました。
実際に回路を組んだ状態は下記になります。
回路図とRaspberry Piの向きが上下逆です。分かりづらくてすみません。
Raspberry Piの設定
まず、1-wireデバイスを有効にするため、下記のようにraspi-configを起動します。
sudo raspi-config
raspi-configが起動したら、「5 Interfacing Options」→「P7 1-Wire」と選択し、「Would you like the one-wire interface to be enabled?」と聞かれますので、「<はい>」を選びます。
「The one-wire interface is enabled」と画面に出るので、「<了解>」を押下します。
最初の画面に戻ったら「<Finish>」を選んで終了します。
次に、 /boot/config.txt の末尾に下記の行を追加します。
dtoverlay=w1-gpio-pullup,gpiopin=4
その後、下記のコマンドでRaspberry Piを再起動します。
sudo reboot
ケースに収める
100円ショップのセリアで購入したプラスチックの容器に回路を入れます。
下記のような感じです。
Raspberry Piの熱で測定する温度が高めにならないように、穴をあけて温度センサーを容器の外に出しています。
温度を測定する
1-wireデバイスのデバイスIDを調べる
1-wireデバイスには個別のIDが付いています。このIDで温度を取得できるファイルのパスが決まります。
下記のコマンドを実行すると、
ls /sys/bus/w1/devices/
下記のような出力が得られます。28-xxxxxxxxxxxxがIDです。
28-xxxxxxxxxxxx w1_bus_master1
温度を読み取る
それでは、温度センサーから温度を読み取ります。
IDが28-xxxxxxxxxxxxの場合、下記のコマンドを実行すると、
cat /sys/bus/w1/devices/28-xxxxxxxxxxxx/w1_slave
下記のような出力が得られます。t=21375 が温度です。21.375℃であることを意味しています。
56 01 4b 46 7f ff 0a 10 d1 : crc=d1 YES
56 01 4b 46 7f ff 0a 10 d1 t=21375
温度を表示するPythonのプログラムを作る
後で結果を集計できるように、温度だけを取り出して取得時刻と共に出力する下記のプログラムをPythonで書きました。
1分間隔で時刻と温度を出力します。
# coding: utf-8
from datetime import datetime
import re
import time
def main():
while 1:
t = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
f = open('/sys/bus/w1/devices/28-xxxxxxxxxxxx/w1_slave')
lines = f.readlines()
for line in lines:
tempstr = re.search(r"(t=)([0-9]+)", line)
if tempstr:
temp = float(tempstr.group(2)) / 1000
print(t + ',' + str(temp), flush=True)
f.close()
time.sleep(60)
return
if __name__ == '__main__':
main()
出力イメージは以下です。日付、時刻、温度をカンマ区切りで出力します。
2018/12/30,06:46:23,17.312
2018/12/30,06:47:24,17.312
2018/12/30,06:48:25,17.375
測定結果
10日ほど継続して1分おきの温度データを採取しましたが、 残念ながらほとんどカーテン製間仕切りの効果はありませんでした。。
カーテンの色が暖色なので、視覚的に暖かみを感じたのかもしれません。
今度は下記のような本格的な間仕切りを設置したいところです。結構高いので頑張ってお金を貯めたいと思います。
↓をクリックするとAmazonの商品ページが開きます。
(2020/01/05追記)
その後、間仕切りのカーテンを二重にしてみました。結構効果がありましたのでよろしければ↓の関連記事をご覧ください。