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

2021/03/20 に公開
視聴回数 40,112
0
0
前の動画→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)