tukumoyuuki が 2024年10月30日18時03分55秒 に編集
コメント無し
本文の変更
**概要** ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 家の鍵をかけ忘れがないか鍵の状態を確認 鍵の傾きを検知して、スマホで確認できる
**概要図** ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
## 概要図 
**詳細** ------------------------------------------------------------------ ・9軸センサ(mpu-9250)とraspiを接続し、x軸、y軸、z軸の加速度を取得し、設定したセンサ値から鍵の状態を確認し、施錠ができていない場合LINE Notifyに通知が送られる。また、バッテリーの残量が少なくなった場合にもアプリに通知される。
## 詳細 ・9軸センサ(mpu-9250)とraspiを接続し、x軸、y軸、z軸の傾きを取得し、設定したセンサ値から鍵の状態を確認し、施錠ができていない場合LINE Notifyに通知が送られる。
**使用した物品**[](url) ・9軸センサ(mpu-9250) ・モバイルバッテリー ・rasberry pi ・スマホ(LINE Notify) ---------------------------------------------------------------------------------------------------------------- 動作確認 -
## 使用した物品 ・rasberry pi4 ・スマホ ・9軸センサ ## 動作確認
鍵が閉まっている時の傾き(例)↓  鍵が開いている時の傾き(例)と設定しておいた傾きと通知  LINENotifyへ通知↓ 
設定しておいた傾き 
```arduino:ソースコード import smbus import time import requests # LINE Notifyの設定 LINE_NOTIFY_TOKEN = '*********************************' LINE_NOTIFY_API = 'https://notify-api.line.me/api/notify' # I2C busのセットアップ bus = smbus.SMBus(1) MPU9250_ADDR = 0x68 # 通知送信用関数 def send_line_notify(message): headers = {'Authorization': f'Bearer {LINE_NOTIFY_TOKEN}'} data = {'message': message} response = requests.post(LINE_NOTIFY_API, headers=headers, data=data) if response.status_code == 200: print("通知が送信されました") else: print("通知の送信に失敗しました") # 初期化 def init_MPU9250(): bus.write_byte_data(MPU9250_ADDR, 0x6B, 0) # ウェイクアップ # 加速度センサーの値を読み込む def read_MPU9250(): acc_x = bus.read_byte_data(MPU9250_ADDR, 0x3B) # X軸加速度データ acc_y = bus.read_byte_data(MPU9250_ADDR, 0x3D) # Y軸加速度データ acc_z = bus.read_byte_data(MPU9250_ADDR, 0x3F) # Z軸加速度データ return acc_x, acc_y, acc_z # 閾値を設定 THRESHOLD_X = 7 # 適宜調整 THRESHOLD_Y = 195 # 適宜調整 THRESHOLD_Z = 240 # 適宜調整 # 加速度が設定した範囲内かを判定する関数 def check_acc_threshold(acc_x, acc_y, acc_z): if abs(acc_x - THRESHOLD_X) < 5 and abs(acc_y - THRESHOLD_Y) < 5 and abs(acc_z - THRESHOLD_Z) < 5: return True return False # MPU9250の初期化 init_MPU9250() # メインループ notified = False while True: acc_x, acc_y, acc_z = read_MPU9250() print(f"Acc: X={acc_x}, Y={acc_y}, Z={acc_z}") if check_acc_threshold(acc_x, acc_y, acc_z): if not notified: send_line_notify(f"鍵かけ忘れが検出されました: X={acc_x}, Y={acc_y}, Z={acc_z}") notified = True else: notified = False # 状態が変わったら通知をリセット time.sleep(1) ``` **まとめ**
この作品の使い勝手としては配線が鍵の金具までつなぐのに長くなってしまうという欠点がありますが、センサを用いて値を取得すれば手軽に動作させることができます。