- Απαιτούμενα υλικά
- Μονάδα αισθητήρα δακτυλικών αποτυπωμάτων GT511C3 (FPS)
- Σύνδεση αισθητήρα δακτυλικών αποτυπωμάτων GT511C3 με το Arduino
- Arduino με GT511C3
- Προγραμματισμός Arduino για GT511C3 Finger Print Sensor
- Εργασία του GT511C3 Finger Print Sensor με το Arduino
Η Biometrics έχει χρησιμοποιηθεί ως αξιόπιστο σύστημα ελέγχου ταυτότητας εδώ και πολύ καιρό. Σήμερα υπάρχουν πολύπλοκα βιομετρικά συστήματα που μπορούν να αναγνωρίσουν ένα άτομο με τον ρυθμό του καρδιακού ρυθμού ή ακόμα και από το DNA του. Άλλες εφικτές μέθοδοι περιλαμβάνουν αναγνώριση φωνής, αναγνώριση προσώπου, σάρωση ίριδας και σάρωση δακτυλικών αποτυπωμάτων. Από την οποία η αναγνώριση δακτυλικών αποτυπωμάτων είναι η πιο ευρέως χρησιμοποιούμενη μέθοδος, μπορούμε να τη βρούμε από ένα απλό σύστημα παρακολούθησης έως έξυπνα τηλέφωνα έως ελέγχους ασφαλείας και πολλά άλλα.
Σε αυτό το σεμινάριο θα μάθουμε πώς να χρησιμοποιούμε τον δημοφιλή αισθητήρα δακτυλικών αποτυπωμάτων GT511C3 (FPS) με το Arduino. Υπάρχουν πολλά FPS διαθέσιμα και έχουμε ήδη μάθει πώς να τα χρησιμοποιούμε για να κατασκευάσουμε σχέδια όπως σύστημα Attendance, Voting Machine, Security system κ.λπ. Αλλά το GT511C3 είναι πιο προηγμένο με υψηλή ακρίβεια και γρηγορότερο χρόνο απόκρισης, οπότε θα μάθουμε πώς να το χρησιμοποιούμε με το Arduino για εγγραφή δακτυλικών αποτυπωμάτων σε αυτό και στη συνέχεια ανίχνευση των δακτυλικών αποτυπωμάτων όποτε απαιτείται. Ας ξεκινήσουμε λοιπόν.
Απαιτούμενα υλικά
- Arduino Nano / UNO
- Αισθητήρας δακτυλικών αποτυπωμάτων GT511C3
- Οθόνη LCD 16x2
- Ποτ - 10k και 1k, 10k, 22k αντιστάσεις
- Πιέστε το κουμπί
- Σύνδεση καλωδίων
- Πίνακας ψωμιού
Μονάδα αισθητήρα δακτυλικών αποτυπωμάτων GT511C3 (FPS)
Πριν από την κατάδυση στο έργο ας κατανοήσουμε σχετικά με την ενότητα αισθητήρα δακτυλικών αποτυπωμάτων GT511C3 και πώς λειτουργεί. Αυτός ο αισθητήρας είναι πολύ διαφορετικός από τον αισθητήρα Capacitive και Ultrasonic Fingerprint που χρησιμοποιούνται συνήθως στα έξυπνα τηλέφωνά μας. Το GT511C3 είναι ένας οπτικός αισθητήρας δακτυλικών αποτυπωμάτων, που σημαίνει ότι βασίζεται σε εικόνες του δακτυλικού σας αποτυπώματος για να αναγνωρίσει το μοτίβο του. Ναι, το έχετε διαβάσει σωστά, ο αισθητήρας έχει στην πραγματικότητα μια κάμερα που τραβά φωτογραφίες από το δακτυλικό σας αποτύπωμα και στη συνέχεια επεξεργάζεται αυτές τις εικόνες χρησιμοποιώντας ισχυρό ενσωματωμένο ARM Cortex M3 IC. Η παρακάτω εικόνα δείχνει την μπροστινή και την πίσω πλευρά του αισθητήρα με pinouts.
Όπως μπορείτε να δείτε ότι ο αισθητήρας έχει μια κάμερα (μαύρη κηλίδα) που περιβάλλεται από μπλε LED, αυτές οι λυχνίες LED πρέπει να ανάβουν για να πάρουν μια καθαρή εικόνα του δακτυλικού αποτυπώματος. Στη συνέχεια, αυτές οι εικόνες υποβάλλονται σε επεξεργασία και μετατρέπονται σε δυαδική τιμή χρησιμοποιώντας τον μικροελεγκτή ARM σε συνδυασμό με το EEPROM. Η μονάδα διαθέτει επίσης πράσινο χρώμα SMD LED για ένδειξη ισχύος. Κάθε εικόνα δακτυλικών αποτυπωμάτων είναι 202x258 pixel με ανάλυση 450dpi. Ο αισθητήρας μπορεί να εγγράψει έως και 200 δακτυλικά αποτυπώματα και για κάθε πρότυπο δακτυλικών αποτυπωμάτων εκχωρεί ένα έντυπο αναγνώρισης 0 έως 199. Στη συνέχεια, κατά τη διάρκεια της ανίχνευσης, μπορεί να συγκρίνει αυτόματα το σαρωμένο δακτυλικό αποτύπωμα και με τα 200 πρότυπα και αν βρεθεί αντιστοιχία, δίνει τον αριθμό ταυτότητας του συγκεκριμένου δακτυλικού αποτυπώματος χρησιμοποιώντας το Smack Finger 3.0Αλγόριθμος στον μικροελεγκτή ARM. Ο αισθητήρας μπορεί να λειτουργήσει από 3.3V έως 6V και επικοινωνεί μέσω σειριακής επικοινωνίας στα 9600. Οι ακίδες επικοινωνίας (Rx και Tx) λέγεται ότι είναι μόνο 3,3V ανεκτικές, ωστόσο το φύλλο δεδομένων δεν διευκρινίζει πολλά για αυτό. Το pin-out ενός GT511C3 FPS φαίνεται παρακάτω.
Εκτός από την σειριακή επικοινωνία, η μονάδα μπορεί επίσης να συνδεθεί απευθείας με τον υπολογιστή μέσω σύνδεσης USB χρησιμοποιώντας τις καρφίτσες που εμφανίζονται στην προηγούμενη εικόνα. Μόλις συνδεθεί στον υπολογιστή, η μονάδα μπορεί να ελεγχθεί χρησιμοποιώντας την εφαρμογή SDK_DEMO.exe, την οποία μπορείτε να κατεβάσετε από τον σύνδεσμο. Αυτή η εφαρμογή επιτρέπει στο χρήστη να εγγράψει / επαληθεύσει / διαγράψει δακτυλικά αποτυπώματα και επίσης να αναγνωρίσει δακτυλικά αποτυπώματα. Το λογισμικό μπορεί επίσης να σας βοηθήσει να διαβάσετε την εικόνα που τραβήχτηκε από τον αισθητήρα που αξίζει να το δοκιμάσετε. Εναλλακτικά, μπορείτε επίσης να χρησιμοποιήσετε αυτό το λογισμικό ακόμα και αν ο αισθητήρας είναι συνδεδεμένος με το Arduino, θα το συζητήσουμε αργότερα σε αυτό το άρθρο.
Ένα άλλο ενδιαφέρον χαρακτηριστικό για τον αισθητήρα είναι το μεταλλικό περίβλημα γύρω από την περιοχή ανίχνευσης. Όπως είπα νωρίτερα, το μπλε LED πρέπει να ανάψει για να λειτουργεί ο αισθητήρας. Όμως, σε εφαρμογές όπου ο αισθητήρας πρέπει να περιμένει ενεργά ένα δακτυλικό αποτύπωμα, δεν είναι δυνατόν να διατηρείται πάντα αναμμένο το LED, καθώς θα θερμαίνει τον αισθητήρα και συνεπώς θα το καταστρέψει. Επομένως, σε αυτές τις περιπτώσεις, το μεταλλικό περίβλημα μπορεί να συνδεθεί σε έναν χωρητικό πείρο εισόδου αφής ενός MCU για να ανιχνεύσει εάν αγγίζεται. Εάν ναι, το LED μπορεί να ανάψει και να ξεκινήσει η διαδικασία ανίχνευσης. Αυτή η μέθοδος δεν παρουσιάζεται εδώ, καθώς δεν εμπίπτει στο πεδίο εφαρμογής αυτού του άρθρου.
Όταν λειτουργεί στα 3.3V ο αισθητήρας καταναλώνει περίπου 130mA. Απαιτούνται σχεδόν 3 δευτερόλεπτα για την εγγραφή ενός δακτύλου και 1 δευτερόλεπτο για την αναγνώρισή του. Ωστόσο, εάν ο αριθμός των εγγεγραμμένων προτύπων είναι μικρότερος, η ταχύτητα αναγνώρισης θα είναι υψηλή. Για περισσότερες λεπτομέρειες σχετικά με τον αισθητήρα, μπορείτε να ανατρέξετε σε αυτό το δελτίο δεδομένων από την ADH-Tech που είναι ο επίσημος κατασκευαστής της μονάδας.
Σύνδεση αισθητήρα δακτυλικών αποτυπωμάτων GT511C3 με το Arduino
Το GT511C3 FPS διαθέτει δύο ακροδέκτες τροφοδοσίας που μπορούν να τροφοδοτηθούν από + 5V καρφίτσα Arduino και δύο ακίδες επικοινωνίας Rx και Tx που μπορούν να συνδεθούν σε οποιονδήποτε ψηφιακό ακροδέκτη του Arduino για σειριακή επικοινωνία. Επιπλέον, έχουμε προσθέσει επίσης ένα κουμπί και μια οθόνη LCD για την εμφάνιση της κατάστασης του αισθητήρα. Το πλήρες διάγραμμα κυκλώματος για διασύνδεση GT511C3 FPS με Arduino βρίσκεται παρακάτω.
Δεδομένου ότι οι ακίδες Rx και Tx είναι ανθεκτικοί σε 3.3V, χρησιμοποιήσαμε ένα δυνητικό διαχωριστικό στην πλευρά Rx για να μετατρέψουμε 5V σε 3.3V. Η αντίσταση 10k και η αντίσταση 22k μετατρέπει το σήμα 5V από τον ακροδέκτη Arduino Tx σε 3.3V πριν φτάσει στον ακροδέκτη Rx του FPS. Ο αισθητήρας μπορεί επίσης να τροφοδοτείται από 3.3V, αλλά βεβαιωθείτε ότι το Arduino σας μπορεί να παρέχει αρκετό ρεύμα για τον αισθητήρα. Έχουμε συνδέσει την LCD σε λειτουργία 4-bit που τροφοδοτείται από 5V pin του Arduino. Ένα μπουτόν συνδέεται με τον πείρο D2 ο οποίος όταν πατηθεί θα θέσει το πρόγραμμα σε κατάσταση εγγραφής όπου ο χρήστης μπορεί να εγγράψει νέο δάχτυλο. Μετά την εγγραφή, το πρόγραμμα θα παραμείνει σε λειτουργία σάρωσης για σάρωση για οποιοδήποτε δάχτυλο αγγίζει τον αισθητήρα.
Arduino με GT511C3
Όπως αναφέρθηκε προηγουμένως, το GT511C3 FPS επικοινωνεί μέσω σειριακής επικοινωνίας, ο αισθητήρας κατανοεί τον δεκαεξαδικό κώδικα και για κάθε hex κώδικα εκτελείται μια συγκεκριμένη λειτουργία. Μπορείτε να ελέγξετε το φύλλο δεδομένων για να γνωρίζετε όλες τις δεκαεξαδικές τιμές και την αντίστοιχη λειτουργία του, εάν σας ενδιαφέρει. Όμως, τυχεροί για εμάς ο bboyho έχει ήδη δημιουργήσει μια βιβλιοθήκη που μπορεί να χρησιμοποιηθεί απευθείας με το Arduino για εγγραφή και εντοπισμό δακτυλικών αποτυπωμάτων. Μπορείτε να κατεβάσετε τη βιβλιοθήκη Github για GT511C3 FPS από τον παρακάτω σύνδεσμο
GT511C3 Arduino Library
Ο σύνδεσμος θα κατεβάσει ένα αρχείο ZIP, τότε θα πρέπει να το προσθέσετε στο Arduino IDE ακολουθώντας την εντολή Σκίτσο -> Συμπερίληψη βιβλιοθήκης -> Προσθήκη βιβλιοθήκης.ZIP. Μόλις προσθέσετε τη βιβλιοθήκη επανεκκινήστε το IDE σας και θα πρέπει να μπορείτε να βρείτε τα παραδείγματα προγραμμάτων για GT511C3 FSP στην ενότητα Αρχείο -> Παράδειγμα -> Σαρωτής δακτυλικών αποτυπωμάτων TTL όπως φαίνεται παρακάτω
Θα πρέπει να δείτε τέσσερα παραδείγματα προγραμμάτων, το πρόγραμμα αναλαμπής θα αναβοσβήνει το μπλε led στο FPS, το πρόγραμμα εγγραφής και αναγνωριστικού δακτύλου μπορεί να χρησιμοποιηθεί για εγγραφή και αναγνώριση των δακτύλων ανάλογα. Σημειώστε ότι ένα δάχτυλο μόλις εγγραφεί θα θυμάται πάντα από τη μονάδα, ακόμη και αν είναι απενεργοποιημένη.
Μπορείτε να ανεβάσετε το πρόγραμμα Serial Pass-through στο Arduino για να χρησιμοποιήσετε την εφαρμογή Demo_SDK.exe που συζητήσαμε νωρίτερα σε αυτό το άρθρο. Για να διαγράψετε οποιοδήποτε πρότυπο δακτυλικών αποτυπωμάτων ή να αποθηκεύσετε ένα αντίγραφο στον υπολογιστή σας, μπορεί να χρησιμοποιηθεί αυτή η εφαρμογή SDK.
Προγραμματισμός Arduino για GT511C3 Finger Print Sensor
Στόχος μας εδώ είναι να γράψουμε ένα πρόγραμμα που θα εγγράψει ένα δάχτυλο όταν πατηθεί ένα κουμπί και θα εμφανίσει τον αριθμό ταυτότητας του δακτύλου που έχει ήδη εγγραφεί. Πρέπει επίσης να είμαστε σε θέση να εμφανίζουμε όλες τις πληροφορίες στην οθόνη LCD για να επιτρέψουμε στο έργο να είναι αυτόνομο. Ο πλήρης κωδικός για να κάνετε το ίδιο είναι να δώσετε στο κάτω μέρος αυτής της σελίδας. Εδώ σπάζω το ίδιο σε μικρά αποσπάσματα για να σας βοηθήσω να κατανοήσετε καλύτερα.
Όπως πάντα ξεκινάμε το πρόγραμμα συμπεριλαμβάνοντας τις απαιτούμενες βιβλιοθήκες, εδώ θα χρειαστούμε τη βιβλιοθήκη FPS_GT511C3 για τη μονάδα FPS μας, το λογισμικό σειριακό για χρήση D4 και D5 σε σειριακή επικοινωνία και υγρό κρύσταλλο για διασύνδεση LCD. Τότε πρέπει να αναφέρουμε σε ποιες καρφίτσες συνδέεται το FPS και το LCD. Εάν έχετε ακολουθήσει το διάγραμμα κυκλώματος ως έχει, τότε είναι 4 και 5 για FPS και D6 έως D11 για LCD. Ο κωδικός για το ίδιο φαίνεται παρακάτω
#include "FPS_GT511C3.h" // Λήψη βιβλιοθήκης από https://github.com/sparkfun/Fingerprint_Scanner-TTL #include "SoftwareSerial.h" // Σειριακή βιβλιοθήκη λογισμικού #include
Μέσα στη λειτουργία εγκατάστασης , προβάλλουμε κάποιο εισαγωγικό μήνυμα στην οθόνη LCD και στη συνέχεια αρχικοποιούμε τη μονάδα FPS. Η εντολή fps.SetLED (true) θα ανάψει το μπλε LED στον αισθητήρα, μπορείτε να το απενεργοποιήσετε με το fps.SetLED (false) όταν δεν απαιτείται καθώς θα θερμαίνοντας τον αισθητήρα εάν αφεθεί συνεχώς. Έχουμε επίσης δημιουργήσει τον πείρο D2 ως πείρο εισόδου και τον συνδέσαμε με την εσωτερική αντίσταση pull-up έτσι ώστε να συνδέσουμε ένα μπουτόν στον πείρο.
άκυρη ρύθμιση () { Serial.begin (9600); lcd.begin (16, 2); // Αρχικοποιήστε την οθόνη LCD 16 * 2 lcd.print ("GT511C3 FPS"). // Γραμμή εισαγωγής μηνύματος 1 lcd.setCursor (0, 1); lcd.print ("με Arduino"); // Καθυστέρηση γραμμής εισαγωγής μηνύματος 2 (2000). lcd.clear (); fps. Άνοιγμα (); // αποστολή σειριακής εντολής για αρχικοποίηση fp fps.SetLED (true); // ενεργοποιήστε το LED έτσι ώστε το fps να μπορεί να δει το pinMode δακτυλικών αποτυπωμάτων (2, INPUT_PULLUP). // Συνδεθείτε στην εσωτερική αντίσταση προς τα πάνω ως πείρος εισόδου }
Μέσα στη λειτουργία κενών βρόχων πρέπει να ελέγξουμε εάν πατηθεί το κουμπί, εάν πατηθεί θα εγγράψουμε ένα νέο δάχτυλο και θα αποθηκεύσουμε το πρότυπό του με έναν αριθμό ταυτότητας χρησιμοποιώντας τη λειτουργία εγγραφής. Εάν όχι, θα συνεχίσουμε να περιμένουμε να πατηθεί ένα δάχτυλο στον αισθητήρα. Εάν πατηθεί, θα εντοπίσουμε το δακτυλικό αποτύπωμα συγκρίνοντάς το με όλα τα εγγεγραμμένα πρότυπα δακτυλικών αποτυπωμάτων χρησιμοποιώντας τη μέθοδο 1: Ν. Μόλις ανακαλυφθεί ο αριθμός ταυτότητας, θα εμφανιστεί το ευπρόσδεκτο ακολουθούμενο από τον αριθμό ταυτότητας. Εάν το δακτυλικό αποτύπωμα δεν ταιριάζει με κανένα από τα εγγεγραμμένα δάχτυλα, ο αριθμός ταυτότητας θα είναι 200, σε αυτήν την περίπτωση θα εμφανίζεται άγνωστο καλωσορίσματος.
if (digitalRead (2)) // Εάν πατηθεί το κουμπί { Enroll (); // Εγγραφή δακτυλικού αποτυπώματος } // Προσδιορίστε τη δοκιμή δακτυλικών αποτυπωμάτων εάν (fps.IsPressFinger ()) { fps.CaptureFinger (false); int id = fps.Identify1_N (); lcd.clear (); lcd.print ("Καλώς ήλθατε:"); εάν (id == 200) lcd.print ("Άγνωστο"); // Εάν δεν αναγνωρίζεται lcd.print (id); καθυστέρηση (1000) }
Η συνάρτηση εγγραφής θα πρέπει να λάβει τρία δείγματα εισόδου για να καταγράψει με επιτυχία ένα δάχτυλο. Μόλις εγγραφεί ένα πρότυπο για το συγκεκριμένο δάχτυλο θα δημιουργηθεί το οποίο δεν θα διαγραφεί εκτός εάν ο χρήστης το εξαναγκάσει μέσω εντολών HEX. Ο κωδικός για να εγγραφεί ένα δάκτυλο παρουσιάζεται παρακάτω. Η μέθοδος IsPressFinger χρησιμοποιείται για να ελέγξει εάν ανιχνεύεται ένα δάχτυλο, αν ναι τότε η εικόνα καταγράφεται χρησιμοποιώντας το CaptureFinger και, τέλος, Enroll1, Enroll2 και Enroll3 χρησιμοποιούνται για τρία διαφορετικά δείγματα για την επιτυχή εγγραφή ενός δακτύλου. Η οθόνη LCD εμφανίζει τον αριθμό ταυτότητας του δακτύλου εάν εγγραφεί επιτυχώς αλλιώς θα εμφανίζει ένα μήνυμα αποτυχίας με κωδικό. Ο κωδικός 1 σημαίνει ότι το δακτυλικό αποτύπωμα δεν καταγράφηκε καθαρά και ως εκ τούτου πρέπει να δοκιμάσετε ξανά. Ο κωδικός 2 είναι ένδειξη αποτυχίας μνήμης και ο κωδικός 3 σημαίνει ότι το δάχτυλο έχει ήδη εγγραφεί.
void Enroll () // Λειτουργία εγγραφής από το πρόγραμμα exmaple βιβλιοθήκης { int registerid = 0; bool usedid = true; while (usedid == true) { usedid = fps.CheckEnrolled (εγγραφή); εάν (usedid == true) εγγραφή ++; } fps.EnrollStart (εγγραφή); // εγγραφή lcd.print ("Εγγραφή #"); lcd.print (εγγραφή); ενώ (fps.IsPressFinger () == false) καθυστέρηση (100); bool bret = fps.CaptureFinger (true); int iret = 0; αν (bret! = false) { lcd.clear (); lcd.print ("Κατάργηση δακτύλου"); fps.Enroll1 (); ενώ η καθυστέρηση (fps.IsPressFinger () == true) (100) lcd.clear (); lcd.print ("Πατήστε ξανά"); ενώ (fps.IsPressFinger () == false) καθυστέρηση (100); bret = fps.CaptureFinger (true); εάν (bret! = false) { lcd.clear (); lcd.print ("Κατάργηση δακτύλου"); fps.Enroll2 (); ενώ η καθυστέρηση (fps.IsPressFinger () == true) (100) lcd.clear (); lcd.print ("Πατήστε ακόμη ξανά"); ενώ (fps.IsPressFinger () == false) καθυστέρηση (100); bret = fps.CaptureFinger (true); εάν (bret! = false) { lcd.clear (); lcd.print ("Κατάργηση δακτύλου"); iret = fps.Enroll3 (); εάν (iret == 0) { lcd.clear (); lcd.print ("Εγγραφή επιτυχίας"); } αλλιώς { lcd.clear (); lcd.print ("Η εγγραφή απέτυχε:"); lcd.print (iret); } } άλλο lcd.print ("Αποτυχία 1"); } else lcd.print ("Αποτυχία 2"); } else lcd.print ("Αποτυχία 3"); }
Εργασία του GT511C3 Finger Print Sensor με το Arduino
Τώρα που το υλικό και ο κωδικός μας είναι έτοιμοι, είναι καιρός να δοκιμάσουμε το έργο μας. Ανεβάστε τον κωδικό στο Arduino και ενεργοποιήστε τον, απλά χρησιμοποιώ τη θύρα micro-usb για να ενεργοποιήσετε το έργο. Κατά την εκκίνηση θα πρέπει να δούμε το εισαγωγικό μήνυμα στην οθόνη LCD και στη συνέχεια θα πρέπει να εμφανίζει "Γεια!..". Αυτό σημαίνει ότι το FPS είναι έτοιμο για σάρωση για δάχτυλο, εάν πατηθεί κάποιο εγγεγραμμένο δάχτυλο θα έλεγε «Καλώς ήλθατε» ακολουθούμενο από τον αριθμό ταυτότητας αυτού του δακτύλου όπως φαίνεται παρακάτω.
Εάν πρέπει να εγγραφεί ένα νέο δάχτυλο, τότε μπορούμε να χρησιμοποιήσουμε το κουμπί για να μπει σε κατάσταση εγγραφής και να ακολουθήσουμε τις οδηγίες LCD για να εγγράψουμε ένα δάχτυλο. Αφού ολοκληρωθεί η διαδικασία εγγραφής, η οθόνη LCD θα εμφανίσει ξανά "Γεια!.." για να υποδείξει ότι έχει διαβαστεί για να εντοπίσει ξανά τα δάχτυλα. Η πλήρης εργασία βρίσκεται στο παρακάτω βίντεο.
Από εδώ μπορείτε να αναπτύξετε πολλά ενδιαφέροντα πράγματα πάνω από αυτό χρησιμοποιώντας τη μονάδα αισθητήρα Finger Print. Ελπίζω ότι καταλάβατε το σεμινάριο και σας άρεσε να φτιάξετε κάτι χρήσιμο, εάν έχετε οποιεσδήποτε ερωτήσεις αφήστε το στην ενότητα σχολίων ή χρησιμοποιήστε τα φόρουμ για άλλες τεχνικές ερωτήσεις.