コンピューター好きのブログ

主にコンピューター・ラズパイと電子工作・オーディオ関連の記事を書いています。

Raspberry Piに1-wireの温度センサーを接続して室内の温度を定点観測してみました

いや~今年も寒いですね~。

我が家は寒い地方なので、特に身に沁みます。

どのくらい寒いかというと、朝、サンルームに干した洗濯物が端から凍っていくくらいです。(サンルームはリビングの外側にあり、屋根やガラスの壁に囲まれているものの、半分屋外みたいな感じです。)

 

流石に屋内はものが凍るほど寒くはありませんが、今より暖かくしたい場所があります。

 

それは、"リビングと風呂場を繋ぐ廊下"です。

"玄関の上り口"と"リビングと風呂場を繋ぐ廊下"が繋がっていることで、"リビングと風呂場を繋ぐ廊下"の暖房効果が低く、石油ファンヒーターを使っても暖まりにくいのです。

これでは入浴前後のヒートショックが心配です。

 

そこで考えたのが、"玄関の上り口"と"リビングと風呂場を繋ぐ廊下"の間にカーテンをつけることでした。

ニトリと100円ショップでシャワーカーテンと突っ張り棒を購入し、簡易的な間仕切りを設置しました。

 

ペラペラ生地のカーテンですが、なんとなく体感的に効果があるような気がします。

家族もいいかもと言っています。

しかし!数値で確認しないと気が済まないのが理系の性。

 

そこで、カーテンの外側(玄関側)の温度をRaspberry Piで定点観測することにしました。

 

用意した部品

  • Raspberry Pi Zero W(GPIOハンマーヘッダーでGPIOピン(メス)を取り付け済み)
  • 1-wire接続デジタル温度センサー(DS18B20)
  • ミニブレッドボード
  • ジャンパーコード

 

↓をクリックするとAmazonのDS18B20の商品ページが開きます。 

組み立て

 下記のように配線しました。

1-wireデジタル温度センサーを使った回路

1-wireデジタル温度センサーを使った回路

 

実際に回路を組んだ状態は下記になります。

回路図とRaspberry Piの向きが上下逆です。分かりづらくてすみません。

1-wireデジタル温度センサーを使った回路の写真

1-wireデジタル温度センサーを使った回路の写真

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の熱で測定する温度が高めにならないように、穴をあけて温度センサーを容器の外に出しています。

100円ショップの容器に回路を入れたところ

100円ショップの容器に回路を入れたところ

温度を測定する

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追記)

その後、間仕切りのカーテンを二重にしてみました。結構効果がありましたのでよろしければ↓の関連記事をご覧ください。

www.toomath.net

 

(c) 2018 toomath