Help us understand the problem. What is going on with this article?

スマートロックの制作! 〜Raspberry Pi〜

はじめに

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

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

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

<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

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

私は最初にプラ板で基本を固定していましたが、見た目が悪かったので3Dプリンターを使用して取り付け部分を製作しました。

取り付け部分に関しては鍵やドアによって大きく変わりますので、参考程度に写真を張り付けておきます。

初期の取り付け



完成


動作映像


Youtube

各部の写真


IMG_8512.JPG

スイッチ部分

IMG_1803.JPG

スマホ画面

IMG_1942.PNG

おわりに

pythonのコードは関数等でもっとスマートに呼び出す方法はあると思います。

機能はしているんですが、デザイン性が皆無なのが悲しいです…。

現在家の部屋のライトのスイッチ(トイレとか洗面所etc..)を使うと時々勝手に動くのですが、原因不明なのでどなたか可能性がある事柄を教えてください…。

LTで使用したスライド
https://www.slideshare.net/secret/4sVEoyc3XEYAiQ

nnn-school
IT×グローバル社会を生き抜く“創造力”を身につけ、世界で活躍する人材を育成する。
https://nnn.ed.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした