📲
Raspberry Piと人感センサーでLINE通知
Lチカの動作確認もできたので次の目標であった人感センサー(焦電型赤外線センサー)で検知したらLine通知をさせてみました。
Raspberry Piと焦電型赤外線センサーの接続
ジャンパーワイヤー作成と接続
使用した焦電型赤外線センサーとの接続は3本(5V、GPIO、GND)
圧着ペンチを使用したジャンパーワイヤー作成の練習も兼ねているので出来上がりがまだまだな感じです。(金具がハウジングに収まらない時があり苦労しました)
Raspberry Piの接続ピン
- 5V(2)
- GND(6)
- GPIO18(12)
センサーの調整
センサーの調整は3つあるようで自分の場合はデフォルトの設定で反応しましたが若干過剰に反応だったので感度を下げました。
- DARK ADJ(調光):時計回りに回すと暗い場所での感度が鈍くなる(二つあるネジを正面に左)
- SENS(感度):時計周りに回すと感度が高くなる(二つあるネジを正面に右)
- DELAY_TIME(遅延時間):時計周りに回すとセンサーONの時間が長くなる
LINE Notify
Lineには外部サービスからの通知用にNotifyとmessage APIが用意されているようです、botとしてメッセージのやりとりをさせる必要があるならmessage APIなのでしょうが今回は一方的にRaspberry Piからメッセージを通知させるだけなので簡単なNotifyを使うことにしましt。
トークンの発行
Notifyを使用するためにはトークンの作成が必要です。
Notifyでは個人のアカウント、トークルーム、グループに対して通知が可能でトークン発行時に選択する必要があるので個人カウント以外の場合は事前に作成しLine Notifyアカウントを追加(招待)しておきます。
- Line Notify のサイトからログイン
- 右上の名前の右にあるメニューからマイページにアクセス
- "トークンを発行する"クリック
- 発行されたトークン(文字列)をメモしておきます。
プログラム
検証用なので以下の単純な仕様です。
- プログラムは無限ループ
- センサーで検知は無限ループで1秒毎に判定、検知した場合はループから抜ける
- 検知してループから抜けたらLine Notifyに通知をリクエスト
- 通知後は3分待機してからセンサー検知の無限ループする
import requests
import RPi.GPIO as GPIO
import time
INT_PIN_BOARD = 12
INT_INTERVAL = 180
STR_NOTIFY_TOKEN = 'トークン文字列'
STR_NOTICE_MESSAGE = 'LINEへのメッセージ'
def fnc_line_notify():
line_notify_api = 'https://notify-api.line.me/api/notify'
headers = {'Authorization': f'Bearer {STR_NOTIFY_TOKEN}'}
data = {'message': f'{STR_NOTICE_MESSAGE}'}
requests.post(line_notify_api, headers=headers, data=data)
return
def fnc_sensor_detect():
while True:
if GPIO.input(INT_PIN_BOARD) == GPIO.HIGH:
print('Detect')
break
time.sleep(1)
return
if __name__ == '__main__':
GPIO.setmode(GPIO.BOARD)
GPIO.setup(INT_PIN_BOARD, GPIO.IN)
while True:
fnc_sensor_detect()
fnc_line_notify()
time.sleep(INT_INTERVAL)
参考にさせていただいたサイト
たいへん参考になり助かりました!!
感想
とりあえず動作が確認できたので実際に使えるか試してみたところ残念な結果に、原因はガラス越しに使用したことでした。(ガラスやアクリル越しでは上手く検知できないのは常識だったようです)
そもそもやりたかった事は焦電型赤外線センサーではダメだったということです、別の案として化メラーモジュールを使用した仕組みも考えていたので今度はそちらを試してみようと思います。
Discussion