Lav en automatisk låsende kontordør med Smartphone Proximity Sensor

Vi opretter en Raspberry Pi med en Bluetooth-adapter for at være på udkig efter, når din smartphone er uden for rækkevidde, og snap et relæ til handling for at låse døren.

Vi opretter en Raspberry Pi med en Bluetooth-adapter for at være på udkig efter, når din smartphone er uden for rækkevidde, og snap et relæ til handling for at låse døren.
Reklame

Pssst - vil have en højteknologisk beskyttelse til dit hjemmekontor eller en hemmelig lås til din "workshop" (ok, du har mig, det er faktisk et fangehul / spillerum), at børnene ikke kan finde ud af? Vi har fået dig dækket. Lad os bygge en DIY smart lås, der automatisk registrerer, når du er der, og låser, når du ikke er.

Hvordan virker det? INGEN VED! Eller mere specifikt Bluetooth.

Konceptet

Din smartphone er en kraftfuld enhed, der hele tiden afslører information om sig selv til omverdenen; en måde det gør her er bluetooth.

I funktionsmåde sender den et unikt identifikationsnummer - men selv når det ikke specifikt tillader sig at blive opdaget, kan alt, hvad der kender adressen, forsøge at pinge det. Hvis der høres et svar, vil det angive, om det er inden for rækkevidde eller ej.

Vi opretter en Raspberry Pi med en Bluetooth-adapter for konstant at være på udkig efter, når din smartphone er uden for rækkevidde, og når det er, kommer relæet til at virke og låse døren.

Du får brug for

  • Raspberry Pi - enhver model skal fungere, da det ikke er en CPU-intensiv opgave, men jeg bruger en ældre model B, og GPIO pinouts kan være lidt anderledes på din model. Se afsnittet om bordtilstand nedenfor. Du skal også have nogle grundlæggende ting som en kablet Ethernet-forbindelse eller Wi-Fi-konfigureret Opsætning af trådløst netværk på din Raspberry Pi Opsætning af trådløst netværk på din Raspberry Pi Næsten hvert Raspberry Pi-projekt vil kræve en netværksforbindelse og stor fleksibilitet kan opnås ved at ignorere Ethernet-porten til fordel for en trådløs USB-dongle. Læs mere ; plus SD-kort og micro USB-strømkabel.
  • Bluetooth USB-adapter. Adafruit sælger et Bluetooth 4.0-BLE-modul bekræftet arbejde (hvad er Bluetooth 4.0? Hvordan Bluetooth 4.0 formår fremtiden for mobilforbindelse Hvordan Bluetooth 4.0 er ved at forme fremtiden for mobilforbindelser Bluetooth er den glemte stjerne på enhedens specifikationsark. Læs mere), men Du bør teste alt du allerede har lyst til, før du køber en ny kun til dette projekt. Jeg fandt en gammel standard Bluetooth mini adapter jeg købte i Japan, der ser ud til at fungere fint. Vi er ligeglade med overførselshastigheder eller tilslutningssikkerhed, da alt vi laver er at sende et hurtigt håndtryk for at se, om en enhed lever og godt.
  • GPIO breakout board ("cobbler") og jumperkabler. Du kunne arbejde direkte fra stifterne på Pi, men det er meget lettere, hvis du har etiketter på hver stift, og de er kun $ 6 alligevel.
  • Relæbræt. Du har et bredt udvalg af muligheder her, og alt fungerer, hvis det er designet til brug med en mikrocontroller og kan køre mindst 12 volt ved 5 ampere. Jeg har brugt et generisk 4-kanals bord svarende til denne til omkring $ 5, men jeg går ud fra at antage, at du ved, hvordan du arbejder med dig.
  • 12 / 24V elektromagnetlås, selvom en elektronisk magnetlås også skal fungere. Den jeg købte har 180KG holdkraft og leveres komplet med monteringsplader og instruktioner, for omkring $ 35.
  • 12 / 24V strømforsyning. Magnetlåsen skal have en separat strømforsyning - uanset hvad du gør, må du ikke prøve at trække strøm til den fra Pi.
  • Lock.py Python app, men vi skriver det som vi går sammen.

Arbejder med Bluetooth

Bluetooth er centralt for dette projekt, så lad os begynde med at installere nogle Bluetooth-support og teste vores adapter. Du kan enten gøre dette direkte fra Pi eller SSH i fjerntliggende (hvordan du konfigurerer Windows til SSH i dig Pi Opsætning af din Raspberry Pi til hovedløs brug med SSH Opsætning af din Raspberry Pi til hovedløs brug med SSH Raspberry Pi kan acceptere SSH kommandoer, når de er tilsluttet et lokalt netværk (enten via Ethernet eller Wi-Fi), så du nemt kan konfigurere det. Fordelene ved SSH går ud over at forstyrre den daglige screening ... Læs mere).

sudo apt-get install bluez python-bluez 

Indsæt din dongle, hvis du ikke allerede har det, og lad os se på, hvad den rapporterer.

 hcitool dev 

Hvis du har noget angivet i produktionen, er du god til at gå. Dernæst bruger vi et Python-script til afstemning for nærliggende Bluetooth-enheder, og tag den unikke enhedsadresse. Vi behøver kun at gøre dette en gang for hver enhed.

 wget https://raw.githubusercontent.com/karulis/pybluez/master/examples/simple/inquiry.py python inquiry.py 

Hvis du ser "0 enheder fundet", har du heller ikke en kompatibel USB Bluetooth-dongle, eller din smartphone kan ikke ses. Fortvivl ikke dog: Jeg fandt, at jeg faktisk skulle åbne Bluetooth-indstillingssiden på min iPhone for at sparke den i funktionsmåde, da dette skete:

bluetooth identificeret

Great, lad os nu lave den første fase af vores software, der gør detektionen. Opret en Python app kaldet detect.py, og åbn den med Nano.

 nano detect.py 

Indsæt i denne prøvekode:

 #!/usr/bin/python import bluetooth import time while 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) if (result != None): print "User present" else: print "User out of range" time.sleep(10) 

og juster følgende linje med din Bluetooth-enhedsadresse:

 result = bluetooth.lookup_name('78:7F:70:38:51:1B', timeout=5) 

Tryk på CTRL-X og Y for at lukke og gemme. Kør den samme kode, og du ser noget sådan her:

bruger til stede detectpy

Koden skal være meget enkel at forstå, selvom du aldrig har rørt Python før: Det scanner til en bestemt Bluetooth-enhed hvert 10. sekund, og det udskriver en anden meddelelse afhængigt af om den er fundet eller ej. Skift Bluetooth på din telefon for at simulere at flytte ind og ud af området (sandsynligvis ca. 4m i virkeligheden). Du kan reducere eller øge tiden mellem scanninger, men jeg følte 10 sekunder var en rimelig tid til at kunne vente på døren til at låse op, hvilket er hvor vi hele tiden går med hele projektet.

Jeg skal tilføje, jeg ved ikke om strømforbruget af at gøre dette, men jeg ville antage at pinge en enhed oftere ville nødvendigvis forbruge mere strøm. Jeg har ikke set nogen åbenlyse præstationsproblemer i testen, men hvis batterilevetiden er et alvorligt problem for dig, overvej at have en switch inden for dit kontor, som aktiverer og deaktiverer scanningssløjfen, så når du er inde, kan du sætte låsningen til pause system, og genaktiver derefter scanningen, når du forlader.

Tillykke med, du har nu en Python app, der ved, når du er inden for rækkevidde, så vi kan begynde at handle på det.

GPIO Board Modes

Før du fortsætter, skal du finde ud af, hvilken styretilstand du skal bruge. Der er intet rigtigt eller forkert svar, det påvirker bare, om du angiver det bogstavnummer eller det virtuelle GPIO-pinnummer.

Standarden er at bruge det bogstavstastede nummer ("board mode"), begyndende med pin 1 nederst til venstre (hvis du ser ned ved Pi med USB-porte til højre). Pin 2 er lige over det.

Men hvis du har et GPIO breakout ("cobbler") bord, er de etiketter du har, fra en alternativ tilstand, kaldet "BCM" (Broadcom SOC kanal) og er almindeligt skrevet med GPIO eller P, der forudser nummeret. Du har ikke strengt brug for en GPIO breakout - det gør det bare lettere. Hvis du ikke har et breakout board og ikke ønsker at købe en, skal du bruge dette diagram:

Raspberry Pi model A og B pinout diagram fra RaspberryPi.org
Raspberry Pi model A og B pinout diagram fra RaspberryPi.org

Bemærk, at den originale model B revision 1, revision 2 og modellen B + og Pi2 alle har forskellige pin outs. Se dette StackExchange-spørgsmål for et diagram, der passer korrekt til dit bord.

I denne projektkode bruger jeg BCM GPIO nummereringssystemet, som svarer til Adafruit breakout bordet jeg har. Mindre ændringer er nødvendige, hvis du ønsker at bruge bogstavstiften.

Tråd i et relæ

Fastgør breakoutkortet, og sørg for, at ledningen fra ben 1 og 2 (dem i hjørnet af din Pi) vedhæftes til 3v3 og 5V0 på breakout. Du ønsker måske at trække en spændingstester ud for at kontrollere dette.

rpi smart lås - gpio

Før du fortsætter, skal du kontrollere, om nogen har brugt dit relæ med Raspberry Pi (eller find en på forhånd, som du ved). Nogle kan kræve, at 5V aktiveres - men RPi kan kun give 3.3V på GPIO udgangsstifterne. Ved en tilfældighed er den, jeg bruger, tilfreds med 3.3V, så jeg havde ikke brug for yderligere kredsløb, kun 5V0 til VCC, GND til GND og GPIO pin 23 til det første relæ input .

Min tidligere vejledning om GPIO Kom godt i gang med GPIO På en Raspberry Pi Kom i gang med GPIO På en Raspberry Pi Hvis du selvom Arduino var cool, bare vent indtil du hænder på en Raspberry Pi - disse ting er fantastiske. Ud over at være en fuldt funktionel computer, har de også en ... Læs mere viste, hvordan man wire en transistor kredsløb til at skala op 3.3V til en fuld 5V, hvis du har brug for (faktisk brugte jeg samme relæbræt til den vejledning, men det viser sig, at jeg ikke havde brug for 5V tross alt).

Der er ingen grund til at binde i elektromagneten endnu, da du kan høre et lydtryk, når relæet brænder.

Næste op, lad os gribe nogle kode for at interagere med GPIO-portene.

Vi begynder med at teste uden for Python for at bekræfte alt, der arbejder på havnene selv. Installer wiringPi, som giver dig nogle nyttige kommandolinjeværktøjer.

 git clone git://git.drogon.net/wiringPi cd wiringPi ./build 

Når du er installeret, skal du konfigurere GPIO-pin 23 til at være en udgang.

 gpio -g mode 23 out 

Nu skal du foretage en hurtig scanning af alle portene for at bekræfte

 gpio -g readall 

Du har noget lignende til dette, selvom dine kan være længere på en model B + eller Pi2, da den har flere GPIO-ben:

gpio readall

Dette kan være lidt forvirrende i første omgang, men bordet er delt ned i midten, og kolonnens rækkefølge er omvendt på hver side. Langt til venstre og langt til højre er BCM pin nummeret. Da vi bruger 23, skal du se den tilstand, der nu er angivet som OUT. Dette er en nyttig lille kommando bare for at få en god ide om hvad der sker med alle dine ben på ethvert tidspunkt.

For at skrive pin høj eller lav, brug bare

 gpio -g write 23 1 gpio -g write 23 0 

Forhåbentlig, hvis du har relæet tilsluttet korrekt, vil du høre det klikke på og fra. Hvis ikke, fortsæt ikke, før du har regnet ud ledningerne. Husk, du kan have brug for en højere spænding for at aktivere relæet.

Når du har bekræftet relæet og GPIO arbejder, skal du tilføje Python-modulerne til GPIO.

 sudo apt-get install python-dev python-rpi.gpio 

Lad os nu ændre vores Python app for at tænde eller slukke for relæet, når telefonen registreres. Du finder den endelige kode på denne Gist. Kopier den eksisterende detect.py til en ny lock.py, og tilføj følgende import- og opsætningskommandoer:

 import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) RELAY = 23 GPIO.setup(RELAY, GPIO.OUT) 

I IF-sætningen tilføjes en kommando for enten at aktivere eller deaktivere relæet. Bemærk, at dit relæ kan arbejde med enten et lavt eller et højt signal, så juster derefter efter test.

 GPIO.output(RELAY, 1) 

For at køre denne nye version skal prefix kommandoen med sudo - adgang til GPIO kræve root privilegier.

Hooking It Up

Når du har bekræftet, at relæet skyder med din nærhedsføler, skal du tilføje din elektromagnetlås. På relæsiden bringe 12V-positive ind i den terminale mærket COM (almindelig), så er den positive effektindgang fra elektromagneten til NO-terminalen ( normalt åben, dvs. det er normalt ikke forbundet til den fælles terminal, men vil være, når du aktiver relæet ).

Tilslut jorden fra strømforsyningen og elektromagneten på GND-terminalen.

rpi smart lock-relæ

Se de monteringsanvisninger, der fulgte med din lås; døren skal være ret tyk, og det er lettere, hvis det åbner væk fra siden, hvor du vil have låsen til at være på. Mine var det modsatte, så jeg har brug for den L-formede monteringsbeslag samt en ekstra smule træ for at øge dørtykkelsen.

rpi smart lås - elektromagnet

Forbedringer

Dette var et bevis på konceptet for mig at bygge videre på med andre projekter, og virkelig bare for at holde nysgerrige øjne ude af mit kontor, når jeg ikke er der - det er ikke designet til at være et idiotsikkert sikkerhedssystem. For det ville du have brug for et backup-batteri for at holde strømmen flydende i tilfælde af at blive skåret.

Selvfølgelig, hvis nogen bryder ind i dit hus og går i besvær med at skære din magt, har du sikkert fået det største problem af dem at være en psykopat, der er ude for at dræbe dig, snarere end en afslappet indbrudstyv. Du vil også have en fysisk deadbolt-lås foruden en elektronisk, og en rigtig stor pind.

Selvfølgelig er denne nærhedsdetekteringsteknik ved hjælp af Bluetooth ikke kun begrænset til en automatisk dørlås - du kan også bruge den til at udløse din garageportåbning, når du kommer hjem eller tænder din hjemmebiograf, inden du går i døren.

Hvilken funktion tror du, jeg skal tilføje næste? Har du nogen problemer med at opbygge dette? Lad mig vide i kommentarerne og jeg vil gøre mit bedste for at hjælpe!

In this article