--- title: スマートロックの制作! 〜Raspberry Pi〜 tags: RaspberryPi Python PHP author: seigo2016 slide: false ---

はじめに

どうも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

```python 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のスクリプトを実行しているだけです。 ```php Key ```

設置

配線図

![5A1wVQyW.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311807/a207a089-6013-82a5-214e-fc5948a6ba0d.jpeg)

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

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

初期の取り付け

完成

動作映像

[Youtube]("https://www.youtube.com/embed/PzG0b35WH9Y")

各部の写真

![IMG_8512.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311807/6c9b7c34-610d-69c3-854c-148c772422a7.jpeg)

スイッチ部分

![IMG_1803.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311807/824b4d95-c57d-3b77-e1af-3aa7902cff8b.jpeg)

スマホ画面

IMG_1942.PNG

おわりに

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