Arduino Fingerprint Sensor Project

Post here about your Arduino projects, get help - for Adafruit customers!

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
User avatar
Kynaston04
 
Posts: 5
Joined: Tue Jun 29, 2021 12:34 am

Arduino Fingerprint Sensor Project

Post by Kynaston04 »

I am working on a school project and am having trouble coding my fingerprint sensor. I am very new to Arduino and haven't got a lot of experience. I am trying to activate the fingerprint sensor only when the motion sensor is activated so its not flashing all the time. I am having trouble incorporating the motion sensor code into the Fingerprint Sensor code. The fingerprint sensors power is connected to a relay which turns on once the motion sensor detects motion. Once the Fingerprint is activated and accepted a motor with turn on and off along with a few simple led's . If anyone could give me some support with this it would be much appreciated.

Thanks
Here is the Code

Code: Select all

/***************************************************
  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
 ****************************************************/
int inputPin = 2;               // Choose the input pin (for PIR sensor)
int pirState = LOW;             // We start, assuming no motion detected
int val = 0;                    // Variable for reading the pin status
int SensorPin = 1;              // Controls Sensor
int MotorPin = 8;               // Controls Motor
int GreenLed = 10;              // Controls Greed LED // Green Led Indicates Fingerprint Succesful / Locker Unlocked
int RedLed = 11;                // Controls Red LED // Indicated Locker Is Locked
int YellowLed = 9;              // Indicates If Sensor Is Activated
int Relay = 8;                  // Controls Relay

#include <Adafruit_Fingerprint.h>


#if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__)
// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
// Set up the serial port to use softwareserial..
SoftwareSerial mySerial(2, 3);

#else
// On Leonardo/M0/etc, others with hardware serial, use hardware serial!
// #0 is green wire, #1 is white
#define mySerial Serial1

#endif

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()
{ pinMode(Relay,OUTPUT);         //declare Relay as output
  pinMode(YellowLed,OUTPUT);    // declare LED as output
  pinMode(SensorPin,INPUT);     // declare sensor as input
  pinMode(GreenLed,OUTPUT);     // declare Green Led as putput
  pinMode(RedLed,OUTPUT);       // declare Red Led as output
  pinMode(inputPin,INPUT);      // Declare sensor as input
  digitalWrite(RedLed,HIGH);    // Turns Red Led On At Start
  digitalWrite(Relay,HIGH);      // Turns Fingerprint Sensor Off Until Sensor Activats It 
 

  Serial.begin(9600);

  while (!Serial);  // For Yun/Leo/Micro/Zero/...
  delay(100);
  Serial.println("\n\nAdafruit finger detect test");

  // set the data rate for the sensor serial port
  finger.begin(57600);
  delay(5);
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) {
      delay(1);
    }
  }

  Serial.println(F("Reading sensor parameters"));
  finger.getParameters();
  Serial.print(F("Status: 0x")); Serial.println(finger.status_reg, HEX);
  Serial.print(F("Sys ID: 0x")); Serial.println(finger.system_id, HEX);
  Serial.print(F("Capacity: ")); Serial.println(finger.capacity);
  Serial.print(F("Security level: ")); Serial.println(finger.security_level);
  Serial.print(F("Device address: ")); Serial.println(finger.device_addr, HEX);
  Serial.print(F("Packet len: ")); Serial.println(finger.packet_len);
  Serial.print(F("Baud rate: ")); Serial.println(finger.baud_rate);

  finger.getTemplateCount();

  if (finger.templateCount == 0) {
    Serial.print("Sensor doesn't contain any fingerprint data. Please run the 'enroll' example.");
  }
  else {
    Serial.println("Waiting for valid finger...");
    Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
  }
}

void loop()                     // run over and over again
{
  val = digitalRead(inputPin);  // read input value
  if (val == HIGH) {            // check if the input is HIGH
    digitalWrite(YellowLed, HIGH); // turn LED ON
    digitalWrite(Relay,LOW);
    if (pirState == LOW) {
      // we have just turned on
      Serial.println("Motion detected!");
      // We only want to print on the output change, not state
      pirState = HIGH;
    }
  } else {
    digitalWrite(YellowLed, LOW); // turn LED OFF
    digitalWrite(Relay,HIGH);
    if (pirState == HIGH){
      // we have just turned of
      Serial.println("Motion ended!");
      // We only want to print on the output change, not state
      pirState = LOW;
    }
{
  getFingerprintID();
  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.fingerSearch();
  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);

  //Controlling LED/MOTOR
  digitalWrite(RedLed, LOW); //Turns Red Light OFF
  digitalWrite(MotorPin, LOW); //Turns Motor on
  digitalWrite(GreenLed, HIGH); //Turns Green Light ON/ Accepted Fingerprint
  delay(1000);                 //Delays for 1s
  digitalWrite(GreenLed, LOW); //Turns Green Led OFF
  digitalWrite(MotorPin, HIGH); //Turns Motor OFF
  digitalWrite(RedLed, HIGH);  //Turns RedLed ON


  return finger.fingerID;
}

// 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;

  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID);
  Serial.print(" with confidence of "); Serial.println(finger.confidence);
  return finger.fingerID;

}
Last edited by adafruit_support_bill on Tue Jun 29, 2021 6:47 am, edited 1 time in total.
Reason: Pleas use [code] tags when posting code to the forums

User avatar
adafruit_support_bill
 
Posts: 88096
Joined: Sat Feb 07, 2009 10:11 am

Re: Arduino Fingerprint Sensor Project

Post by adafruit_support_bill »

That looks like just the standard example code. We need to see the code for your motion sensor and relay. A diagram of your circuit would be helpful too.

User avatar
Kynaston04
 
Posts: 5
Joined: Tue Jun 29, 2021 12:34 am

Re: Arduino Fingerprint Sensor Project

Post by Kynaston04 »

The first few lines of code as shown below is the code for the motion sensor which is integrated into the fingerprint code. The problem i have is when i run the code multiple errors occur stating
'getFingerprintID' was not declared in this scope. But when i remove the code i have added (Motion sensor code below) there are no errors with the sketch. I just want to know how to get around this error.

Thanks


void loop() // run over and over again
{
val = digitalRead(inputPin); // read input value
if (val == HIGH) { // check if the input is HIGH
digitalWrite(YellowLed, HIGH); // turn LED ON
digitalWrite(Relay,LOW);
if (pirState == LOW) {
// we have just turned on
Serial.println("Motion detected!");
// We only want to print on the output change, not state
pirState = HIGH;
}
} else {
digitalWrite(YellowLed, LOW); // turn LED OFF
digitalWrite(Relay,HIGH);
if (pirState == HIGH){
// we have just turned of
Serial.println("Motion ended!");
// We only want to print on the output change, not state
pirState = LOW;
}

User avatar
adafruit_support_bill
 
Posts: 88096
Joined: Sat Feb 07, 2009 10:11 am

Re: Arduino Fingerprint Sensor Project

Post by adafruit_support_bill »

Your code is not compiling because your loop function has no end.
You have not finished defining your loop before the definition for getFingerprintID():
If your indent your code consistently, you can easily see the problem.

Code: Select all

void loop()                     // run over and over again
{
  val = digitalRead(inputPin);  // read input value
  if (val == HIGH) 
  {            // check if the input is HIGH
    digitalWrite(YellowLed, HIGH); // turn LED ON
    digitalWrite(Relay,LOW);
    if (pirState == LOW) 
    {
      // we have just turned on
      Serial.println("Motion detected!");
      // We only want to print on the output change, not state
      pirState = HIGH;
    }
  } 
  else 
  {
    digitalWrite(YellowLed, LOW); // turn LED OFF
    digitalWrite(Relay,HIGH);
    if (pirState == HIGH)
    {
      // we have just turned of
      Serial.println("Motion ended!");
      // We only want to print on the output change, not state
      pirState = LOW;
    }
    {
      getFingerprintID();
      delay(50);            //don't ned to run this at full speed.
    }



uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
You need closing braces to complete those code blocks:

Code: Select all

void loop()                     // run over and over again
{
  val = digitalRead(inputPin);  // read input value
  if (val == HIGH) 
  {            // check if the input is HIGH
    digitalWrite(YellowLed, HIGH); // turn LED ON
    digitalWrite(Relay,LOW);
    if (pirState == LOW) 
    {
      // we have just turned on
      Serial.println("Motion detected!");
      // We only want to print on the output change, not state
      pirState = HIGH;
    }
  } 
  else 
  {
    digitalWrite(YellowLed, LOW); // turn LED OFF
    digitalWrite(Relay,HIGH);
    if (pirState == HIGH)
    {
      // we have just turned of
      Serial.println("Motion ended!");
      // We only want to print on the output change, not state
      pirState = LOW;
    }
    {
      getFingerprintID();
      delay(50);            //don't ned to run this at full speed.
    }

  } // end of the 'else' clause
}  // end of 'loop' function.

Locked
Please be positive and constructive with your questions and comments.

Return to “Arduino”