MENU

Fun & Interesting

【ラズパイPico】リードスイッチでドアの開閉を監視・検知してみた【リクエスト】

社畜商会 43,574 4 years ago
Video Not Working? Fix It Now

前の動画→https://youtu.be/19OxWjO6gqg リクエストにお応えしてRaspberry Pi Picoとリードスイッチでドアの開閉検知デバイスを作ってみました。 今回は冷蔵庫のドアに取り付けましたが、窓や玄関に取り付ければセキュリティ用途や人の出入りの監視にも活用できると思います。ぜひこの動画を参考に試してみてください! -----以下、今回の動画で使用したコードです---- ※概要欄の制約上、「>」を全角に置き換えています # 必要なモジュールをインポート import machine import time # 警告を出す秒数 alart_secs = 30 # Pico内蔵LEDのPinを定義 pled = machine.Pin(25, machine.Pin.OUT) # 電子ブザーのPinを定義 buzzer = machine.Pin(19, machine.Pin.OUT) # リードスイッチ1のPinを定義 door1 = machine.Pin(1, machine.Pin.IN, machine.Pin.PULL_UP) # リードスイッチ2のPinを定義 door2 = machine.Pin(5, machine.Pin.IN, machine.Pin.PULL_UP) # 初期化 pled.off() buzzer.off() # ドアが開いた時間(0ならドアは閉まっていたことになる) door1_time = 0 door2_time = 0 # 引数:[ドア開時刻, リードスイッチの状態] # 戻値:[LED状態, ブザー状態, ドア開時刻] def GetLswStatus(door_time,value): # 1秒前にドアは閉まっていた if(door_time == 0): # 今も閉まっている if(value == 0): return [False,False,0] # 今は開いている else: return [True,False,time.ticks_ms()] else: # 1秒前にドアは開いていた if(value == 0): # 今は閉まってる return [False,False,0] else: # 今も開いてる: 開いた時からの差分を取得 door_diff = time.ticks_diff(time.ticks_ms(), door_time) # 所定時間以上ドアが開いている場合 if ((door_diff/1000) > alart_secs): # LEDを点滅 if(pled.value() == 0): return [True,True,door_time] else: return [False,True,door_time] else: # ドアは開いてるけどまだ所定時間に達していない return [True,False,door_time] while True: res1 = GetLswStatus(door1_time,door1.value()) door1_time = res1[2] res2 = GetLswStatus(door2_time,door2.value()) door2_time = res2[2] # LED制御 if(res1[0] or res2[0]): pled.on() else: pled.off() # ブザー制御 if(res1[1] or res2[1]): buzzer.on() else: buzzer.off() time.sleep(0.5)

Comment