Fingerprint Sensor and Open Door-Lock with matched fingerprint | Arduino


In this tutorial I show you how to use the Fingerprint Recognition Sensor Module with the Arduino. So we will learn how to enroll a new fingerprint ID, and how to find a fingerprint match. Also, we will make a mini project about how to control motorized door lock with the fingerprint sensor. Required Hardware: Fingerprint Sensor Module - https://goo.gl/NWU1qP Arduino Nano 328P - https://goo.gl/f3pdKS 3 in 1 Jumper Wires - https://goo.gl/EGTafY Breadboard - https://goo.gl/uvEhR1 DANIU Soldering Tools Kit - https://goo.gl/2oZhtu Heat Shrink Tube - https://goo.gl/j2xcVf DANIU Cable Cutter - https://goo.gl/b96G4X Optional (For Door-Lock 3D Model): Servo MG996R - https://goo.gl/tEoagp JGAURORA A3S 3D Printer - https://goo.gl/o5pQcb M3 Screws - https://goo.gl/EzxHyj XIAOMI Wowstick - https://goo.gl/wEV7e2 Door-Lock 3D Model: https://www.thingiverse.com/thing:465349 Adafruit Fingerprint Sensor Library: https://github.com/adafruit/Adafruit-... ------------------------------------------------------------------------ Studio Lighting Softbox - https://goo.gl/PM3xTM Adjustable SoftBox Tripod - https://goo.gl/j1N2UP Zhiyun Smooth Q Gimbal - https://goo.gl/wcNqB8 Magnetic Blue Mat - https://goo.gl/5j4Q7y Subscribe to Channel - http://bit.ly/MertArduino https://www.facebook.com/mertarduino/

Source Code

/*************************************************** 
  This is an example sketch for our optical Fingerprint sensor

  Designed specifically to work with the Adafruit BMP085 Breakout 
  ----> http://www.adafruit.com/products/751

  These displays use TTL Serial to communicate, 2 pins are required to 
  interface
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/


#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
#include <Servo.h> //Add servo library

int getFingerprintIDez();

Servo servo1; //Define servo name / object

#define servoPin 9 //Define pin number to which servo motor is connected
#define durationTime 3000 //Define the time it remains in the open position of the door lock (miliseconds)
#define servoMin 0 //Open position
#define servoMax 90 // Closed position


SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);


void setup()  
{
  while (!Serial);  // For Yun/Leo/Micro/Zero/...
  
  Serial.begin(9600);
  Serial.println("Adafruit finger detect test");

  servo1.attach(servoPin); //Define pin number of the servo
  servo1.write(servoMax); //The position of the servo at the start of the program

  // 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);
  }
  Serial.println("Waiting for valid finger...");
}

void loop()                     // run over and over again
{
  getFingerprintIDez();
  delay(50);            //don't ned to run this at full speed.
}

uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println("No finger detected");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }

  // OK success!

  p = finger.image2Tz();
  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!
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
    Serial.println("Found a print match!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    Serial.println("Did not find a match");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }   
  
  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); Serial.println(finger.confidence); 
}

// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.image2Tz();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)  return -1;

  servo1.write(servoMin); //If the fingerprint is correct open the door lock
  delay(durationTime); //Keep the lock open for the defined duration
  servo1.write(servoMax); //take the lock OFF again
  
  
  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); Serial.println(finger.confidence);
  return finger.fingerID; 
}