nagata が 2024年10月30日16時43分05秒 に編集
コメント無し
本文の変更
**目次** ・概要 ・概要図 ・詳細 ・プログラム ・プログラムの実行結果 ・実物の写真 ・実行結果の評価 ・必要な物品 ・参考文献 **概要** ラズパイ4を使用し、センサーが検知した湿度と温度の値を使って不快指数を計算する。不快指数が75~80、80~85、85以上であったとき、LINE Notifyでスマートフォンに警告を送るシステム。 **概要図** ![キャプションを入力できます](https://camo.elchika.com/ce5964237f0c35c806203c6759555f15a2eedf6b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39333635326164312d613634352d343031302d383531372d3363363738323831623733382f61636530343161612d636662312d343961622d396565322d376438653539653037363336/) **詳細** BME280を使い、湿度と温度を検知する。検知した湿度と温度の値を使って不快指数を計算((0.81×気温+0.01×相対湿度(0.99×気温-14.3)+46.3)した後、判定する。判定した結果、不快指数が75~80、80~85、85以上であったとき、LINE Notifyを使い、スマートフォンに警告のメッセージと画像を送る。 【不快指数75~80】 ![キャプションを入力できます](https://camo.elchika.com/35817c68da5a488219e21f4ae5d4906ad7fa1918/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39333635326164312d613634352d343031302d383531372d3363363738323831623733382f66386334333061632d363530662d343832642d383337302d366638313861313932333463/) 【不快指数80~85】 ![キャプションを入力できます](https://camo.elchika.com/8d3c9cf9e04135c37b492160e20405fb9c9740ff/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39333635326164312d613634352d343031302d383531372d3363363738323831623733382f64653639623534632d313830632d346139382d626265642d626139316636346330316530/) 【不快指数85以上】 ![キャプションを入力できます](https://camo.elchika.com/3d066310a654e546c3e557a536bc972c1452650d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39333635326164312d613634352d343031302d383531372d3363363738323831623733382f61386337636231632d333262352d343332312d396662662d316238343632356239636461/) **プログラム** 使用言語:python ``` import RPi.GPIO as GPIO import smbus2 import bme280 import sys import requests import time import os i2c_bus = smbus2.SMBus(1) address = 0x76 calibration_parms = bme280.load_calibration_params(i2c_bus, address) i=0 x=0 y=0 def send_1(): token = '' api = 'https://notify-api.line.me/api/notify' headers = {'Authorization': f'Bearer {token}'} data = {"message" : message } files = {'imageFile':open('face_angry_man3.png','rb')} result = requests.post(api,headers=headers,data=data,files=files) def send_2(): token = '' api = 'https://notify-api.line.me/api/notify' headers = {'Authorization': f'Bearer {token}'} data = {"message" : message } files = {'imageFile':open('face_angry_man4.png','rb')} result = requests.post(api,headers=headers,data=data,files=files) def send_3(): token = '' api = 'https://notify-api.line.me/api/notify' headers = {'Authorization': f'Bearer {token}'} data = {"message" : message } files = {'imageFile':open('face_angry_man5.png','rb')} result = requests.post(api,headers=headers,data=data,files=files) while True: if i >= 1 : time.sleep(10) i = 0 print("stop") bme_data = bme280.sample(i2c_bus,address,calibration_parms) temperature = bme_data.temperature humidity = bme_data.humidity print("%d" % temperature) print("%d" % humidity) hot = 0.81*temperature+0.01*humidity*(0.99*temperature-14.3)+46.3 if hot >= 75 and hot < 80: x = temperature y = humidity message = "不快指数75以上80未満、半数以上の人が不快に感じる不快指数です" time.sleep(2) send_1() i += 1 if hot >= 80 and hot < 85: x = temperature y = humidity message = "不快指数80以上85未満、全員が不快に感じる不快指数です" time.sleep(2) send_2() i += 1 if hot >= 85 : x = temperature y = humidity message = "不快指数85以上、暑くてたまらないと感じる不快指数です" time.sleep(2) send_3() i += 1 print( x, y, hot) ``` **プログラムの実行結果** ![キャプションを入力できます](https://camo.elchika.com/716c57b320c8bbedb6e1f4584433177c2058872e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39333635326164312d613634352d343031302d383531372d3363363738323831623733382f63373839333933312d623762382d343331382d613732332d353631346635333664366566/) ![キャプションを入力できます](https://camo.elchika.com/c572114c18b2d56544ce78bc5a0264ecaf7ef4ed/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39333635326164312d613634352d343031302d383531372d3363363738323831623733382f33656430623663362d343463382d343332612d386162372d343931366137646532643935/) ![キャプションを入力できます](https://camo.elchika.com/bda9bfda206314a9446c2c8612c5dd271265c68c/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39333635326164312d613634352d343031302d383531372d3363363738323831623733382f62626135336464612d333165652d346265622d613265302d333531613237306633336237/) **実物の写真** ![キャプションを入力できます](https://camo.elchika.com/9cb40cdcfed74ce9701b8b6f124487dbec0150ae/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39333635326164312d613634352d343031302d383531372d3363363738323831623733382f34383533386565372d336362372d343134322d623166322d336432303833313866656562/)
【BME280】 ![キャプションを入力できます](https://camo.elchika.com/9d5122ceef3449f270bc112a5ec822cc03947ff4/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f39333635326164312d613634352d343031302d383531372d3363363738323831623733382f31613634623934622d396366652d343864612d396530642d346439333665363034646366/)
**実行結果の評価** 警告の画像の大きさが見やすいサイズで不快指数の段階ごとにわかりやすく送ることができていました。警告のメッセージが短い間隔で連続して送られないようにプログラムの41行目のtime.sleep(10)でプログラムを一定の時間停止させて次の警告までの間隔を長くしています。しかし、実際に生活で使用する場合time.sleep(10)ではまだ次の警告までの間隔が短いと考えました。このことから、自分の生活に合った間隔になるようにプログラムを調整する必要があることが課題です。 **必要な物品** • Raspberry Pi 4 • BME280 **参考文献** ・【仕事の自動化】PythonでLINEを操作。メッセージや画像を自分へ送信しよう!【初心者の方もわかりやすいように解説】 https://kino-code.com/pythonline/ ・湿度・気圧センサーBME280 の使い方 https://s-design-tokyo.com/use-bme280/ ・不快指数の計算式とは?早見表もご紹介 https://kenchiku-setsubi.biz/fukaishisu/ ・怒る男性のイラスト https://www.irasutoya.com/2017/02/5.html ・スマートフォン・スマホのイラスト https://www.irasutoya.com/2014/11/blog-post_362.html ・シングルボードコンピュータのイラスト https://www.irasutoya.com/2016/05/blog-post_414.html ・不快指数 https://ja.wikipedia.org/wiki/%E4%B8%8D%E5%BF%AB%E6%8C%87%E6%95%B0