Lag en automatisk låsende kontordør med Smartphone Proximity Sensor
Pssst - vil ha høyteknologisk beskyttelse for hjemmekontoret din, eller en hemmelig lås for din “verksted” (ok, du har meg, det er faktisk et fangehull / spillrom) at barna ikke vil kunne finne ut? Vi har deg dekket. La oss bygge en DIY smart lås som automatisk oppdager når du er der, og låser når du ikke er.
Hvordan virker det? INGEN VET! Eller mer spesifikt, Bluetooth.
Konseptet
Din smarttelefon er en kraftig enhet som kontinuerlig avslører informasjon om seg selv til omverdenen; en måte det gjør dette er Bluetooth.
I funksjonsmodus sender den et unikt identifikasjonsnummer - men selv når det ikke er mulig å oppdage det, kan alt som kjenner adressen, forsøke å pinge den. Hvis et svar blir hørt, vil det indikere om det er innenfor rekkevidde eller ikke.
Vi skal sette opp en Raspberry Pi med en Bluetooth-adapter for alltid å være på utkikk etter når smarttelefonen er utenfor rekkevidde, og når det er, vil reléet knytte seg til handling og låse døren.
Du vil trenge
- Raspberry Pi - hvilken som helst modell skal fungere siden det ikke er en CPU-intensiv oppgave, men jeg bruker en eldre modell B, og GPIO pinouts kan være litt annerledes på modellen din. Se avsnittet om bordmodus nedenfor. Du vil også trenge grunnleggende detaljer som en kablet Ethernet-tilkobling eller Wi-Fi-konfigurert Sette opp trådløst nettverk på din Raspberry Pi Opprette trådløst nettverk på din Raspberry Pi Nesten hvert Raspberry Pi-prosjekt vil kreve en nettverkstilkobling, og stor fleksibilitet kan oppnås ved å ignorere Ethernet-porten til fordel for en trådløs USB-dongle. Les mer ; pluss SD-kort og mikro USB-strømkabel.
- Bluetooth USB-adapter. Adafruit selger en Bluetooth 4.0 BLE-modul bekreftet arbeid (hva er Bluetooth 4.0? Hvordan Bluetooth 4.0 skaper fremtiden for mobiltilkobling Hvordan Bluetooth 4.0 skaper fremtiden for mobiltilkobling Bluetooth er den glemte stjernen på enhetens spesifikasjonsark. Les mer), men Du bør teste alt du allerede har lyst på før du kjøper en ny bare for dette prosjektet. Jeg fant en gammel standard Bluetooth mini adapter jeg kjøpte i Japan som ser ut til å fungere bra. Vi bryr oss ikke om overføringshastigheter eller tilkoblingssikkerhet, da alt vi gjør er å sende ut et raskt håndtrykk for å se om en enhet er i live og bra.
- GPIO breakout bord (“fruktpai”) og jumperkabler. Du kan jobbe direkte fra pinnene på Pi, men det er mye enklere hvis du har etiketter på hver pinne, og de er bare $ 6 uansett.
- Relébrett. Du har et bredt utvalg av valg her, og alt fungerer hvis det er designet for bruk med en mikrokontroller og kan kjøre minst 12 volt ved 5 ampere. Jeg har brukt en generisk 4-kanals brett som ligner på denne for rundt $ 5, men jeg antar at du vet hvordan du skal jobbe.
- 12 / 24V elektromagnetlås, men en elektronisk magnetlås skal også fungere. Den jeg kjøpte, har 180kg holdkraft og leveres komplett med monteringsplater og instruksjoner, for rundt $ 35.
- 12 / 24V strømforsyning. Magnetlåsen må ha en separat strømforsyning - uansett hva du gjør, ikke prøv å trekke strøm for det fra Pi.
- Lock.py Python app, men vi vil skrive dette når vi går.
Arbeider med Bluetooth
Bluetooth er sentralt i dette prosjektet, så la oss starte med å installere litt Bluetooth-støtte og teste adapteren vår. Du kan enten gjøre dette direkte fra Pi eller SSH i fjerntliggende (hvordan du konfigurerer Windows til SSH i deg Pi Sette opp Raspberry Pi For Headless Bruk Med SSH Sette opp Raspberry Pi For Headless Bruk Med SSH Raspberry Pi kan godta SSH kommandoer når du er koblet til et lokalt nettverk (enten via Ethernet eller Wi-Fi), slik at du enkelt kan sette opp. Fordelene ved SSH går utover å forstyrre den daglige screeningen ... Les mer).
sudo apt-get installer bluez python-bluez
Sett inn donglen din hvis du ikke allerede har det, og la oss se på hva den rapporterer.
hcitool dev
Hvis du har noe oppført i produksjonen, er du god til å gå. Deretter bruker vi et Python-skript for å avstemme for nærliggende Bluetooth-enheter, og ta tak i den unike enhetsadressen. Vi trenger bare å gjøre dette en gang for hver enhet.
wget https://raw.githubusercontent.com/karulis/pybluez/master/examples/simple/inquiry.py python inquiry.py
Hvis du ser “0 enheter funnet”, Du har heller ikke en kompatibel USB Bluetooth-dongle, eller smarttelefonen din kan ikke oppdages. Ikke fortvil deg skjønt: Jeg fant jeg måtte åpne Bluetooth-innstillingssiden på min iPhone for å sparke den til funnmodus, da skjedde dette:
Flott, la oss lage den første fasen av programvaren vår som gjør deteksjonen. Opprett en Python app kalt detect.py, og åpne den med nano.
nano detect.py
Lim inn i denne prøvekoden:
#! / usr / bin / python import bluetooth importtid mens True: print "Checking" + time.strftime ("% a,% d% b% Y% H:% M:% S", time.gmtime result = bluetooth.lookup_name ('78: 7F: 70: 38: 51: 1B ', timeout = 5) hvis (resultat! = Ingen): skriv ut "Bruker stede" annet: skriv ut "Bruker utenfor rekkevidde" time.sleep 10)
og juster følgende linje med Bluetooth-enhetsadressen din:
result = bluetooth.lookup_name ('78: 7F: 70: 38: 51: 1B ', timeout = 5)
trykk CTRL-X og Y å lukke og lagre. Kjør den samme koden, og du ser noe slikt:
Koden skal være veldig enkel å forstå selv om du aldri har rørt Python før: Det skanner for en bestemt Bluetooth-enhet hvert 10. sekund, og det skriver ut en annen melding, avhengig av om den er funnet eller ikke. Bytt Bluetooth på telefonen for å simulere flytting inn og ut av området (sannsynligvis ca. 4m i virkeligheten). Du kan redusere eller øke tiden mellom skanninger, men jeg følte at 10 sekunder var en rimelig tid å potensielt måtte vente på at døren skulle låse opp, noe som er hvor vi går med hele dette prosjektet etter alt.
Jeg bør legge til, jeg vet ikke om strømforbruket ved å gjøre dette, men jeg antar at pinging en enhet oftere ville nødvendigvis forbruke mer strøm. Jeg har ikke sett noen åpenbare ytelsesproblemer i testing, men hvis batterilevetiden er et alvorlig problem for deg, bør du vurdere å ha en bryter inne på kontoret ditt som aktiverer og deaktiverer skanneløkken, så når du er inne, kan du sette lås på pause system, og aktiver deretter skanningen når du reiser.
Gratulerer, du har nå en Python-app som vet når du er innenfor rekkevidde, så vi kan begynne å handle på det.
GPIO Board Modes
Før du fortsetter, må du finne ut hvilken styremodus du skal bruke. Det er ikke noe riktig eller feil svar, det påvirker bare om du oppgir bokstavsnummeret eller det virtuelle GPIO-pinnummeret.
Standard er å bruke bokstavsnummeret (“brettmodus”), starter med pin 1 nederst til venstre (hvis du ser ned på Pi med USB-porter på høyre side). Pin 2 er like over det.
Men hvis du har en GPIO-pause (“fruktpai”) bordet, etikettene du har er fra en alternativ modus, kalt “BCM” (Broadcom SOC kanal), og er vanligvis skrevet med GPIO eller P prefixing nummeret. Du trenger ikke strengt en GPIO-breakout - det gjør det bare enklere. Hvis du ikke har et breakout bord og ikke vil kjøpe en, bruk dette diagrammet:
Merk at den opprinnelige modellen B revisjon 1, revisjon 2, og modellen B + og Pi2 alle har forskjellige pin-outs. Se dette StackExchange-spørsmålet for et diagram som er riktig på brettet ditt.
I denne prosjektkoden bruker jeg BCM GPIO nummereringssystemet som tilsvarer Adafruit breakout bordet jeg har. Mindre endringer er nødvendig hvis du ønsker å bruke bokstavstast modus.
Tråd i et relé
Fest pennbrettet, og sørg for at ledningen fra pinnene 1 og 2 (de i hjørnene på Pi) festes til 3v3 og 5V0 på pause. Du vil kanskje trekke ut en spenningstester for å sjekke dette.
Før du fortsetter, sjekk om noen andre har brukt ditt eget relé med Raspberry Pi (eller finn en på forhånd som du vet). Noen kan kreve at 5V aktiveres - men RPi kan bare gi 3,3 V på GPIO utgangspinnene. Ved en tilfeldighet er den jeg bruker, lykkelig med 3.3V, så jeg trengte ikke noen ekstra kretser, bare 5V0 til VCC, GND til GND, og GPIO-pin 23 for det første reléinngangen.
Min forrige veiledning på GPIO Komme i gang med GPIO På en bringebær Pi Komme i gang med GPIO På en bringebær Pi Hvis du, selv om Arduino var kult, bare vent til du får hendene på en Raspberry Pi - disse tingene er fantastiske. I tillegg til å være en fullt funksjonell datamaskin, har de også en ... Les mer viste hvordan man kobler en transistorkrets til å skala opp 3.3V til en full 5V hvis du trenger (faktisk brukte jeg samme relébrett for den opplæringen , men det viser seg at jeg ikke trengte 5V tross alt).
Du trenger ikke å koble inn i elektromagneten enda, siden du kan høre et hørbart klikk når reléet brenner.
Neste opp, la oss få tak i noe kode for å kommunisere med GPIO-porter.
Vi starter med å teste utenfor Python for å bekrefte alt som fungerer på portene selv. Installer wiringPi, som gir deg noen nyttige kommandolinjeverktøy.
git klone git: //git.drogon.net/wiringPi cd wiringPi ./build
Når du har installert, må du konfigurere GPIO-pin 23 for å være en utgang.
gpio-g modus 23 ut
Nå, gjør en rask skanning av alle portene for å bekrefte
gpio-g readall
Du har noe som ligner på dette, selv om det kan være lengre på en modell B + eller Pi2 siden det har flere GPIO-pins:
Dette kan være litt forvirrende først, men bordet er delt ned i midten og kolonnordren er reversert på hver side. Langt til venstre og langt til høyre er BCM pin nummer. Siden vi bruker 23, bør du se modusen som er oppført nå som UT. Dette er en nyttig liten kommando bare for å få en god ide om hva som skjer med alle dine pins til enhver tid.
For å skrive pinnen høy eller lav, bruk bare
gpio -g skrive 23 1 gpio -g skrive 23 0
Forhåpentligvis, hvis du har reléet koblet riktig, vil du høre at det klikker på og av. Hvis ikke, fortsett ikke før du har funnet ut ledningen. Husk at du må ha høyere spenning for å aktivere reléet.
Når du har bekreftet reléet og GPIO jobber, legger du til Python-modulene for GPIO.
sudo apt-get install python-dev python-rpi.gpio
La oss nå endre Python-appen for å slå av eller på reléet når telefonen er oppdaget. Du finner den siste koden på denne Gist. Kopier eksisterende detect.py til en ny lock.py, og legg til følgende import- og oppsettkommandoer:
importer RPi.GPIO som GPIO GPIO.setmode (GPIO.BCM) RELAY = 23 GPIO.setup (RELAY, GPIO.OUT)
I IF-setningen legger du til en kommando for å enten aktivere eller deaktivere reléet. Vær oppmerksom på at reléet ditt kan virke med enten lavt eller høyt signal, så juster deretter etter testing.
GPIO.output (RELAY, 1)
For å kjøre denne nye versjonen, prefiks kommandoen med sudo - tilgang til GPIO krever root privilegier.
Hooking It Up
Når du har bekreftet at reléet skyter med nærhetssensoren, legger du i din elektromagnetlås. På relésiden, ta 12V-positive inn i terminalen merket COM (vanlig), så den positive strøminngangen fra elektromagneten til NO-terminalen (normalt åpen, dvs. Dette er normalt ikke koblet til den felles terminalen, men vil være når du aktiverer reléet).
Bli med i bakken fra strømforsyningen og elektromagneten på GND-terminalen.
Se monteringsanvisningene som fulgte med låsen din. døren må være ganske tykk, og det er lettere om det åpnes vekk fra siden du vil at låsen skal være på. Gruven var motsatt, så jeg trenger den L-formede monteringsbraketten, samt en ekstra bit av tre for å øke dørtykkelsen.
forbedringer
Dette var et konseptbevis for meg å bygge videre på med andre prosjekter, og egentlig bare for å holde nysgjerrige øyne ut av kontoret mitt når jeg ikke er der - det er ikke designet for å være et idiotsikkert sikkerhetssystem. For det vil du trenge et reservebatteri for å holde strømmen flyter ved kutting.
Selvfølgelig, hvis noen bryter inn i huset ditt og går i vanskeligheter med å kutte din makt, har du sikkert fått det større problemet med å være en psykopat som er ute for å drepe deg, snarere enn en uformell innbruddstyv. Du vil også ha en fysisk deadbolt-lås i tillegg til en elektronisk, og en veldig stor pinne.
Selvfølgelig er denne nærhetsdetekteringsteknikken ved hjelp av Bluetooth ikke bare begrenset til en automatisk dørlås - du kan også bruke den til å utløse garasjeportåpningen når du kommer hjem, eller slå på hjemmekinoen din før du går i døren.
Hvilken funksjon tror du jeg skal legge til neste? Har du noen problemer med å bygge dette? Gi meg beskjed i kommentarene, og jeg vil gjøre mitt beste for å hjelpe!
Utforsk mer om: Home Security, Smart Locks.