IoTで快適な生活環境を目指して 第一段階

球磨川Fallenです

前々回Raspberry Pi Zero W と IoT学習HATで色々と試し、前回でセンサーの組み合わせを紹介した。今回はセンサーを使ってもう少し凝ったものを作ってみる。

今回のお題

[センサーで温度を測って快適な室温を実現しよう]

今の気温がわかればこれからの暑い時期、クーラーを入れて快適に過ごして熱中症対策できれば

よいなということで今回作ってみた。

 

用意したもの

・Raspberry Pi Zero WH(以降ラズパイ)
・USBケーブル(OTG対応)と電源
・ADT7410(温度センサー)+接続ピン
・ジャンパーワイヤメス-メス 4本
・IoT学習用HAT
・ノートPC(Windows)
・はんだ+はんだごて
・途中で投げ出さず、やり続ける根気

手順

①ADT7410をピンとはんだ付けする

②ADT7410をラズパイ with IoT学習HATに繋ぐ

ADT74010をはんだ付けしたもの
ADT7410はんだ付け完了
ADT7410|ラズパイ

VDD<=>3.3V

SCL<=>SCL

SDA<=>SDA

GND<=>GND

ADT7410をIoT学習用HATと接続
ADT7410をIoT学習用HATと接続

③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℃に補助線を引いているのは、熱中症の警戒気温の目印の為である。

温度変化の様子その1

時間がたつとこうなる。

温度変化の様子その2

ラズパイとセンサーでこのように気温計測をした結果をグラフに表示できる。そこから更に発展させてIoT学習HATのLEDを点灯してもよし。端末へ通知を出させてもよし。各自色々試して快適に過ごせる工夫の一助にしてもらえれば幸いである。店頭でデモしてる時もあるので良ければ見に来てほしい。

Share

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Optionally add an image (JPEG only)