はじめに
どうも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.0IPアドレスの固定
省略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()
<h2>PHPのコードを書く</h2>
本題のスマホから操作するための部分です。
とはいってもphpからpythonのスクリプトを実行しているだけです。
```php
<html>
<head>
<meta charset='utf-8'>
<title>Key</title>
</head>
<body>
<?php
if(isset($_POST['open'])) {
$cmd = "/usr/bin/sudo -S /usr/bin/python3 Key/open.py";
shell_exec($cmd);
}
if(isset($_POST['close'])) {
$cmd = "/usr/bin/sudo -S /usr/bin/python3 Key/close.py";
shell_exec($cmd);
<form method="post">
<button type='submit' name='open' value="1" style="font-size:45px;width:500px;height:250px">open</button>
<button type='submit' name='close' value="1" style="font-size:45px;width:500px;height:250px">close</button>
</form>
</body>
</html>
設置
配線図
![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)スマホ画面
おわりに
pythonのコードは関数等でもっとスマートに呼び出す方法はあると思います。機能はしているんですが、デザイン性が皆無なのが悲しいです…。
現在家の部屋のライトのスイッチ(トイレとか洗面所etc..)を使うと時々勝手に動くのですが、原因不明なのでどなたか可能性がある事柄を教えてください…。
LTで使用したスライド
https://www.slideshare.net/secret/4sVEoyc3XEYAiQ