chumuchomu が 2024年10月23日16時01分13秒 に編集
コメント無し
本文の変更
# 概要 ・置き配の荷物をLINENotifyを利用し確認出来るシステム ・荷物が置かれた時と取られた時に画像送信される。 # アイデア詳細 今回の制作したシステムの動作は以下の通り ・超音波距離センサーを利用して荷物が置かれた時と取られた時に画像とメッセージをLINENotifyに送信する ・誤動作防止のために、荷物が置かれた時はセンサーが一定時間反応した場合に画像送信する。 ・盗難へ対策として、カメラを荷物と人が映るように設置することで、 荷物が本人以外が取った際にLINENotifyで人物を確認出来る。 # 設置イメージ ![キャプションを入力できます](https://camo.elchika.com/e0af82449083f82cbdf4c997c8074e23f8594b36/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32333333626430612d626361382d346435302d613531332d3939326461346261306234382f38333233383361662d383065352d346534302d623339632d383164383634653339343266/) ![キャプションを入力できます](https://camo.elchika.com/8d41f251064ff6c1895f8bd7cbb83301a918cae5/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32333333626430612d626361382d346435302d613531332d3939326461346261306234382f34663733323164352d623535382d346433362d616466662d353964313165633637616566/) ![キャプションを入力できます](https://camo.elchika.com/be49e65961d407612b98580d799e8d204383f43a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32333333626430612d626361382d346435302d613531332d3939326461346261306234382f33363930366462612d646665662d343539322d386333342d313232333738303238356332/) # 使用パーツ 今回の制作に使用したものは以下の通り ・Raspberry Pi 4 ・Raspberry Pi Camera ・超音波距離センサー(hc-sr04) # 実際の配置イメージ 配置イメージ ![キャプションを入力できます](https://camo.elchika.com/3647f6b960a698c60783bbe810d4a35afc7baa92/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32333333626430612d626361382d346435302d613531332d3939326461346261306234382f62313533363339632d363839342d343936662d393664352d626332366366366462626231/) センサに荷物が反応したとき ![キャプションを入力できます](https://camo.elchika.com/fd00136040bad94c9bbd238d0a075e0daf257185/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32333333626430612d626361382d346435302d613531332d3939326461346261306234382f33623161303966352d356233632d343662642d396135632d323939343033653563373165/) 荷物が取られた時 ![キャプションを入力できます](https://camo.elchika.com/16c69d8068222bae67cd82cf3eed6f5a6ea7cf40/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32333333626430612d626361382d346435302d613531332d3939326461346261306234382f63323938313861392d633661352d343531352d393931302d623638646162306630663532/)
# LINENotifyの動作画面
# LINE Notifyの動作画面
![キャプションを入力できます](https://camo.elchika.com/af047d303c5d73f841274443e58b3863e8c1d106/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32333333626430612d626361382d346435302d613531332d3939326461346261306234382f39323233373866332d303332302d346363342d386265612d316361376132663933646233/)
#プログラム
荷物が置かれた時は一定時間反応したら画像の送信を行う。 ![キャプションを入力できます](https://camo.elchika.com/17e0e2b9e51d86aef32128585acc0f34ddeff397/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32333333626430612d626361382d346435302d613531332d3939326461346261306234382f30663863636239642d366464352d343631392d393334632d356366393639323635346166/) 荷物が取られた場合はすぐに画像の送信を行う。 ![キャプションを入力できます](https://camo.elchika.com/9eeab7c06877fd25bfd7e8b4fc7bd01633c30e3b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32333333626430612d626361382d346435302d613531332d3939326461346261306234382f66323962303761382d633737352d346235362d616266342d373565336133633465386162/) # プログラム
``` #coding: utf-8 import RPi.GPIO as GPIO import time import requests from picamera import PiCamera #GPIOの設定 GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) TRIG = 15 ECHO = 14 GPIO.setup(TRIG, GPIO.OUT) GPIO.setup(ECHO, GPIO.IN) #カメラの設定 camera = PiCamera() camera.resolution = (1024, 768) #LINE Notifyにメッセージを送信する関数 def send_line_notify(image_path, message): token = ' aaa ' # トークンをここに入力 headers = {'Authorization': 'Bearer ' + token} with open(image_path, 'rb') as f: data = {'message': message} files = {'imageFile': f} requests.post('https://notify-api.line.me/api/notify', headers=headers, data=data, files=files) #距離を測定する関数 def get_distance(): GPIO.output(TRIG, False) time.sleep(2) GPIO.output(TRIG, True) time.sleep(0.00001) GPIO.output(TRIG, False) start_time = time.time() stop_time = time.time() while GPIO.input(ECHO) == 0: start_time = time.time() while GPIO.input(ECHO) == 1: stop_time = time.time() time_elapsed = stop_time - start_time distance = (time_elapsed * 34300) / 2 return distance try: previous_state = 'far' #初期状態を「遠い」に設定 close_time = 0 #20cm未満の時間をカウントする変数 while True: distance = get_distance() print(f"距離: {distance:.2f} cm") #距離が20cm未満の場合 if distance < 20: close_time += 1 # 1秒カウント if close_time >= 10: # 10秒以上経過したら if previous_state == 'far': print("[撮影] 距離が近いです。") image_path = "photo.jpg" camera.capture(image_path) print("[保存完了] photo.jpg") #LINE Notifyに画像を送信 send_line_notify(image_path, '荷物が届きました') print("[LINE Notifyに送信完了]") previous_state = 'close' # 状態を「近い」に更新 else: close_time = 0 # 距離が遠くなったらカウントをリセット if previous_state == 'close': print("[距離が遠くなりました]") image_path = "photo_far.jpg" # 遠くなったときの画像名 camera.capture(image_path) print("[保存完了] photo_far.jpg") #LINE Notifyに再度画像を送信 send_line_notify(image_path, '荷物が取られました') print("[LINE Notifyに送信完了]") previous_state = 'far' # 状態を「遠い」に更新 time.sleep(1) # 1秒待つ except KeyboardInterrupt: print("プログラムが中断されました") finally: GPIO.cleanup() ``` # Raspberry Pi 4と超音波距離センサー(hcーrs04)の接続方法 ![キャプションを入力できます](https://camo.elchika.com/084991412bf406e4e37a9a772ea1b07d2da52af7/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32333333626430612d626361382d346435302d613531332d3939326461346261306234382f33326333636465372d326636352d346162362d626639392d313831343266393161613661/) # 参考文献
・LINE Notify https://notify-bot.line.me/ja/
・ラズベリーパイで超音波距離センサーの使い方 https://raspi-school.com/ultrasonic-sensor/
・・Raspberry Pi Zeroで作るカメラ付きIoTポスト
・Raspberry Pi Zeroで作るカメラ付きIoTポスト
https://elchika.com/article/b1f3d90f-f0e8-4ac6-901a-13c2f8cd6bfc/