はじめに

*こちらは「個人ブログを元にQiitaに投稿した記事」の元ブログ記事をブログサイト移行に伴い移行したものです。* どうもseigo2016です! 今回は自宅の普通(?)のプッシュプル錠式の玄関ドアをスマホから開閉可能にした過程の記録です 玄関近くもWifiが飛んでいるので、Wifi内からのみ開閉できるようにしています。 ※こちらは個人ブログに上げた記事からの移行ページです

準備

Raspberry pi Zero WH

私はサイズと消費電力(と手持ち)の点からZero WHにしましたが、基本何でもいいと思います

MicroSDカード

私はToshibaのmicroSDカードを愛用しています。(安いという点が大きいですが…) 今回は8GBを使用しました。

ACアダプター

Raspberrypi Zeroとサーボ2つ分の電流を供給する必要があるためとりあえずこちらの製品にしました。

サーボモーター

最初はSG92Rを使おうとしたのですが、トルクが足りなかったのでSG-5010を使いました。 自宅の鍵のトルクと相談してください。

タクトスイッチ

一応内側からはボタンで開閉できるようにスイッチを付けます。大きさやデザインと相談してください。

抵抗

タクトスイッチをRaspberry piで使うために使用します。130Ωを使用しましたが、130Ω以上なら大丈夫そうです。

設定・インストール

情報

OS  ---  Raspbian
Python --- 3.5.3
PHP --- 7.0

IPアドレスの固定

省略

GPIO、SSHの有効化

省略

apache2・PHPのインストール

本題から外れますのでここでは細かい設定は省きます。
sudo apt install apache2
sudo apt install php7.0

PythonからGPIOを使う

PythonでGPIOを使用するためのライブラリのRPI.GPIOをインストールします。
sudo python3 -m pip install RPI.GPIO

Pythonのコードを書く

今回はmain.py・open.py・close.pyに分けています。

main.py

import subprocess
import RPi.GPIO as GPIO
import time
import socket
GPIO.setmode(GPIO.BCM)
flag = True
IN = 10
GPIO.setup(IN,GPIO.IN)
try:
while True:
if GPIO.input(IN) == GPIO.HIGH and not flag:
subprocess.call("sudo python3 open.py",shell=True)
flag = not flag
elif GPIO.input(IN) == GPIO.HIGH and flag:
subprocess.call("sudo python3 close.py",shell=True)
flag = not flag
except KeyboardInterrupt:
pass

open.py

python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
flag = True
out1 = 14
GPIO.setup(out1, GPIO.OUT)
servo1 = GPIO.PWM(out1, 50)
servo1.start(0)
def open():
for i in range(0,50,1):
servo1.ChangeDutyCycle(2.5+i/10)
time.sleep(0.01)
servo1.start(0)
open()
servo1.stop()
GPIO.cleanup()

close.py

python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
flag = True
out1 = 14
GPIO.setup(out1, GPIO.OUT)
servo1 = GPIO.PWM(out1, 50)
servo1.start(0)
def close():
for i in range(0,50,1):
servo1.ChangeDutyCycle(7.5-i/10)
time.sleep(0.01)
servo1.start(0)

close()
servo1.stop()
GPIO.cleanup()

PHPのコードを書く

本題のスマホから操作するための部分です。 とはいってもphpからpythonのスクリプトを実行しているだけです。

設置

配線図

全体図

サーボモーターの取り付け

私は最初にプラ板で基本を固定していましたが、見た目が悪かったので3Dプリンターを使用して取り付け部分を製作しました。 取り付け部分に関しては鍵やドアによって大きく変わります。

完成

動作映像

おわりに

pythonのコードは関数等でもっとスマートに呼び出す方法はあると思います。 機能はしているんですが、デザイン性が皆無なのが悲しいです…。 現在家の部屋のライトのスイッチ(トイレとか洗面所etc..)を使うと時々勝手に動くのですが、原因不明なのでどなたか可能性がある事柄を教えてください…。 LTで使用したスライド https://www.slideshare.net/secret/4sVEoyc3XEYAiQ