Maak een automatisch vergrendelde kantoordeur met smartphone-nabijheidssensor

We gaan een Raspberry Pi opzetten met een Bluetooth-adapter om op te letten wanneer uw smartphone buiten bereik is en een relais in actie te brengen om de deur te vergrendelen.

We gaan een Raspberry Pi opzetten met een Bluetooth-adapter om op te letten wanneer uw smartphone buiten bereik is en een relais in actie te brengen om de deur te vergrendelen.
Advertentie

Pssst - wil wat high-tech bescherming voor je thuiskantoor, of een geheim slot voor je "werkplaats" (ok, je hebt me, het is eigenlijk een kerker / speelkamer) die de kinderen niet zullen kunnen achterhalen? We hebben je gedekt. Laten we een slimme DIY-vergrendeling bouwen die automatisch detecteert wanneer u daar bent en vergrendelt als u dat niet bent.

Hoe werkt het? NIEMAND WEET! Of meer specifiek, Bluetooth.

Het concept

Uw smartphone is een krachtig apparaat dat voortdurend informatie over zichzelf aan de buitenwereld onthult; een manier waarop dit gebeurt is Bluetooth.

In de detectiemodus zendt het een uniek identificatienummer uit - maar zelfs wanneer het niet specifiek toestaat dat het wordt ontdekt, kan alles dat dat adres kent, proberen het te pingen. Als er een antwoord wordt gehoord, geeft dat aan of het binnen bereik is of niet.

We zullen een Raspberry Pi met een Bluetooth-adapter opzetten om constant op zoek te zijn naar wanneer uw smartphone buiten bereik is, en wanneer dit het geval is, zal het relais in actie komen en de deur vergrendelen.

Je zal nodig hebben

  • Raspberry Pi - elk model zou moeten werken omdat het geen CPU-intensieve taak is, maar ik gebruik een ouder model B en de GPIO-pinnen kunnen enigszins afwijken op uw model. Zie het gedeelte over boordmodus hieronder. Je hebt ook wat basisvaardigheden nodig, zoals een bekabelde Ethernet-verbinding of Wi-Fi geconfigureerd Draadloos netwerk opzetten op je Raspberry Pi Draadloos netwerk opzetten op je Raspberry Pi Vrijwel elk Raspberry Pi-project vereist een netwerkverbinding en er is veel flexibiliteit te behalen door de Ethernet-poort te negeren in het voordeel van een draadloze USB-dongle. Lees verder ; plus SD-kaart en micro USB-voedingskabel.
  • Bluetooth USB-adapter. Adafruit verkoopt een Bluetooth 4.0 BLE-module bevestigd werken (wat is Bluetooth 4.0? Hoe Bluetooth 4.0 de toekomst van mobiele connectiviteit vormgeeft Hoe Bluetooth 4.0 de toekomst van mobiele connectiviteit vormgeeft Bluetooth is de vergeten ster op het blad met apparaatspecificaties Lees meer), maar je zou moeten testen of je al liegt voordat je een nieuwe aanschaft, alleen voor dit project. Ik vond een oude standaard Bluetooth mini-adapter die ik in Japan heb gekocht en die prima lijkt te werken. We geven niet om overdrachtssnelheden of verbindingsbetrouwbaarheid, omdat we alleen maar een snelle handdruk versturen om te zien of een apparaat nog springlevend is.
  • GPIO breakout board ("cobbler") en startkabels. Je zou direct vanaf de pinnen op de Pi kunnen werken, maar het is een stuk eenvoudiger als je labels op elke pin hebt en ze zijn toch maar $ 6.
  • Relais bord. Je hebt hier een grote verscheidenheid aan keuzes, en alles werkt als het is ontworpen voor gebruik met een microcontroller en met minimaal 12 volt bij 5 ampère. Ik heb een generiek 4-kanaals bord gebruikt dat ongeveer gelijk is aan dit voor $ 5, maar ik ga ervan uit dat je weet hoe je het jouwe kunt gebruiken.
  • 12 / 24V elektromagnetische vergrendeling, hoewel een elektronisch magneetventiel ook zou moeten werken. Degene die ik heb gekocht heeft 180 kg houdkracht en wordt geleverd met montageplaten en instructies, voor ongeveer $ 35.
  • 12 / 24V voeding. De magneetvergrendeling moet een afzonderlijke voeding hebben. Wat u ook doet, probeer niet om stroom van de Pi te trekken.
  • Lock.py Python-app, maar we schrijven dit terwijl we verder gaan.

Werken met Bluetooth

Bluetooth staat centraal in dit project, dus laten we beginnen met het installeren van enkele Bluetooth-ondersteuning en onze adapter testen. Je kunt dit rechtstreeks vanaf de Pi of SSH op afstand doen (hoe je Windows in SSH instelt in jou Pi Je Raspberry Pi instellen voor zonder hoofd Gebruik met SSH Je Raspberry Pi instellen voor gebruik zonder hoofd met SSH De Raspberry Pi kan accepteren SSH-opdrachten bij verbinding met een lokaal netwerk (via Ethernet of Wi-Fi), zodat u het eenvoudig kunt instellen. De voordelen van SSH gaan verder dan het verstoren van de dagelijkse screening ... Lees meer).

sudo apt-get install bluez python-bluez 

Voer uw dongle in als u dat nog niet heeft gedaan, en laten we eens kijken wat het rapporteert.

 hcitool dev 

Als je iets op de uitvoer hebt staan, ben je klaar om te gaan. Vervolgens gebruiken we een Python-script om in de buurt van Bluetooth-apparaten te pollen en het unieke apparaat-adres te bemachtigen. We hoeven dit slechts één keer voor elk apparaat te doen.

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

Als u '0 apparaten gevonden' ziet, hebt u ofwel geen compatibele USB Bluetooth-dongle of is uw smartphone niet vindbaar. Wanhoop echter niet: ik merkte dat ik de Bluetooth-instellingenpagina op mijn iPhone eigenlijk moest openen om het in de ontdekkingsmodus te brengen, waarna dit gebeurde:

bluetooth geïdentificeerd

Geweldig, laten we nu de eerste fase van onze software maken die de detectie doet. Maak een Python-app met de naam detect.py en open deze met Nano.

 nano detect.py 

Plak in deze voorbeeldcode:

 #!/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) 

en pas de volgende regel aan met uw Bluetooth-apparaatadres:

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

Druk op CTRL-X en Y om te sluiten en op te slaan. Voer dezelfde code uit en u ziet zoiets als dit:

gebruiker aanwezig detectpy

De code moet heel eenvoudig te begrijpen zijn, zelfs als je nog nooit Python hebt aangeraakt: het zoekt elke 10 seconden naar een bepaald Bluetooth-apparaat en het print een ander bericht afhankelijk van of het wel of niet is gevonden. Schakel de Bluetooth op je telefoon in om te simuleren dat het bereik binnen bereik en buiten bereik is (waarschijnlijk ongeveer 4 meter in werkelijkheid). Je kunt de tijd tussen scans verkorten of verlengen, maar ik vond dat 10 seconden een redelijke hoeveelheid tijd was om mogelijk te moeten wachten tot de deur werd ontgrendeld, en dat is waar we uiteindelijk met dit hele project mee bezig zijn.

Ik moet hieraan toevoegen dat ik niet weet wat het energieverbruik is om dit te doen, maar ik veronderstel dat het pingen van een apparaat vaker zou leiden tot meer stroomverbruik. Ik heb geen duidelijke problemen met de prestaties gezien tijdens het testen, maar als de levensduur van de batterij een ernstige zorg voor u is, overweeg dan om een ​​schakelaar in uw kantoor te hebben die de scanlus activeert en deactiveert, zodat u, zodra u binnen bent, het slot kunt pauzeren systeem, en activeer vervolgens het scannen wanneer u weggaat.

Gefeliciteerd, je hebt nu een Python-app die weet wanneer je binnen bereik bent, dus we kunnen daarnaar handelen.

GPIO Board-modus

Voordat je doorgaat, moet je uitzoeken welke bordmodus je gaat gebruiken. Er is geen goed of fout antwoord, het heeft alleen invloed op het feit of u het letterlijke pincode of het virtuele GPIO-pincode opgeeft.

De standaard is om het letterlijke pincode ("bordmodus") te gebruiken, beginnend met pin 1 linksonder (als je naar beneden kijkt naar de Pi met USB-poorten aan de rechterkant). Pin 2 is net daarboven.

Als u echter een GPIO-breakout ("cobbler") -kaart hebt, zijn de labels die u hebt afkomstig uit een alternatieve modus, "BCM" (Broadcom SOC-kanaal) genoemd, en worden meestal geschreven met GPIO of P als voorvoegsel voor het nummer. Je hebt niet echt een GPIO-breakout nodig - het maakt dingen gewoon gemakkelijker. Als je geen breakout-board hebt en er geen wilt kopen, gebruik dan dit schema:

Raspberry Pi model A en B pin-out diagram van RaspberryPi.org
Raspberry Pi model A en B pin-out diagram van RaspberryPi.org

Merk op dat de originele model B revisie 1, revisie 2 en het model B + en Pi2 alle verschillende pinnen hebben. Raadpleeg deze StackExchange-vraag voor een diagram dat op uw bord past.

In deze projectcode gebruik ik het BCM GPIO-nummeringssysteem dat overeenkomt met het Adafruit-breakout-bord dat ik heb. Kleine aanpassingen zijn nodig als u de letterlijke pincode wilt gebruiken.

Draad in een relais

Bevestig de breakout-kaart en zorg ervoor dat de draad van pinnen 1 en 2 (die in de hoek van je pi) zich verbinden met 3v3 en 5V0 bij het doorbreken. Misschien wilt u een spanningstester uittrekken om dit te controleren.

rpi smart lock - gpio

Controleer voordat u verdergaat of iemand anders uw specifieke estafette heeft gebruikt met de Raspberry Pi (of zoek er één waarvan u weet dat het werkt). Sommige hebben misschien 5V nodig om te activeren - maar de RPi kan slechts 3, 3V leveren op de GPIO-uitgangspennen. Bij toeval, degene die ik gebruik is blij met 3.3V, dus ik had geen extra circuits nodig, alleen de 5V0 naar VCC, GND naar GND, en GPIO pin 23 voor de eerste relaisingang .

Mijn vorige tutorial over GPIO Aan de slag met GPIO Op een Raspberry Pi Aan de slag met GPIO Op een Raspberry Pi Als je dacht dat de Arduino cool was, wacht dan even tot je een Raspberry Pi hebt gevonden - deze dingen zijn geweldig. Ze zijn niet alleen een volledig functionele computer, ze hebben ook ... Lees meer over hoe je een transistorcircuit kunt bedraden om 3.3V te vergroten tot een volledige 5V als dat nodig is (in feite heb ik dezelfde relaiskaart gebruikt voor die tutorial, maar het bleek dat ik toch geen 5V nodig had).

U hoeft de elektromagneet nog niet aan te sluiten, omdat u een hoorbare klik hoort wanneer het relais vuurt.

Laten we vervolgens een code nemen om te communiceren met de GPIO-poorten.

We beginnen met testen buiten Python om te controleren of alles werkt aan de poorten zelf. Installeer bedradingPi, waarmee u enkele nuttige opdrachtregelprogramma's krijgt.

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

Na installatie, configureert u GPIO-pin 23 als een uitvoer.

 gpio -g mode 23 out 

Voer nu een quick scan uit van alle poorten om te bevestigen

 gpio -g readall 

Je hebt iets vergelijkbaars, hoewel het jouwe misschien langer is op een model B + of Pi2 omdat het meer GPIO-pinnen heeft:

gpio readall

Dit kan aanvankelijk een beetje verwarrend zijn, maar de tafel is in het midden verdeeld en de kolomvolgorde is aan elke kant omgekeerd. Helemaal links en uiterst rechts staat het BCM-pincode. Aangezien we 23 gebruiken, zou je de modus nu als OUT moeten zien. Dit is een handig klein commando om op elk moment een goed beeld te krijgen van wat er met al je pinnen gebeurt.

Gebruik gewoon de pen om hoog of laag te schrijven

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

Hopelijk hoor je het relais aan en uit als je het relais correct hebt bedraad. Als dat niet zo is, ga dan niet verder totdat je de bedrading hebt uitgezocht. Vergeet niet dat u mogelijk een hogere spanning nodig hebt om het relais te activeren.

Nadat je het relais hebt bevestigd en GPIO werkt, voeg je de Python-modules voor GPIO toe.

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

Laten we nu onze Python-app aanpassen om het relais aan of uit te zetten wanneer de telefoon wordt gedetecteerd. Je vindt de definitieve code op deze Gist. Kopieer de bestaande detect.py naar een nieuwe lock.py en voeg de volgende import- en setup-opdrachten toe:

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

Voeg in de IF-instructie een opdracht toe om het relais te activeren of te deactiveren. Let op: uw relais kan werken met een laag of hoog signaal, dus pas het na het testen dienovereenkomstig aan.

 GPIO.output(RELAY, 1) 

Om deze nieuwe versie uit te voeren, voert u de opdracht in met sudo - toegang tot GPIO vereist rootprivileges.

Aansluiten

Zodra je hebt bevestigd dat het relais met je nabijheidssensor afgaat, voeg je je elektromagnetische vergrendeling toe. Breng aan de relaisserkant de 12V-positieve in de aansluiting met het label COM (common) en vervolgens het positieve vermogen van de elektromagneet naar de NO-aansluiting ( normaal open, dat wil zeggen, dit is normaal gesproken niet verbonden met de gemeenschappelijke terminal, maar komt activeer het relais ).

Verbind de aarde met de voeding en de elektromagneet op de GND-terminal.

rpi smart lock - relais

Raadpleeg de montage-instructies die bij uw slot zijn geleverd; de deur moet behoorlijk dik zijn, en het is gemakkelijker als het open gaat van de zijkant waar je het slot op wilt hebben. Mijne was het tegenovergestelde, dus ik heb de L-vormige montagebeugel nodig, evenals een extra beetje hout om de dikte van de deur te vergroten.

rpi smart lock - elektromagneet

verbeteringen

Dit was een proof of concept om verder te bouwen met andere projecten, en eigenlijk alleen maar om nieuwsgierige blikken uit mijn kantoor te houden als ik er niet ben - het is niet ontworpen als een onfeilbaar beveiligingssysteem. Daarvoor hebt u een reservebatterij nodig om de stroom te laten stromen in geval van snijden.

Natuurlijk, als iemand in je huis inbreekt en de moeite neemt om je macht te verminderen, dan heb je waarschijnlijk het grotere probleem dat ze een psychopaat zijn die jou wil doden in plaats van een toevallige inbreker. Je zou ook een fysiek nachtschootslot naast een elektronisch slot en een echt grote stick willen.

Natuurlijk is deze techniek voor nabijheiddetectie met Bluetooth niet alleen beperkt tot een automatisch deurslot - je kunt het ook gebruiken om de deur van je garagedeur te activeren wanneer je thuiskomt, of je thuisbioscoop aanzetten voordat je door de deur loopt.

Welke functie denk je dat ik hierna moet toevoegen? Heb je problemen gehad met het bouwen hiervan? Laat het me weten in de comments en ik zal mijn best doen om te helpen!

In this article