Fingerprint Scanner

This is a Fingerprint Scanner module with TTL UART interface for direct connections to microcontroller UART or to PC through MAX232 / USB-Serial adapter. The user can store the finger print data in the module and can configure it in 1:1 or 1: N mode for identifying the person. The FP module can directly interface with 3v3 or 5v Microcontroller. A level converter (like MAX232) is required for interfacing with PC serial port.
Optical biometric fingerprint reader with great features and can be embedded into a variety of end products, such as: access control, attendance, safety deposit box, car door locks

fingerprintscanner1

Features

  • Integrated image collecting and algorithm chip together, ALL-in-One
  • Fingerprint reader can conduct secondary development, can be embedded into a variety of end products
  • Low power consumption, low cost, small size, excellent performance
  • Professional optical technology, precise module manufacturing techniques
  • Good image processing capabilities, can successfully capture image up to resolution 500 dpi

Specifications

Fingerprint sensor type: Optical

  • Sensor Life: 100 million times
  • Static indicators: 15KVBacklight: bright green
  • Interface: USB1.1/UART(TTL logical level)
  • RS232 communication baud rate: 4800BPS~115200BPS changeable
  • Dimension: 55*32*21.5mm
  • Image Capture Surface 15—18(mm)
  • Verification Speed: 0.3 sec
  • Scanning Speed: 0.5 sec
  • Character file size: 256 bytes
  • Template size: 512 bytes
  • Storage capacity: 250
  • Security level: 5 (1,2,3,4,5(highest))
  • False Acceptance Rate (FAR) :0.0001%
  • False Rejection Rate (FRR): 0.1%
  • Resolution 500 DPI
  • Voltage :3.6-6.0 VDC
  • Working current: Typical 90 mA, Peak 150mA
  • Matching Method: 1: N
  • Operating Environment Temperature: -20 to 45°C

This tutorial demonstrate the interfacing of fingerprint scanner with Arduino Uno to enroll and search for a fingerprint image. It uses Adafruit’s fingerprint scanner library for programming Arduino Uno.

Materials required:

  • Arduino Uno Board
  • fingerprint sensor
  • jumper wires
  • breadboard

Connection of fingerprint scanner module to Microcontrollers

Connections with Arduino UNO-

Fingerprint scanner module
VCC
GND
RX
TX

Arduino UNO Board
5V
GND
TX
RX

The fingerprint sensor can be wired as below.

fingerprintscanner2

fingerprintscanner3

The corner pin is +5V as shown below in red line, then is Ground(GND), Then TXD which goes to MCU’s RX-IN, and last pin is RXD which goes to MCU’s TX-OUT p

Arduino Sketch
The code below enrolls your finger with an id into the module’s memory:

fingerprint4

#include
#include

uint8_t id;

uint8_t getFingerprintEnroll();

// Software serial for when you dont have a hardware serial port
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino (WHITE wire)
// On Leonardo/Micro/Yun, use pins 8 & 9. On Mega, just grab a hardware serialport
SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
//Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial1);

void setup()
{
while (!Serial); // For Yun/Leo/Micro/Zero/…
delay(500);

Serial.begin(9600);
Serial.println(“Adafruit Fingerprint sensor enrollment”);

// set the data rate for the sensor serial port
finger.begin(57600);

if (finger.verifyPassword()) {
Serial.println(“Found fingerprint sensor!”);
} else {
Serial.println(“Did not find fingerprint sensor :(“);
while (1);
}
}

uint8_t readnumber(void) {
uint8_t num = 0;
boolean validnum = false;
while (1) {
while (! Serial.available());
char c = Serial.read();
if (isdigit(c)) {
num *= 10;
num += c – ‘0’;
validnum = true;
} else if (validnum) {
return num;
}
}
}

void loop() // run over and over again
{
Serial.println(“Ready to enroll a fingerprint! Please Type in the ID # you want to save this finger as…”);
id = readnumber();
Serial.print(“Enrolling ID #”);
Serial.println(id);

while (! getFingerprintEnroll() );
}

uint8_t getFingerprintEnroll() {

int p = -1;
Serial.print(“Waiting for valid finger to enroll as #”); Serial.println(id);
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println(“Image taken”);
break;
case FINGERPRINT_NOFINGER:
Serial.println(“.”);
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println(“Communication error”);
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println(“Imaging error”);
break;
default:
Serial.println(“Unknown error”);
break;
}
}

// OK success!

p = finger.image2Tz(1);
switch (p) {
case FINGERPRINT_OK:
Serial.println(“Image converted”);
break;
case FINGERPRINT_IMAGEMESS:
Serial.println(“Image too messy”);
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println(“Communication error”);
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println(“Could not find fingerprint features”);
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println(“Could not find fingerprint features”);
return p;
default:
Serial.println(“Unknown error”);
return p;
}

Serial.println(“Remove finger”);
delay(2000);
p = 0;
while (p != FINGERPRINT_NOFINGER) {
p = finger.getImage();
}
Serial.print(“ID “); Serial.println(id);
p = -1;
Serial.println(“Place same finger again”);
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println(“Image taken”);
break;
case FINGERPRINT_NOFINGER:
Serial.print(“.”);
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println(“Communication error”);
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println(“Imaging error”);
break;
default:
Serial.println(“Unknown error”);
break;
}
}

// OK success!

p = finger.image2Tz(2);
switch (p) {
case FINGERPRINT_OK:
Serial.println(“Image converted”);
break;
case FINGERPRINT_IMAGEMESS:
Serial.println(“Image too messy”);
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println(“Communication error”);
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println(“Could not find fingerprint features”);
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println(“Could not find fingerprint features”);
return p;
default:
Serial.println(“Unknown error”);
return p;
}

// OK converted!
Serial.print(“Creating model for #”); Serial.println(id);

p = finger.createModel();
if (p == FINGERPRINT_OK) {
Serial.println(“Prints matched!”);
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println(“Communication error”);
return p;
} else if (p == FINGERPRINT_ENROLLMISMATCH) {
Serial.println(“Fingerprints did not match”);
return p;
} else {
Serial.println(“Unknown error”);
return p;
}

Serial.print(“ID “); Serial.println(id);
p = finger.storeModel(id);
if (p == FINGERPRINT_OK) {
Serial.println(“Stored!”);
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println(“Communication error”);
return p;
} else if (p == FINGERPRINT_BADLOCATION) {
Serial.println(“Could not store in that location”);
return p;
} else if (p == FINGERPRINT_FLASHERR) {
Serial.println(“Error writing to flash”);
return p;
} else {
Serial.println(“Unknown error”);
return p;
}
}

**The Fingerprint Sensor Library used in this Project can be downloaded from following link:

**All the products used in this project can be purchased from following links:

1. Arduino UNO R3
2. Male to Female Jumpers

Comments