- ส่วนประกอบที่จำเป็น
- แผนภาพวงจรและคำอธิบาย
- การทำงานของเซ็นเซอร์ลายนิ้วมือด้วยไมโครคอนโทรลเลอร์ PIC
- คำอธิบายการเขียนโปรแกรม
Finger Print Sensor ซึ่งเราเคยเห็นในภาพยนตร์ Sci-Fi เมื่อไม่กี่ปีที่ผ่านมาปัจจุบันกลายเป็นเรื่องปกติมากในการยืนยันตัวตนของบุคคลเพื่อวัตถุประสงค์ต่างๆ ในปัจจุบันเราสามารถเห็นระบบที่ใช้ลายนิ้วมือได้ทุกที่ในชีวิตประจำวันของเราเช่นการเข้าทำงานในสำนักงานการตรวจสอบพนักงานในธนาคารการถอนเงินสดหรือการฝากเงินในตู้เอทีเอ็มสำหรับการยืนยันตัวตนในหน่วยงานของรัฐเป็นต้นเราได้เชื่อมต่อกับ Arduino และ กับราสเบอร์รี่ Pi ในวันนี้เราจะไปFinger Print อินเตอร์เฟซเซนเซอร์กับไมโครคอนโทรลเลอร์การใช้ไมโครคอนโทรลเลอร์ PIC PIC16f877A Finger Print System เราสามารถลงทะเบียนลายนิ้วมือใหม่ในระบบและสามารถลบลายนิ้วมือที่ป้อนไว้แล้วได้ แสดงการทำงานของระบบอย่างสมบูรณ์ใน วิดีโอ ระบุไว้ในตอนท้ายของบทความ
ส่วนประกอบที่จำเป็น
- ไมโครคอนโทรลเลอร์ PIC16f877A
- โมดูลลายนิ้วมือ
- ปุ่มกดหรือปุ่มกด
- 16x2 LCD
- หม้อ 10k
- 18.432000 MHz Crystal Oscillator
- Bread Board หรือ PCB (สั่งจาก JLCPCB)
- สายจัมเปอร์
- LED (อุปกรณ์เสริม)
- ตัวต้านทาน 150 โอห์ม -1 k โอห์ม (อุปกรณ์เสริม)
- แหล่งจ่ายไฟ 5v
แผนภาพวงจรและคำอธิบาย
ใน โครงการเชื่อมต่อเซ็นเซอร์พิมพ์ลายนิ้วมือของไมโครคอนโทรลเลอร์ PICเราได้ใช้ปุ่มกด 4 ปุ่ม: ปุ่มเหล่านี้ใช้สำหรับมัลติฟังก์ชั่น คีย์ 1ใช้สำหรับจับคู่ลายนิ้วมือและรหัสลายนิ้วมือที่เพิ่มขึ้นขณะจัดเก็บหรือลบลายนิ้วมือในระบบ คีย์ 2ใช้สำหรับการลงทะเบียนลายนิ้วมือใหม่และสำหรับ ID ลายนิ้วมือที่ลดลงขณะจัดเก็บหรือลบลายนิ้วมือในระบบ ปุ่ม 3 ใช้สำหรับลบนิ้วที่จัดเก็บไว้ออกจากระบบและใช้ปุ่ม 4 สำหรับตกลง LED ใช้สำหรับบ่งชี้ว่าตรวจพบหรือจับคู่ลายนิ้วมือ ที่นี่เราได้ใช้โมดูลลายนิ้วมือซึ่งทำงานบน UART ดังนั้นที่นี่เราได้เชื่อมต่อโมดูลลายนิ้วมือนี้กับไมโครคอนโทรลเลอร์ PIC ที่อัตราการส่งข้อมูลเริ่มต้นคือ 57600
ก่อนอื่นเราต้องทำการเชื่อมต่อที่จำเป็นทั้งหมดตามที่แสดงในแผนภาพวงจรด้านล่าง การเชื่อมต่อทำได้ง่ายเพียงแค่เชื่อมต่อโมดูลลายนิ้วมือกับ UART ของไมโครคอนโทรลเลอร์ PIC จอ LCD 16x2 ใช้สำหรับแสดงข้อความทั้งหมด นอกจากนี้ยังใช้หม้อ 10k กับ LCD เพื่อควบคุมความคมชัดเหมือนกัน หมุดข้อมูล LCD 16x2 เชื่อมต่อกับหมุด 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
การดำเนินงานของโครงการนี้ทำได้ง่ายเพียงอัปโหลดไฟล์ hex ที่สร้างจากซอร์สโค้ดไปยังไมโครคอนโทรลเลอร์ PIC ด้วยความช่วยเหลือของโปรแกรมเมอร์หรือเครื่องเขียน PIC (PIckit2 หรือ Pickit3 หรืออื่น ๆ) จากนั้นคุณจะเห็นข้อความแนะนำบางส่วนบน LCD จากนั้นผู้ใช้ จะถูกขอให้ป้อนตัวเลือกสำหรับการดำเนินการ เพื่อให้ตรงกับลายนิ้วมือผู้ใช้ต้องกดปุ่ม 1 จากนั้น LCD จะขอ Place Finger on Finger Print Sensor ตอนนี้การวางนิ้วบนโมดูลลายนิ้วมือเราสามารถตรวจสอบได้ว่าลายนิ้วมือของเราถูกจัดเก็บไว้แล้วหรือไม่ ถ้าลายนิ้วมือของคุณจะถูกเก็บไว้แล้วจอ LCD จะแสดงข้อความที่มีรหัสการจัดเก็บลายนิ้วมือเหมือน ' ID: 2' มิฉะนั้นมันจะแสดง 'ไม่พบ'
ตอนนี้ จะลงทะเบียนเรียนนิ้ว พิมพ์ที่ต้องการของผู้ใช้ที่จะกดปุ่มลงทะเบียนหรือคีย์ที่ 2 และทำตามคำแนะนำข้อความบนหน้าจอ LCD
หากผู้ใช้ต้องการ ลบลายนิ้วมือใด ๆ ผู้ใช้ต้องกดปุ่ม ลบ หรือปุ่ม 3 หลังจากนั้น LCD จะถาม ID ของลายนิ้วมือซึ่งจะถูกลบ ตอนนี้โดยใช้ปุ่มกดเพิ่มขึ้นหรือปุ่ม 1 (ตรงกับปุ่มกดหรือปุ่ม 1) และปุ่มกดที่ลดลงหรือปุ่ม 2 (ปุ่มกดลงทะเบียนหรือปุ่ม 2) สำหรับการเพิ่มและลดผู้ใช้สามารถเลือก ID ของ Finger Print ที่บันทึกไว้แล้วกดตกลง ปุ่มเพื่อลบลายนิ้วมือนั้น เพื่อความเข้าใจเพิ่มเติมโปรดดู วิดีโอที่ให้ไว้ในตอนท้าย ของโครงการ
การเชื่อมต่อ FingerPrint หมายเหตุ: โปรแกรมของโครงการนี้ค่อนข้างซับซ้อนสำหรับผู้เริ่มต้น แต่รหัสเชื่อมต่อที่เรียบง่ายทำโดยใช้การอ่านแผ่นข้อมูลโมดูลลายนิ้วมือ r305 คำแนะนำทั้งหมดในการทำงานของโมดูลลายนิ้วมือนี้ระบุไว้ในแผ่นข้อมูล
ที่นี่เราได้ใช้รูปแบบเฟรมเพื่อพูดคุยกับโมดูลลายนิ้วมือ เมื่อใดก็ตามที่เราส่งคำสั่งหรือเฟรมขอข้อมูลไปยังโมดูลลายนิ้วมือมันจะตอบสนองเราด้วยรูปแบบเฟรมเดียวกันที่มีข้อมูลหรือข้อมูลที่เกี่ยวข้องกับคำสั่งที่ใช้ ข้อมูลและรูปแบบเฟรมคำสั่งทั้งหมดได้รับในคู่มือผู้ใช้หรือในแผ่นข้อมูลของโมดูลลายนิ้วมือ R305
คำอธิบายการเขียนโปรแกรม
ในการเขียนโปรแกรมเราได้ใช้รูปแบบเฟรมด้านล่าง
เราเริ่มต้นโปรแกรมด้วยการตั้งค่าบิตการกำหนดค่าและกำหนดมาโครและพินสำหรับ LCD ปุ่มและ LED ซึ่งคุณสามารถตรวจสอบรหัสทั้งหมดที่ระบุไว้ในตอนท้ายของโครงการนี้ หากคุณยังใหม่กับไมโครคอนโทรลเลอร์ PIC ให้เริ่มต้นด้วยการเริ่มต้นใช้งาน PIC Microcontroller Project
จากนั้นเราก็ประกาศและเริ่มต้นตัวแปรและอาร์เรย์และสร้างเฟรมที่เราจำเป็นต้องใช้ในโครงการนี้เพื่อเชื่อมต่อโมดูลลายนิ้วมือกับไมโครคอนโทรลเลอร์ PIC
uchar buf; uchar buf1; ดัชนีระเหยระเหย = 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 ถ่าน passPack = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x7, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1B}; const ถ่าน f_detect = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x3, 0x1, 0x0, 0x5}; const ถ่าน f_imz2ch1 = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x4, 0x2, 0x1, 0x0, 0x8}; const ถ่าน f_imz2ch2 = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x4, 0x2, 0x2, 0x0, 0x9}; const ถ่าน f_createModel = {0xEF, 0x1,0xFF, 0xFF, 0xFF, 0xFF, 0x1,0x0,0x3,0x5,0x0,0x9}; ถ่าน f_storeModel = {0xEF, 0x1,0xFF, 0xFF, 0xFF, 0xFF, 0x1,0x0,0x6,0x6,0x1,0x0,0x1,0x0,0xE}; const ถ่าน f_search = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x8, 0x1B, 0x1, 0x0, 0x0, 0x0, 0xA3, 0x0, 0xC8}; ถ่าน f_delete = {0xEF, 0x1,0xFF, 0xFF, 0xFF, 0xFF, 0x1,0x0,0x7,0xC, 0x0,0x0,0x0,0x1,0x0,0x15};
หลังจากนั้นเราได้สร้างฟังก์ชัน LCD เพื่อขับเคลื่อน LCD
โมฆะ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 (ถ่าน * str) { while (* str) { lcdwrite (* str ++, DATA); // __ delay_ms (20); } } lcdbegin () { uchar lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; uint ฉัน = 0; สำหรับ (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
ฟังก์ชัน Given ใช้สำหรับการเริ่มต้น UART
เป็นโมฆะserialbegin (uint baudrate) { SPBRG = (18432000UL / (long) (64UL * baudrate)) - 1; // อัตราการส่งข้อมูลที่ 18.432000Mhz นาฬิกา TXSTAbits.SYNC = 0; // การตั้งค่า Asynchronous Mode เช่น UART RCSTAbits.SPEN = 1; // เปิดใช้งาน Serial Port TRISC7 = 1; // ตามที่กำหนดไว้ใน Datasheet TRISC6 = 0; // ตามที่กำหนดไว้ใน Datasheet RCSTAbits.CREN = 1; // เปิดใช้งานการรับ TXSTAbits.TXEN = 1; // เปิดใช้งาน Transmission GIE = 1; // เปิดใช้งานการขัดจังหวะ INTCONbits.PEIE = 1; // เปิดใช้งานการขัดจังหวะอุปกรณ์ต่อพ่วง PIE1bits.RCIE = 1; // เปิดใช้งาน USART รับขัดจังหวะ PIE1bits.TXIE = 0; // ปิดการใช้งาน USART TX ขัดจังหวะ PIR1bits.RCIF = 0; }
ฟังก์ชั่นที่ได้รับจะถูกใช้สำหรับการถ่ายโอนคำสั่งไปยังโมดูลลายนิ้วมือและรับข้อมูลจากโมดูลลายนิ้วมือ
เป็นโมฆะserialwrite (ถ่าน ch) { while (TXIF == 0); // รอจนกว่าทะเบียนเครื่องส่งจะว่างเปล่า TXIF = 0; // ล้างธงเครื่องส่ง TXREG = ch; // โหลด char ที่จะส่งไปยัง transmit reg } serialprint (char * str) { while (* str) { serialwrite (* str ++); } } เป็นโมฆะอินเตอร์รัปต์ SerialRxPinInterrupt (โมฆะ) { if ((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; ถ้า (ดัชนี> 0) แฟล็ก = 1; RCIF = 0; // ล้างค่าสถานะ rx } } เป็นโมฆะ serialFlush () { สำหรับ (int i = 0; i
หลังจากที่เราต้องทำให้ฟังก์ชั่นที่มีการเตรียมข้อมูลที่จะถูกส่งไปยังลายนิ้วมือและถอดรหัสข้อมูลที่มาจากโมดูลลายนิ้วมือ
int sendcmd2fp (ถ่าน * แพ็ค, int len) { uint res = ERROR; serialFlush (); ดัชนี = 0; __delay_ms (100); สำหรับ (int i = 0; i
ตอนนี้มีสี่ฟังก์ชันในรหัสสำหรับงานที่แตกต่างกันสี่งาน:
- ฟังก์ชั่นสำหรับป้อนรหัสลายนิ้วมือ - หน่วย getId ()
- ฟังก์ชันสำหรับการจับคู่นิ้ว - โมฆะ matchFinger ()
- ฟังก์ชั่นสำหรับการลงทะเบียนนิ้วใหม่ - void enrolFinger ()
- ฟังก์ชันสำหรับการลบนิ้ว - โมฆะ deleteFinger ()
รหัสที่สมบูรณ์พร้อมฟังก์ชันทั้งสี่จะได้รับในตอนท้าย
ตอนนี้ในฟังก์ชั่นหลักเราเริ่มต้น GPIOs, LCD, UART และตรวจสอบว่าโมดูลลายนิ้วมือเชื่อมต่อกับไมโครคอนโทรลเลอร์หรือไม่ จากนั้นจะแสดงข้อความแนะนำผ่าน LCD ใน ขณะที่ วนซ้ำเราจะอ่านคีย์หรือปุ่มกดทั้งหมดเพื่อดำเนินการโครงการ
int หลัก () { โมฆะ (* FP) (); ADCON1 = 0b00000110; LEDdir = 0; SWPORTdir = 0xF0; SWPORT = 0x0F; Serialbegin (57600); LCDPORTDIR = 0x00; ทริส = 0; lcdbegin (); lcdprint ("ลายนิ้วมือ"); LCDwrite (192, CMD); lcdprint ("การเชื่อมต่อ"); __delay_ms (2000); LCDwrite (1, CMD); lcdprint ("การใช้ PIC16F877A"); LCDwrite (192, CMD); lcdprint ("วงจรย่อย"); __delay_ms (2000); ดัชนี = 0; ในขณะที่ (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint ("ไม่พบ FP"); __delay_ms (2000); ดัชนี = 0; } LCDwrite (1, CMD); lcdprint ("พบ FP"); __delay_ms (1,000); lcdinst (); ในขณะที่ (1) { FP = match
กรอกรหัส PIC และวิดีโอการทำงาน ด้านล่าง ตรวจสอบโครงการอื่น ๆ ของเราโดยใช้โมดูลเซ็นเซอร์ลายนิ้วมือ:
- เครื่องลงคะแนนไบโอเมตริกซ์ด้วยลายนิ้วมือโดยใช้ Arduino
- ระบบรักษาความปลอดภัยไบโอเมตริกซ์โดยใช้ Arduino และเซ็นเซอร์ลายนิ้วมือ
- ลายนิ้วมือตามระบบการเข้าร่วมไบโอเมตริกซ์โดยใช้ Arduino
- เซ็นเซอร์ลายนิ้วมือเชื่อมต่อกับ Raspberry Pi