Gör en automatisk låsande kontorsdörr med Smartphone Proximity Sensor
Pssst - vill ha något högteknologiskt skydd för ditt hemkontor, eller ett hemligt lås för din “verkstad” (okej, du fick mig, det är faktiskt en 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 kommer att sätta upp en Raspberry Pi med en Bluetooth-adapter för att ständigt vara ute efter när din smartphone är utom räckhåll, och när det är kommer reläet att snäppa in i 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 brytbräda (“skomakare”) 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ärningen ... Läs mer).
sudo apt-get installera 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”, du har antingen 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:
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 importtid medan 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) om (resultat! = Ingen): skriv ut "Användarpresent" annars: skriv ut "Användare utanför räckvidd" 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 att stänga och spara. Kör samma kod, och du ser något så här:
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 att 10 sekunder var en rimlig tid för att kunna vänta på att dörren skulle låsa upp, vilket är var vi går med hela projektet trots allt.
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.
Standard är att använda bokstavsnummeret (“styrläget”), 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-brytning (“skomakare”) kortet, etiketterna du har är från ett alternativt läge, kallad “BCM” (Broadcom SOC-kanal), och skrivs vanligtvis med GPIO eller P som prefixerar 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:
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.
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-stift 23 för det 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 klon git: //git.drogon.net/wiringPi cd wiringPi ./build
När du har installerat konfigurera GPIO-stift 23 till en utgång.
gpio-g-läge 23 ut
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:
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 skriv 23 1 gpio -g skriv 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:
importera RPi.GPIO som 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, prefix kommandot med sudo - tillgång till GPIO kräver 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å den positiva effekten från elektromagneten till NO-terminalen (normalt öppen, dvs. Detta är normalt inte anslutet till den gemensamma terminalen men kommer att vara när du aktiverar reläet).
Anslut marken från strömförsörjningen och elektromagneten på GND-terminalen.
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.
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 till!
Utforska mer om: Hemsäkerhet, Smart Locks.