- आवश्यक घटक
- सर्किट आरेख और स्पष्टीकरण
- पीआईसी माइक्रोकंट्रोलर के साथ फिंगरप्रिंट सेंसर का संचालन
- प्रोग्रामिंग स्पष्टीकरण
फिंगर प्रिंट सेंसर, जिसे हम कुछ साल पहले विज्ञान-फाई फिल्मों में देखते थे, अब विभिन्न उद्देश्यों के लिए किसी व्यक्ति की पहचान को सत्यापित करना बहुत आम हो गया है। वर्तमान समय में हम अपने दैनिक जीवन में हर जगह फिंगरप्रिंट-आधारित सिस्टम देख सकते हैं जैसे कार्यालयों में उपस्थिति, बैंकों में कर्मचारी सत्यापन, एटीएम में नकदी निकासी या जमा के लिए, सरकारी कार्यालयों में पहचान सत्यापन के लिए आदि। हमने पहले से ही Arduino के साथ हस्तक्षेप किया है और रास्पबेरी पाई के साथ, आज हम PIC माइक्रोकंट्रोलर के साथ फिंगर प्रिंट सेंसर इंटरफ़ेस करने जा रहे हैं । इस PIC माइक्रोकंट्रोलर PIC16f877A फ़िंगर प्रिंट सिस्टम का उपयोग करते हुए, हम सिस्टम में नए फ़िंगरप्रिंट्स को दर्ज कर सकते हैं और पहले से ही फ़िंगरप्रिंट को हटा सकते हैं। वीडियो में सिस्टम का पूरा काम दिखाया गया है लेख के अंत में दिया गया।
आवश्यक घटक
- PIC16f877A माइक्रोकंट्रोलर
- फिंगरप्रिंट मॉड्यूल
- बटन या कीपैड पुश करें
- 16x2 एलसीडी
- 10k पॉट
- 18.432000 मेगाहर्ट्ज क्रिस्टल थरथरानवाला
- रोटी बोर्ड या पीसीबी (JLCPCB से ऑर्डर किया गया)
- जम्पर के तार
- एलईडी (वैकल्पिक)
- रोकनेवाला 150 ओम -1 k ओम (वैकल्पिक)
- 5v बिजली की आपूर्ति
सर्किट आरेख और स्पष्टीकरण
इस PIC माइक्रोकंट्रोलर फिंगर प्रिंट सेंसर इंटरफेसिंग प्रोजेक्ट में, हमने 4 पुश बटन का उपयोग किया है: इन बटन का उपयोग मल्टीफ़ंक्शनिंग के लिए किया जाता है। कुंजी 1 का उपयोग फिंगर प्रिंट और इंक्रीमेंट फिंगरप्रिंट आईडी के मिलान के लिए किया जाता है, जबकि सिस्टम में फिंगरप्रिंट को स्टोर या डिलीट करते हैं। कुंजी 2 का उपयोग नए फिंगरप्रिंट को दर्ज करने और सिस्टम में फिंगरप्रिंट को हटाने या हटाने के दौरान फिंगरप्रिंट आईडी के लिए उपयोग किया जाता है। कुंजी 3 का उपयोग सिस्टम से संग्रहीत उंगली को हटाने के लिए किया जाता है और कुंजी 4 का उपयोग ओके के लिए किया जाता है। एक एलईडी एक संकेत के लिए उपयोग किया जाता है जिसे फिंगरप्रिंट का पता लगाया जाता है या मिलान किया जाता है। यहां हमने एक फिंगरप्रिंट मॉड्यूल का उपयोग किया है जो UART पर काम करता है। इसलिए यहाँ हमने इस फिंगरप्रिंट मॉड्यूल को PIC माइक्रोकंट्रोलर के साथ इसकी डिफ़ॉल्ट बॉड दर पर हस्तक्षेप किया है जो कि 57600 है।
तो, सबसे पहले, हमें सभी आवश्यक कनेक्शन बनाने की आवश्यकता है जैसा कि नीचे दिए गए सर्किट आरेख में दिखाया गया है। कनेक्शन सरल हैं, हमने PIC माइक्रोकंट्रोलर के UART से केवल फिंगरप्रिंट मॉड्यूल कनेक्ट किया है। सभी संदेशों को प्रदर्शित करने के लिए 16x2 एलसीडी का उपयोग किया जाता है। उसी के विपरीत को नियंत्रित करने के लिए एलसीडी के साथ 10k पॉट का भी उपयोग किया जाता है। 16x2 एलसीडी डेटा पिन PORTA पिन से जुड़े होते हैं। LCD के d4, d5, d6, और d7 पिन क्रमशः पिन RA0, RA1, RA2 और RA3 के साथ PIC माइक्रोकंट्रोलर से जुड़े हैं। चार पुश बटन (या कीपैड) PORTD के पिन RD0, RD1, RD2 और RD से जुड़े हैं। LED पोर्ट PORTC के पिन RC3 पर भी जुड़ा हुआ है। यहां हमने माइक्रोकंट्रोलर को देखने के लिए 18.432000 मेगाहर्ट्ज बाहरी क्रिस्टल थरथरानवाला का उपयोग किया है।
पीआईसी माइक्रोकंट्रोलर के साथ फिंगरप्रिंट सेंसर का संचालन
इस परियोजना का संचालन सरल है, बस PIC फाइल को PIC प्रोग्रामर या बर्नर (PIckit2 या Pickit3 या अन्य) की मदद से PIC माइक्रोकंट्रोलर में जेनरेट किया जाता है, और फिर आपको LCD और फिर उपयोगकर्ता के लिए कुछ परिचय संदेश दिखाई देंगे संचालन के लिए एक विकल्प दर्ज करने के लिए कहा जाएगा। फिंगरप्रिंट उपयोगकर्ता से मिलान करने के लिए कुंजी 1 को दबाने की जरूरत है, फिर एलसीडी फिंगर प्रिंट सेंसर पर प्लेस फिंगर के लिए पूछेगा । अब फिंगरप्रिंट मॉड्यूल पर उंगली रखकर, हम जांच सकते हैं कि हमारी उंगलियों के निशान पहले से ही संग्रहीत हैं या नहीं। यदि आपका फिंगरप्रिंट संचित है, तो LCD संदेश को फिंगरप्रिंट-जैसे ' ID: 2' के स्टोरेज आईडी के साथ दिखाएगा अन्यथा यह 'पाया गया' होगा ।
अब एक फिंगर प्रिंट को दर्ज करने के लिए , उपयोगकर्ता को एनरोल बटन या की 2 को प्रेस करना होगा और एलसीडी स्क्रीन पर दिए गए निर्देशों का पालन करना होगा।
यदि उपयोगकर्ता किसी भी फिंगरप्रिंट को हटाना चाहता है, तो उपयोगकर्ता को डिलीट बटन या की 3. प्रेस करना होगा । इसके बाद, एलसीडी उस फिंगरप्रिंट की आईडी मांगेगा, जिसे डिलीट करना है। अब वेतन वृद्धि बटन और कुंजी 1 (मिलान पुश बटन या कुंजी 1) और वेतन वृद्धि बटन या कुंजी 2 (नामांकन पुश बटन या कुंजी 2) वेतन वृद्धि और वेतन वृद्धि के लिए उपयोग करके, उपयोगकर्ता सहेजे गए फिंगर प्रिंट की आईडी का चयन कर सकते हैं और ओके दबा सकते हैं उस फिंगरप्रिंट को हटाने के लिए बटन। अधिक समझ के लिए परियोजना के अंत में दिए गए वीडियो पर एक नज़र डालें ।
फ़िंगरप्रिंट इंटरफेसिंग नोट: इस परियोजना का कार्यक्रम एक शुरुआत के लिए थोड़ा जटिल है। लेकिन इसका सरल इंटरफेसिंग कोड r305 फिंगरप्रिंट मॉड्यूल डेटाशीट पढ़कर बनाया गया है। इस फिंगरप्रिंट मॉड्यूल के कामकाज के सभी निर्देश डेटाशीट में दिए गए हैं।
यहाँ हमने फिंगरप्रिंट मॉड्यूल के साथ बात करने के लिए एक फ्रेम प्रारूप का उपयोग किया है । जब भी हम फिंगरप्रिंट मॉड्यूल पर एक कमांड या डेटा अनुरोध फ़्रेम भेजते हैं, तो यह हमें उसी फ्रेम प्रारूप के साथ प्रतिक्रिया करता है जिसमें डेटा या लागू कमांड से संबंधित जानकारी होती है। सभी डेटा और कमांड फ्रेम प्रारूप उपयोगकर्ता मैनुअल में या R305 फिंगरप्रिंट मॉड्यूल की डेटशीट में दिए गए हैं।
प्रोग्रामिंग स्पष्टीकरण
प्रोग्रामिंग में, हमने नीचे फ्रेम प्रारूप का उपयोग किया है।
हम कॉन्फ़िगरेशन बिट्स सेट करके और एलसीडी, बटन और एलईडी के लिए मैक्रोज़ और पिन को परिभाषित करके कार्यक्रम शुरू करते हैं, जिसे आप इस परियोजना के अंत में दिए गए पूर्ण कोड में जांच सकते हैं । यदि आप PIC माइक्रोकंट्रोलर के लिए नए हैं तो PIC माइक्रोकंट्रोलर प्रोजेक्ट के साथ शुरू करें।
तब हमने कुछ वैरिएबल और ऐरे को घोषित किया और आरम्भ किया, और एक फ्रेम बनाया जिसे हमें इस प्रोजेक्ट में उपयोग करने के लिए PIC माइक्रोकंट्रोलर के साथ फिंगरप्रिंट मॉड्यूल को इंटरफेस करने की आवश्यकता है।
uchar buf; uchar buf1; वाष्पशील uint इंडेक्स = 0; वाष्पशील int झंडा = 0; uint msCount = 0; uint g_timerflag = 1; वाष्पशील uint count = 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, 0x1, 0x7, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1B}; const char f_detect = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x1, 0x3, 0x1, 0x1, 0x5}; const char f_imz2ch1 = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x4, 0x2, 0x1, 0x1, 0x0, 0x8}; const char f_imz2ch2 = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x4, 0x2, 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,0x6,0x1,0x0,0x1,0x,0,0xE}; const char f_search = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x1, 0x8, 0x1B, 0x1, 0x0, 0x0, 0x0, 0x03, 0x03, 0xC8}; char f_delete = {0xEF, 0x1,0xFF, 0xFF, 0xFF, 0xFF, 0x1,0x0,0x7,0xC, 0x0,0x0,0x0,0x0,0x0,0x15};
इसके बाद, हमने एलसीडी ड्राइव करने के लिए एलसीडी फ़ंक्शन बनाया है।
शून्य lcdwrite (uchar ch, uchar rw) { LCDPORT = ch >> 4 & 0x0F; आरएस = आरडब्ल्यू; एन = 1; __delay_ms (5); एन = 0; LCDPORT = ch & 0x0F; एन = 1; __delay_ms (5); एन = 0; } Lcdprint (char * str) { जबकि (* str) { lcdwrite (* str ++, DATA); // __ देरी_एमएस (20); } } lcdbegin () { uchar lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; uint i = 0; for (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
UART को आरंभ करने के लिए दिए गए फ़ंक्शन का उपयोग किया जाता है
शून्य serialbegin (uint baudrate) { SPBRG = (18432000UL / (लंबी) (64UL * baudrate)) - 1; // बॉड दर @ 18.432000 मेगाहर्ट्ज घड़ी TXSTAbits.SYNC = 0; // अतुल्यकालिक मोड की स्थापना, यानी UART RCSTAbits.SPEN = 1; // सीरियल पोर्ट TRISC7 = 1 को सक्षम करता है ; // जैसा कि डेटशीट TRISC6 = 0 में निर्धारित है ; // जैसा कि डेटशीट में दिया गया है RCSTAbits.CREN = 1; // निरंतर रिसेप्शन को सक्षम करता है TXSTAbits.TXEN = 1; // ट्रांसमिशन ट्रांसमिशन GIE = 1; // सक्षम INTCONbits.PEIE = 1 को बाधित करता है; // सक्षम परिधीय बाधा। PIE1bits.RCIE = 1; // सक्षम USART को PIE1bits प्राप्त होती है। XIE = 0; // अक्षम USART TX व्यवधान PIR1bits.RCIF = 0; }
दिए गए कार्यों का उपयोग फिंगरप्रिंट मॉड्यूल में कमांड ट्रांसफर करने और फिंगरप्रिंट मॉड्यूल से डेटा प्राप्त करने के लिए किया जाता है ।
शून्य धारावाहिक (चार च) { जबकि (TXIF == 0); // प्रतीक्षा करें जब तक ट्रांसमीटर रजिस्टर खाली न हो जाए TXIF = 0; // स्पष्ट ट्रांसमीटर झंडा TXREG = ch; // लोड करने के लिए चार संचारित reg में क्रमांकित किया जा सकता है } क्रमबद्धता (चार * str) { जबकि (* str) { क्रमलेख (* 10 ++); } } शून्य व्यवधान SerialRxPinInterrupt (शून्य) { if ((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; if (इंडेक्स> 0) फ्लैग = 1; आरसीआईएफ = 0; // स्पष्ट आरएक्स फ्लैग } } शून्य सीरियलफ्लश () {के लिए (इंट i = 0; मैं;
इसके बाद हमें एक फ़ंक्शन बनाने की ज़रूरत है जो डेटा को फिंगरप्रिंट के लिए प्रेषित करने और फिंगरप्रिंट मॉड्यूल से आने वाले डेटा को डीकोड करने के लिए तैयार करता है ।
int sendcmd2fp (char * pack, int len) { uint res = ERROR; सीरियलफ्लश (); सूचकांक = 0; __delay_ms (100); for (int i = 0; मैं;
अब, चार अलग-अलग कार्य के लिए कोड में चार फ़ंक्शन उपलब्ध हैं:
- फ़िंगरप्रिंट आईडी के लिए फ़ंक्शन - यूनिट getId ()
- अनामिका उंगली के लिए कार्य - शून्य मिलान ()
- नई उंगली नामांकन के लिए कार्य - शून्य एनरोलिंगर ()
- उंगली हटाने का कार्य - शून्य हटाना
सभी चार फ़ंक्शन के साथ पूरा कोड अंत में दिया गया है।
अब मुख्य कार्य में, हम GPIO, LCD, UART को इनिशियलाइज़ करते हैं और जाँचते हैं कि फिंगरप्रिंट मॉड्यूल एक माइक्रोकंट्रोलर के साथ जुड़ा हुआ है या नहीं। फिर यह एलसीडी पर कुछ परिचय संदेश दिखाता है। अंत में जबकि लूप में हम प्रोजेक्ट को संचालित करने के लिए सभी कुंजी या पुश बटन पढ़ते हैं।
int main () { void (* FP) (); ADCON1 = 0b00000110; लेडिर = 0; SWPORTdir = 0xF0; SWPORT = 0x0F; सीरियलबेगिन (57600); LCDPORTDIR = 0x00; ट्राइसेज़ = 0; lcdbegin (); एलसीडीप्रिंट ("फ़िंगरप्रिंट"); एलसीडीडाइट (192, सीएमडी); एलसीडीप्रिंट ("इंटरफेसिंग"); __delay_ms (2000); एलसीडीडाइट (1, सीएमडी); lcdprint ("PIC16F877A का उपयोग करके"); एलसीडीडाइट (192, सीएमडी); एलसीडीप्रिंट ("सर्किट डाइजेस्ट"); __delay_ms (2000); सूचकांक = 0; जबकि (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); एलसीडीप्रिंट ("एफपी नॉट फाउंड"); __delay_ms (2000); सूचकांक = 0; } lcdwrite (1, CMD); एलसीडीप्रिंट ("एफपी मिला"); __delay_ms (1000); एलसीडीडेन (); जबकि (1) { एफपी = मैच
पूरा PIC कोड और एक कार्य वीडियो नीचे दिया गया है। फिंगर प्रिंट सेंसर मॉड्यूल का उपयोग करके हमारी अन्य परियोजनाओं की भी जाँच करें:
- Arduino का उपयोग करके फ़िंगरप्रिंट आधारित बायोमेट्रिक वोटिंग मशीन
- Arduino और Fingerprint Sensor का उपयोग कर Biometric Security System
- Arduino का उपयोग करके फ़िंगरप्रिंट आधारित बायोमेट्रिक उपस्थिति प्रणाली
- रास्पबेरी पाई के साथ फ़िंगरप्रिंट सेंसर इंटरफेसिंग