Maak een automatisch vergrendelde kantoordeur met smartphone-nabijheidssensor
Pssst - wil wat high-tech bescherming voor uw thuiskantoor, of een geheim slot voor uw “werkplaats” (ok, je hebt me, het is eigenlijk een kerker / speelkamer) dat 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 als 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, want we sturen alleen een snelle handdruk om te zien of een apparaat nog springlevend is.
- GPIO breakout-bord (“schoenlapper”) 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 moet doen.
- 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 aansluiting op een lokaal netwerk (via Ethernet of Wi-Fi), zodat u het gemakkelijk kunt instellen. De voordelen van SSH gaan verder dan het verstoren van de dagelijkse screening ... Lees Meer).
sudo apt-get installeer 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 je het ziet “0 apparaten gevonden”, je hebt of geen compatibele USB Bluetooth-dongle, of je smartphone kan niet worden gevonden. Wanhoop echter niet: ik merkte dat ik de Bluetooth-instellingenpagina op mijn iPhone eigenlijk moest openen om deze in de ontdekkingsmodus te brengen, waarna dit gebeurde:
Geweldig, laten we nu de eerste fase van onze software maken die de detectie doet. Maak een Python-app genaamd detect.py, en open het 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" anders: 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 sluiten en opslaan. Voer dezelfde code uit en u ziet zoiets als dit:
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 je in en uit het bereik beweegt (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 nu met dit hele project naartoe gaan..
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 bij 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 te gebruiken (“bordmodus”), beginnend met pen 1 linksonder (als u naar beneden kijkt naar de Pi met USB-poorten aan de rechterkant). Pin 2 is net daarboven.
Als u echter een GPIO-breakout hebt (“schoenlapper”) bord, de labels die je hebt komen uit een alternatieve modus, genaamd “BCM” (Broadcom SOC-kanaal) 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:
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 pin 1 en 2 (die in de hoek van je Pi) aan 3v3 en 5V0 vastzitten bij het doorbreken. Misschien wilt u een spanningstester uittrekken om dit te controleren.
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 tot VCC, GND tot GND, en GPIO-pen 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 een ... 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 hetzelfde relaisbord gebruikt voor die zelfstudie , 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 modus 23 uit
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:
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 schrijf 23 1 gpio -g schrijf 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 het bestaande detect.py naar een nieuw lock.py, en voeg de volgende import- en setup-opdrachten toe:
import RPi.GPIO als 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 (RELAIS 1)
Als u deze nieuwe versie wilt uitvoeren, voert u de opdracht in met sudo - voor toegang tot GPIO zijn rootprivileges vereist.
Aansluiten
Zodra je hebt bevestigd dat het relais met je nabijheidssensor afgaat, voeg je je elektromagnetische vergrendeling toe. Breng aan de relaiszijde de 12V-positieve in de aansluiting met het label COM (common) en vervolgens het positieve vermogen van de elektromagneet naar de NO-klem (normaal open, dwz. dit is normaal gesproken niet verbonden met de gemeenschappelijke terminal, maar zal zijn wanneer u het relais activeert).
Verbind de aarde met de voeding en de elektromagneet op de GND-terminal.
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.
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 nabijheidsdetectie 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!
Ontdek meer over: Home Security, Smart Locks.