지문만큼 널리 사용되는 생체보안 기술은 없을겁니다. 그래서인지 지문 인식을 가능케 해주는 모듈도 꽤 오래 전부터 판매되고 있습니다. 아두이노에 붙여 사용하는 방법도 그리 어렵지 않기 때문에 보안이 필요한 프로젝트에 한 번 응용해 볼 만 합니다.

지문 인식 센서(모듈)

지문 인식 센서는 고성능 DSP 칩을 탑재해서 이미지 렌더링, 연산, 특징점 탐색과 검색을 빠르게 처리합니다. 이 모듈을 마이크로 컨트롤러에 연결하면 데이터 패킷을 보내서 지문 인식과 탐색 과정을 제어할 수 있습니다. 모듈에 탑재된 플래시 메모리에는 162개의 지문을 저장할 수 있습니다. 상세한 스펙은 아래와 같습니다.

  • Supply voltage: 3.6 – 6.0VDC
  • Operating current: 120mA max
  • Peak current: 150mA max
  • Fingerprint imaging time: <1.0 seconds
  • Window area: 14mm x 18mm
  • Signature file: 256 bytes
  • Template file: 512 bytes
  • Storage capacity: 162 templates
  • Safety ratings (1-5 low to high safety)
  • False Acceptance Rate: <0.001% (Security level 3)
  • False Reject Rate: <1.0% (Security level 3)
  • Interface: TTL Serial
  • Baud rate: 9600, 19200, 28800, 38400, 57600 (default is 57600)
  • Working temperature rating: -20C to +50C
  • Working humidy: 40%-85% RH
  • Full Dimensions: 56 x 20 x 21.5mm
  • Exposed Dimensions (when placed in box): 21mm x 21mm x 21mm triangular
  • Weight: 20 grams

유명한 Adafruit 에서 이 센서를 위한 전용 라이브러리를 만들어 배포하고 있으며 여기에는 간단히 센서의 동작을 확인할 수 있는 예제가 포함되어 있습니다. 일단 라이브러리를 받아 설치하는 것이 센서를 사용하기 위한 첫 걸음입니다.

Adafruit Fingerprint Sensor Library : https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library

지문 인식 모듈은 크게 2개의 동작 단계 – 인식(Enrolling), 탐색(Searching) 으로 나뉩니다.

인식(Enroll) 단계는 지문을 입력받아 각각의 지문에 ID를 부여하는 과정입니다. 일단 인식 단계가 끝나면 이후부터 센서를 통해 입력받은 지문을 검색해서 일치하는 ID를 찾을 수 있습니다. 이 과정이 탐색(Search) 과정입니다.

지문 인식 과정(Enrolling)

인식 과정은 Windows PC를 통해 지문 이미지를 확인하면서 할 수도 있고 아두이노에서 처리하게 할 수도 있습니다.

Windows PC 용 인식 프로그램만 배포되고 있긴 하지만 인식 과정은 한 번만 진행하면 됩니다. Windows PC에 연결하기 위해서는 USB/Serial 통신을 중계해주는 FTDI(USB to UART) 모듈이 필요합니다. 별도의 FTDI 모듈이 없어도 아래와 같이 아두이노 UNO 보드에 연결하면 사용이 가능합니다.

아두이노 –> 지문 인식 센서

  • VCC –> 5V
  • GND –> GND
  • D0 –> white line
  • D1 –> green(or blue) line

biometric_passthru

이렇게 연결한 상태에서 아두이노에 USB 케이블을 연결하면 붉은색 LED가 점등해야 합니다. 그리고 아두이노에는 아래 소스코드를 올립니다. 소스코드를 보면 아시겠지만 아무 내용이 없습니다. 실제 아두이노는 아무 동작을 할 필요가 없습니다. PC에 연결하기위해 아두이노가 가지고 있는 FTDI 모듈만 지문 인식 센서가 빌려쓰기 때문입니다.

// this sketch will allow you to bypass the Atmega chip
// and connect the fingerprint sensor directly to the USB/Serial
// chip converter.
 
// Red connects to +5V
// Black connects to Ground
// White goes to Digital 0
// Green goes to Digital 1
 
void setup() {}
void loop() {}

 주의!!! 아두이노 UNO/Nano 보드와 같이 Atmega328 기반의 FTDI 모듈을 탑재한 보드만 해당됩니다. Leonardo/Micro/Yun 또는 Atmega32U4 기반 보드는 Leo_passthru 스케치를 올려 사용해야 합니다. 위에서 소개한 Adafruit 라이브러리 링크에 예제 스케치로 포함되어 있습니다.

아두이노를 통해 PC와 센서가 연결되면 SFGDemo 프로그램을 실행합니다. 아래 링크로 받으실 수 있습니다.

http://www.adafruit.com/datasheets/SFGDemoV2.0.rar

프로그램이 실행되면 아래 순서로 지문을 인식시키면 됩니다.

  • 좌측 하단 Open Device 선택 > COM port 선택
  • 우측 상단에 파란색 Open Device Success! 메시지가 표시되어야 함
  • 왼쪽 하단에서 Baudrate = 57600, Secure Level  = 3(감도) 확인, 기본값이므로 일단 이 설정으로 진행
  • 우측 중간에 Enroll 영역에서 Preview 체크박스 on
  • Enroll 버튼 클릭 (여러개의 지문을 인식할 때 Con Enroll 선택 – Continuous Enroll)
  • User address 팝업이 뜨면 원하는 ID를 부여 (162 까지 가능)
  • 우측 상단에 파란색 메시지 “Please put your finger to sensor!” 가 보이면 손가락을 댐
  • 좌측 상단 preview 창에서 인식 결과 이미지를 확인 가능
  • 깨끗한 이미지를 위해서는 위 과정을 반복

윈도우 1

지문 탐색 과정(Searching)

지문 인식 과정이 끝나면 지문 탐색 과정을 테스트 해보는 것이 좋습니다. SFGDemo 프로그램에서 중앙 Match 영역 – Search 버튼을 클릭합니다. 센서에 동일한 혹은 다른 손가락을 대고 지문이 정확히 찾아지는지 확인하세요.

  • 정확히 찾아질 경우 : Find same finger! ID = xx 출력
  • 찾지 못한 경우 : Not find same finger! 출력

아두이노에 연결해서 사용하기

본격적으로 아두이노와 연결해서 사용하는 방법을 보겠습니다.

앞서와는 다르게 아두이노의 D2, D3 핀을 사용해서 연결합니다. 두 개의 디지털 핀을 이용해 시리얼 통신을 할 수 있도록 SoftwareSerial 라이브러리를 사용할 것입니다.

아두이노 –> 지문 인식 센서

  • VCC –> 5V
  • GND –> GND
  • D2 –> white line
  • D3 –> green(or blue) line

주의!!! Leonardo 보드의 경우는 D8, D9를 사용해야 합니다. Mega 보드의 경우는 D10, D11 핀을 사용해야 합니다. 물론 여기에 맞게 소스코드도 수정해줘야 합니다.

연결 후 아두이노에 전원을 넣으면 지문 인식 센서의 빨간 LED가 빠르게 깜빡이고 곧 꺼집니다.

앞서 Adafruit 에서 제작한 지문 인식 센서용 라이브러리를 설치한게 기억나실 겁니다. 아직 설치하지 않으셨다면 다시 설치를…

Adafruit Fingerprint Sensor Library : https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library

[File→Examples→Adafruit_Fingerprint→fingerprint] 예제를 불러와서 아두이노에 업로드 합니다. 업로드 완료되면 시리얼 모니터 실행하고 손가락을 댄 뒤 아래와 같이 메시지가 나오는지 확인하세요. (인식 enroll 과정이 완료된 센서여야 합니다.)

biometric_arduinosearch

지문 ID #3과 일치하는 결과가 나왔습니다. confidence 값 157은 얼마나 DB의 지문과 잘 일치하는지를 보여주는 점수입니다. 0~255까지의 값을 가지며 값이 클 수록 결과가 좋다는 의미입니다. 센서가 일치한다고 판단되는 지문을 찾았다는 것 자체가 중요한 것이고 confidence 는 부가적인 수치입니다. 높은 보안이 요구되는 경우에만 사용하는 수치이므로 일반적으로는 무시해도 됩니다.

아두이노에서도 인식 과정을 진행할 수 있습니다. 아래 경로에 있는 예제 스케치를 사용하면 됩니다. 아무래도 PC에서 할 때 보다는 불편하고 시리얼 모니터를 통해 ID를 입력해 줘야 하는 번거로움이 있습니다.

[File→Examples→Adafruit_Fingerprint→enroll]

활용

예제 스케치를 본인의 프로젝트에 맞게 적당히 수정해서 사용하세요. 디지털 도어락 혹은 나만의 전자 금고를 만드는데 활용하기 딱 좋을겁니다.

 참고자료