Deschizător de ușă pentru garaj Raspberry Pi 3: 15 pași (cu imagini)
Deschizător de ușă pentru garaj Raspberry Pi 3: 15 pași (cu imagini)
Anonim
Deschizător de uși pentru garaj Raspberry Pi 3
Deschizător de uși pentru garaj Raspberry Pi 3

Am creat acest instructabil în 2014. De atunci s-au schimbat multe. În 2021, am actualizat dispozitivul de deschidere a ușii de garaj inteligent aici.

Folosiți un Raspberry Pi și un smartphone pentru a deschide, închide și monitoriza o ușă de garaj. Deschiderea și închiderea ușii sunt asigurate prin utilizarea certificatelor autosemnate instalate pe telefoanele mobile ale familiei. Dacă ușa garajului este deschisă atunci când nu ar trebui să fie, trimiteți un mesaj text (SMS) la un telefon mobil.

Ușa garajului este în uz continuu de la sfârșitul anului 2014. De-a lungul anilor, am încercat să mențin modificările actualizate. Există un apendice care descrie modificările la instructable.

Obiectivele acestui proiect sunt:

  • Faceți primul meu instructable - nu am planificat să postez acest lucru, dar am primit multe cereri
  • Deschideți o ușă de garaj cu o telecomandă standard
  • Deschideți o ușă de garaj cu deschizătorul de garaj montat pe perete
  • Deschideți o ușă de garaj cu un SmartPhone
  • Monitorizați starea ușii garajului de la distanță prin intermediul unui telefon mobil sau laptop (este deschisă sau închisă?)
  • Trimiteți un mesaj text pe telefonul meu mobil dacă ușa este deschisă când ar trebui închisă
  • Păstrați ușa garajului sigură (de exemplu, la pierderea de energie electrică, ușa nu trebuie să se deschidă)
  • Nu permiteți nimănui de pe net să deschidă ușa (certificat SSL autosemnat cu două sensuri)
  • Utilizați WiFi în loc de o conexiune prin cablu
  • Folosiți un Raspberry Pi 3

Baza pentru această punere în aplicare a deschiderii ușii de garaj a fost derivată din Instructable: Raspberry Pi Deschidere ușă de garaj de către quartarian. Inițial, am folosit un model B + Raspberry Pi, apoi am trecut la un Raspberry Pi 2 model B, iar acum folosește un Raspberry Pi 3.

Am folosit un MacBook pentru a comunica cu Raspberry Pi, dar poate fi folosit orice computer.

Nu există niciun motiv convingător pentru a construi acest dispozitiv, dar a fost distractiv. Este mai rentabil să cumpărați unul. Un dispozitiv similar poate fi achiziționat pentru aproximativ 130 USD.

  • Lift master 828LM
  • Chamberlain MyQ 129 $
  • GoGo Gate 179 USD
  • Artizan 100 $

Note:

  • Textul închis în pică, ca acesta ♣ înlocuiți-acesta ♣ ar trebui înlocuit cu o valoare reală
  • Arduino subliniat textul albastru este un link. În acest caz, este un link către o versiune arduino a unui deschizător de uși de garaj.
  • Am încercat să creditez fiecare sursă utilizată. Îmi cer scuze pentru orice omisiune. Majoritatea acestui document se bazează pe munca altor persoane.
  • $ indică o comandă executată într-o fereastră de terminal de pe MacBook și de obicei se execută pe Raspberry Pi

Pasul 1: Adunați părți

Cumpărați sau strângeți piese și instrumente (prețuri în USD).

  • Raspberry Pi 3 Model B Newark Element14 $ 35
  • Adaptor de alimentare USB de 5,2 V 2,5 A de la Amazon 9,99 USD
  • Cablu Micro USB la USB 6ft de la Amazon 7,99 USD
  • Caz de la Amazon 6,99 USD
  • SanDisk Ultra 16 GB microSDHC Clasa 10 cu adaptor (SDSQUAN-016G-G4A) de la Amazon 8,99 USD
  • SunFounder 2 canale 5V releu Shield Module pentru Arduino UNO 2560 1280 ARM PIC AVR STM32 Raspberry Pi - 6,79 USD
  • 3x fire jumper feminin-feminin. Cumpărat la Fry’s pentru 4,95 USD.
  • DNS dinamic de 40 USD pe an pentru 30 de nume (dyn.com)
  • 1-Gang 18 cu. în. Întrerupător de perete greu și cutie de ieșire, 3,12 USD
  • Placă de perete albă Ultra Pro Single Brush, 7,88 USD
  • SECO-LARM SM 226L, senzor ușă de garaj, prețul variază foarte mult, 9,99 USD pe Amazon, cu transport gratuit
  • 50ft de fir termostat solid, Home Depot sau Lowe's, ~ 20 USD

Totalul meu: ~ 172,00 USD

Am avut următoarele părți, instrumente și servicii:

  • Cablu Ethernet CAT5
  • Sârmă de dimensiuni mici, lungime de 6 ft
  • Șurubelniță cu cap Phillips
  • Cleste pentru nas
  • Freze cutii
  • Șurubelnițe cu cap plat, bijuterii, necesare pentru a slăbi șuruburile de pe releu
  • MacBook (se poate utiliza un computer)
  • AT&T GigaPower (poate fi utilizat orice furnizor de servicii de internet)

Pasul 2: Configurați Raspberry Pi fără monitor sau tastatură

Configurați Raspberry Pi fără monitor sau tastatură
Configurați Raspberry Pi fără monitor sau tastatură

Toate proiectele Raspberry Pi necesită un anumit tip de configurare. Îmi place să folosesc același set de instrucțiuni și, atunci când este necesar, am un singur loc pentru actualizarea acestor instrucțiuni.

Configurați Raspberry Pi utilizând următoarele instrucțiuni:

Configurați Raspberry Pi fără monitor sau tastatură

Instrucțiunile de mai sus includ pași opționali în anexă. Asigurați-vă că faceți pasul:

Adăugați certificate de partea clientului pe serverele web

Închideți Raspberry Pi

$ sudo shutdown -h 0

După închidere, eliminați

  • cablu Ethernet
  • Cablu serial USB

Acestea nu vor mai fi necesare. Utilizați wifi, ssh și o fereastră de terminal pe Mac Book pentru a rula comenzi pe Raspberry Pi.

Deconectați alimentarea și reconectați-o, iar raspberry pi ar trebui să repornească.

Pasul 3: Instalați Wiring Pi, Apache și PHP

Instalați Wiring Pi

Deschideți o fereastră de terminal pe Mac Book. Conectați-vă la Raspberry Pi, apoi descărcați, compilați și instalați Wiring Pi. Acest software permite controlul pinilor GPIO. Iată un ghid pas cu pas:

wiringpi.com/download-and-install/

Iată o versiune condensată a instrucțiunilor:

$ ssh pi @ ♣ zmeură-pi-ip ♣

parola: ♣ parola ♣ $ sudo apt-get install git-core $ git clone git: //git.drogon.net/wiringPi $ cd wiringPi $ git pull origin $./build

Rulați comanda gpio pentru a verifica instalarea:

$ gpio -v

versiunea gpio: 2.29 Copyright (c) 2012-2015 Gordon Henderson Acesta este un software gratuit cu ABSOLUT FĂRĂ GARANȚIE. Pentru detalii tip: gpio -warranty Raspberry Pi Detalii: Tip: Model 2, Revizie: 1.1, Memorie: 1024MB, Producător: Sony [OV] Arborele dispozitivului este activat. Acest Raspberry Pi acceptă acces GPIO la nivel de utilizator. -> Consultați pagina de manual pentru mai multe detalii $ gpio readall + ----- + ----- + --------- + ------ + --- + --- Pi 2 --- + --- + ------ + --------- + ----- + ----- + | BCM | wPi | Nume | Mod | V | Fizic | V | Mod | Nume | wPi | BCM | + ----- + ----- + --------- + ------ + --- + ---- ++ ---- + --- + - ----- + --------- + ----- + ----- + | | | 3.3v | | | 1 || 2 | | | 5v | | | | 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5V | | | | 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | | | 4 | 7 | GPIO. 7 | OUT | 1 | 7 || 8 | 1 | ALT0 | TxD | 15 | 14 | | | | 0v | | | 9 || 10 | 1 | ALT0 | RxD | 16 | 15 | | 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 | | 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | | | 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 1 | IN | GPIO. 4 | 4 | 23 | | | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 | | 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | | | 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 | | 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 | | | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 | | 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 | | 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | | | 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 | | 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | | | 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 | | 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 | | | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 | + ----- + ----- + --------- + ------ + --- + ---- ++ ---- + --- + - ----- + --------- + ----- + ----- + | BCM | wPi | Nume | Mod | V | Fizic | V | Mod | Nume | wPi | BCM | + ----- + ----- + --------- + ------ + --- + --- Pi 2 --- + --- + --- --- + --------- + ----- + ----- +

Comenzile de mai sus ar trebui să vă ofere o anumită încredere că wiringPi funcționează OK.

Instalați Apache și PHP

Rulați următoarele comenzi:

$ cd..

$ sudo apt-get update $ sudo apt-get install apache2 php5 libapache2-mod-php5

Pentru a verifica funcționarea serverului web, deschideți un browser și introduceți în caseta URL:

♣ zmeură-pi-ip ♣

Site-ul implicit al lui Apache răspunde cu „Funcționează!”

Pasul 4: site-ul web

Deschideți o fereastră de terminal pe Mac Book. Conectați-vă la Raspberry Pi, apoi eliminați fișierul index.html implicit, modificați permisiunile din directorul site-ului web și editați un fișier numit index.php.

$ ssh pi @ ♣ zmeură-pi-ip ♣

parola: ♣ parola ♣ $ sudo rm /var/www/index.html $ sudo chown pi: root / var / www $ sudo nano /var/www/index.php

Și introduceți următorul cod:

Deschizător de garaj

Domotică

<? php if ($ switch == 1) {echo"

";} else {echo"

"; } ?>

Deschizător ușă garaj Manual de deschidere a ușii de garaj închis 1 deschideți 0
<? php if ($ trigger == 0) {echo "<td colspan = \" 4 / "} else {echo"

var13 ->

CTRL-o și ENTER pentru a scrie fișierul și CTRL-x pentru a ieși din editor.

Modificați permisiunile pentru fișier

$ sudo chmod 664 /var/www/index.php

Pasul 5: Imagine a site-ului web

Imagine a site-ului web
Imagine a site-ului web
Imagine a site-ului web
Imagine a site-ului web

Luați de pe web un deschizător de uși de garaj la distanță, de înaltă rezoluție. Modificați imaginea așa cum doriți folosind pensula Mac. În imaginea de mai sus, a fost utilizat un deschizător de garaj Genie de înaltă rezoluție, s-a adăugat un logo zmeură pi și ledul a fost îndepărtat.

O imagine este fundalul (remote-background.jpg), iar cealaltă este imaginea activă (remote-press.jpg).

Planul era ca la apăsarea butonului, în loc să clipească ledul, zmeura să clipească. Am simplificat site-ul web.

Copiați imaginile în raspberry pi:

$ scp *-j.webp

parola: ♣ parola ♣

Site-ul web are un singur buton. Pentru verificare, deschideți un browser și introduceți ♣ raspberry-pi-ip ♣. În loc de site-ul implicit al lui Apache, care spune „Funcționează!”, Butonul ar trebui să apară. Apasa-l.

Pasul 6: Control de la distanță Webserver

Pentru a facilita accesarea deschizătorului de uși de garaj dintr-o locație la distanță, folosesc un nume DNS dinamic. Pentru că nu-mi place să-mi amintesc adresele IP.

Cu această caracteristică, introduc ♣ nume-gazdă dinamică ♣.getmyip.com în câmpul URL al unui browser. Notă: IP-ul routerelor de acasă se poate modifica fără notificare prealabilă, dar acest lucru se întâmplă rar. Am ales să folosesc DynDNS. Va trebui să cunoașteți adresa IP publică a routerului.

U-Verse Router IP: vers uverse-public-ip ♣

Puteți vizualiza numele dvs. de gazdă și detaliile contului DynDNS Pro. Iată câteva sfaturi pentru a începe:

  • Creați numele de gazdă DNS dinamic (1 din 30):

    • ♣ nume-gazdă dinamică ♣
    • Actualizator cheie: ♣ dinamic-ip-actualizator-cheie ♣
  • Instalați un client de actualizare pentru a vă asigura că numele gazdei dvs. este întotdeauna îndreptat către adresa IP corectă.

    • Descărcați și instalați pe MacBook
    • IP-urile U-verse AT&T rareori se schimbă, astfel încât actualizatorul de mai sus poate fi rulat ori de câte ori se schimbă
    • Urmeaza direcțiile:

      • Adaugă cont
      • Introduceți numele de utilizator și parola: ♣ dynamic-ip-username ♣ ♣ dynamic-ip-password ♣
      • Selectați numele gazdei
      • Faceți clic pe Configurare gazde selectate
      • Gazda ar trebui să devină activă
    • Configurați-vă rețeaua pentru a permite accesul la dispozitivul dvs. de pe Internet. Puteți utiliza expertul Dyn pentru câteva instrucțiuni generale despre cum să faceți acest lucru, puteți utiliza resurse precum PortForward.com sau contactați producătorul dispozitivului pentru asistență.

      • AT-T U-vers
      • Redirecționare port pentru 2 fire Wire 3801HGV - acesta este routerul AT-T U-Verse pe care îl am. Consultați Actualizări într-un apendice pentru cum să transferați portul pe routerul AT&T U-verse 5268ac.
      • Deschideți browserul și accesați ♣ raspberry-pi-ip ♣
      • Parolă: ♣ parolă ♣
      • Setări
      • Paravan de protecție

        • Alegeți ♣ raspberry-pi-hostname ♣
        • Servere

          • Portul Web Server 80
          • Server HTTPS - portul 443
        • Adăuga
      • Salvați

Odată ce acest lucru este făcut, serverul web va funcționa de pe internet. Pentru verificare, introduceți ♣ nume-gazdă dinamică ♣ și ar trebui să vedeți butonul de deschidere a ușii de garaj.

Pasul 7: Conectați circuitul la Raspberry Pi

Conectați circuitul la Raspberry Pi
Conectați circuitul la Raspberry Pi

Pentru codul furnizat (pașii 4 și 6), am folosit pinul GPIO 7. Este o coincidență faptul că GPIO 7 este același cu pinul wiringPi 7. În codul PHP, se utilizează numerele pin pin de cablare și NU numerele pin PIN GPIO. Puteți utiliza oricare dintre acestea doriți, dar asigurați-vă că modificați codul.

Am încercat să folosesc sârmă răsucită, dar releul nu ține bine firul răsucit. Sârmă solidă este mai bună.

La prima mea încercare, am creat trei cabluri de conectare (de la mamă la mamă).

  • Folosiți trei cabluri jumper la femelă
  • Tăiați trei bucăți de sârmă solidă la aproximativ 1 inch.

    Îndepărtați 1/4 inch pe ambele capete ale firului solid

  • Introduceți un fir solid într-un cablu jumper feminin.

Iată o modalitate mai bună de a crea cabluri de conectare (de la mamă la mamă):

  • Folosiți numai sârmă solidă
  • Tăiați trei bucăți de sârmă solidă de 4 inci
  • Îndepărtați 1/4 inch pe ambele capete ale firului solid
  • Utilizați pini de conectare de sex feminin

    • Glisați un știft de conectare mamă pe un capăt al firului solid și sertizați

      Știftul feminin nu trebuie să se desprindă, lipiți dacă este necesar

    • Glisați dispozitivul de eliberare a tensiunii peste știftul de conectare feminin sau știftul de acoperire cu banda electriciană

Conectați releul la pi așa cum se arată în diagramă:

  • Conectați capătul feminin al cablului la pinul Raspberry Pi.
  • Introduceți firul solid în releu.

Pasul 8: Creați un serviciu de pornire

Cele mai multe relee, inclusiv cea achiziționată, funcționează astfel:

  • Când semnalul este PORNIT circuitul rămâne oprit.
  • Când semnalul este OPRIT, atunci circuitul este pornit.

Dacă Raspberry Pi își pierde puterea, releul are un mecanism de siguranță care menține circuitul oprit.

O problemă ar putea apărea atunci când Rapberry Pi și releul vor fi restabiliți, dar înainte ca Raspberry Pi să termine pornirea pentru a porni semnalul care este necesar pentru a menține circuitul oprit. Te-ai putea trezi dimineața cu garajul tău deschis și potențial câțiva prieteni noi!

Cu toate acestea, releul nu se inițializează până când modul PIN GPIO nu este setat prin această comandă: gpio mode 7 out. Mai mult, dacă pinul GPIO este activat (scriere gpio 7 1) înainte de a seta modul GPIO, releul va rămâne oprit odată inițializat.

Pentru ca această inițializare să ruleze la pornire și să nu vă treziți cu noi prieteni, utilizați următorul script de pornire.

$ ssh pi @ ♣ zmeură-pi-ip ♣

$ sudo nano /etc/init.d/garagerelay

Apoi lipiți acest script:

#! / bin / bash

# /etc/init.d/garagerelay # Efectuați funcții specifice atunci când vi se solicită cazul de sistem „$ 1” în start) ecou „Pornire releu” # Turn 7 pe care menține releu dezactivat / usr / local / bin / gpio write 7 1 #Start Gpio / usr / local / bin / gpio mode 7 out;; stop) ecou „Oprirea gpio”;; *) ecou „Utilizare: /etc/init.d/garagerelay {start | stop}” ieșirea 1;; esac ieșire 0

Pentru a salva: CTRL-o, ENTER

Pentru a ieși din nano, CTRL-x

Faceți fișierul executabil:

$ sudo chmod + x /etc/init.d/garagerelay

Acum spuneți-i pi-ului dvs. să ruleze acest script la boot:

$ sudo update-rc.d -f garagerelay start 4

(Notă: puteți ignora în siguranță avertismentul „etichete LSB lipsă”.)

Asigurați-vă că scriptul de pornire rulează

$ sudo reporniți

Deschideți un browser și faceți clic pe deschizător. Releul ar trebui să facă clic.

Pasul 9: Atașați Raspberry Pi la garaj

Atașați Raspberry Pi la garaj
Atașați Raspberry Pi la garaj

Când mutați Raspberry Pi, asigurați-vă că rulați:

$ închidere -h 0

Poate doriți să opriți curentul din garaj. Deci, deschizătorul soneriei nu te electrocutează:). Adevăratul motiv este că de fiecare dată când scurtcircuitați firele, ușa va urca și coborî.

Desfaceți șuruburile de perete de la deschizătorul de tip sonerie, care atașează soneria de perete.

Faceți o gaură din garaj, în spatele deschizătorului soneriei, în interiorul casei. În Texas, Raspberry Pi nu ar trebui să fie în garaj, variația temperaturii în garaj fiind în afara specificațiilor de funcționare ale Raspberry Pi.

Treceți firele releului prin orificiu (utilizați un cuier).

Slăbiți ambele șuruburi de pe partea din spate a deschizătorului soneriei.

Îndepărtați ambele capete ale firelor releului: 1) aproximativ 1/8 "inch din partea releului și aproximativ ½" inch pe partea soneriei. Îndoiți partea soneriei ușii a firului într-o jumătate de buclă suficient de mare pentru a se potrivi în jurul șurubului din spate.

Conectați un fir de releu la fiecare șurub de pe partea din spate a soneriei și strângeți șurubul. Conexiunile sunt așa cum se arată în imagine. Deoarece releul izolează circuitul, direcția nu contează nici măcar ce releu este atașat la care șurub.

Pasul 10: Atașați Raspberry Pi la SECO-LARM

Atașați Raspberry Pi la SECO-LARM
Atașați Raspberry Pi la SECO-LARM
Atașați Raspberry Pi la SECO-LARM
Atașați Raspberry Pi la SECO-LARM

Înainte să termin codul, eu și familia mea eram în vacanță și mi-am deschis browserul. Ultima vizualizare a browserului meu a fost deschizătorul ușii garajului - pagina s-a reîmprospătat și ușa garajului s-a deschis. Câteva zile mai târziu, un vecin a sunat și a întrebat dacă ușa garajului ar trebui să fie deschisă? Din fericire, aș putea să-l închid de la 500 de mile distanță.

Acest snafu m-a forțat să schimb codul pentru ca acest lucru să nu se întâmple și să adaug un senzor și starea ușii garajului pe site.

Acesta este un link către instrucțiunile originale pentru adăugarea unui senzor. Cu toate acestea, având în vedere tot ce a fost deja finalizat, instalarea senzorului poate fi mult simplificată și în loc să folosiți python adăugați câteva linii de cod la index.php.


Fatal error: Uncaught Error: Call to undefined function exec() in W:\www\langs\.php-gen-lang\v3-core\macros.php(127) : eval()'d code:518 Stack trace: #0 W:\www\langs\.php-gen-lang\v3-core\macros.php(127): eval() #1 W:\www\langs\.php-gen-lang\v3-core\index-global.php(231): Macros->macros_parse('<!DOCTYPE html>...') #2 W:\www\langs\howwhatproduce.com\ro.howwhatproduce.com\index.php(9): require_once('W:\\www\\langs\\.p...') #3 {main} thrown in W:\www\langs\.php-gen-lang\v3-core\macros.php(127) : eval()'d code on line 518