ラズパイでスマートロックを作る
/icons/水平線.icon
ラズパイでスマートロックを作る
https://gyazo.com/46946b08d10b6bba7acc12af05a110cf
その前に自己紹介 applessk.icon
あっぷるささきです
sfc19
高校の時からAngularでオンラインのディベートのサービスを作ってる
ハードはほとんどやったことない
スマートロックを作ることになった経緯
applessk.icon はシェアハウスに住んでいる
鍵をよく忘れる
オートロックだからよく締め出される
誰かに開けてもらう
https://gyazo.com/380476e0c2b4ea2b726f137294bc5e9b
深夜とかは困る
スマートロックを自作したい
ただし、シェアハウスのドアにモーターとかをつけるわけにはいかない インターホンで、外からピンポンされた時のみ、ボタンで解錠する事ができるので、それをハックしよう https://gyazo.com/2c108332e73a4a39e38dfbf5be4a22a8
作るもの
深夜にピンポンするとうるさいので、インターホンは消音に設定
呼び出しランプを検知して、解錠ボタンを押させたい
https://gyazo.com/e4319829a7982db7bf5ef09f23532d58
用意するもの
実装1 繋げる
ラズパイに、照度センサ、サーボモータを繋げる
https://gyazo.com/95ef5f8b4c7f7257365203b0672ecb21
実装2 明るさ判定
code:main.py
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.IN)
try:
while True:
if GPIO.input(24) == GPIO.HIGH:
print("明るい")
time.sleep(15)
else:
print("暗い")
time.sleep(1)
except KeyboardInterrupt:
pass
GPIO.cleanup()
https://gyazo.com/b92327a46a6d03f3efcb7d98004cf306
実装3 明るかったら、サーボモータを回す
code:main.py
import RPi.GPIO as GPIO
def unlock():
gp_out = 4
GPIO.setup(gp_out, GPIO.OUT)
servo = GPIO.PWM(gp_out, 50)
servo.start(0)
for i in range(1):
servo.ChangeDutyCycle(2.5)
time.sleep(0.5)
servo.ChangeDutyCycle(7.25)
time.sleep(0.5)
servo.stop()
GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.IN)
try:
while True:
if GPIO.input(24) == GPIO.HIGH:
print("明るい")
unlock()
time.sleep(15)
else:
print("暗い")
time.sleep(1)
except KeyboardInterrupt:
pass
GPIO.cleanup()
https://youtu.be/rqMbXR9xfUc
わーいできたヽ(゚∀゚)ノ
と、思っていたが、
あれ、セキュリティやばくね
ピンポンしたら誰も入れちゃうじゃん
セキュリティ対策
applessk.icon が家に帰った時だけピンポンしたら開けてほしい
IFTTTで、iPhoneが家に近づいたら帰宅したことを記録することに https://gyazo.com/fa6e84b9d6a263c577b5d2f3d24bf4b7
/icons/google apps script.icon GASサーバー
https://gyazo.com/6e036f1d3c507e5b48832bfac8b653ae
https://gyazo.com/314be605df3808086f34433b4fadd565
https://gyazo.com/09f362a0068c020cc12be4536ac8551a
https://gyazo.com/9aa3bad29ed7054f4043bdaa1656816e
/icons/IFTTT.icon IFTTT to GAS
IF https://gyazo.com/6b2657f8fa0a120e6c9442ba3745aa8a THEN https://gyazo.com/3e22bf0ed50975a2ad8c5f5080bc8e12
もしこのエリアに入ったら、GASで作ったAPIにポスト
/icons/ラズパイ.icon ラズパイ to GAS
もし、ピンポンを感知したらをGASで作ったAPIにポスト
https://gyazo.com/25d6a5507bacb6e1ff2f694d9180791a
5分以内に帰った記録があったら
unlockedが返され(厳密にはまだ空いてないけど)
モータを回す
そうでなければ
rejectedが返される
これで、安全な解錠ができた!
そして、それだけでなく副産物が生まれた
副産物
家にいないときにピンポンされたらことを確認することができるように
LINEの設定
超絶簡単
code:main.py
def notification(message):
line_notify_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
payload = {'message': message}
headers = {'Authorization': 'Bearer ' + line_notify_token} # 発行したトークン
line_notify = requests.post(line_notify_api, data=payload, headers=headers)
notification('ピンポンされたよ')
https://gyazo.com/8d935f2596eb0f8f7a8c736fbf94186e
すごいshokai.icon
課題
サーボモータがだんだんずれてきちゃいそう
applessk.icon「Masui.icon先生、ソレノイドがほしいです」 ソレノイド.icon
LINE BOTに話しかけても開けられるように
他にもエアコンとか部屋の電気とかハックしたい
applessk.icon「Masui.icon先生、赤外線LEDもほしいです」 https://gyazo.com/8c8c7162462ac9962b75a7d31a5d2384
赤外線LEDは持ってるので2,3個なら全然あげますsaji.icon
その後
https://gyazo.com/93ed1aaee7281c651a1cb7277c91da9b
下の部屋の照明のボタンが干渉してしまってもう一つのサーボモータの設置がうまくできない😭
感想
合宿でまともに成果だしてる人、久しぶりに見たshokai.icon
えらいshokai.iconytanaka.iconHikaru.icon
わーい+:。ヾ(o・ω・)ノ゜.+ applessk.icon