Κάντε μια πόρτα γραφείου με αυτόματο κλείδωμα με αισθητήρα προσέγγισης Smartphone

Θα δημιουργήσουμε ένα Raspberry Pi με προσαρμογέα Bluetooth για να είστε επιφυλακτικοί όταν το smartphone σας είναι εκτός εμβέλειας και σπρώξτε ένα ρελέ σε δράση για να κλειδώσετε την πόρτα.

Θα δημιουργήσουμε ένα Raspberry Pi με προσαρμογέα Bluetooth για να είστε επιφυλακτικοί όταν το smartphone σας είναι εκτός εμβέλειας και σπρώξτε ένα ρελέ σε δράση για να κλειδώσετε την πόρτα.
Διαφήμιση

Pssst - θέλετε κάποια προστασία υψηλής τεχνολογίας για το γραφείο στο σπίτι σας ή μια μυστική κλειδαριά για το "εργαστήριό σας" (ok, με πήρατε, είναι στην πραγματικότητα ένα δωμάτιο μπουντρουμιών / παιχνιδιών) που τα παιδιά δεν θα μπορέσουν να καταλάβουν; Σας έχουμε καλύψει. Ας οικοδομήσουμε μια έξυπνη κλειδαριά DIY που ανιχνεύει αυτόματα πότε είστε εκεί και κλειδώνει όταν δεν είστε.

Πώς λειτουργεί; ΚΑΝΕΙΣ ΔΕΝ ΞΕΡΕΙ! Ή πιο συγκεκριμένα, Bluetooth.

Η ιδέα

Το smartphone σας είναι μια ισχυρή συσκευή που αποκαλύπτει διαρκώς πληροφορίες για τον εαυτό της στον έξω κόσμο. ένας τρόπος που κάνει αυτό είναι το Bluetooth.

Στη λειτουργία ανακάλυψης, μεταδίδει έναν μοναδικό αριθμό αναγνώρισης - αλλά ακόμα και όταν δεν επιτρέπεται να ανακαλυφθεί ειδικά, οτιδήποτε ξέρει ότι η διεύθυνση μπορεί να προσπαθήσει να το ping. Εάν ακούγεται μια απάντηση, αυτό θα έδειχνε αν βρίσκεται σε σειρά ή όχι.

Θα δημιουργήσουμε ένα Raspberry Pi με προσαρμογέα Bluetooth για να είστε συνεχώς επιφυλακτικοί όταν το smartphone σας είναι εκτός εμβέλειας και όταν είναι, το ρελέ θα ενεργοποιηθεί και θα κλειδώσει την πόρτα.

Θα χρειαστείτε

  • Raspberry Pi - οποιοδήποτε μοντέλο θα πρέπει να λειτουργήσει αφού δεν είναι ένα CPU εντατικό καθήκον, αλλά χρησιμοποιώ ένα παλιότερο μοντέλο Β, και τα pinouts GPIO μπορεί να είναι ελαφρώς διαφορετικά στο μοντέλο σας. Δείτε την ενότητα στη λειτουργία του σκάφους παρακάτω. Θα χρειαστείτε επίσης κάποια βασικά στοιχεία όπως μια ενσύρματη σύνδεση Ethernet ή Wi-Fi που έχει ρυθμιστεί Ρύθμιση Ασύρματης Δικτύωσης στο Raspberry σας Ρύθμιση Ασύρματης Δικτύωσης στο Raspberry Pi Σχεδόν κάθε έργο Raspberry Pi θα απαιτήσει σύνδεση στο δίκτυο και μπορεί να επιτευχθεί σημαντική ευελιξία αγνοώντας τη θύρα Ethernet υπέρ ενός ασύρματου dongle USB. Διαβάστε περισσότερα ; καθώς και κάρτα SD και καλώδιο τροφοδοσίας micro USB.
  • Προσαρμογέας Bluetooth Bluetooth. Η τεχνολογία Bluetooth 4.0 διαμορφώνει το μέλλον της κινητής σύνδεσης Πώς το Bluetooth 4.0 διαμορφώνει το μέλλον της σύνδεσης κινητής τηλεφωνίας Το Bluetooth είναι το ξεχασμένο αστέρι στο φύλλο προδιαγραφών της συσκευής. πρέπει να δοκιμάσετε όσα έχετε ήδη βρεθεί πριν αγοράσετε ένα καινούργιο μόνο για αυτό το έργο. Βρήκα ένα παλιό πρότυπο Bluetooth προσαρμογέα μίνι που αγόρασα στην Ιαπωνία που φαίνεται να λειτουργεί καλά. Δεν μας νοιάζει ταχύτητες μεταφοράς ή αξιοπιστία σύνδεσης, καθώς το μόνο που κάνουμε είναι να στείλουμε μια γρήγορη χειραψία για να δούμε αν μια συσκευή είναι ζωντανή και καλά.
  • GPIO ξεμπλοκάρισμα ("cobbler") και καλώδια jumper. Θα μπορούσατε να εργαστείτε απευθείας από τις καρφίτσες του Pi, αλλά είναι πολύ πιο εύκολο αν έχετε ετικέτες σε κάθε καρφίτσα και είναι μόνο $ 6 ούτως ή άλλως.
  • Πίνακα ρελέ. Έχετε μια μεγάλη ποικιλία επιλογών εδώ και οτιδήποτε θα λειτουργήσει αν είναι σχεδιασμένο για χρήση με μικροελεγκτή και μπορεί να οδηγήσει τουλάχιστον 12 βολτ σε 5 αμπέρ. Έχω χρησιμοποιήσει μια γενική πλακέτα 4 καναλιών παρόμοια με αυτή για περίπου $ 5, αλλά πρόκειται να υποθέσω ότι ξέρετε πώς να δουλέψετε δική σας.
  • 12 / 24V κλειδαριά ηλεκτρομαγνήτη, αν και μια ηλεκτρονική κλειδαριά ηλεκτρομαγνητικής βαλβίδας θα πρέπει επίσης να λειτουργήσει. Το προϊόν που έχω αγοράσει έχει δύναμη συγκράτησης 180KG και συνοδεύεται από πλάκες τοποθέτησης και οδηγίες για περίπου $ 35.
  • 12 / 24V. Η κλειδαριά μαγνητών πρέπει να διαθέτει ξεχωριστή τροφοδοσία ρεύματος - ό, τι κι αν κάνετε, μην προσπαθήσετε να τραβήξετε ενέργεια από το Pi.
  • Εφαρμογή Lock.py Python, αλλά θα γράψουμε αυτό καθώς θα πάμε μαζί.

Εργασία με Bluetooth

Το Bluetooth είναι το επίκεντρο αυτού του έργου, οπότε ας ξεκινήσουμε εγκαθιστώντας κάποια υποστήριξη Bluetooth και δοκιμάζοντας τον προσαρμογέα μας. Μπορείτε να το κάνετε είτε απευθείας από το Pi, είτε SSH σε απομακρυσμένη βάση (πώς να ρυθμίσετε τα Windows σε SSH σε εσάς) Ρύθμιση του Raspberry Pi σας Για απρόσκοπτη χρήση με SSH Ρύθμιση του Raspberry Pi σας για Headless χρήση με SSH Το Raspberry Pi μπορεί να δεχτεί SSH εντολές όταν συνδέεται σε ένα τοπικό δίκτυο (είτε μέσω Ethernet είτε Wi-Fi), επιτρέποντάς σας να το ρυθμίσετε εύκολα. Τα πλεονεκτήματα του SSH υπερβαίνουν την καθημερινή προβολή ... Διαβάστε περισσότερα).

sudo apt-get install bluez python-bluez 

Τοποθετήστε το dongle σας εάν δεν το έχετε ήδη και ας δούμε τι αναφέρει.

 hcitool dev 

Αν έχετε κάτι αναγραφόμενο στην έξοδο, καλό είναι να πάτε. Στη συνέχεια, θα χρησιμοποιήσουμε ένα σενάριο Python για να διερευνήσουμε τις κοντινές συσκευές Bluetooth και θα τραβήξουμε τη μοναδική διεύθυνση της συσκευής. Χρειάζεται μόνο να το κάνουμε αυτό μία φορά για κάθε συσκευή.

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

Αν δείτε "0 συσκευές βρέθηκαν", είτε δεν διαθέτετε συμβατό USB Bluetooth dongle, είτε το smartphone σας δεν είναι ανιχνεύσιμο. Μην απελπίζεστε όμως: Βρήκα ότι έπρεπε να ανοίξω τη σελίδα ρυθμίσεων Bluetooth στο iPhone μου για να την κλωτσήσω σε λειτουργία ανακάλυψης, και αυτό συνέβη:

bluetooth αναγνωρισμένο

Μεγάλη, τώρα ας δημιουργήσουμε το πρώτο στάδιο του λογισμικού μας που κάνει την ανίχνευση. Δημιουργήστε μια εφαρμογή Python που ονομάζεται detect.py και ανοίξτε την με το Nano.

 nano detect.py 

Επικολλήστε σε αυτό το δείγμα κώδικα:

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

και προσαρμόστε την παρακάτω γραμμή με τη διεύθυνση της συσκευής Bluetooth:

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

Πατήστε CTRL-X και Y για κλείσιμο και αποθήκευση. Εκτελέστε τον ίδιο κώδικα και δείτε κάτι παρόμοιο:

ανίχνευση παρουσίας χρήστη

Ο κώδικας θα πρέπει να είναι πολύ απλός, ακόμη και αν ποτέ δεν έχετε αγγίξει την Python πριν: σαρώνει μια συγκεκριμένη συσκευή Bluetooth κάθε 10 δευτερόλεπτα και εκτυπώνει ένα διαφορετικό μήνυμα ανάλογα με το αν βρίσκεται ή όχι. Αλλάξτε το Bluetooth στο τηλέφωνό σας για να προσομοιώσετε την κίνηση εντός και εκτός εμβέλειας (πιθανώς περίπου 4 μέτρα στην πραγματικότητα). Μπορείτε να μειώσετε ή να αυξήσετε το χρόνο μεταξύ των σαρώσεων, αλλά αισθάνθηκα ότι 10 δευτερόλεπτα ήταν αρκετός χρόνος για να περιμένετε ενδεχομένως την πόρτα για να ξεκλειδώσετε, και εδώ πηγαίνουμε με όλο αυτό το έργο.

Θα πρέπει να προσθέσω, δεν ξέρω για την κατανάλωση ρεύματος για να το κάνω αυτό, αλλά θα ήθελα να υποθέσω ότι το pinging μιας συσκευής πιο συχνά θα καταναλώνει αναγκαστικά περισσότερη δύναμη. Δεν έχω δει προφανή προβλήματα επιδόσεων στη δοκιμή, αλλά αν η διάρκεια ζωής της μπαταρίας είναι σοβαρή ανησυχία για εσάς, σκεφτείτε να έχετε έναν διακόπτη στο γραφείο σας που ενεργοποιεί και απενεργοποιεί τον βρόχο σάρωσης, οπότε μόλις είστε μέσα, μπορείτε να διακόψετε τη λειτουργία και στη συνέχεια επανενεργοποιήστε τη σάρωση όταν φεύγετε.

Συγχαρητήρια, τώρα έχετε μια εφαρμογή Python που ξέρει πότε βρίσκεστε εντός εμβέλειας, ώστε να μπορέσουμε να αρχίσουμε να δράσουμε σε αυτό.

Οι λειτουργίες του GPIO

Πριν συνεχίσετε, πρέπει να υπολογίσετε ποια λειτουργία πλοήγησης πρόκειται να χρησιμοποιήσετε. Δεν υπάρχει σωστή ή λανθασμένη απάντηση, επηρεάζει μόνο εάν καθορίζετε τον κυριολεκτικό αριθμό καρφίτσας ή τον εικονικό αριθμό καρφίτσας GPIO.

Η προεπιλογή είναι να χρησιμοποιήσετε τον κυριολεκτικό αριθμό καρφίτσας ("λειτουργία πλοήγησης"), ξεκινώντας με τον ακροδέκτη 1 στο κάτω αριστερό μέρος (εάν κοιτάτε προς τα κάτω στο Pi με θύρες USB στα δεξιά). Η ακίδα 2 είναι ακριβώς πάνω από αυτό.

Ωστόσο, αν έχετε μια κάρτα GPIO breakout ("cobbler"), οι ετικέτες που διαθέτετε προέρχονται από έναν εναλλακτικό τρόπο που ονομάζεται "BCM" (κανάλι Broadcom SOC) και συνήθως γράφονται με το GPIO ή το P προθέτοντας τον αριθμό. Δεν χρειάζεστε αυστηρά ένα GPIO ξεμπλοκάρισμα - απλά κάνει τα πράγματα ευκολότερα. Αν δεν έχετε ένα breakout board και δεν θέλετε να αγοράσετε ένα, χρησιμοποιήστε αυτό το διάγραμμα:

Raspberry Pi μοντέλο A και B διάγραμμα pinout από το RaspberryPi.org
Raspberry Pi μοντέλο A και B διάγραμμα pinout από το RaspberryPi.org

Σημειώστε ότι το αρχικό μοντέλο B αναθεώρηση 1, αναθεώρηση 2, και το μοντέλο B + και Pi2 όλα έχουν διαφορετικές πείρους. Ανατρέξτε σε αυτήν την ερώτηση StackExchange για ένα σωστό διάγραμμα στο διοικητικό συμβούλιο σας.

Σε αυτόν τον κώδικα έργου, χρησιμοποιώ το σύστημα αρίθμησης BCM GPIO το οποίο αντιστοιχεί στον πίνακα διάσωσης Adafruit που έχω. Απαιτούνται μικρές τροποποιήσεις εάν θέλετε να χρησιμοποιήσετε τη λειτουργία κυριολεκτικής ακίδας.

Σύρμα σε ρελέ

Συνδέστε την πλακέτα ξεμπλοκαρίσματος, βεβαιώνοντας ότι το σύρμα από τις ακίδες 1 και 2 (αυτές στη γωνία του Pi σας) συνδέεται με τα 3v3 και 5V0 στο ξεμπλοκάρισμα. Ίσως θελήσετε να τραβήξετε έναν ελεγκτή τάσης για να το ελέγξετε.

rpi έξυπνη κλειδαριά - gpio

Πριν προχωρήσετε, ελέγξτε αν κάποιος άλλος έχει χρησιμοποιήσει το συγκεκριμένο ρελέ σας με το Raspberry Pi (ή να βρουν ένα προηγουμένως ότι γνωρίζετε έργα). Κάποιοι μπορεί να χρειαστούν 5V για να ενεργοποιήσουν - αλλά το RPi μπορεί να παρέχει μόνο 3, 3V στους ακροδέκτες εξόδου GPIO. Κατά τύχη, αυτή που χρησιμοποιώ είναι ευχαριστημένη με 3.3V, οπότε δεν χρειαζόμουν κανένα πρόσθετο κύκλωμα, μόνο τα 5V0 έως VCC, GND έως GND και pin GPIO 23 για την πρώτη είσοδο ρελέ .

Το προηγούμενο μου σεμινάριο στο GPIO Ξεκινώντας με το GPIO Σε ένα Raspberry Pi Ξεκινώντας με το GPIO Σε ένα Raspberry Pi Εάν, αν και το Arduino ήταν δροσερό, απλά περιμένετε μέχρι να πάρετε τα χέρια σας σε ένα Raspberry Pi - αυτά τα πράγματα είναι καταπληκτικά. Εκτός από το γεγονός ότι είναι ένας πλήρως λειτουργικός υπολογιστής, έχουν επίσης ένα ... Διαβάστε περισσότερα έδειξε πώς να συρματόσχοινο ένα κύκλωμα τρανζίστορ για την κλιμάκωση μέχρι 3.3V σε ένα πλήρες 5V αν χρειαστεί (στην πραγματικότητα, χρησιμοποίησα το ίδιο πίνακα ρελέ για αυτό το φροντιστήριο, αλλά αποδεικνύεται ότι δεν χρειάστηκα 5V μετά από όλα).

Δεν χρειάζεται να συνδέσετε τον ηλεκτρομαγνήτη ακόμα, καθώς θα μπορείτε να ακούσετε ένα ακουστικό κλικ όταν πυρκαγιάσει το ρελέ.

Στη συνέχεια, ας πάρουμε κάποιο κώδικα για να αλληλεπιδράσουμε με τις θύρες GPIO.

Αρχίζουμε με δοκιμές έξω από την Python για να επιβεβαιώσουμε ότι όλα λειτουργούν στα ίδια τα λιμάνια. Εγκαταστήστε την καλωδίωσηPi, η οποία σας δίνει κάποια χρήσιμα εργαλεία γραμμής εντολών.

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

Αφού εγκατασταθεί, ρυθμίστε τον ακροδέκτη GPIO 23 ώστε να είναι έξοδος.

 gpio -g mode 23 out 

Τώρα, κάντε μια γρήγορη σάρωση όλων των θυρών για επιβεβαίωση

 gpio -g readall 

Θα έχετε κάτι παρόμοιο με αυτό, αν και η δική σας μπορεί να είναι μεγαλύτερη για ένα μοντέλο B + ή Pi2 αφού έχει περισσότερους ακροδέκτες GPIO:

gpio readall

Αυτό μπορεί να είναι λίγο συγκεχυμένο στην αρχή, αλλά ο πίνακας χωρίζεται κάτω από τη μέση και η σειρά της στήλης αντιστρέφεται σε κάθε πλευρά. Στην αριστερή και την άκρα δεξιά βρίσκεται ο αριθμός καρφίτσας BCM. Από τη στιγμή που χρησιμοποιούμε 23, θα πρέπει να βλέπετε τον τρόπο που αναγράφεται τώρα ως OUT. Αυτή είναι μια χρήσιμη μικρή εντολή μόνο για να πάρετε μια καλή ιδέα για το τι συμβαίνει με όλες τις καρφίτσες σας σε οποιοδήποτε σημείο.

Για να γράψετε την καρφίτσα υψηλή ή χαμηλή, απλά χρησιμοποιήστε

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

Ας ελπίσουμε ότι, αν έχετε το ρελέ καλωδιωμένο σωστά, θα το ακούσετε κάνοντας κλικ και απενεργοποίηση. Εάν όχι, μην συνεχίσετε μέχρι να καταλάβετε την καλωδίωση. Θυμηθείτε, μπορεί να χρειαστείτε υψηλότερη τάση για να ενεργοποιήσετε το ρελέ.

Αφού επιβεβαιώσετε ότι το ρελέ και το GPIO λειτουργεί, προσθέστε τις μονάδες Python για το GPIO.

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

Τώρα ας τροποποιήσουμε την εφαρμογή Python για να ενεργοποιήσουμε ή να απενεργοποιήσουμε το ρελέ όταν ανιχνευθεί το τηλέφωνο. Θα βρείτε τον τελικό κώδικα σε αυτό το Gist. Αντιγράψτε το υπάρχον detect.py σε ένα νέο lock.py και προσθέστε τις ακόλουθες εντολές εισαγωγής και ρύθμισης:

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

Στην εντολή IF, προσθέστε μια εντολή για να ενεργοποιήσετε ή να απενεργοποιήσετε το ρελέ. Σημειώστε ότι το ρελέ σας μπορεί να λειτουργεί με χαμηλό ή υψηλό σήμα, οπότε ρυθμίστε ανάλογα μετά τη δοκιμή.

 GPIO.output(RELAY, 1) 

Για να εκτελέσετε αυτή τη νέα έκδοση, προθέστε την εντολή με sudo - η πρόσβαση στο GPIO απαιτεί δικαιώματα root.

Συνδέστε το

Μόλις επιβεβαιώσετε ότι το ρελέ πυροδοτείται με τον αισθητήρα προσέγγισης, προσθέστε την κλειδαριά ηλεκτρομαγνήτη. Στην πλευρά του ρελέ, φέρτε το θετικό 12V στον τερματικό που φέρει την ένδειξη COM (κοινό), τότε η θετική ισχύς εισόδου από τον ηλεκτρομαγνήτη στον ακροδέκτη NO ( κανονικά ανοιχτό, δηλαδή κανονικά δεν συνδέεται με τον κοινό τερματικό, αλλά θα είναι όταν ενεργοποιήστε το ρελέ ).

Συνδέστε το έδαφος από την τροφοδοσία ρεύματος και τον ηλεκτρομαγνήτη στον ακροδέκτη GND.

rpi smart lock - ρελέ

Ανατρέξτε στις οδηγίες εγκατάστασης που συνοδεύουν την κλειδαριά σας. η πόρτα πρέπει να είναι αρκετά παχιά και είναι ευκολότερο εάν ανοίγει μακριά από την πλευρά που θέλετε να είναι κλειδωμένη. Το ορυχείο ήταν το αντίθετο, γι 'αυτό χρειάζομαι το βραχίονα στήριξης σε σχήμα L, καθώς και ένα πρόσθετο κομμάτι ξύλου για να αυξήσει το πάχος της πόρτας.

έξυπνη κλειδαριά rpi - ηλεκτρομαγνήτης

Βελτιώσεις

Αυτό ήταν μια απόδειξη της ιδέας για μένα να αξιοποιήσω με άλλα έργα, και πραγματικά απλά να κρατήσω τα παράξενα μάτια έξω από το γραφείο μου όταν δεν είμαι εκεί - δεν είναι σχεδιασμένο να είναι ένα αλάνθαστο σύστημα ασφαλείας. Για αυτό, θα χρειαστείτε μια εφεδρική μπαταρία για να διατηρήσετε την ισχύ που ρέει σε περίπτωση κοπής.

Φυσικά, αν κάποιος σπάσει στο σπίτι σας και πηγαίνει στο πρόβλημα της κοπής της εξουσίας σας, πιθανότατα έχετε πάρει το μεγαλύτερο ζήτημα ότι είναι ένας ψυχοπαθής που είναι έξω για να σας σκοτώσει, παρά έναν περιστασιακό διαρρήκτη. Θα θέλατε επίσης μια φυσική κλειδαριά κλειδαριά εκτός από μια ηλεκτρονική και ένα πραγματικά μεγάλο ραβδί.

Φυσικά, αυτή η τεχνική ανίχνευσης εγγύτητας που χρησιμοποιεί Bluetooth δεν περιορίζεται απλώς σε μια αυτόματη κλειδαριά πόρτας - θα μπορούσατε επίσης να την χρησιμοποιήσετε για να ενεργοποιήσετε το άνοιγμα της πόρτας του γκαράζ σας όταν γυρίσετε στο σπίτι ή να ενεργοποιήσετε το home cinema σας πριν περπατήσετε στην πόρτα.

Ποιο χαρακτηριστικό νομίζετε ότι πρέπει να προσθέσω στη συνέχεια; Μήπως έχετε προβλήματα δημιουργώντας αυτό; Επιτρέψτε μου να γνωρίζω στα σχόλια και θα κάνω το καλύτερο δυνατό για να βοηθήσω!

In this article