A sophisticated biometric authentication system with LCD display feedback for secure access control
π₯ Video Demo β’ Features β’ Hardware β’ Installation β’ Usage
This project implements a complete fingerprint-based authentication system using Arduino Uno, featuring real-time LCD feedback and dual-mode operation (enrollment and verification). Perfect for DIY security projects, smart locks, attendance systems, and IoT applications.
- β¨ User-Friendly: Real-time feedback via 20x4 LCD display
- π Secure: Biometric authentication with confidence scoring
- π― Dual Mode: Separate programs for enrollment and verification
- πΎ Persistent Storage: Stores up to 127 fingerprint templates
- π Fast Recognition: Quick matching with high accuracy
- π§ Easy to Customize: Clean, well-commented code
| Feature | Description |
|---|---|
| Fingerprint Enrollment | Register new fingerprints with step-by-step LCD guidance |
| Fingerprint Verification | Authenticate users with confidence percentage display |
| LCD Feedback | Real-time status updates on 20x4 I2C LCD screen |
| Template Storage | Store up to 127 unique fingerprint templates |
| Error Handling | Comprehensive error detection and user-friendly messages |
| Confidence Scoring | Match quality percentage for verification |
- Interactive fingerprint registration
- Requires two scans of the same finger for accuracy
- Assigns unique ID to each fingerprint (1-127)
- Step-by-step LCD instructions
- Continuous fingerprint scanning
- Displays matched ID and confidence percentage
- "Finger Not Found" notification for unregistered prints
- Fast search algorithm for quick authentication
π‘ Pro Tip: Watch the detailed component overview video for visual guidance on all components and connections!
| Component | Specification | Quantity |
|---|---|---|
| Arduino Uno | ATmega328P based | 1 |
| Fingerprint Sensor | R307 / AS608 | 1 |
| LCD Display | 20x4 I2C (0x27 address) | 1 |
| Jumper Wires | Male-to-Male / Male-to-Female | 8-10 |
| Breadboard | Standard size | 1 |
| USB Cable | Type A to Type B | 1 |
| Power Supply | 5V (Arduino USB or external) | 1 |
Sensor Pin β Arduino Pin
------------------------
VCC (Red) β 5V
GND (Black)β GND
TX (White) β Pin 2 (RX)
RX (Green) β Pin 3 (TX)
LCD Pin β Arduino Pin
--------------------
VCC β 5V
GND β GND
SDA β A4
SCL β A5
βββββββββββββββ
β Arduino β
β Uno β
β β
ββββββββββββββββ€ 5V β
β ββββββββββββ€ GND β
β β βββββββββ€ Pin 2 (RX) β
β β β ββββββ€ Pin 3 (TX) β
β β β β β A4 (SDA)βββββΌββββ
β β β β β A5 (SCL)βββββΌββ β
β β β β βββββββββββββββ β β
β β β β β β
β β β β ββββββββββββββββ β β
β β β β β Fingerprint β β β
β β β β β Sensor β β β
βββββΌβββΌβββΌββββ€ VCC β β β
β ββββΌβββΌββββ€ GND β β β
β ββββΌββββ€ TX β β β
β βββββ€ RX β β β
β ββββββββββββββββ β β
β β β
β βββββββββββββββββββ β
β β LCD 20x4 ββ β
β β (I2C 0x27) ββ β
βββββββββββββββ€ VCC ββ β
βββββββββββ€ GND ββ β
β β SDA βββββββββββββ β
β β SCL βββββββββββββ β
β ββββββββββββββββββ β
β β
GND 5V
git clone https://github.com/merahulthumma/Arduino-fingerprint-system.git
cd Arduino-fingerprint-systemDownload from Arduino Official Website
Open Arduino IDE and install these libraries via Library Manager (Sketch β Include Library β Manage Libraries):
- Adafruit Fingerprint Sensor Library by Adafruit
- LiquidCrystal I2C by Frank de Brabander
Or install manually:
# Using Arduino CLI
arduino-cli lib install "Adafruit Fingerprint Sensor Library"
arduino-cli lib install "LiquidCrystal I2C"- Connect components as per the pin configuration above
- Double-check power connections (5V and GND)
- Ensure I2C LCD address is 0x27 (check using I2C scanner if needed)
For Enrollment Mode:
1. Open enroll.ino in Arduino IDE
2. Select: Tools β Board β Arduino Uno
3. Select: Tools β Port β [Your Arduino Port]
4. Click Upload (β) button
5. Open Serial Monitor (9600 baud)
For Verification Mode:
1. Open verify.ino in Arduino IDE
2. Follow steps 2-5 above
- Upload
enroll.inoto Arduino - Open Serial Monitor (9600 baud rate)
- Read LCD message: "Ready to enroll a fingerprint!"
- Enter ID number (1-127) in Serial Monitor
- Place finger on sensor when prompted
- Remove finger when instructed
- Place same finger again for verification
- Done! LCD shows "Stored!" message
LCD Display Flow:
-----------------
"Hello, Mates'!"
"G'day"
β
"Ready to enroll a fingerprint!"
β
"Please type in the ID #"
β
"Waiting for valid finger..."
β
"Image taken"
β
"Remove finger"
β
"Place same finger again"
β
"Prints matched!"
β
"Stored!"
- Upload
verify.inoto Arduino - Wait for LCD message: "Waiting for valid finger..."
- Place registered finger on sensor
- View results on LCD:
- β Match Found: Shows ID # and confidence %
- β No Match: "Finger Not Found - Try Later"
LCD Display Flow:
-----------------
"Hello, Mates'!"
"G'day"
β
"Sensor contains X templates"
β
"Waiting for valid finger..."
β
[Place finger]
β
"Found ID # X"
"with % of YY"
OR
"Finger Not Found"
"Try Later"
For a complete visual walkthrough of the hardware setup, component connections, and system operation, watch the detailed video tutorial:
π¬ Watch Full Demo on YouTube
The video covers:
- π¦ All required components
- π Step-by-step wiring guide
- π― Enrollment process demonstration
- β Verification process in action
- π‘ Tips and troubleshooting
Enrollment Process:
[LCD] Hello, Mates'! G'day
[LCD] Found fingerprint sensor
[LCD] Ready to enroll a fingerprint!
[Serial] Please type ID (1-127): 5
[LCD] Waiting for valid finger...
[LCD] Image taken
[LCD] Remove finger
[LCD] Place same finger again
[LCD] Image taken
[LCD] Prints matched!
[LCD] Stored!
Verification Process:
[LCD] Hello, Mates'! G'day
[LCD] Sensor contains 5 templates
[LCD] Waiting for valid finger...
[User places finger]
[LCD] Found ID # 5
[LCD] with % of 95
Arduino-fingerprint-system/
β
βββ π enroll.ino # Fingerprint enrollment program
β βββ Setup initialization
β βββ LCD welcome message
β βββ Sensor verification
β βββ ID input handling
β βββ Two-stage fingerprint capture
β
βββ π verify.ino # Fingerprint verification program
β βββ Setup initialization
β βββ Template count display
β βββ Continuous scanning loop
β βββ Match result display
β
βββ π README.md # This file
βββ π circuit_diagram.png # Wiring diagram (recommended to add)
getFingerprintEnroll() // Main enrollment function
- getImage() // Capture fingerprint image
- image2Tz(1) // Convert first image to template
- image2Tz(2) // Convert second image to template
- createModel() // Create fingerprint model
- storeModel(id) // Store in sensor memorygetFingerprintIDez() // Quick verification function
- getImage() // Capture fingerprint image
- image2Tz() // Convert to template
- fingerFastSearch() // Search database for match
- Return fingerID // Return matched ID or -1// In both enroll.ino and verify.ino
// Sensor Configuration
finger.begin(57600); // Baud rate (9600, 57600, 115200)
// LCD Configuration
LiquidCrystal_I2C lcd(0x27,20,4); // Address, columns, rows
// Common addresses: 0x27, 0x3F
// Serial Configuration
Serial.begin(9600); // Serial monitor baud rate
// Fingerprint Storage
#define MAX_FINGERPRINTS 127 // Maximum templates (1-127)If LCD doesn't work, scan for I2C address:
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("I2C Scanner");
}
void loop() {
for(byte i = 1; i < 127; i++) {
Wire.beginTransmission(i);
if(Wire.endTransmission() == 0) {
Serial.print("Found: 0x");
Serial.println(i, HEX);
}
}
delay(5000);
}Possible Causes:
- Incorrect wiring connections
- Sensor not powered properly
- Wrong TX/RX connections
Solutions:
β Check VCC connected to 5V
β Verify GND connections
β Swap TX and RX pins (common mistake)
β Test with different baud rate: finger.begin(9600)
Possible Causes:
- Wrong I2C address
- Loose connections
- Insufficient power
Solutions:
β Run I2C scanner to find address
β Try address 0x3F if 0x27 doesn't work
β Check SDA β A4, SCL β A5
β Adjust contrast potentiometer on LCD
Possible Causes:
- Dirty sensor surface
- Wet or dirty finger
- Improper finger placement
Solutions:
β Clean sensor with soft cloth
β Clean and dry finger
β Press firmly but gently
β Place finger flat on sensor
Possible Causes:
- Different finger placement
- Finger moved between scans
- Pressure variation
Solutions:
β Keep finger still during scan
β Use same pressure for both scans
β Wait for "Remove finger" message
β Ensure good contact with sensor
Possible Causes:
- Invalid ID number
- Memory full
- ID already in use
Solutions:
β Use ID between 1-127
β Delete old fingerprints if memory full
β Use different ID number
Enable verbose output for debugging:
// Add to setup()
Serial.println("System initialized");
Serial.print("Template count: ");
Serial.println(finger.templateCount);Monitor Serial output at 9600 baud for detailed status messages.
- πͺ Smart Door Locks - Keyless entry systems
- π Personal Safe - Biometric cabinet locks
- π» Computer Security - Physical authentication device
- π¦ Secure Storage - Jewelry boxes, documents
- β° Attendance System - Employee time tracking
- ποΈ Access Control - Restricted area entry
- π₯οΈ Workstation Security - Computer login
- π File Cabinet Lock - Document security
- π¬ Learning Projects - Embedded systems education
- π€ IoT Integration - Smart home automation
- π Competition Projects - Robotics and maker fairs
- π Research - Biometric authentication studies
- Multi-User Systems - Household/office access
- Cloud Integration - Log attendance to database
- Mobile Alerts - Notify via SMS/email on access
- Time-Based Access - Scheduled entry permissions
| Component | Details |
|---|---|
| Microcontroller | ATmega328P @ 16MHz |
| Operating Voltage | 5V DC |
| Sensor Type | Optical fingerprint sensor |
| Sensor Baud Rate | 9600 / 57600 bps |
| Image Resolution | 256 x 288 pixels |
| Template Size | 512 bytes |
| Storage Capacity | 127 templates |
| False Acceptance Rate | < 0.001% |
| False Rejection Rate | < 1% |
| Matching Speed | < 1 second |
| LCD Type | 20x4 characters, I2C interface |
| Feature | Implementation |
|---|---|
| Programming Language | C++ (Arduino) |
| IDE | Arduino IDE 1.8+ |
| Libraries | Adafruit Fingerprint, LiquidCrystal I2C |
| Communication | SoftwareSerial, Wire (I2C) |
| Error Handling | Comprehensive status codes |
| User Interface | Serial + LCD display |
// Stage 1: Capture first image
finger.getImage() // Scan finger
finger.image2Tz(1) // Store in buffer 1
// Stage 2: Capture second image
finger.getImage() // Scan same finger
finger.image2Tz(2) // Store in buffer 2
// Verification & Storage
finger.createModel() // Compare buffers
finger.storeModel(id) // Save if matched// Optimized search through all templates
finger.fingerFastSearch()
// Returns:
// - FINGERPRINT_OK: Match found
// - FINGERPRINT_NOTFOUND: No match
// - finger.fingerID: Matched template ID
// - finger.confidence: Match quality (0-255)// Real-time user feedback
lcd.clear(); // Clear display
lcd.print("Message"); // Show status
delay(2000); // Visible durationContributions make the open-source community an amazing place to learn and create! Any contributions are greatly appreciated.
- Fork the repository
- Create your feature branch
git checkout -b feature/AmazingFeature
- Commit your changes
git commit -m 'Add some AmazingFeature' - Push to the branch
git push origin feature/AmazingFeature
- Open a Pull Request
- π¨ Improve LCD messages and UI
- π Add multi-level access control
- π± Integrate with mobile apps
- π Add WiFi/Bluetooth connectivity
- π Implement access logging
- π Add buzzer feedback
- π― Create web interface for management
- πΈ Add OLED display support
- β‘ Optimize performance
- π Improve documentation
This project is licensed under the MIT License.
MIT License
Copyright (c) 2024 Rahul Marreddy Thumma
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Rahul Marreddy Thumma
- π GitHub: @merahulthumma
- πΌ LinkedIn: Rahul Thumma
- π§ Email: your.email@example.com
- π Education: Master of Engineering (Telecommunications), Melbourne Institute of Technology
Special thanks to:
- Adafruit Industries - For the excellent fingerprint sensor library
- Arduino Community - For extensive documentation and support
- Frank de Brabander - For the LiquidCrystal I2C library
- Open Source Contributors - For inspiring this project
- Adafruit Fingerprint Sensor Library Documentation
- Arduino Official Documentation
- LiquidCrystal I2C Library
Want to learn more? Check out these resources:
- πΊ Arduino Fingerprint Sensor Tutorial
- π I2C LCD Display Guide
- π§ Biometric Systems Basics
- π‘ Arduino Project Ideas
- β Basic enrollment functionality
- β Fingerprint verification
- β LCD display integration
- β Serial communication
- β³ Web-based management interface
- β³ WiFi connectivity (ESP8266/ESP32)
- β³ Database logging
- β³ Mobile app integration
- β³ Multi-language support
- β³ OLED display option
- β³ Buzzer feedback
Q: Can I use a different fingerprint sensor?
Yes! Most optical fingerprint sensors (R307, AS608, GT-511C3) work with minor modifications to the baud rate.
Q: How secure is this system?
The sensor has a False Acceptance Rate (FAR) of < 0.001% and stores templates as mathematical representations, not actual fingerprint images.
Q: Can I store more than 127 fingerprints?
The sensor's hardware limit is 127 templates. For larger capacity, consider upgrading to a database-backed system with multiple sensors.
Q: Does it work with Arduino Mega/Nano?
Yes! Just adjust the pin numbers in the code. Mega has more serial ports, Nano works identically to Uno.
Q: Can I add WiFi to send notifications?
Absolutely! Integrate ESP8266 or ESP32 to add IoT features like cloud logging and mobile notifications.
If you found this project helpful, please consider giving it a β on GitHub!
Need help? Here's how to get support:
- π Documentation: Read this README thoroughly
- π Bug Reports: Open an issue
- π‘ Feature Requests: Open an issue
- π¬ Discussions: Start a discussion
- π§ Email: your.email@example.com
Made with β€οΈ by Rahul Thumma
