← All Projects
Biometrics Attendance System
30 viewsApril 3, 2026
fingerprintattendancebiometrics
Install Adafruit_Fingerprint library
Circuit Connections
| Component | Pin | Pin | Component | |
|---|---|---|---|---|
| Fingerprint Sensor | 3.3 | → | 3.3V | Arduino UNO |
| Fingerprint Sensor | GND | → | GND | Arduino UNO |
| Fingerprint Sensor | RX | → | 3 | Arduino UNO |
| Fingerprint Sensor | TX | → | 2 | Arduino UNO |
arduino— setup.ino
#include <Adafruit_Fingerprint.h>
#if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__)
SoftwareSerial mySerial(2, 3);
#else
#define mySerial Serial1
#endif
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
uint8_t id;
void setup() {
Serial.begin(9600);
while (!Serial);
delay(100);
// Rebranded initialization
Serial.println("\n\n@itzbandhan Fingerprint System");
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1) { delay(1); }
}
finger.getParameters();
}
uint8_t readnumber(void) {
uint8_t num = 0;
while (num == 0) {
while (!Serial.available());
num = Serial.parseInt();
}
return num;
}
void loop()
{
Serial.println("Ready to enroll! (@itzbandhan)");
Serial.println("Type the ID # (1 to 127) to save this finger...");
id = readnumber();
if (id == 0) return;
Serial.print("Enrolling ID #");
Serial.println(id);
while (!getFingerprintEnroll());
}
uint8_t getFingerprintEnroll() {
int p = -1;
Serial.print("Waiting for valid finger for #");
Serial.println(id);
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;
}
}
p = finger.image2Tz(1);
if (p != FINGERPRINT_OK) return p;
Serial.println("Remove finger");
delay(2000);
p = 0;
while (p != FINGERPRINT_NOFINGER) { p = finger.getImage(); }
p = -1;
Serial.println("Place same finger again");
while (p != FINGERPRINT_OK) {
p = finger.getImage();
if (p == FINGERPRINT_OK) Serial.println("Image taken");
else if (p == FINGERPRINT_NOFINGER) Serial.print(".");
}
p = finger.image2Tz(2);
if (p != FINGERPRINT_OK) return p;
p = finger.createModel();
if (p == FINGERPRINT_OK) {
Serial.println("Prints matched!");
} else return p;
p = finger.storeModel(id);
if (p == FINGERPRINT_OK) {
Serial.println("Stored by @itzbandhan!");
} else return p;
return true;
}Now, compile and run the below code after setting up fingerprints.
arduino— code.ino
#include <Adafruit_Fingerprint.h>
// Software Serial setup for Uno/Nano/ESP8266
#if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__)
SoftwareSerial mySerial(2, 3);
#else
#define mySerial Serial1
#endif
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
// ANSI Escape Codes for Colors (Works in IDE 2.0+)
#define CLR_RESET "\e[0m"
#define CLR_GREEN "\e[32m"
#define CLR_RED "\e[31m"
#define CLR_CYAN "\e[36m"
#define CLR_YELLOW "\e[33m"
void setup() {
Serial.begin(9600);
while (!Serial);
delay(100);
Serial.println(F("------------------------------------"));
Serial.println(F("@itzbandhan"));
Serial.println(F("------------------------------------"));
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println(F("Found fingerprint sensor!"));
} else {
Serial.println(CLR_RED "Did not find fingerprint sensor :(" CLR_RESET);
while (1) { delay(1); }
}
finger.getTemplateCount();
if (finger.templateCount == 0) {
Serial.println(CLR_YELLOW "Sensor is empty. Please enroll a finger first." CLR_RESET);
} else {
Serial.print(F("Sensor contains "));
Serial.print(finger.templateCount);
Serial.println(F(" templates."));
Serial.println(F("Waiting for valid finger..."));
}
}
void loop() {
getFingerprintID();
delay(50); // Small delay to prevent CPU hogging
}
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
// We return immediately if no finger is on the sensor
// This prevents the "No finger detected" spam.
if (p == FINGERPRINT_NOFINGER) return p;
if (p != FINGERPRINT_OK) {
Serial.println(CLR_RED "Imaging Error" CLR_RESET);
return p;
}
p = finger.image2Tz();
if (p != FINGERPRINT_OK) {
Serial.println(CLR_RED "Messy Image - Try Again" CLR_RESET);
return p;
}
p = finger.fingerSearch();
if (p == FINGERPRINT_OK) {
// SUCCESS BLOCK
Serial.println(F("------------------------------------"));
Serial.print(CLR_GREEN "MATCH FOUND! ID #" );
Serial.print(finger.fingerID);
Serial.print(" Confidence: ");
Serial.print(finger.confidence);
Serial.println(CLR_RESET);
Serial.println(CLR_GREEN ">>> ATTENDANCE RECORDED <<<" CLR_RESET);
Serial.println(F("------------------------------------"));
// Simple lock-out delay so one touch doesn't record attendance 10 times
delay(2000);
} else if (p == FINGERPRINT_NOTFOUND) {
// WRONG ID BLOCK
Serial.println(CLR_RED "ACCESS DENIED: Fingerprint Not Recognized" CLR_RESET);
delay(1000);
} else {
Serial.println(CLR_RED "Communication Error" CLR_RESET);
}
return p;
}