Hey everyone I am very new to Arduino and programming all together. I've only been working at this for about 2 weeks and trying to use forums, YouTube, and google when possible, but this one I just can't figure out this part on my own.
I am trying to make a biometric fingerprint lock for an in wall safe. I have been able to get most of my code working, recognizing my print and activating the lock. Since I plan on running this project on batteries I would like to be able to put the Arduino to sleep until I place my finger on the fingerprint reader. Once the lock has been unlocked I would like it to go back into a sleep mode after like 30 secs. I have tried using some example codes that I have seen online, but I can't figure out how to get them to work with my Sketch.
I am using an Arduino Uno Rev3, a 4 relay shield, R503 fingerprint reader, and a 12v solenoid lock. I included 2 pictures of what my setup looks like, and I will include the code that I am currently working with. I was wondering if anyone would be able to help me. Any help with this would be appreciated. Thank you.
#include <Adafruit_Fingerprint.h>
#define relay1 4
#define relay2 7
#define relay3 8
#define relay4 12
#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
#define mySerial Serial1
#endif
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
void setup()
{
pinMode(relay1, OUTPUT);// connected to Relay 1
digitalWrite(relay1, LOW);
pinMode(relay2, OUTPUT);// connected to Relay 2
digitalWrite(relay2, LOW);
pinMode(relay3, OUTPUT);// connected to Relay 3
digitalWrite(relay3, LOW);
pinMode(relay4, OUTPUT);// connected to Relay 4
digitalWrite(relay4, LOW);
Serial.begin(9600);
// set the data rate for the sensor serial port
finger.begin(57600);
Serial.println("\n\nAdafruit finger detect test");
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
{
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);
digitalWrite(relay1, HIGH);// "unlocks" relay 1
Serial.println("relay 1 unlocked");
delay(5000); //keeps relay "unlocked for 5 seconds"
digitalWrite(relay1, LOW);// "locks relay 1
Serial.println("relay1 locked");
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!
return finger.fingerID;
}
fingerprint_final_working.ino (5.29 KB)