몇 년 전 공상 과학 영화에서 보던 지문 센서 는 이제 다양한 목적으로 사람의 신원을 확인하는 데 매우 보편화되었습니다. 현재 우리는 사무실 출석, 은행 직원 확인, ATM에서의 현금 인출 또는 입금, 관공서의 신원 확인 등과 같은 일상 생활의 모든 곳에서 지문 기반 시스템을 볼 수 있습니다. 우리는 이미 Arduino와 인터페이스했습니다. Raspberry Pi와 함께 오늘 우리는 지문 인식 센서와 PIC 마이크로 컨트롤러 를 인터페이스 할 것 입니다. 이 PIC 마이크로 컨트롤러 PIC16f877A 지문 인식 시스템을 사용하여 시스템에 새 지문을 등록하고 이미 공급 된 지문을 삭제할 수 있습니다. 시스템의 완전한 작동이 비디오 에 표시되었습니다. 기사 끝에 주어집니다.
필수 구성 요소
- PIC16f877A 마이크로 컨트롤러
- 지문 모듈
- 푸시 버튼 또는 키패드
- 16x2 LCD
- 10k 냄비
- 18.432000MHz 수정 발진기
- 브레드 보드 또는 PCB (JLCPCB에서 주문)
- 점퍼 와이어
- LED (옵션)
- 저항 150ohm -1kohm (옵션)
- 5v 전원 공급 장치
회로도 및 설명
이 PIC 마이크로 컨트롤러 지문 센서 인터페이스 프로젝트 에서는 4 개의 푸시 버튼을 사용했습니다.이 버튼은 다기능에 사용됩니다. 키 1 은 시스템에 지문을 저장하거나 삭제하는 동안 지문을 일치시키고 지문 ID를 증가시키는 데 사용됩니다. 키 2 는 시스템에 지문을 저장하거나 삭제하는 동안 새로운 지문을 등록하고 지문 ID를 감소시키는 데 사용됩니다. 키 3은 시스템에서 저장된 손가락을 삭제하는 데 사용되며 키 4는 확인에 사용됩니다. LED 지문이 감지되거나 일치한다는 표시에 사용됩니다. 여기에서는 UART에서 작동하는 지문 모듈을 사용했습니다. 그래서 여기서 우리는이 지문 모듈을 57600의 기본 전송 속도로 PIC 마이크로 컨트롤러와 인터페이스했습니다.
따라서 먼저 아래의 회로도에 표시된대로 필요한 모든 연결을 만들어야합니다. 연결은 간단합니다. 지문 모듈을 PIC 마이크로 컨트롤러의 UART에 연결했습니다. 16x2 LCD는 모든 메시지를 표시하는 데 사용됩니다. LCD와 함께 10k 포트를 사용하여 동일한 대비를 제어합니다. 16x2 LCD 데이터 핀은 PORTA 핀에 연결됩니다. LCD의 d4, d5, d6 및 d7 핀은 PIC 마이크로 컨트롤러의 핀 RA0, RA1, RA2 및 RA3에 각각 연결됩니다. 4 개의 푸시 버튼 (또는 키패드)이 PORTD의 핀 RD0, RD1, RD2 및 RD에 연결됩니다. LED는 포트 PORTC의 핀 RC3에도 연결됩니다. 여기에서는 18.432000MHz 외부 수정 발진기를 사용하여 마이크로 컨트롤러를 클럭했습니다.
PIC 마이크로 컨트롤러로 지문 센서 작동
이 프로젝트의 작업은 간단합니다. 소스 코드에서 생성 된 16 진수 파일을 PIC 프로그래머 또는 버너 (PIckit2 또는 Pickit3 또는 기타)의 도움을 받아 PIC 마이크로 컨트롤러에 업로드하면 LCD를 통해 몇 가지 소개 메시지가 표시되고 사용자에게 표시됩니다. 작업 선택을 입력하라는 메시지가 표시됩니다. 1 개 다음 LCD가 묻습니다 키를 눌러에 지문 사용자의 필요에 맞게 배치 손가락 지문 센서에 있습니다. 이제 지문 모듈 위에 손가락을 대면 지문이 이미 저장되어 있는지 확인할 수 있습니다. 지문이 저장되어 있으면 LCD에 ' ID: 2' 와 같은 저장 ID 메시지 가 표시됩니다. 그렇지 않으면 'Not Found' 가 표시됩니다 .
이제 지문을 등록 하려면 사용자가 등록 버튼 또는 키 2를 누르고 LCD 화면의 지침 메시지를 따라야합니다.
사용자가 지문 을 삭제하려면 삭제 버튼 또는 키 3 을 눌러야합니다. 그 후 LCD는 삭제할 지문의 ID를 묻습니다. 이제 증분 누름 버튼 또는 키 1 (일치 누름 버튼 또는 키 1)과 감소 누름 버튼 또는 키 2 (등록 누름 버튼 또는 키 2)를 사용하여 증가 및 감소를하여 저장된 지문의 ID를 선택하고 OK를 누를 수 있습니다. 버튼을 눌러 해당 지문을 삭제합니다. 더 많은 이해 를 위해 프로젝트 마지막 에 제공된 비디오를 보십시오.
지문 인터페이스 참고:이 프로젝트의 프로그램은 초보자에게는 약간 복잡합니다. 그러나 r305 지문 모듈 데이터 시트를 사용하여 만든 간단한 인터페이스 코드입니다. 이 지문 모듈의 모든 기능 지침은 데이터 시트에 나와 있습니다.
여기서는 지문 모듈과 대화 하기 위해 프레임 형식 을 사용했습니다. 지문 모듈에 명령 또는 데이터 요청 프레임을 보낼 때마다 적용된 명령과 관련된 데이터 또는 정보가 포함 된 동일한 프레임 형식으로 응답합니다. 모든 데이터 및 명령 프레임 형식은 사용 설명서 또는 R305 지문 모듈의 데이터 시트에 제공됩니다.
프로그래밍 설명
프로그래밍에서는 아래 프레임 형식을 사용했습니다.
구성 비트를 설정하고 LCD, 버튼 및 LED에 대한 매크로 및 핀을 정의하여 프로그램을 시작합니다.이 프로젝트의 끝 부분에 제공된 전체 코드 에서 확인할 수 있습니다. PIC 마이크로 컨트롤러를 처음 사용하는 경우 PIC 마이크로 컨트롤러 프로젝트 시작하기부터 시작하십시오.
그런 다음 몇 가지 변수와 배열 을 선언하고 초기화 하고이 프로젝트에서 PIC 마이크로 컨트롤러와 지문 모듈을 인터페이스하기 위해 사용해야하는 프레임을 만들었습니다.
uchar buf; uchar buf1; 휘발성 단위 지수 = 0; 휘발성 int 플래그 = 0; uint msCount = 0; uint g_timerflag = 1; 휘발성 단위 개수 = 0; uchar 데이터; 단위 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 = 채널 & 0x0F; EN = 1; __delay_ms (5); EN = 0; } lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ delay_ms (20); } } lcdbegin () { uchar lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; 단위 i = 0; for (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
주어진 기능은 UART 초기화에 사용됩니다.
void serialbegin (uint baudrate) { SPBRG = (18432000UL / (long) (64UL * baudrate))-1; // 전송 속도 @ 18.432000Mhz Clock 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.TXIE = 0; // USART TX 인터럽트 비활성화 PIR1bits.RCIF = 0; }
주어진 기능은 지문 모듈로 명령을 전송하고 지문 모듈에서 데이터를 수신 하는 데 사용됩니다.
void serialwrite (char ch) { while (TXIF == 0); // 송신기 레지스터가 비워 질 때까지 기다 립니다. TXIF = 0; // 송신기 플래그 지우기 TXREG = ch; // 전송할 문자를 전송 reg로로드 } serialprint (char * str) { while (* str) { serialwrite (* str ++); } } void interrupt SerialRxPinInterrupt (void) { if ((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; if (index> 0) flag = 1; RCIF = 0; // rx 플래그 지우기 } } void serialFlush () { for (int i = 0; i
그 후에 지문으로 전송할 데이터 를 준비하고 지문 모듈에서 오는 데이터를 디코딩 하는 기능을 만들어야 합니다.
int sendcmd2fp (char * pack, int len) { uint res = ERROR; serialFlush (); index = 0; __delay_ms (100); for (int i = 0; i
이제 네 가지 다른 작업에 대해 코드에서 사용할 수있는 네 가지 함수가 있습니다.
- 지문 ID 입력 기능 – 단위 getId ()
- 손가락 매칭 기능 – void matchFinger ()
- 새 손가락 등록 기능 – void enrolFinger ()
- 손가락 삭제 기능 – void deleteFinger ()
네 가지 기능이 모두 포함 된 완전한 코드가 끝에 제공됩니다.
이제 주요 기능에서 GPIO, LCD, UART를 초기화하고 지문 모듈이 마이크로 컨트롤러와 연결되어 있는지 확인합니다. 그런 다음 LCD를 통해 일부 소개 메시지를 표시합니다. 마지막으로 while 루프 에서 모든 키를 읽거나 프로젝트를 작동하기 위해 버튼을 누릅니다.
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 ("회로 다이제스트"); __delay_ms (2000); index = 0; while (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint ("FP를 찾을 수 없음"); __delay_ms (2000); index = 0; } lcdwrite (1, CMD); lcdprint ("FP 발견"); __delay_ms (1000); lcdinst (); while (1) { FP = 일치
완전한 PIC 코드와 작업 비디오 가 아래에 제공됩니다. 지문 센서 모듈을 사용하여 다른 프로젝트도 확인하십시오.
- Arduino를 사용한 지문 기반 생체 인식 투표기
- Arduino와 지문 센서를 이용한 생체 보안 시스템
- Arduino를 사용한 지문 기반 생체 인식 출석 시스템
- Raspberry Pi와 상호 작용하는 지문 센서