Πίνακας περιεχομένων:

Cryptap: a Rhythm-based Door Lock: 5 βήματα
Cryptap: a Rhythm-based Door Lock: 5 βήματα

Βίντεο: Cryptap: a Rhythm-based Door Lock: 5 βήματα

Βίντεο: Cryptap: a Rhythm-based Door Lock: 5 βήματα
Βίντεο: Rhythmic Combo Lock 2024, Ιούλιος
Anonim
Cryptap: Κλειδαριά πόρτας βασισμένη στον ρυθμό
Cryptap: Κλειδαριά πόρτας βασισμένη στον ρυθμό
Cryptap: Κλειδαριά πόρτας βασισμένη στον ρυθμό
Cryptap: Κλειδαριά πόρτας βασισμένη στον ρυθμό
Cryptap: Κλειδαριά πόρτας βασισμένη στον ρυθμό
Cryptap: Κλειδαριά πόρτας βασισμένη στον ρυθμό

Εμπνευσμένο από διάφορους μηχανισμούς ξεκλειδώματος θυρών που έχω δει στο hackaday.com, αποφάσισα να δημιουργήσω έναν μόνος μου. Αυτό έχει διεπαφή δύο κουμπιών. ένα για να ξεκινήσετε και να τερματίσετε την υποβολή κωδικού πρόσβασης και ένα για να αγγίξετε πραγματικά τον ρυθμό που είναι ο κωδικός πρόσβασής σας. Υπάρχει επίσης μια λυχνία κατάστασης. Iμουν σε θέση να το φτιάξω αυτό φθηνά χρησιμοποιώντας εξαρτήματα που είχα καθαρίσει τους τελευταίους μήνες. Τα μόνα πράγματα για τα οποία έπρεπε να πληρώσω ήταν ο ίδιος ο μικροελεγκτής, ο οποίος ήταν 21 δολάρια (https://www.pjrc.com/teensy/), και κάποιο σύρμα με εικόνες που είχα από πριν.

Είναι πολύ διασκεδαστικό να πατάω στο Θέμα του Πολέμου των Άστρων ή κάτι να μπαίνω στο δωμάτιό μου. Τώρα, δεν χρειάζεται να ανησυχώ μήπως κλειδωθώ ξανά έξω από το δωμάτιό μου! Επιπλέον, αισθάνεται ωραίο και χαριτωμένο.

Βήμα 1: Μέρη και εργαλεία

Μέρη και εργαλεία
Μέρη και εργαλεία
Μέρη και εργαλεία
Μέρη και εργαλεία

Επέλεξα το Teensy επειδή αυτός είναι ο πρώτος μου μικροελεγκτής και δεν έχω προγραμματιστή ακόμα. Το Teensy απαιτεί μόνο ένα καλώδιο USB A-miniB και δωρεάν λογισμικό για εγκατάσταση, συμβατό με Mac/Windows/Linux. Επίσης, είναι πολύ εύκολο να ανεβάσετε το εξάγωνο αρχείο. απλά μεταγλωττίστε και πατήστε το κουμπί στο Teensy.

Το κόστος αυτού του έργου για μένα ήταν $ 21, συν το σύρμα που κρέμεται από εικόνες. Τμήματα από το δρόμο προέρχονταν από έναν καπνιστή καφέ (ρελέ, LED, πυκνωτής) και ένα δρομολογητή (LED, αρθρωτή υποδοχή, βύσμα τροφοδοσίας, πυκνωτές). Δωρεάν δείγματα ήταν ο ρυθμιστής 5 βολτ 7805, τα κουμπιά και ο διακόπτης. Βρήκα επίσης πολλά πράγματα στο κουτί "σπασμένα μέρη" στο εργαστήριό μου EE: συνδετήρες και καλώδιο μπανάνας, σύρμα, πρόγραμμα οδήγησης sn754410, κεφαλίδα τεσσάρων ακίδων και αντιστάσεις. Είχα έναν επιπλέον φορτιστή φορητού υπολογιστή που χρησιμοποιούσα για ρεύμα και ένα καλώδιο μόντεμ της Apple του οποίου η καρτέλα ήταν σπασμένη. Άλλο υλικό: μια πλάκα τοίχου. Χρησιμοποίησα ένα πιστόλι θερμής κόλλας, ένα συγκολλητικό σίδερο, μια βελόνα και ένα τρυπάνι, τα οποία είναι αρκετά στάνταρ. Το πιο ασυνήθιστο πράγμα που χρησιμοποίησα ήταν ένα μακρύ, εύκαμπτο εργαλείο αρπαγής.

Βήμα 2: Προϋπάρχον υλικό

Προϋπάρχον υλικό
Προϋπάρχον υλικό
Προϋπάρχον υλικό
Προϋπάρχον υλικό
Προϋπάρχον υλικό
Προϋπάρχον υλικό
Προϋπάρχον υλικό
Προϋπάρχον υλικό

Wasμουν πολύ τυχερός που υπήρχαν ήδη τόσα πολλά εγκατεστημένα. Το δωμάτιό μου είναι προσβάσιμο από το ADA και υπήρχαν ήδη εγκατεστημένοι διάφοροι σωλήνες, ηλεκτρικά κουτιά και μια ηλεκτρική πόρτα. Κατά την αφαίρεση της απεργίας της πόρτας από περιέργεια, διαπίστωσα ότι δεν ήταν συνδεδεμένη. Υπήρχε ένας σωλήνας από το χτύπημα της πόρτας σε μια κενή πλάκα τοίχου μέσα στο δωμάτιό μου και ένας άλλος σωλήνας από εκεί σε μια κενή πλάκα τοίχου έξω.

Το χτύπημα της πόρτας λέει ότι χρειάζεται 24V@3A για να λειτουργήσει, αλλά μπόρεσα να τα βγάλω πέρα με ένα τροφοδοτικό 19V, 7.9A που είχα. Η απεργία της πόρτας ήταν πολωμένη, οπότε βεβαιωθείτε ότι έχετε την πολικότητα σωστά!

Βήμα 3: Κυκλώματα

Κυκλώματα
Κυκλώματα
Κυκλώματα
Κυκλώματα
Κυκλώματα
Κυκλώματα
Κυκλώματα
Κυκλώματα

Για να ελέγξω το χτύπημα της πόρτας, χρησιμοποίησα το ρελέ που βρήκα στο καπνιστήρι καφέ. Αυτό το ρελέ χρειάστηκε περισσότερα από 5V TTL για να το οδηγήσει, οπότε το sn754410 χρησιμοποιήθηκε για τη μετάφραση του TTL σε 19V, το οποίο οδήγησε το ρελέ. Το sn754410 είναι πραγματικά ένα quad half-H πρόγραμμα οδήγησης, έτσι σπαταλούσα τα 3/4 του τσιπ, αλλά δεν είχα τρανζίστορ ισχύος, οπότε αυτό χρησιμοποιούσα.

Το τσιπ sn754410 έχει δύο ακίδες VCC, μία για 5V, η άλλη για όποια τάση θέλετε να βγει, η οποία ήταν 19V για μένα. Είναι ένα πολύ καλό τσιπ. Μπορείτε να το χρησιμοποιήσετε για να οδηγείτε απευθείας κινητήρες και ρελέ, επειδή μπορεί να αλλάξει 1A ανά τέταρτο τσιπ και διαθέτει ενσωματωμένες δίοδοι προστασίας. Ρίξτε μια ματιά στο φύλλο δεδομένων. Στο κύκλωμά μου, ένωσα το sn754410 απευθείας στον πείρο εξόδου του Teensy. Τα κουμπιά συνδέονται ως ενεργά-χαμηλά, κάτι που είναι πολύ συνηθισμένο για τους μικροελεγκτές. Συνδέονται άμεσα με το Teensy, πράγμα που σημαίνει ότι πρέπει να κάνω debouncing στο λογισμικό. Η λυχνία κατάστασης συνδέεται με το Teensy μέσω αντίστασης 1K ohm. τίποτα ιδιαίτερο. Το κύκλωμα λειτούργησε χωρίς πυκνωτές, αλλά τους έβαλα ούτως ή άλλως για παν ενδεχόμενο. Υπάρχουν προστατευτικά καλύμματα τόσο στις ράγες ισχύος 19V όσο και 5V στη γείωση. Κατά τον προγραμματισμό του Teensy, το 5V προήλθε από το USB, αλλά όταν λειτουργεί μόνο του, η δύναμη προέρχεται από το τούβλο τροφοδοσίας του φορητού υπολογιστή. Όταν συνέδεσα τον ρυθμιστή 7805 απευθείας σε 19V, πήρε ΠΡΑΓΜΑΤΙΚΑ ζεστό, οπότε έβαλα ένα δίκτυο αντιστάσεων για να περιορίσω την τάση εισόδου και το ρεύμα στον ρυθμιστή. Αυτό ήταν ένα λάθος, αλλά τώρα όλα είναι σε μια διαχειρίσιμη θερμοκρασία.

Βήμα 4: Καλωδίωση μαζί

Καλωδίωση μαζί
Καλωδίωση μαζί
Καλωδίωση μαζί
Καλωδίωση μαζί

Το Teensy δεν ήταν πρόβλημα. Έρχεται με καρφίτσες, ώστε να μπορείτε να το συνδέσετε απευθείας στο breadboard.

Αποφάσισα να χρωματίσω τα καλώδια για να χτυπήσουν την πόρτα με κόκκινα (+) και μαύρα (-) καλώδια μπανάνας από το σπασμένο κουτί μερών του εργαστηρίου. Υπήρχαν μερικά βύσματα που κόπηκαν από τα καλώδια τους, οπότε έβγαλα ένα πλαστικό για να εκθέσω ένα σημείο συγκόλλησης. Μου αρέσει πολύ πώς τα βύσματα μπανάνας εργαστηρίου μπορούν να συνδεθούν μεταξύ τους. Χρησιμοποίησα το καλώδιο τηλεφώνου της Apple για να συνδέσω τα κουμπιά και το φως κατάστασης έξω από το δωμάτιο με το Teensy μέσα. Δεδομένου ότι η μία πλευρά ήταν σπασμένη, έκοψα αυτό το άκρο και κόλλησα στην κεφαλίδα των τεσσάρων ακίδων, σφραγίζοντάς την με ζεστή κόλλα. Αυτό μπήκε όμορφα στο ψωμί μου. Η πλευρά που άφησα το βύσμα μπήκε στην αρθρωτή υποδοχή που διέσωσα από το δρομολογητή. Και τα τέσσερα καλώδια χρησιμοποιήθηκαν (GND, φωτεινή ένδειξη κατάστασης, κουμπί έναρξης/διακοπής, κουμπί κωδικού). Σε περίπτωση που δεν το έχετε προσέξει, μου αρέσουν τα βύσματα και οι υποδοχές σύνδεσης. Το τούβλο τροφοδοσίας συνδέθηκε με το βύσμα τροφοδοσίας που έβγαλα από το δρομολογητή. Το να περάσετε τα καλώδια μέσα από τους σωλήνες τοίχου δεν ήταν πολύ δύσκολο, λόγω του εύκαμπτου αντικειμένου που αρπάζει. Αυτό πραγματικά μου έσωσε τη μέρα.

Βήμα 5: Κωδικός

Κώδικας
Κώδικας
Κώδικας
Κώδικας

Προσπάθησα να σχολιάσω τον κωδικό μου. Λάβετε υπόψη ότι πρόκειται για λογισμικό 1.0, πράγμα που σημαίνει ότι δεν είναι χωρίς σφάλματα. ## ΛΕΙΤΟΥΡΓΙΑ ## 1. Πατήστε το κουμπί έναρξης/διακοπής για να σηματοδοτήσετε ότι είστε έτοιμοι να ξεκινήσετε την εισαγωγή κωδικού. Η λυχνία κατάστασης αρχίζει να αναβοσβήνει αργά. 2. Πατήστε τον κωδικό σας στο κουμπί κωδικού. Η ενδεικτική λυχνία κατάστασης θα αναβοσβήνει στα 120 BPM, ώστε να μπορείτε να τη χρησιμοποιήσετε ως μετρονόμο εάν θέλετε. Ωστόσο, το πρόγραμμα κρυπτογράφησης θα μετρήσει αναλογικά τα μήκη των παλμών το ένα προς το άλλο, οπότε θα μπορούσατε επίσης να χρησιμοποιήσετε το δικό σας ρυθμό. Απλά βεβαιωθείτε ότι είστε αρκετά ακριβείς! 3. Όταν ολοκληρωθεί η εισαγωγή κωδικού, πατήστε ξανά το κουμπί έναρξης/διακοπής. Στη συνέχεια, το πρόγραμμα θα αποφασίσει αν θα σας αφήσει να εισέλθετε. Δεδομένου ότι οι άνθρωποι δεν είναι πολύ ακριβείς χρονομετρητές (ο δικός σας πραγματικά δεν είναι), ορίζω το ποσοστό ανοχής στο +/- 30%. Αυτό σημαίνει ότι τα μήκη του χτυπήματος μπορεί να είναι ανακριβή σε αυτή την ποσότητα και να συνεχίσουν να συγκεντρώνονται. Αυτό είναι αρκετά καλό για να πει τη διαφορά μεταξύ αρκετά παρόμοιων μελωδιών. Υπάρχει ένας μικρός αριθμός δυσπρόσιτων αλληλεπικαλύψεων μεταξύ διπλών και τριπλού μήκους ρυθμών, αλλά ο κώδικας εξακολουθεί να είναι αρκετά δύσκολο να σπάσει. Για να ξεκλειδώσετε την πόρτα, τα χτυπήματα πρέπει να έχουν τις σωστές αναλογίες μεταξύ τους (+/- ο λόγος ανοχής) και ο αριθμός των παλμών πρέπει να είναι σωστός. Εάν εισαγάγετε μη έγκυρο κωδικό πρόσβασης, το πρόγραμμα περιμένει για μερικά δευτερόλεπτα ενώ αγνοεί οποιαδήποτε είσοδο χρήστη. Θα αναβοσβήνει επίσης γρήγορα η λυχνία κατάστασης. Εάν εισαγάγετε τον σωστό κωδικό, η ενδεικτική λυχνία κατάστασης θα ανάψει σταθερά και η πόρτα θα ξεκλειδώσει για 8 δευτερόλεπτα. ## ΔΙΑΜΟΡΦΩΣΗ ΧΡΗΣΤΗ ## Το κλειδί αποθηκεύεται σε έναν πίνακα όπως αυτός: 1, 3, 3, 3}; // "Χρόνια πολλά σε σένα" Ο πίνακας αποθηκεύει το χρονικό διάστημα που συμβαίνει μεταξύ των παλμών. Έτσι, εάν ο κωδικός πρόσβασής σας έχει ΕΞΙ σημειώσεις όπως "Χρόνια πολλά σε σας", θα πρέπει να υπάρχουν ΠΕΝΤΕ στοιχεία στον πίνακα. Εάν ο κωδικός πρόσβασής σας είναι πολύ μεγάλος και έχετε πάνω από 16 παλμούς, (πολύ δύσκολο, δεν το προτείνω), πρέπει να αυξήσετε τον αριθμό που ορίζεται σε αυτήν τη γραμμή: #define inputCodeLength 16 ## ΤΟ ΥΠΟΛΟΙΠΟ ΚΩΔΙΚΟΥ # # Wasμουν περίεργος για τις διακοπές, οπότε είχα τα κουμπιά μου να ενεργοποιήσουν τις διακοπές. Για να είναι εύχρηστες αυτές οι διακοπές, έκανα τους χειριστές διακοπών να ελέγχουν για συγκεκριμένους δείκτες λειτουργιών. Εάν ο δείκτης δεν έχει οριστεί σε NULL, καλείται η συνάρτηση που δείχνει. Αυτά ρυθμίζονται με τις διάφορες λειτουργίες "ρύθμισης λειτουργίας" στο εσωτερικό του cryptap.c. Έκανα μια προσπάθεια να αποφύγω τις υπερχειλίσεις buffer, ορίζοντας έναν μέγιστο αριθμό εισερχόμενων παλμών. Εάν εισαχθεί ο μέγιστος αριθμός παλμών, το πρόγραμμα ξεκινά αμέσως την ανάλυση κωδικού πρόσβασης και αποφασίζει εάν θα ξεκλειδώσει την πόρτα. Ελπίζω ότι τα σχόλιά μου στον κώδικα θα βοηθήσουν. ## BUGS ## Προσπάθησα να αφαιρέσω τον κωδικό εντοπισμού σφαλμάτων USB, αλλά ο κωδικός δεν θα λειτουργήσει αν το κάνω. Έτσι, άφησα στο usb_init () και τις διάφορες δηλώσεις εκτύπωσης (). Θα το εκτιμούσα αν κάποιος μπορούσε να τα αφαιρέσει και να συνεχίσει να λειτουργεί το πρόγραμμα. Ακόμα καλύτερα αν μπορούν να εξηγήσουν γιατί δεν λειτούργησε για μένα. Αμέσως μετά τον προγραμματισμό, το Teensy μερικές φορές δεν δέχεται εισαγωγή κώδικα. Για να το λύσετε αυτό, κυκλώστε το κύκλωμα ισχύος.

Συνιστάται: