- Απαιτούμενα συστατικά
- Διάγραμμα κυκλώματος και επεξήγηση
- Λειτουργία αισθητήρα δακτυλικών αποτυπωμάτων με μικροελεγκτή PIC
- Επεξήγηση προγραμματισμού
Ο αισθητήρας δακτυλικών αποτυπωμάτων, που συνηθίζαμε να βλέπουμε σε ταινίες Sci-Fi πριν από μερικά χρόνια, είναι πλέον πολύ συνηθισμένος να επαληθεύει την ταυτότητα ενός ατόμου για διάφορους σκοπούς. Σήμερα μπορούμε να δούμε συστήματα που βασίζονται σε δακτυλικά αποτυπώματα παντού στην καθημερινή μας ζωή, όπως για συμμετοχή σε γραφεία, επαλήθευση υπαλλήλων σε τράπεζες, για ανάληψη μετρητών ή καταθέσεις σε ΑΤΜ, για επαλήθευση ταυτότητας σε κυβερνητικά γραφεία κ.λπ. Το έχουμε ήδη διασυνδέσει με το Arduino και με το Raspberry Pi, σήμερα πρόκειται να συνδέσουμε το Finger Print Sensor με τον μικροελεγκτή PIC. Χρησιμοποιώντας αυτό το PIC16f877A σύστημα μικροελεγκτή PIC, μπορούμε να καταχωρίσουμε νέα δακτυλικά αποτυπώματα στο σύστημα και να διαγράψουμε τα ήδη δακτυλικά αποτυπώματα που έχουν ήδη τροφοδοτηθεί. Πλήρης λειτουργία του συστήματος έχει δειχθεί στο βίντεο δίνεται στο τέλος του άρθρου.
Απαιτούμενα συστατικά
- Μικροελεγκτής PIC16f877A
- Ενότητα δακτυλικών αποτυπωμάτων
- Πιέστε τα κουμπιά ή το πληκτρολόγιο
- LCD 16x2
- 10k ποτ
- 18.432000 MHz Crystal Oscillator
- Πίνακας ψωμιού ή PCB (παραγγελία από την JLCPCB)
- Καλώδια αλτών
- LED (προαιρετικό)
- Αντίσταση 150 ohm -1 k ohm (προαιρετικά)
- 5v Τροφοδοσία
Διάγραμμα κυκλώματος και επεξήγηση
Σε αυτό το έργο διασύνδεσης αισθητήρα δακτυλικών αποτυπωμάτων PIC Microcontroller, χρησιμοποιήσαμε 4 κουμπιά: αυτά τα κουμπιά χρησιμοποιούνται για πολλαπλές λειτουργίες. Το κλειδί 1 χρησιμοποιείται για την αντιστοίχιση του αναγνωριστικού δακτυλικών αποτυπωμάτων και αύξησης δακτυλικών αποτυπωμάτων κατά την αποθήκευση ή τη διαγραφή του δακτυλικού αποτυπώματος στο σύστημα. Το κλειδί 2 χρησιμοποιείται για την εγγραφή του νέου δακτυλικού αποτυπώματος και για μείωση του αναγνωριστικού δακτυλικών αποτυπωμάτων κατά την αποθήκευση ή τη διαγραφή δακτυλικών αποτυπωμάτων στο σύστημα. Το κλειδί 3 χρησιμοποιείται για τη διαγραφή αποθηκευμένου δακτύλου από το σύστημα και το κλειδί 4 χρησιμοποιείται για OK. Ένα LED χρησιμοποιείται για ένδειξη ότι το δακτυλικό αποτύπωμα ανιχνεύεται ή ταιριάζει. Εδώ έχουμε χρησιμοποιήσει μια μονάδα δακτυλικών αποτυπωμάτων που λειτουργεί στο UART. Εδώ λοιπόν έχουμε διασυνδέσει αυτήν τη μονάδα δακτυλικών αποτυπωμάτων με τον μικροελεγκτή PIC με τον προεπιλεγμένο ρυθμό baud που είναι 57600.
Λοιπόν, πρώτα απ 'όλα, πρέπει να κάνουμε όλη την απαιτούμενη σύνδεση όπως φαίνεται στο Διάγραμμα κυκλώματος παρακάτω. Οι συνδέσεις είναι απλές, μόλις συνδέσαμε τη μονάδα δακτυλικών αποτυπωμάτων με το UART μικροελεγκτή PIC. Μια οθόνη LCD 16x2 χρησιμοποιείται για την εμφάνιση όλων των μηνυμάτων. Ένα δοχείο 10k χρησιμοποιείται επίσης με LCD για τον έλεγχο της αντίθεσης του ίδιου. Οι ακίδες δεδομένων 16x2 LCD είναι συνδεδεμένες ακίδες PORTA. Οι ακροδέκτες d4, d5, d6 και d7 των LCD συνδέονται με τους μικροελεγκτές Pin RA0, RA1, RA2 και RA3 του PIC αντίστοιχα. Τέσσερα κουμπιά (ή πληκτρολόγιο) συνδέονται με το Pin RD0, RD1, RD2 και RD του PORTD. Το LED είναι επίσης συνδεδεμένο στον ακροδέκτη RC3 της θύρας PORTC. Εδώ χρησιμοποιήσαμε έναν εξωτερικό ταλαντωτή κρυστάλλου 18.432000 MHz για να ρολογίσουμε τον μικροελεγκτή.
Λειτουργία αισθητήρα δακτυλικών αποτυπωμάτων με μικροελεγκτή PIC
Η λειτουργία αυτού του έργου είναι απλή, απλώς ανεβάστε το δεκαεξαδικό αρχείο, που δημιουργείται από τον πηγαίο κώδικα, στον μικροελεγκτή PIC με τη βοήθεια του προγραμματιστή ή του καυστήρα PIC (PIckit2 ή Pickit3 ή άλλοι) και στη συνέχεια θα δείτε μερικά μηνύματα εισαγωγής μέσω LCD και στη συνέχεια τον χρήστη θα σας ζητηθεί να εισαγάγετε μια επιλογή για λειτουργίες. Για να ταιριάζει με το δακτυλικό αποτύπωμα, ο χρήστης πρέπει να πατήσει το πλήκτρο 1, τότε η οθόνη LCD θα ζητήσει την τοποθέτηση δακτύλου στον αισθητήρα δακτυλικών αποτυπωμάτων. Τώρα βάζοντας μια μονάδα δακτυλικών αποτυπωμάτων πάνω από το δακτυλικό αποτύπωμα, μπορούμε να ελέγξουμε εάν τα δακτυλικά μας αποτυπώματα είναι ήδη αποθηκευμένα ή όχι. Εάν το δακτυλικό σας αποτύπωμα είναι αποθηκευμένο, τότε η οθόνη LCD θα εμφανίσει το μήνυμα με το αναγνωριστικό αποθήκευσης του δακτυλικού αποτυπώματος, όπως « ID: 2», διαφορετικά θα εμφανίζεται «Δεν βρέθηκε» .
Τώρα για να εγγράψετε μια δακτυλική εκτύπωση, ο χρήστης πρέπει να πατήσει το κουμπί εγγραφής ή το πλήκτρο 2 και να ακολουθήσει τα μηνύματα οδηγιών στην οθόνη LCD.
Εάν ο χρήστης θέλει να διαγράψει κάποιο από τα δακτυλικά αποτυπώματα, τότε ο χρήστης πρέπει να πατήσει το κουμπί διαγραφής ή το πλήκτρο 3. Μετά από αυτό, η οθόνη LCD θα ζητήσει την ταυτότητα του δακτυλικού αποτυπώματος που πρόκειται να διαγραφεί. Τώρα, χρησιμοποιώντας το πλήκτρο αύξησης ή το πλήκτρο 1 (πλήκτρο αντιστοίχισης ή πλήκτρο 1) και το πλήκτρο μείωσης ή το πλήκτρο 2 (κουμπί εγγραφής ή πλήκτρο 2) για αύξηση και μείωση, ο χρήστης μπορεί να επιλέξει το αναγνωριστικό του αποθηκευμένου δακτυλικού αποτυπώματος και να πατήσει OK κουμπί για να διαγράψετε αυτό το δακτυλικό αποτύπωμα. Για περισσότερη κατανόηση ρίξτε μια ματιά στο βίντεο που δίνεται στο τέλος του έργου.
FingerPrint interfacing Σημείωση: Το πρόγραμμα αυτού του έργου είναι λίγο περίπλοκο για έναν αρχάριο. Όμως, ο απλός κώδικας διασύνδεσης δημιουργήθηκε χρησιμοποιώντας το φύλλο δεδομένων της μονάδας δακτυλικών αποτυπωμάτων r305 Όλες οι οδηγίες λειτουργίας αυτής της μονάδας δακτυλικών αποτυπωμάτων δίνονται στο φύλλο δεδομένων.
Εδώ χρησιμοποιήσαμε μια μορφή καρέ για να μιλήσουμε με τη μονάδα δακτυλικών αποτυπωμάτων. Κάθε φορά που στέλνουμε μια εντολή ή ένα πλαίσιο αιτήματος δεδομένων στη μονάδα δακτυλικών αποτυπωμάτων, μας απαντά με την ίδια μορφή πλαισίου που περιέχει δεδομένα ή πληροφορίες που σχετίζονται με την εφαρμοσμένη εντολή. Όλη η μορφή δεδομένων και πλαισίου εντολών έχει δοθεί στο εγχειρίδιο χρήστη ή στο φύλλο δεδομένων της ενότητας δακτυλικών αποτυπωμάτων R305.
Επεξήγηση προγραμματισμού
Στον προγραμματισμό, χρησιμοποιήσαμε την παρακάτω μορφή καρέ.
Ξεκινάμε το πρόγραμμα ορίζοντας τα bit διαμόρφωσης και ορίζοντας μακροεντολές και καρφίτσες για LCD, κουμπιά και LED, τα οποία μπορείτε να ελέγξετε στον πλήρη κώδικα που δίνεται στο τέλος αυτού του έργου. Εάν είστε νέοι στο PIC Microcontroller τότε ξεκινήστε με το Ξεκινώντας με το PIC Microcontroller Project.
Στη συνέχεια δηλώσαμε και αρχικοποιήσαμε κάποια μεταβλητή και πίνακα, και φτιάξαμε ένα πλαίσιο που πρέπει να χρησιμοποιήσουμε σε αυτό το έργο για τη διασύνδεση της μονάδας δακτυλικών αποτυπωμάτων με τον μικροελεγκτή PIC.
uchar buf; uchar buf1; ευμετάβλητος δείκτης uint = 0; πτητική int σημαία = 0; uint msCount = 0; uint g_timerflag = 1; πτητική μέτρηση uint = 0; δεδομένα uchar; uint id = 1; enum { CMD, DATA, SBIT_CREN = 4, SBIT_TXEN, SBIT_SPEN, }; const char passPack = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x7, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1B}; const char f_detect = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x3, 0x1, 0x0, 0x5}; const char f_imz2ch1 = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x4, 0x2, 0x1, 0x0, 0x8}; const char f_imz2ch2 = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x4, 0x2, 0x2, 0x0, 0x9}; const char f_createModel = {0xEF, 0x1,0xFF, 0xFF, 0xFF, 0xFF, 0x1,0x0,0x3,0x5,0x0,0x9}; char f_storeModel = {0xEF, 0x1,0xFF, 0xFF, 0xFF, 0xFF, 0x1,0x0,0x6,0x6,0x1,0x0,0x1,0x0,0xE}; const char f_search = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x8, 0x1B, 0x1, 0x0, 0x0, 0x0, 0xA3, 0x0, 0xC8}; char f_delete = {0xEF, 0x1,0xFF, 0xFF, 0xFF, 0xFF, 0x1,0x0,0x7,0xC, 0x0,0x0,0x0,0x1,0x0,0x15};
Μετά από αυτό, έχουμε κάνει τη λειτουργία LCD για την οδήγηση LCD.
void lcdwrite (uchar ch, uchar rw) { LCDPORT = ch >> 4 & 0x0F; RS = rw; EN = 1; __delay_ms (5); EN = 0; LCDPORT = ch & 0x0F; EN = 1; __delay_ms (5); EN = 0; } Lcdprint (char * str) { ενώ (* str) { lcdwrite (* str ++, DATA); // __ καθυστέρηση_ms (20); } } lcdbegin () { uchar lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; uint i = 0; για (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Η δεδομένη συνάρτηση χρησιμοποιείται για την προετοιμασία του UART
void serialbegin (uint baudrate) { SPBRG = (18432000UL / (long) (64UL * baudrate)) - 1; // baud rate @ 18.432000Mhz Ρολόι TXSTAbits.SYNC = 0; // Ρύθμιση ασύγχρονης λειτουργίας, δηλαδή UART RCSTAbits.SPEN = 1; // Ενεργοποιεί τη σειριακή θύρα TRISC7 = 1; // Όπως ορίζεται στο φύλλο δεδομένων TRISC6 = 0; // Όπως ορίζεται στο φύλλο δεδομένων RCSTAbits.CREN = 1; // Ενεργοποιεί τη συνεχή λήψη TXSTAbits.TXEN = 1; // Ενεργοποιεί μετάδοση GIE = 1; // ENABLE διακόπτει το INTCONbits.PEIE = 1; // Ενεργοποίηση περιφερειακών διακοπών. PIE1bits.RCIE = 1; // ΕΝΕΡΓΟΠΟΙΗΣΗ Η USART λαμβάνει διακοπή PIE1bits.TXIE = 0 // απενεργοποιήστε το USART TX διακοπή PIR1bits.RCIF = 0; }
Οι δεδομένες λειτουργίες χρησιμοποιούνται για τη μεταφορά εντολών στη μονάδα δακτυλικών αποτυπωμάτων και τη λήψη δεδομένων από τη μονάδα δακτυλικών αποτυπωμάτων.
άκυρο serialwrite (char ch) { while (TXIF == 0) · // Περιμένετε έως ότου το μητρώο πομπού γίνει κενό TXIF = 0; // Διαγραφή σημαίας πομπού TXREG = ch; // φορτώστε το char που θα μεταδοθεί στο transmit reg } serialprint (char * str) { ενώ (* str) { serialwrite (* str ++); } } void interrupt SerialRxPinInterrupt (void) { if ((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; if (ευρετήριο> 0) flag = 1; RCIF = 0; // clear rx flag } } άκυρο serialFlush () { για (int i = 0; i
Μετά από αυτό πρέπει να κάνουμε μια λειτουργία που προετοιμάζει δεδομένα που πρόκειται να μεταδοθούν σε δακτυλικό αποτύπωμα και να αποκωδικοποιήσουν τα δεδομένα που προέρχονται από τη μονάδα δακτυλικών αποτυπωμάτων.
int sendcmd2fp (char * pack, int len) { uint res = ΣΦΑΛΜΑ; serialFlush (); ευρετήριο = 0; __delay_ms (100); για (int i = 0; i
Τώρα, υπάρχουν τέσσερις διαθέσιμες λειτουργίες στον κώδικα για τέσσερις διαφορετικές εργασίες:
- Λειτουργία για την εισαγωγή του αναγνωριστικού δακτυλικού αποτυπώματος - μονάδα getId ()
- Λειτουργία για την αντιστοίχιση δάχτυλο - άκυρο matchFinger ()
- Λειτουργία για την εγγραφή νέου δακτύλου - void enrolFinger ()
- Λειτουργία για τη διαγραφή ενός δακτύλου - άκυρη διαγραφή Δάχτυλο ()
Ο πλήρης κωδικός και με τις τέσσερις λειτουργίες δίνεται στο τέλος.
Τώρα στην κύρια λειτουργία, αρχικοποιούμε GPIO, LCD, UART και ελέγχουμε εάν η μονάδα δακτυλικών αποτυπωμάτων είναι συνδεδεμένη με μικροελεγκτή ή όχι. Στη συνέχεια εμφανίζει ορισμένα εισαγωγικά μηνύματα μέσω LCD. Τέλος, στο while loop, διαβάζουμε όλα τα πλήκτρα ή τα κουμπιά για τη λειτουργία του έργου.
int main () { void (* FP) (); ADCON1 = 0b00000110; LEDdir = 0; SWPORTdir = 0xF0; SWPORT = 0x0F; serialbegin (57600); LCDPORTDIR = 0x00; TRISE = 0; lcdbegin (); lcdprint ("Δακτυλικό αποτύπωμα"); lcdwrite (192, CMD); lcdprint ("Διασύνδεση"); __delay_ms (2000); lcdwrite (1, CMD); lcdprint ("Χρήση PIC16F877A"); lcdwrite (192, CMD); lcdprint ("Κύκλωμα Digest"); __delay_ms (2000); ευρετήριο = 0; ενώ (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint ("Δεν βρέθηκε το FP"); __delay_ms (2000); ευρετήριο = 0; } lcdwrite (1, CMD); lcdprint ("Βρέθηκε FP"); __delay_ms (1000); lcdinst (); ενώ (1) { FP = ταίριασμα
Ο πλήρης κωδικός PIC και ένα βίντεο εργασίας δίνεται παρακάτω. Ελέγξτε επίσης τα άλλα έργα μας χρησιμοποιώντας το Finger Print Sensor Module:
- Βιομετρική μηχανή ψηφοφορίας βάσει δακτυλικών αποτυπωμάτων με χρήση του Arduino
- Σύστημα βιομετρικής ασφάλειας χρησιμοποιώντας αισθητήρα Arduino και δακτυλικών αποτυπωμάτων
- Σύστημα βιομετρικής παρακολούθησης βάσει δακτυλικών αποτυπωμάτων με χρήση του Arduino
- Διασύνδεση αισθητήρα δακτυλικών αποτυπωμάτων με Raspberry Pi