Gör en automatisk låsande kontorsdörr med Smartphone Proximity Sensor

Vi kommer att sätta upp en Raspberry Pi med en Bluetooth-adapter för att leta efter när din smartphone är utom räckhåll och snäpp ett relä till handling för att låsa dörren.

Vi kommer att sätta upp en Raspberry Pi med en Bluetooth-adapter för att leta efter när din smartphone är utom räckhåll och snäpp ett relä till handling för att låsa dörren.
Annons

Pssst - vill ha något högteknologiskt skydd för ditt hemmakontor eller ett hemligt lås för din "workshop" (ok, du fick mig, det är faktiskt ett fängelse / spelrum) att barnen inte kommer att kunna räkna ut? Vi har täckt dig. Låt oss bygga ett DIY smart lås som automatiskt upptäcker när du är där och låser när du inte är.

Hur fungerar det? INGEN VET! Eller mer specifikt Bluetooth.

Konceptet

Din smartphone är en kraftfull enhet som ständigt avslöjar information om sig själv till omvärlden; ett sätt det gör det här är bluetooth.

I funktionsläget sänder det ett unikt identifieringsnummer - men även när det inte är möjligt att upptäcka sig själv, kan allt som känner till adressen försöka pinga den. Om ett svar hörs, skulle det indikera om det är inom räckvidd eller inte.

Vi sätter upp en Raspberry Pi med en Bluetooth-adapter för att ständigt leta efter när din smartphone är utom räckhåll, och när det är kommer reläet att snäppa till handling och låsa dörren.

Du kommer behöva

  • Raspberry Pi - någon modell ska fungera eftersom det inte är en CPU-intensiv uppgift, men jag använder en äldre modell B, och GPIO pinouts kan vara lite annorlunda på din modell. Se avsnittet ombordsläge nedan. Du behöver också några grunder som en trådbunden Ethernet-anslutning eller Wi-Fi konfigurerad Konfigurera trådlöst nätverk på din Raspberry Pi Ställa in trådlöst nätverk på din Raspberry Pi Nästan varje Raspberry Pi-projekt kräver en nätverksanslutning och stor flexibilitet kan uppnås genom att ignorera Ethernet-porten till förmån för en trådlös USB-dongle. Läs mer ; plus SD-kort och mikro USB-strömkabel.
  • Bluetooth USB-adapter. Adafruit säljer en Bluetooth 4.0 BLE-modul bekräftad arbetet (vad är Bluetooth 4.0? Hur Bluetooth 4.0 formar framtiden för mobilanslutning Hur Bluetooth 4.0 formar framtiden för mobilanslutning Bluetooth är den bortglömda stjärnan på enhetens specifikationsblad. Läs mer), men du borde testa något du redan har ljugit innan du köper en ny bara för det här projektet. Jag hittade en gammal standard Bluetooth mini adapter jag köpte i Japan som verkar fungera bra. Vi bryr oss inte om överföringshastigheter eller anslutningsäkerhet, eftersom allt vi gör är att skicka ut ett snabbt handslag för att se om en enhet lever och bra.
  • GPIO breakout board ("cobbler") och jumperkablar. Du kan arbeta direkt från stiften på Pi, men det är mycket lättare om du har etiketter på varje stift, och de är bara $ 6 ändå.
  • Reläkort. Du har en mängd olika val här och allt fungerar om det är konstruerat för användning med en mikrokontroller och kan köra minst 12 volt vid 5 ampere. Jag har använt ett generiskt 4-kanalskort liknande det här för ca $ 5, men jag antar att du vet hur du ska arbeta.
  • 12 / 24V elektromagnetlås, även om ett elektroniskt magnetlås ska fungera. Den jag köpte har 180KG hållkraft och levereras med monteringsplattor och instruktioner, för ca $ 35.
  • 12 / 24V strömförsörjning. Magnetlåset måste ha en separat strömförsörjning - oavsett vad du gör, försök inte att dra ström till den från Pi.
  • Lock.py Python app, men vi skriver detta när vi går vidare.

Arbetar med Bluetooth

Bluetooth är centralt för det här projektet, så låt oss börja med att installera lite Bluetooth-support och testa vår adapter. Du kan antingen göra det här direkt från Pi eller SSH i fjärrkontrollen (hur man ställer in Windows till SSH i dig Pi Inställning av din Raspberry Pi för huvudlös användning med SSH Inställning av din Raspberry Pi för huvudlös användning med SSH Raspberry Pi kan acceptera SSH kommandon när du är ansluten till ett lokalt nätverk (antingen via Ethernet eller Wi-Fi), så att du enkelt kan ställa in. Fördelarna med SSH går utöver att störa den dagliga skärmen ... Läs mer).

sudo apt-get install bluez python-bluez 

Sätt in din dongle om du inte redan har det, och låt oss titta på vad den rapporterar.

 hcitool dev 

Om du har något listat i produktionen är du bra att gå. Därefter använder vi ett Python-skript för att söka efter närliggande Bluetooth-enheter och ta den unika enhetsadressen. Vi behöver bara göra det en gång för varje enhet.

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

Om du ser "0 enheter hittades" har du heller inte en kompatibel USB Bluetooth-dongle eller din smartphone kan inte upptäckas. Förtvivlan inte, men jag fann att jag faktiskt måste öppna Bluetooth-inställningssidan på min iPhone för att sparka den till funktionsläget, då hände det här:

bluetooth identifierad

Bra, nu låt oss skapa den första etappen av vår programvara som gör upptäckten. Skapa en Python app som heter detect.py och öppna den med nano.

 nano detect.py 

Klistra in i denna provkod:

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

och justera följande rad med din Bluetooth-enhetadress:

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

Tryck CTRL-X och Y för att stänga och spara. Kör samma kod, och du ser något så här:

användarpresentationsdetektor

Koden ska vara mycket enkel att förstå, även om du aldrig har berört Python innan: Det skannar för en viss Bluetooth-enhet var 10: e sekund och det skriver ut ett annat meddelande beroende på om det hittades eller inte. Byt Bluetooth på din telefon för att simulera rörelse in och utanför intervallet (förmodligen ca 4m i verkligheten). Du kan minska eller öka tiden mellan skanningar, men jag kände 10 sekunder var en rimlig tid för att kunna vänta på att dörren ska låsa upp, vilket är var vi går med hela projektet.

Jag borde lägga till, jag vet inte om strömförbrukningen för att göra detta, men jag antar att pinging en enhet oftare skulle nödvändigtvis konsumera mer makt. Jag har inte sett några uppenbara prestationsproblem i testningen, men om batterilivslängden är ett allvarligt problem för dig, överväga att ha en omkopplare inuti ditt kontor som aktiverar och inaktiverar skanningslingan, så när du är inne kan du pausa låset system, aktivera sedan genomsökningen när du lämnar.

Grattis, du har nu en Python-app som vet när du är inom räckhåll, så vi kan börja agera på det.

GPIO styrelseformer

Innan du fortsätter måste du ta reda på vilket styrläge du ska använda. Det finns inget rätt eller fel svar, det påverkar bara om du anger bokstavsnummeret eller det virtuella GPIO-pinnumret.

Standarden är att använda bokstavsnummeret ("styrläge"), börjar med stift 1 längst ned till vänster (om du tittar ner på Pi med USB-portar till höger). Pin 2 ligger precis ovanför.

Om du har en GPIO-brytare ("cobbler"), har etiketterna du har från ett alternativt läge, kallat "BCM" (Broadcom SOC-kanal), och skrivs vanligen med GPIO eller P som prefixar numret. Du behöver inte strikt en GPIO-brytning - det gör det bara lättare. Om du inte har ett breakoutkort och inte vill köpa en, använd det här diagrammet:

Raspberry Pi modell A och B pinout diagram från RaspberryPi.org
Raspberry Pi modell A och B pinout diagram från RaspberryPi.org

Observera att den ursprungliga modellen B revision 1, revision 2, och modellen B + och Pi2 alla har olika pin outs. Se denna StackExchange-fråga för ett diagram som är korrekt på din styrelse.

I den här projektkoden använder jag BCM GPIO-numreringssystemet som motsvarar det Adafruit breakout-kortet jag har. Små modifikationer behövs om du vill använda bokstavstypsläget.

Tråd i ett relä

Fäst brytbrädet och se till att ledningen från stiften 1 och 2 (de i hörnet på din Pi) sitter fast vid 3v3 och 5V0 vid brytningen. Du kanske vill dra ut en spänningstester för att kontrollera detta.

rpi smart lås - gpio

Innan du fortsätter, kontrollera om någon annan har använt ditt specifika relä med Raspberry Pi (eller hitta en på förhand som du vet fungerar). Vissa kan kräva att 5V aktiveras - men RPi kan bara ge 3, 3V på GPIO-utgångsstiften. Av en slump är den som jag använder glatt med 3.3V, så jag behövde ingen extra kretsar, bara 5V0 till VCC, GND till GND och GPIO pin 23 för första reläingången .

Min tidigare handledning om GPIO Komma igång med GPIO På en Raspberry Pi Komma igång med GPIO På en Raspberry Pi Om du, trots att Arduino var cool, vänta bara tills du tar händerna på en Raspberry Pi - dessa saker är fantastiska. Förutom att vara en fullt fungerande dator, har de också en ... Läs mer visade hur man kopplar upp en transistor krets för att skala upp 3.3V till en hel 5V om du behöver (faktiskt, jag använde samma reläkort för den handledningen, men det visar sig att jag inte behövde 5V trots allt).

Du behöver inte koppla in elektromagneten ändå, eftersom du kan höra ett hörbart klick när reläet brinner.

Nästa upp, låt oss ta tag i någon kod för att interagera med GPIO-portarna.

Vi börjar med att testa utanför Python för att bekräfta att allt fungerar på portarna själva. Installera wiringPi, vilket ger dig några användbara kommandoradsverktyg.

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

När du har installerat konfigurera GPIO-stift 23 till en utgång.

 gpio -g mode 23 out 

Gör nu en snabbsökning av alla portar för att bekräfta

 gpio -g readall 

Du kommer att ha något liknande det här, men dina kan vara längre på en modell B + eller Pi2 eftersom det har fler GPIO-stiften:

gpio readall

Det här kan vara lite förvirrande först, men bordet är uppdelat i mitten och kolumnordern är omvänd på varje sida. Längst till vänster och längst till höger är BCM-pinnumret. Eftersom vi använder 23 bör du se det läge som nu anges som UT. Detta är ett användbart litet kommando bara för att få en bra bild av vad som händer med alla dina stift när som helst.

För att skriva stiftet högt eller lågt, använd bara

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

Förhoppningsvis, om du har reläet ordentligt anslutet, hörs det att du klickar på och av. Om inte, fortsätt inte tills du har bestämt kablarna. Kom ihåg att du kanske behöver en högre spänning för att aktivera reläet.

När du har bekräftat reläet och GPIO arbetar, lägg till Python-modulerna för GPIO.

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

Låt oss nu ändra vår Python app för att aktivera eller stänga av reläet när telefonen är upptäckt. Du hittar den sista koden på denna Gist. Kopiera befintliga detect.py till en ny lock.py och lägg till följande import- och installationskommandon:

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

I IF-satsen lägger du till ett kommando för att antingen aktivera eller avaktivera reläet. Observera att ditt relä kan fungera med antingen en låg eller en hög signal, så justera därefter efter testning.

 GPIO.output(RELAY, 1) 

För att köra den här nya versionen kräver prefixet kommandot med sudo - åtkomst till GPIO root-privilegier.

Hooking It Up

När du har bekräftat att reläet skjuter med din närhetssensor, lägg i din elektromagnetlås. På reläsidan, ta 12V-positiva in i den terminala märkta COM (vanliga), då är den positiva effekten från elektromagneten till NO-terminalen ( normalt öppen, det vill säga det här är normalt inte anslutet till den gemensamma terminalen men kommer att vara när du aktivera reläet ).

Anslut marken från strömförsörjningen och elektromagneten på GND-terminalen.

rpi smart låsrelä

Se monteringsanvisningarna som följde med ditt lås; dörren måste vara ganska tjock och det är lättare om den öppnar sig från sidan du vill att låset ska vara på. Gruvan var motsatsen, så jag behöver den L-formiga monteringshållaren, liksom en extra bit av trä för att öka dörrtjockleken.

rpi smart lås - elektromagnet

förbättringar

Det här var ett bevis på konceptet för att jag skulle kunna bygga vidare på andra projekt, och egentligen bara för att hålla nyfikna ögon ur mitt kontor när jag inte är där - den är inte avsedd att vara ett idiotsäker säkerhetssystem. För det skulle du behöva ett reservbatteri för att hålla strömmen flytande vid skurning.

Naturligtvis, om någon bryter in i ditt hus och går i besväret med att minska din makt, har du antagligen fått större problem med att de är en psykopat som är ute för att döda dig, snarare än en avslappnad inbrottstjuv. Du skulle också vilja ha en fysisk deadbolt lås förutom en elektronisk, och en riktigt stor pinne.

Självklart är denna närhetsteknik med hjälp av Bluetooth inte bara begränsad till ett automatiskt dörrlås - du kan också använda den för att utlösa din garageportöppning när du kommer hem eller slår på din hemmabio innan du går i dörren.

Vilken funktion tycker du att jag ska lägga till nästa? Har du några problem med att bygga detta? Låt mig veta i kommentarerna och jag gör mitt bästa för att hjälpa!

In this article