球磨川Fallenです
前々回Raspberry Pi Zero W と IoT学習HATで色々と試し、前回でセンサーの組み合わせを紹介した。今回はセンサーを使ってもう少し凝ったものを作ってみる。
今回のお題
[センサーで温度を測って快適な室温を実現しよう]
今の気温がわかればこれからの暑い時期、クーラーを入れて快適に過ごして熱中症対策できれば
よいなということで今回作ってみた。
用意したもの
・Raspberry Pi Zero WH(以降ラズパイ) ・USBケーブル(OTG対応)と電源 ・ADT7410(温度センサー)+接続ピン ・ジャンパーワイヤメス-メス 4本 |
・IoT学習用HAT ・ノートPC(Windows) ・はんだ+はんだごて ・途中で投げ出さず、やり続ける根気 |
手順
①ADT7410をピンとはんだ付けする
②ADT7410をラズパイ with IoT学習HATに繋ぐ
|
ADT7410|ラズパイ
VDD<=>3.3V SCL<=>SCL SDA<=>SDA GND<=>GND |
|
③USBケーブルでノートPCとラズパイを繋ぐ。
④ADT7410で温度を計測できるようにする。(GitHubにて公開されているコードを使用しようとしたが、もっと簡単にできるqiitaに掛かれているコードを流用させていただいた。)
⑤これで温度計測が可能となったので、更に手を加えてリアルタイムグラフにしてみる。
⑥リアルタイムグラフに必要なライブラリをインストール後、試行錯誤しながら修正を実施
※追加したのはMatplotlibとjapanize-matplotlib(日本語表記対応の為)
ライブラリのインストール手順(python環境)
Matplotlibは以下のコマンドでインストール可能
pip install matplotlib
japanize-matplotlibも同様に以下のコマンドでインストール可能
pip install japanize-matplotlib
横軸は時間(時分) 縦軸はセンサーで計測した気温にしている。
⑦数回失敗したが根気よくプログラムを変更した。
<途中の失敗事例>
・途中ケーブル接続をミスして危うくセンサーを破壊しそうになった。
・意図したようにグラフ描画ができない事に加え、日本語が文字化けした。
<そこでjapanize-matplotlibの存在を知り、急遽インストール>
出来上がったソースコードが以下になる
#!/usr/bin/env python # -*- coding: utf-8 -*- import time import smbus import datetime from matplotlib import pyplot as plt from matplotlib import animation import japanize_matplotlib x = [] y = [] TEMP_AIR = 30.0 def _update(_self, record_time, temp): plt.cla() x.append(timer()) y.append(measure()) # plot area plt.ylim([0,50]) plt.xticks(rotation = 45, fontsize=5) plt.plot(x, y, marker="o", markersize=3, label='温度') plt.hlines(30, 0, len(x), "red", linestyles='solid') plt.legend() plt.title("今の温度") plt.xlabel("時間") plt.ylabel("温度") if temp >= TEMP_AIR: print('Turn on the cooler') def main(): fig = plt.figure(figsize=(10, 6)) record_time = timer() temp = measure() # Update Inetrval 5min params = { 'fig': fig, 'func': _update, 'fargs': (record_time, temp), 'interval': 300000, } anime = animation.FuncAnimation(**params) plt.show() def measure(): bus = smbus.SMBus(1) address_adt7410 = 0x48 register_adt7410 = 0x00 configration_adt7410 = 0x03 # stabilization time time.sleep(10) bus.write_word_data(address_adt7410, configration_adt7410, 0x00) word_data = bus.read_word_data(address_adt7410, register_adt7410) data = (word_data & 0xff00) >> 8 | (word_data & 0xff) << 8 data = data >> 3 temp = data/16. return(temp) def timer(): record_datetime = datetime.datetime.now() record_time = record_datetime.strftime('%H:%M') return(record_time) if __name__ == '__main__': try: main() except KeyboardInterrupt: exit()
こんな感じでグラフに補助線を引き、温度を1分刻みで表示している。
赤い補助線で30℃に補助線を引いているのは、熱中症の警戒気温の目印の為である。
時間がたつとこうなる。
ラズパイとセンサーでこのように気温計測をした結果をグラフに表示できる。そこから更に発展させてIoT学習HATのLEDを点灯してもよし。端末へ通知を出させてもよし。各自色々試して快適に過ごせる工夫の一助にしてもらえれば幸いである。店頭でデモしてる時もあるので良ければ見に来てほしい。