Nyheter i Android, Telefoner, Prylar Och Recensioner

Gör en kontorsdörr med automatisk låsning med smartphones närhetssensor

Pssst – vill ha ett högteknologiskt skydd för ditt hemmakontor, eller ett hemligt lås för din “verkstad” (ok, du förstår mig, det är faktiskt en fängelsehåla/spelrum) att barnen inte kommer att kunna lista ut? Vi har dig täckt. Låt oss bygga ett DIY smart lås som automatiskt känner av när du är där och låser när du inte är dä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 för omvärlden; ett sätt att göra detta på är Bluetooth.

I upptäcktsläge sänder den ett unikt identifikationsnummer – men även när den inte specifikt låter sig upptäckas kan allt som känner till den adressen försöka pinga den. Om ett svar hörs, skulle det indikera om det är inom räckhåll eller inte.

Vi kommer att ställa in en Raspberry Pi med en Bluetooth-adapter för att ständigt hålla utkik efter när din smartphone är utom räckvidd, och när den är det kommer reläet att slå igång och låsa dörren.

Du kommer behöva

Raspberry Pi – vilken modell som helst borde fungera eftersom det inte är en CPU-intensiv uppgift, men jag använder en äldre modell B, och GPIO-stiften kan vara något annorlunda på din modell. Se avsnittet om styrelseläge nedan. Du behöver också några grundläggande funktioner som en trådbunden Ethernet-anslutning eller Wi-Fi-konfigurerad; plus SD-kort och micro USB-strömkabel. Bluetooth USB-adapter. Adafruit säljer en Bluetooth 4.0 BLE-modul som bekräftats fungera (vad är Bluetooth 4.0?), men du bör testa alla du redan har liggande innan du köper en ny enbart för detta projekt. Jag hittade en gammal standard Bluetooth-miniadapter som jag köpte i Japan som verkar fungera bra. Vi bryr oss inte om överföringshastigheter eller anslutningstillförlitlighet, eftersom allt vi gör är att skicka ut ett snabbt handslag för att se om en enhet är vid liv och mår bra. GPIO breakout board (“skomakare”) och startkablar. Du kan arbeta direkt från stiften på Pi, men det är mycket enklare om du har etiketter på varje stift, och de kostar ändå bara $6. Reläbräda. Du har ett brett utbud av val här, och allt kommer att fungera om det är designat för användning med en mikrokontroller och kan driva minst 12 volt vid 5 ampere. Jag har använt ett generiskt 4-kanalskort som liknar det här för cirka $5, men jag kommer att anta att du vet hur du ska arbeta med ditt. 12/24V elektromagnetlås, även om ett elektroniskt solenoidlås också borde fungera. Den jag köpte har en hållkraft på 180 kg och levereras komplett med monteringsplattor och instruktioner, för cirka $35. 12/24V strömförsörjning. Magnetlåset måste ha en separat strömförsörjning – vad du än gör, försök inte dra ström till det från Pi:n. Lock.py Python-appen, men vi skriver detta allt eftersom.

Arbetar med Bluetooth

Bluetooth är centralt i det här projektet, så låt oss börja med att installera lite Bluetooth-stöd och testa vår adapter. Du kan antingen göra detta direkt från Pi eller SSH på distans (hur du ställer in Windows till SSH i din Pi).

sudo apt-get install bluez python-bluez

Sätt i din dongel om du inte redan har gjort det, och låt oss ta en titt på vad den rapporterar.

hcitool dev

Om du har något listat i utgången är du bra att gå. Därefter kommer vi att använda ett Python-skript för att ompröva Bluetooth-enheter i närheten och ta den unika enhetsadressen. Vi behöver bara göra detta 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 antingen inte en kompatibel USB Bluetooth-dongel eller så är din smartphone inte upptäckbar. Misströsta dock inte: jag upptäckte att jag faktiskt var tvungen att öppna Bluetooth-inställningssidan på min iPhone för att få den i upptäcktsläge, sedan hände detta:

Relaterad  Hur du kontrollerar din dators RAM-hastighet på Windows

Bra, låt oss nu skapa det första steget i 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 denna exempelkod:

#!/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-enhetsadress:

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ånt här:

Koden bör vara mycket enkel att förstå även om du aldrig har rört Python förut: den söker efter en viss Bluetooth-enhet var 10:e sekund, och den skriver ut ett annat meddelande beroende på om det hittas eller inte. Växla Bluetooth på din telefon för att simulera rörelse in och utom räckvidd (förmodligen cirka 4m i verkligheten). Du kan minska eller öka tiden mellan skanningarna, men jag kände att 10 sekunder var en rimlig tid för att eventuellt behöva vänta på att dörren ska låsas upp, vilket är dit vi är på väg med hela det här projektet trots allt.

Jag bör tillägga, jag vet inte om strömförbrukningen för att göra detta, men jag skulle anta att pinga en enhet oftare nödvändigtvis skulle förbruka mer ström. Jag har inte sett några uppenbara prestandaproblem vid testning, men om batteritiden är ett allvarligt problem för dig, överväg att ha en switch inne på kontoret som aktiverar och inaktiverar skanningsslingan, så när du väl är inne kan du pausa låset systemet och återaktivera skanningen när du går.

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-kortlägen

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

Standard är att använda det bokstavliga pinnumret (“kortläge”), med början med pinne 1 längst ner till vänster (om man tittar ner på Pi med USB-portar till höger). Pin 2 är precis ovanför det.

Men om du har ett GPIO breakout (“skomakare”) kort, kommer etiketterna du har från ett alternativt läge, kallat “BCM” (Broadcom SOC-kanal), och skrivs vanligtvis med GPIO eller P som prefix för numret. Du behöver strikt inte ha ett GPIO-utbrott – det gör bara saker enklare. Om du inte har en breakoutboard och inte vill köpa en, använd detta diagram:

Relaterad  Huawei nya MatePad Spotted Online med 22,5W snabbladdning

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

Observera att den ursprungliga modell B version 1, version 2 och modell B+ och Pi2 alla har olika stiftutgångar. Se den här StackExchange-frågan för ett diagram som är korrekt för din tavla.

I den här projektkoden använder jag BCM GPIO-numreringssystemet som motsvarar Adafruit breakout board jag har. Mindre ändringar behövs om du vill använda det bokstavliga stiftläget.

Tråd in ett relä

Fäst breakout-brädan och se till att tråden från stift 1 och 2 (de i hörnet på din Pi) ansluter till 3v3 och 5V0 på breakouten. Du kanske vill ta fram en spänningsprovare för att kontrollera detta.

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

Min tidigare handledning om GPIO visade hur man kopplar upp en transistorkrets för att skala upp 3,3V till hela 5V om du behöver (i själva verket använde jag samma reläkort för den handledningen, men det visade sig att jag inte behövde 5V trots allt).

Inget behov av att koppla in elektromagneten ännu, eftersom du kommer att kunna höra ett hörbart klick när reläet avfyras.

Nästa upp, låt oss ta lite 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å själva portarna. Installera wiringPi, som ger dig några användbara kommandoradsverktyg.

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

När det är installerat konfigurerar du GPIO-stift 23 för att vara en utgång.

gpio -g mode 23 out

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

gpio -g readall

Du kommer att ha något liknande detta, även om din kan vara längre på en modell B+ eller Pi2 eftersom den har fler GPIO-stift:

Detta kan vara lite förvirrande till en början, men tabellen är delad på mitten och kolumnordningen är omvänd på varje sida. Längst till vänster och längst till höger finns BCM-pinnumret. Eftersom vi använder 23 bör du se läget listat nu som OUT. Det här är ett användbart litet kommando bara för att få en god uppfattning om vad som händer med alla dina stift när som helst.

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

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

Förhoppningsvis, om du har kopplat reläet korrekt, kommer du att höra det klicka på och av. Om inte, fortsätt inte förrän du har listat ut ledningarna. Kom ihåg att du kan behöva en högre spänning för att aktivera reläet.

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

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

Låt oss nu modifiera vår Python-app för att aktivera eller stänga av reläet när telefonen upptäcks. Du hittar den slutliga koden i denna Gist. Kopiera det 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ägg 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 – åtkomst till GPIO kräver root-privilegier.

Relaterad  Vad är en Gitignore-fil och hur kan du göra en?

Ansluter den

När du har bekräftat att reläet avfyrar med din närhetssensor, lägg till ditt elektromagnetlås. På reläsidan, för in 12V positiva in i terminalen märkt COM (gemensam), sedan den positiva strömingången från elektromagneten till NO-terminalen (normalt öppet, dvs. denna är normalt inte ansluten till den gemensamma terminalen men blir det när du aktiverar reläet).

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

Se monteringsinstruktionerna som följde med ditt lås; dörren måste vara ganska tjock, och det är lättare om den öppnas bort från den sida du vill att låset ska sitta på. Min var motsatsen, så jag behöver det L-formade monteringsfästet, samt en extra bit trä för att öka dörrtjockleken.

Förbättringar

Detta var ett proof of concept för mig att bygga vidare på med andra projekt, och egentligen bara för att hålla nyfikna ögon borta från mitt kontor när jag inte är där – det är inte utformat för att vara ett idiotsäkert säkerhetssystem. För det skulle du behöva ett reservbatteri för att hålla strömmen flytande i händelse av avbrott.

Naturligtvis, om någon bryter sig in i ditt hus och gör sig besväret att bryta din ström, har du förmodligen det större problemet med att de är en psykopat som är ute efter att döda dig, snarare än en tillfällig inbrottstjuv. Du skulle också vilja ha ett fysiskt deadbolt-lås utöver ett elektroniskt, och en riktigt stor pinne.

Naturligtvis är den här närhetsdetekteringstekniken som använder Bluetooth inte bara begränsad till ett automatiskt dörrlås – du kan också använda den för att utlösa garageporten när du kommer hem, eller slå på din hemmabio innan du går in genom dörren.

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

Om författaren

James Bruce (719 publicerade artiklar)

James har en BSc i artificiell intelligens och är CompTIA A+ och Network+ certifierad. När han inte är upptagen som Hardware Review Editor, gillar han LEGO, VR och brädspel. Innan han började på MakeUseOf var han ljustekniker, engelskalärare och datacenteringenjör.

Mer från James Bruce

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!

Klicka här för att prenumerera