- 필요한 재료
- GT511C3 지문 센서 (FPS) 모듈
- GT511C3 지문 센서와 Arduino 연결
- GT511C3가있는 Arduino
- GT511C3 지문 센서 용 Arduino 프로그래밍
- Arduino와 GT511C3 지문 센서 작동
생체 인식은 오랫동안 신뢰할 수있는 인증 시스템으로 사용되었습니다. 오늘날에는 심장 박동 리듬이나 심지어 그의 DNA로 사람을 식별 할 수있는 복잡한 생체 인식 시스템이 존재합니다. 다른 실행 가능한 방법으로는 음성 인식, 얼굴 인식, 홍채 스캔 및 지문 스캔이 있습니다. 지문 인식은 가장 널리 쓰이는 방법으로 간단한 출석 시스템부터 스마트 폰, 보안 검색 등에 이르기까지 다양하다.
이 튜토리얼에서는 인기있는 GT511C3 지문 센서 (FPS)를 Arduino와 함께 사용하는 방법을 배웁니다. 많은 FPS를 사용할 수 있으며 출석 시스템, 투표기, 보안 시스템 등과 같은 디자인을 구축하는 데 이미 FPS를 사용하는 방법을 배웠습니다. 그러나 GT511C3는 높은 정확도와 빠른 응답 시간으로 더 발전되었으므로 사용 방법을 배웁니다. Arduino를 사용하여 지문을 등록하고 필요할 때마다 지문을 감지합니다. 그럼 시작하겠습니다.
필요한 재료
- Arduino Nano / UNO
- GT511C3 지문 센서
- 16x2 LCD 화면
- Pot – 10k 및 1k, 10k, 22k 저항
- 누름 단추
- 전선 연결
- 브레드 보드
GT511C3 지문 센서 (FPS) 모듈
프로젝트를 시작하기 전에 GT511C3 지문 센서 모듈 과 작동 방식 에 대해 이해해 보겠습니다. 이 센서는 스마트 폰에서 일반적으로 사용되는 정전 용량 및 초음파 지문 센서와 매우 다릅니다. GT511C3 광학 지문 센서이고 그것의 패턴을 인식하는 지문 이미지에 의존 의미한다. 네, 맞습니다. 센서에는 실제로 지문 사진을 찍고 강력한 내장 ARM Cortex M3 IC를 사용하여 이러한 이미지를 처리하는 카메라가 실제로 있습니다. 아래 이미지는 핀아웃이있는 센서의 앞면과 뒷면을 보여줍니다.
보시다시피 센서에는 파란색 LED로 둘러싸인 카메라 (블랙 스팟)가 있으므로이 LED를 켜야 지문의 선명한 이미지를 얻을 수 있습니다. 그런 다음 이러한 이미지는 EEPROM과 결합 된 ARM 마이크로 컨트롤러 를 사용하여 처리되고 이진 값으로 변환됩니다. 모듈에는 전원을 나타내는 녹색 SMD LED도 있습니다. 각 지문 이미지는 450dpi의 해상도로 202x258 픽셀입니다. 센서는 200 개까지의 지문과 199에 ID 형태 0을 할당 템플릿 각각의 핑거 프린트를 등록 할 수있다. 그런 다음 감지하는 동안 스캔 된 지문을 200 개의 모든 템플릿과 자동으로 비교할 수 있으며 일치하는 항목이 발견되면 Smack Finger 3.0을 사용하여 특정 지문의 ID 번호를 제공합니다.ARM 마이크로 컨트롤러의 알고리즘. 센서는 3.3V에서 6V까지 작동 할 수 있으며 9600에서 직렬 통신을 통해 통신 할 수 있습니다. 통신 핀 (Rx 및 Tx)은 3.3V 만 허용한다고하지만 데이터 시트에는 이에 대해 많이 명시되어 있지 않습니다. GT511C3 FPS의 핀아웃은 다음과 같습니다.
직렬 통신 외에도 이전 이미지에 표시된 핀을 사용하여 USB 연결 을 통해 모듈을 컴퓨터에 직접 인터페이스 할 수도 있습니다. 컴퓨터에 연결되면 링크에서 다운로드 할 수있는 SDK_DEMO.exe 응용 프로그램을 사용하여 모듈을 제어 할 수 있습니다. 이 응용 프로그램은 사용자가 지문을 등록 / 확인 / 삭제하고 지문을 인식 할 수 있도록합니다. 이 소프트웨어는 센서로 캡처 한 이미지를 읽는 데 도움이 될 수 있습니다. 또는 센서가 Arduino에 연결되어 있어도이 소프트웨어를 사용할 수 있습니다.이 기사의 뒷부분에서 이에 대해 설명합니다.
센서의 또 다른 흥미로운 특징은 감지 영역 주변의 금속 케이스입니다. 앞서 말했듯 이 센서가 작동 하려면 파란색 LED가 켜져 있어야합니다. 그러나 센서가 지문을 적극적으로 기다려야하는 애플리케이션에서는 센서가 가열되어 손상 될 수 있으므로 LED를 항상 켜진 상태로 유지할 수 없습니다. 따라서 이러한 경우 금속 케이스는 MCU의 정전 식 터치 입력 핀에 연결되어 터치 여부를 감지 할 수 있습니다. 그렇다면 LED를 켤 수 있고 감지 프로세스를 시작할 수 있습니다. 이 방법은이 문서의 범위를 벗어나므로 여기서는 설명하지 않습니다.
3.3V에서 작동 할 때 센서는 약 130mA를 소비합니다. 손가락을 등록하는 데는 거의 3 초, 식별하는 데 1 초가 걸립니다. 그러나 등록 된 템플릿 수가 적을 경우 인식 속도가 빠릅니다. 센서에 대한 자세한 내용은 모듈의 공식 제조업체 인 ADH-Tech의이 데이터 시트를 참조하십시오.
GT511C3 지문 센서와 Arduino 연결
GT511C3 FPS에는 Arduino의 + 5V 핀으로 전원을 공급할 수있는 2 개의 전원 핀과 직렬 통신을 위해 Arduino의 모든 디지털 핀에 연결할 수있는 2 개의 통신 핀 Rx 및 Tx가 있습니다. 또한 센서 상태를 표시하는 푸시 버튼과 LCD도 추가했습니다. Arduino와 GT511C3 FPS 를 연결 하기위한 전체 회로 다이어그램은 아래에서 찾을 수 있습니다.
Rx 및 Tx 핀은 3.3V를 허용하므로 Rx 측에 전위 분배기를 사용하여 5V를 3.3V로 변환했습니다. 10k 저항과 22k 저항은 FPS의 Rx 핀에 도달하기 전에 Arduino Tx 핀의 5V 신호를 3.3V로 변환합니다. 센서는 3.3V로 전원을 공급받을 수도 있지만 Arduino가 센서에 충분한 전류를 공급할 수 있는지 확인하십시오. Arduino의 5V 핀으로 구동되는 4 비트 모드로 LCD를 연결했습니다. 누름 버튼은 핀 D2에 연결되며, 누르면 프로그램 이 사용자가 새 손가락을 등록 할 수 있는 등록 모드 로 전환됩니다. 등록 후 프로그램은 센서를 터치하는 손가락을 스캔하기 위해 스캔 모드로 유지됩니다.
GT511C3가있는 Arduino
앞서 언급했듯이 GT511C3 FPS는 직렬 통신을 통해 통신하고 센서는 16 진 코드를 이해하며 각 16 진 코드에 대해 특정 작업이 수행됩니다. 관심이 있다면 모든 16 진수 값과 해당 기능을 알기 위해 데이터 시트를 확인할 수 있습니다. 그러나 운이 좋게도 bboyho 는 이미 Arduino와 함께 직접 사용하여 지문을 등록하고 감지 할 수있는 라이브러리를 만들었습니다. GT511C3 FPS 용 Github 라이브러리는 아래 링크에서 다운로드 할 수 있습니다.
GT511C3 Arduino 라이브러리
링크는 ZIP 파일을 다운로드 한 다음 Sketch- > Include Library- > Add.ZIP Library 명령 을 따라 Arduino IDE 에 추가해야합니다. 라이브러리를 추가 한 후 IDE를 다시 시작하면 아래와 같이 파일-> 예-> 지문 스캐너 TTL에서 GT511C3 FSP에 대한 예제 프로그램 을 찾을 수 있습니다.
네 가지 예제 프로그램이 표시되어야합니다. 깜박임 프로그램이 FPS의 파란색 LED로 깜박이고 등록 및 ID 손가락 프로그램을 사용하여 그에 따라 손가락을 등록하고 식별 할 수 있습니다. 등록 된 손가락은 전원이 꺼져 있어도 모듈에 항상 기억됩니다.
직렬 패스 스루 프로그램은 이 기사의 앞부분에서 논의한 Demo_SDK.exe 애플리케이션 을 사용하기 위해 Arduino에 업로드 할 수 있습니다. 지문 템플릿을 삭제하거나 컴퓨터에 사본을 저장하기 위해이 SDK 애플리케이션을 사용할 수 있습니다.
GT511C3 지문 센서 용 Arduino 프로그래밍
여기서 우리의 목표는 버튼을 눌렀을 때 손가락을 등록하고 이미 등록 된 손가락의 ID 번호를 표시하는 프로그램을 작성하는 것입니다. 또한 프로젝트를 독립 실행 형으로 만들 수 있도록 모든 정보를 LCD에 표시 할 수 있어야합니다. 동일한 작업을 수행하는 전체 코드는이 페이지의 하단에 제공됩니다. 여기에서는 이해를 돕기 위해 동일한 내용을 작은 조각으로 나누고 있습니다.
항상 필요한 라이브러리 를 포함 하여 프로그램을 시작합니다. 여기에는 FPS 모듈 용 FPS_GT511C3 라이브러리, 직렬 통신에서 D4 및 D5를 사용하는 소프트웨어 직렬, LCD 인터페이스 용 액정이 필요합니다. 그런 다음 FPS와 LCD가 연결된 핀을 언급해야합니다. 회로도를 따랐다면 FPS의 경우 4와 5, LCD의 경우 D6에서 D11입니다. 동일한 코드는 아래와 같습니다.
#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를 입력 핀으로 만들고 푸시 버튼을 핀에 연결하기 위해 내부 풀업 저항에 연결했습니다.
void setup () { Serial.begin (9600); lcd.begin (16, 2); // 16 * 2 LCD 초기화 lcd.print ("GT511C3 FPS"); // Intro Message line 1 lcd.setCursor (0, 1); lcd.print ("with Arduino"); // Intro Message line 2 delay (2000); lcd.clear (); fps.Open (); // fp를 초기화하는 직렬 명령을 보냅니다. fps.SetLED (true); // fps가 지문을 볼 수 있도록 LED를 켭니다. pinMode (2, INPUT_PULLUP); // 내부 풀업 저항에 입력 핀으로 연결 }
void loop 함수 내에서 버튼이 눌 렸는지 확인해야하고, 눌리면 새 손가락을 등록하고 등록 기능을 사용하여 ID 번호로 템플릿 을 저장 합니다. 그렇지 않은 경우 센서에서 손가락이 눌릴 때까지 계속 기다릴 것입니다. 누르면 1: N 방법을 사용하여 등록 된 모든 지문 템플릿과 비교하여 지문을 식별합니다. ID 번호가 발견되면 환영 메시지와 ID 번호가 표시됩니다. 지문이 등록 된 손가락과 일치하지 않는 경우 ID 개수는 200 개가되며,이 경우 welcome unknown을 표시합니다.
if (digitalRead (2)) // 버튼을 눌렀다면 { Enroll (); // 지문 등록 } // 지문 테스트 식별 if (fps.IsPressFinger ()) { fps.CaptureFinger (false); int id = fps.Identify1_N (); lcd.clear (); lcd.print ("환영합니다:"); if (id == 200) lcd.print ("Unkown"); // 인식되지 않는 경우 lcd.print (id); 지연 (1000); }
등록의 기능을 성공적으로 한 손가락을 등록하는 세 가지 샘플 입력을해야합니다. 등록되면 해당 특정 손가락에 대한 템플릿이 생성되며 사용자가 HEX 명령을 통해 강제하지 않는 한 삭제되지 않습니다. 손가락 등록 코드는 아래와 같습니다. IsPressFinger 메서드 는 손가락이 감지되었는지 확인하는 데 사용되며, 그렇다면 CaptureFinger를 사용하여 이미지가 캡처됩니다. 마지막으로 Enroll1, Enroll2 및 Enroll3은 세 가지 샘플에 사용되어 한 손가락을 성공적으로 등록합니다. LCD는 성공적으로 등록 된 경우 손가락의 ID 번호를 표시합니다. 그렇지 않으면 코드와 함께 실패 메시지가 표시됩니다. 코드 1은 지문이 명확하게 캡처되지 않았으므로 다시 시도해야 함을 의미합니다. 코드 2는 메모리 실패 표시이고 코드 3은 손가락이 이미 등록되었음을 나타냅니다.
void Enroll () // 라이브러리에서 함수 등록 exmaple 프로그램 { int enrollid = 0; bool usedid = true; while (usedid == true) { usedid = fps.CheckEnrolled (enrollid); if (usedid == true) enrollid ++; } fps.EnrollStart (enrollid); // 등록 lcd.print ("등록 번호"); lcd.print (enrollid); while (fps.IsPressFinger () == false) delay (100); bool bret = fps.CaptureFinger (true); int iret = 0; if (bret! = false) { lcd.clear (); lcd.print ("손가락 제거"); fps.Enroll1 (); while (fps.IsPressFinger () == true) delay (100); lcd.clear (); lcd.print ("다시 누르기"); while (fps.IsPressFinger () == false) delay (100); bret = fps.CaptureFinger (true); if (bret! = false) { lcd.clear (); lcd.print ("손가락 제거"); fps.Enroll2 (); while (fps.IsPressFinger () == true) delay (100); lcd.clear (); lcd.print ("아직 다시 누르십시오"); while (fps.IsPressFinger () == false) delay (100); bret = fps.CaptureFinger (true); if (bret! = false) { lcd.clear (); lcd.print ("손가락 제거"); iret = fps.Enroll3 (); if (iret == 0) { lcd.clear (); lcd.print ("등록 성공"); } else { lcd.clear (); lcd.print ("등록 실패:"); lcd.print (iret); } } else lcd.print ("실패 1"); } else lcd.print ("실패 2"); } else lcd.print ("실패 3"); }
Arduino와 GT511C3 지문 센서 작동
이제 하드웨어와 코드가 준비되었으므로 프로젝트를 테스트 할 차례입니다. Arduino에 코드를 업로드하고 전원을 켭니다. 저는 마이크로 USB 포트를 사용하여 프로젝트에 전원을 공급하고 있습니다. 부팅시 LCD에 인트로 메시지가 표시되고 "Hi!.."가 표시되어야합니다. 즉, FPS가 손가락을 검색 할 준비가되었음을 의미합니다. 등록 된 손가락을 누르면 아래와 같이 "환영합니다"라고 표시되고 그 뒤에 해당 손가락의 ID 번호가 표시됩니다.
새 손가락을 등록해야하는 경우 푸시 버튼을 사용하여 등록 모드로 전환 하고 LCD 지침에 따라 손가락을 등록 할 수 있습니다. 등록 절차가 완료되면 LCD에 "Hi!.."가 다시 표시되어 다시 손가락을 인식하기 위해 읽었 음을 나타냅니다. 전체 작업은 아래에 링크 된 비디오에서 찾을 수 있습니다.
여기에서 지문 센서 모듈을 사용하여 이것 위에 많은 흥미로운 것들을 개발할 수 있습니다. 튜토리얼을 이해하고 유용한 것을 구축하는 것을 즐겼기를 바랍니다. 질문이 있으시면 댓글 섹션에 남겨 주시거나 다른 기술 질문에 포럼을 사용하십시오.