Raspberry Pi 3 garasjeportåpner: 15 trinn (med bilder)
Raspberry Pi 3 garasjeportåpner: 15 trinn (med bilder)
Anonim
Raspberry Pi 3 garasjeportåpner
Raspberry Pi 3 garasjeportåpner

Jeg laget dette instruerbart i 2014. Mye har endret seg siden den gang. I 2021 oppdaterte jeg Smart Garage Door Opener her.

Bruk en Raspberry Pi og en smarttelefon til å åpne, lukke og overvåke en garasjeport. Åpne og lukke døren er sikret ved hjelp av selvsignerte sertifikater installert på familiens mobiltelefoner. Hvis garasjedøren er åpen når den ikke burde være det, send en tekstmelding (SMS) til en mobiltelefon.

Garasjeporten har vært i kontinuerlig bruk siden slutten av 2014. Gjennom årene har jeg prøvd å holde endringene oppdaterte. Det er et vedlegg som beskriver endringene i det instruerbare.

Målet med dette prosjektet er å:

  • Gjør min første instruerbare - jeg hadde ikke tenkt å legge ut dette, men jeg har mottatt mange forespørsler
  • Åpne en garasjeport med en standard fjernkontroll
  • Åpne en garasjeport med den veggmonterte garasjeåpneren
  • Åpne en garasjeport med en smarttelefon
  • Overvåk statusen til garasjeporten eksternt via en mobiltelefon eller bærbar datamaskin (er den åpen eller lukket?)
  • Send en tekstmelding til mobiltelefonen min hvis døren er åpen når den skal lukkes
  • Hold garasjeporten sikker (f.eks. Ved strømbrudd, skal døren ikke åpnes)
  • Ikke la noen andre på nettet åpne døren (toveis selvsignert SSL-sertifikat)
  • Bruk WiFi i stedet for en kablet tilkobling
  • Bruk en Raspberry Pi 3

Grunnlaget for denne Garage Door Opener -implementeringen ble hentet fra Instructable: Raspberry Pi Garage Door Opener av quartarian. Opprinnelig brukte jeg en modell B+ Raspberry Pi, deretter flyttet jeg til en Raspberry Pi 2 modell B, og nå bruker den en Raspberry Pi 3.

Jeg brukte en MacBook til å kommunisere med Raspberry Pi, men hvilken som helst datamaskin kan brukes.

Det er ingen overbevisende grunn til å bygge denne enheten, men det var morsomt. Det er mer kostnadseffektivt å kjøpe en. En lignende enhet kan kjøpes for omtrent $ 130 USD.

  • Liftmaster 828LM
  • Chamberlain MyQ $ 129
  • GoGo Gate $ 179
  • Håndverker $ 100

Merknader:

  • Tekst i spader, som denne ♣ erstatte-denne ♣ bør erstattes med en faktisk verdi
  • Arduino understreket blå tekst er en lenke. I dette tilfellet er det en lenke til en arduino -versjon av en garasjeportåpner.
  • Jeg har forsøkt å kreditere hver kilde som brukes. Jeg beklager alle mangler. Det meste av dette dokumentet er basert på andres arbeid.
  • $ angir en kommando som er utført i et terminalvindu på MacBook og vanligvis blir utført på Raspberry Pi

Trinn 1: Samle deler

Kjøp eller saml deler og verktøy (priser i USD).

  • Raspberry Pi 3 Model B Newark Element14 $ 35
  • 5.2V 2.5A USB -strømadapter fra Amazon $ 9,99
  • Micro USB til USB -kabel 6ft fra Amazon $ 7,99
  • Veske fra Amazon $ 6,99
  • SanDisk Ultra 16 GB microSDHC klasse 10 med adapter (SDSQUAN-016G-G4A) fra Amazon $ 8,99
  • SunFounder 2 -kanals 5V reléskjermmodul for Arduino UNO 2560 1280 ARM PIC AVR STM32 Raspberry Pi - $ 6,79
  • 3x hun-ledninger til kvinner. Kjøpt på Fry's for 4,95 dollar.
  • Dynamisk DNS $ 40 per år for 30 navn (dyn.com)
  • 1-Gang 18 cu. in. Old Work Heavy Wall Switch og Outlet Box, $ 3,12
  • Ultra Pro Single Brush White Wall Plate, $ 7,88
  • SECO-LARM SM 226L, garasjedørsensor, prisen varierer mye, $ 9,99 på Amazon med gratis frakt
  • 50 fot solid termostatledning, Home Depot eller Lowe's, ~ $ 20

Min sum: ~ $ 172,00

Jeg hadde følgende deler, verktøy og tjenester:

  • CAT5 Ethernet -kabel
  • Liten målewire, 6 fot lang
  • Phillips skrutrekker
  • Nåltang
  • Kasseskjærere
  • Juveler med flatskrutrekker, nødvendig for å løsne skruer på reléet
  • MacBook (en PC kan brukes)
  • AT&T GigaPower (hvilken som helst internettleverandør kan brukes)

Trinn 2: Sett opp Raspberry Pi uten skjerm eller tastatur

Sett opp Raspberry Pi uten skjerm eller tastatur
Sett opp Raspberry Pi uten skjerm eller tastatur

Alle Raspberry Pi -prosjekter krever en eller annen form for oppsett. Jeg liker å bruke det samme settet med instruksjoner, og når det er nødvendig, har jeg ett sted for å oppdatere instruksjonene.

Sett opp Raspberry Pi ved å bruke følgende instruksjoner:

Sett opp Raspberry Pi uten skjerm eller tastatur

Instruksjonene ovenfor inkluderer valgfrie trinn i vedlegget. Sørg for å gjøre trinnet:

Legg til sertifikater på klientsiden til webservere

Slå av Raspberry Pi

$ sudo shutdown -h 0

Når du har slått av, fjerner du den

  • ethernet -kabel
  • USB seriell kabel

Disse trengs ikke lenger. Bruk wifi, ssh og et terminalvindu på Mac Book for å kjøre kommandoer på Raspberry Pi.

Koble fra strømmen og koble den til igjen, og bringebær pi skal starte på nytt.

Trinn 3: Installer Wiring Pi, Apache og PHP

Installer ledningsnett Pi

Åpne et terminalvindu på Mac Book. Logg inn på Raspberry Pi, last ned, kompiler og installer Wiring Pi. Denne programvaren tillater kontroll av GPIO -pinnene. Her er en trinnvis veiledning:

wiringpi.com/download-and-install/

Her er en kondensert versjon av instruksjonene:

$ ssh pi@♣ bringebær-pi-ip ♣

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

Kjør gpio -kommandoen for å kontrollere installasjonen:

$ gpio -v

gpio versjon: 2.29 Copyright (c) 2012-2015 Gordon Henderson Dette er gratis programvare med ABSOLUTT INGEN GARANTI. For detaljer type: gpio -garanti Raspberry Pi Detaljer: Type: Model 2, Revisjon: 1.1, Minne: 1024MB, Maker: Sony [OV] Enhetstreet er aktivert. Denne Raspberry Pi støtter GPIO-tilgang på brukernivå. -> Se mannssiden for flere detaljer $ gpio readall+-----+-----+---------+------+---+--- Pi 2 ---+---+------+---------+-----+-----+| BCM | wPi | Navn | Modus | V | Fysisk | V | Modus | Navn | 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 | UT | 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 | Navn | Modus | V | Fysisk | V | Modus | Navn | wPi | BCM | +-----+-----+---------+------+---+--- Pi 2 ---+---+--- ---+---------+-----+-----+

Kommandoene ovenfor skal gi deg en viss tillit til at wiringPi fungerer som det skal.

Installer Apache og PHP

Kjør følgende kommandoer:

$ cd..

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

For å kontrollere at webserveren fungerer, åpner du en nettleser og skriver inn i URL -boksen:

♣ bringebær-pi-ip ♣

Apaches standardnettsted svarer med "Det fungerer!"

Trinn 4: Nettsted

Åpne et terminalvindu på Mac Book. Logg på Raspberry Pi, fjern deretter standard index.html -filen, endre tillatelsene i nettstedskatalogen og rediger en fil som heter index.php.

$ ssh pi@♣ bringebær-pi-ip ♣

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

Og skriv inn følgende kode:

Garasjeåpner

Hjemmeautomatisering

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

";} annet {ekko"

"; } ?>

Garasjeportåpner Garasjeportåpnerhåndbok stengt 1 åpne 0
<? php if ($ trigger == 0) {echo "<td colspan = \" 4 / "} annet {echo"

var13 ->

CTRL-o og ENTER for å skrive filen, og CTRL-x for å gå ut av editoren.

Endre tillatelser for filen

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

Trinn 5: Nettstedbilde

Nettstedbilde
Nettstedbilde
Nettstedbilde
Nettstedbilde

Ta en høyoppløselig fjernåpner for garasjeporter fra nettet. Endre bildet slik du vil bruke Mac pensel. På bildet ovenfor ble det brukt en høyoppløselig Genie Garage Opener, en bringebær pi -logo ble lagt til og lysdioden ble fjernet.

Det ene bildet er bakgrunnen (remote-background.jpg), og det andre er det aktive bildet (remote-press.jpg).

Planen var at ved å trykke på knappen, i stedet for å blinke med LED -en, skulle bringebæret blinke. Jeg forenklet nettstedet.

Kopier bildene til bringebær pi:

$ scp *-j.webp

passord: ♣ passord ♣

Nettstedet har en enkelt trykknapp. For å bekrefte, åpne en nettleser og skriv inn raspberry-pi-ip ♣. I stedet for Apaches standardnettsted, som sier "Det fungerer!", Skal knappen vises. Press den.

Trinn 6: Fjernstyrt webserver

For å gjøre det enkelt å få tilgang til garasjeportåpneren fra et eksternt sted, bruker jeg et dynamisk DNS -navn. Fordi jeg ikke liker å huske IP -adresser.

Med denne funksjonen skriver jeg inn ♣ dynamic-hostname get.getmyip.com i URL-feltet i en nettleser. Merk: IP -en på hjemmerutere kan endres uten varsel, men dette skjer sjelden. Jeg valgte å bruke DynDNS. Du må kjenne routerens offentlige IP -adresse.

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

Du kan se vertsnavn og DynDNS Pro -kontodetaljer. Her er noen tips for å komme i gang:

  • Lag ditt dynamiske DNS -vertsnavn (1 av 30):

    • ♣ dynamisk vertsnavn ♣
    • Oppdateringsnøkkel: ♣ dynamic-ip-updater-key ♣
  • Installer en oppdateringsklient for å sikre at vertsnavnet ditt alltid peker på riktig IP -adresse.

    • Last ned og installer på MacBook
    • AT & T U-vers-IP-er endres sjelden, så oppdateringen ovenfor kan kjøres når den endres
    • Følg instruksjonene:

      • Legg til konto
      • Skriv inn brukernavn og passord: ♣ dynamic-ip-brukernavn ♣ ♣ dynamic-ip-passord ♣
      • Velg vertsnavn
      • Klikk på Konfigurer utvalgte verter
      • Verten bør bli aktiv
    • Konfigurer nettverket ditt slik at du får tilgang til enheten din fra Internett. Du kan bruke Dyn Wizard for noen generelle instruksjoner om hvordan du gjør dette, bruke ressurser som PortForward.com eller kontakte enhetens produsent for å få hjelp.

      • AT&T U-vers
      • Port Forwarding for 2-Wire 3801HGV-dette er AT&T U-Verse-ruteren jeg har. Se Oppdateringer i et tillegg for hvordan du sender videre på AT&T U-vers 5268ac-ruteren.
      • Åpne nettleseren og gå til ♣ bringebær-pi-ip ♣
      • Passord: ♣ passord ♣
      • Innstillinger
      • Brannmur

        • Velg ♣ bringebær-pi-vertsnavn ♣
        • Servere

          • Webserverport 80
          • HTTPS -server - port 443
        • Legge til
      • Lagre

Når dette er gjort, vil webserveren fungere fra internett. For å bekrefte, skriv inn ♣ dynamisk vertsnavn ♣, og du bør se knappen for åpning av garasjeporter.

Trinn 7: Koble kretsen til Raspberry Pi

Koble kretsen til Raspberry Pi
Koble kretsen til Raspberry Pi

For koden som ble gitt (trinn 4 og 6), brukte jeg GPIO -pinne 7. Det er tilfeldig at GPIO 7 er det samme som wiringPi -pinne 7. I PHP -koden brukes ledninger til Pi -pinnummer og IKKE GPIO -pinnumre. Du kan bruke den du vil, men sørg for å endre koden.

Jeg prøvde å bruke vridd ledning, men reléet holder ikke godt på vridd ledning. Solid wire er bedre.

I mitt første forsøk skapte jeg tre tilkoblingskabler (hunn-mann).

  • Bruk tre hun -til -hun -jumperkabler
  • Klipp tre stykker solid tråd til omtrent 1 tommer.

    Strip 1/4in på begge ender av solid wire

  • Sett en solid ledning inn i en hunkabel.

Her er en bedre måte å lage tilkoblingskabler (hunn-til-mann):

  • Bruk bare solid ledning
  • Klipp tre 4in biter av solid tråd
  • Strip 1/4in på begge ender av solid wire
  • Bruk hunkoblinger

    • Skyv den ene hunnkoblingen på den ene enden av solid tråd og krymp

      Hunnål bør ikke løsne, lodde om nødvendig

    • Skyv strekkavlastning over hunkoblingen eller dekselpinnen med elektrikerens tape

Koble reléet til pi som vist i diagrammet:

  • Koble hunenden av kabelen til Raspberry Pi -pinnen.
  • Sett solid ledning inn i reléet.

Trinn 8: Opprett en oppstartstjeneste

De fleste reléer, inkludert den som er kjøpt, fungerer slik:

  • Når signalet er PÅ, forblir kretsen av.
  • Når signalet er AV, er kretsen på.

Hvis Raspberry Pi mister strøm, har reléet en sikkerhetsmekanisme som holder kretsen AV.

Et problem kan oppstå når Rapberry Pi og reléet får strøm tilbake, men før Raspberry Pi er ferdig med å starte opp for å slå på signalet som er nødvendig for å holde kretsen av. Du kan våkne om morgenen med garasjen åpen og potensielt noen nye venner!

Imidlertid initialiseres ikke reléet før GPIO -pin -modus er satt via denne kommandoen: gpio -modus 7 ut. Videre, hvis GPIO -pinnen til PÅ (gpio skrive 7 1) før du setter GPIO -modus, vil reléet forbli av når det er initialisert.

For å få denne initialiseringen til å kjøre ved oppstart og ikke våkne opp med nye venner, bruker du følgende oppstartsskript.

$ ssh pi@♣ bringebær-pi-ip ♣

$ sudo nano /etc/init.d/garagerelay

Lim deretter inn dette skriptet:

#! /bin/bash

#/etc. 1 #Start Gpio/usr/local/bin/gpio -modus 7 ut;; stop) echo "Stoppe gpio";; *) ekko "Bruk: /etc/init.d/garagerelay {start | stop}" exit 1;; esac exit 0

For å lagre: CTRL-o, ENTER

For å gå ut av nano, CTRL-x

Gjør filen kjørbar:

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

Fortell nå pi -en din om å kjøre dette skriptet ved oppstart:

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

(Merk: Du kan trygt ignorere advarselen om "manglende LSB -koder".)

Sørg for at oppstartskriptet kjører

$ sudo omstart

Åpne en nettleser og klikk på åpneren. Reléet skal klikke.

Trinn 9: Fest Raspberry Pi til garasjen

Fest Raspberry Pi til garasjen
Fest Raspberry Pi til garasjen

Når du flytter Raspberry Pi, må du kjøre:

$ nedleggelse -h 0

Det kan være lurt å slå av strømmen til garasjen. Så dørklokkeåpneren gir deg ikke elektro.:) Den virkelige årsaken er hver gang du kortere ledningene, vil døren gå opp og ned.

Løsne veggskruene fra døråpnertypeåpneren, som fester dørklokken til veggen.

Stikk hull gjennom garasjen bak dørklokkeåpneren til inne i huset. I Texas skal Raspberry Pi ikke være i garasjen, temperaturvariasjonen i garasjen er utenfor Raspberry Pi's driftsspesifikasjoner.

Før reléledningene gjennom hullet (bruk en kleshenger).

Løsne begge skruene på baksiden av døråpneren.

Fjern begge ender av relétrådene: 1) omtrent 1/8 "tommer på stafetsiden, og omtrent ½" tommer på dørklokkesiden. Bøy dørklokkesiden av ledningen til en halv sløyfe som er stor nok til å passe rundt bakskruen.

Koble en reléledning til hver skrue på baksiden av dørklokken, og stram skruen. Tilkoblingene er som vist på bildet. Siden reléet isolerer kretsen, spiller retningen ingen rolle hvilket relé som er festet til hvilken skrue.

Trinn 10: Fest Raspberry Pi til SECO-LARM

Fest Raspberry Pi til SECO-LARM
Fest Raspberry Pi til SECO-LARM
Fest Raspberry Pi til SECO-LARM
Fest Raspberry Pi til SECO-LARM

Før jeg hadde koden ferdig, var jeg og familien på ferie, og jeg åpnet nettleseren min. Min nettlesers siste visning var av garasjeportåpneren - siden oppdateres og garasjeporten åpnes. Noen dager senere ringte en nabo og spurte om garasjeporten skulle være åpen? Heldigvis kunne jeg lukke den fra 500 miles unna.

Denne snafuen tvang meg til å endre koden slik at dette ikke skulle skje, og legge til en sensor og tilstanden til garasjeporten til nettstedet.

Dette er en lenke til originalen som kan instrueres for å legge til en sensor. Gitt alt som allerede er fullført, kan installeringen av sensoren imidlertid forenkles sterkt, og i stedet for å bruke python kan du legge til et par linjer med kode til 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\no.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