Close Menu
  • Articles
    • Learn Electronics
    • Product Review
    • Tech Articles
  • Electronics Circuits
    • 555 Timer Projects
    • Op-Amp Circuits
    • Power Electronics
  • Microcontrollers
    • Arduino Projects
    • STM32 Projects
    • AMB82-Mini IoT AI Camera
    • BLE Projects
  • IoT Projects
    • ESP8266 Projects
    • ESP32 Projects
    • ESP32 MicroPython
    • ESP32-CAM Projects
    • LoRa/LoRaWAN Projects
  • Raspberry Pi
    • Raspberry Pi Projects
    • Raspberry Pi Pico Projects
    • Raspberry Pi Pico W Projects
  • Electronics Calculator
Facebook X (Twitter) Instagram
  • About Us
  • Disclaimer
  • Privacy Policy
  • Contact Us
  • Advertise With Us
Facebook X (Twitter) Instagram Pinterest YouTube LinkedIn
How To Electronics
  • Articles
    • Learn Electronics
    • Product Review
    • Tech Articles
  • Electronics Circuits
    • 555 Timer Projects
    • Op-Amp Circuits
    • Power Electronics
  • Microcontrollers
    • Arduino Projects
    • STM32 Projects
    • AMB82-Mini IoT AI Camera
    • BLE Projects
  • IoT Projects
    • ESP8266 Projects
    • ESP32 Projects
    • ESP32 MicroPython
    • ESP32-CAM Projects
    • LoRa/LoRaWAN Projects
  • Raspberry Pi
    • Raspberry Pi Projects
    • Raspberry Pi Pico Projects
    • Raspberry Pi Pico W Projects
  • Electronics Calculator
How To Electronics
Home » Fingerprint Biometric Attendance System using Arduino
Arduino Projects

Fingerprint Biometric Attendance System using Arduino

Mamtaz AlamBy Mamtaz AlamUpdated:February 2, 202577 Comments5 Mins Read
Share Facebook Twitter LinkedIn Telegram Reddit WhatsApp
Fingerprint Sensor Biometric Attendance System
Share
Facebook Twitter LinkedIn Pinterest Email Reddit Telegram WhatsApp

Introduction:

In this project, we are going to design a Fingerprint Sensor Based Biometric Attendance System using Arduino. Simply we will be interfacing fingerprint sensor with Arduino, LCD Display & RTC Module to design the desired project. In this project, we used the fingerprint Module and Arduino to take and keep attendance data and records.

Biometric Attendance systems are commonly used systems to mark the presence in offices and schools. This project has a wide application in school, college, business organization, offices where marking of attendance is required accurately with time. By using the fingerprint sensor, the system will become more secure for the users.

You can check the advanced version of this project here: IoT Biometric Fingerprint Attendance System. In case if you are not satisfied with R305/R307 Fingerprint sensors, you can refer to GT511C3 fingerprint sensor which is a faster and better fingerprint sensor.




Bill of Materials

S.N.ComponentsQuantity
1Arduino UNO Board1Amazon | AliExpress
2R305/R307 Fingerprint Sensor1Amazon | AliExpress
3DS3231/DS1307 RTC Module1Amazon | AliExpress
416x2 LCD Display1Amazon | AliExpress
5Potentiometer 10K1Amazon | AliExpress
6Push Buttons5Amazon | AliExpress
7Buzzer 5V 1Amazon | AliExpress
8LED 5mm Any Color1Amazon | AliExpress
9Connecting Wires20Amazon | AliExpress
10Breadboard1Amazon | AliExpress

R305 Fingerprint Scanner Sensor Module:

Introduction:

This is a fingerprint sensor module with TTL UART interface for direct connections to microcontroller UART or to PC through MAX232 / USB-Serial adapter. The user can store the fingerprint data in the module and can configure it in 1:1 or 1: N mode for identifying the person.

R305 Fingerprint Sensor

The Fingerprint module can be directly interfaced with any microcontroller as well as Arduino Board. This optical biometric fingerprint reader with great features and can be embedded into a variety of end products like access control system, attendance system, safety deposit box, car door locking system.

Features

  1. Integrated image collecting and algorithm chip together, ALL-in-One
  2. Fingerprint can conduct secondary development & embedded into a variety of end products
  3. Low power consumption, low cost, small size, excellent performance
  4. Professional optical technology, precise module manufacturing techniques
  5. Good image processing capabilities can successfully capture image up to resolution 500 dpi

Specifications

  1. Fingerprint sensor type: Optical
  2. Sensor Life: 100 million times
  3. Static indicators: 15KVBacklight: bright green
  4. Interface: USB1.1/UART(TTL logical level)
  5. RS232 communication baud rate: 4800BPS~115200BPS changeable
  6. Dimension: 553221.5mm
  7. Image Capture Surface 15—18(mm)
  8. Verification Speed: 0.3 sec
  9. Scanning Speed: 0.5 sec
  10. Character file size: 256 bytes
  11. Template size: 512 bytes
  12. Storage capacity: 250
  13. Security level: 5 (1,2,3,4,5(highest))
  14. False Acceptance Rate (FAR) :0.0001%
  15. False Rejection Rate (FRR): 0.1%
  16. Resolution 500 DPI
  17. Voltage :3.6-6.0 VDC
  18. Working current: Typical 90 mA, Peak 150mA
  19. Matching Method: 1: N
  20. Operating Environment Temperature: -20 to 45° centigrades



Block Diagram Biometric Attendance System

Fingerprint Sensor Based Biometric Attendance System

In this Fingerprint Sensor Based Biometric Attendance System using Arduino, we used a Fingerprint Sensor module to authenticate a true person or employee by taking their finger input in the system. Here we are using 4 push buttons to register new fingerprint or delete stored fingerprint or match stored fingerprint. The 4 push buttons are used as an input unit for these tasks. Similarly, RTC Module DS3231 is used for registering scanning/entering/existing time of the user.

The LCD displays the time record and every function happening via push button. Buzzer indicates different functions and happening whenever an interrupt is detected. The LED is used for power indication.


Circuit Diagram & Connections

fingerprint attendance circuit diagram


Source Code Program

The source code/Program for Fingerprint Sensor Based Biometric Attendance System using Arduino is given below. But before that you need to add fingerprint Sensor library & DS3231 Library. So download the following library:

  1. DS3231 Library – Download
  2. Adafruit Fingerprint Sensor Library – Download



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
#include "Adafruit_Fingerprint.h" //fingerprint library header file
#include<EEPROM.h> //command for storing data
#include<LiquidCrystal.h> //lcd header file
LiquidCrystal lcd(8,9,10,11,12,13);
#include <SoftwareSerial.h>
SoftwareSerial fingerPrint(2, 3); //for tx/rx communication between arduino & r305 fingerprint sensor
 
#include <Wire.h>
#include "RTClib.h" //library file for DS3231 RTC Module
RTC_DS3231 rtc;
 
uint8_t id;
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&fingerPrint);
 
#define register_back 14
#define delete_ok 15
#define forward 16
#define reverse 17
#define match 5
#define indFinger 7
#define buzzer 5
 
#define records 10 // 10 for 10 user
 
int user1,user2,user3,user4,user5,user6,user7,user8,user9,user10;
 
DateTime now;
 
void setup()
{
delay(1000);
lcd.begin(16,2);
Serial.begin(9600);
pinMode(register_back, INPUT_PULLUP);
pinMode(forward, INPUT_PULLUP);
pinMode(reverse, INPUT_PULLUP);
pinMode(delete_ok, INPUT_PULLUP);
pinMode(match, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);
pinMode(indFinger, OUTPUT);
digitalWrite(buzzer, LOW);
if(digitalRead(register_back) == 0)
{
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer, LOW);
lcd.clear();
lcd.print("Please wait !");
lcd.setCursor(0,1);
lcd.print("Downloding Data");
 
Serial.println("Please wait");
Serial.println("Downloding Data..");
Serial.println();
 
Serial.print("S.No. ");
for(int i=0;i<records;i++)
{
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer, LOW);
Serial.print(" User ID");
Serial.print(i+1);
Serial.print(" ");
}
Serial.println();
int eepIndex=0;
for(int i=0;i<30;i++)
{
if(i+1<10)
Serial.print('0');
Serial.print(i+1);
Serial.print(" ");
eepIndex=(i*7);
download(eepIndex);
eepIndex=(i*7)+210;
download(eepIndex);
eepIndex=(i*7)+420;
download(eepIndex);
eepIndex=(i*7)+630;
download(eepIndex);
eepIndex=(i*7)+840;
download(eepIndex);
eepIndex=(i*7)+1050;
download(eepIndex);
eepIndex=(i*7)+1260;
download(eepIndex);
eepIndex=(i*7)+1470;
download(eepIndex);
eepIndex=(i*7)+1680;
download(eepIndex);
Serial.println();
}
}
if(digitalRead(delete_ok) == 0)
{
lcd.clear();
lcd.print("Please Wait");
lcd.setCursor(0,1);
lcd.print("Reseting.....");
for(int i=1000;i<1005;i++)
EEPROM.write(i,0);
for(int i=0;i<841;i++)
EEPROM.write(i, 0xff);
lcd.clear();
lcd.print("System Reset");
delay(1000);
}
 
lcd.clear();
lcd.print(" Fingerprint ");
lcd.setCursor(0,1);
lcd.print("Attendance System");
delay(2000);
lcd.clear();
 
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer, LOW);
for(int i=1000;i<1000+records;i++)
{
if(EEPROM.read(i) == 0xff)
EEPROM.write(i,0);
}
 
finger.begin(57600);
Serial.begin(9600);
lcd.clear();
lcd.print("Finding Module..");
lcd.setCursor(0,1);
delay(2000);
if (finger.verifyPassword())
{
Serial.println("Found fingerprint sensor!");
lcd.clear();
lcd.print(" Module Found");
delay(2000);
}
else
{
Serial.println("Did not find fingerprint sensor :(");
lcd.clear();
lcd.print("Module Not Found");
lcd.setCursor(0,1);
lcd.print("Check Connections");
while (1);
}
 
if (! rtc.begin())
Serial.println("Couldn't find RTC");
 
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
 
if (rtc.lostPower())
{
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(2018, 6, 7, 11, 0, 0));
// This line sets the RTC with an explicit date & time, for example to set
// June 7, 2018 at 11am you would call:
// rtc.adjust(DateTime(2018, 6, 7, 11, 0, 0));
}
lcd.setCursor(0,0);
lcd.print(" Press Match to ");
lcd.setCursor(0,1);
lcd.print(" Start System");
delay(3000);
 
user1=EEPROM.read(1000);
user2=EEPROM.read(1001);
user3=EEPROM.read(1002);
user4=EEPROM.read(1003);
user5=EEPROM.read(1004);
lcd.clear();
digitalWrite(indFinger, HIGH);
 
}
 
void loop()
{
now = rtc.now();
lcd.setCursor(0,0);
lcd.print("Time: ");
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("Date: ");
lcd.print(now.day(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.year(), DEC);
lcd.print(" ");
delay(500);
int result=getFingerprintIDez();
if(result>0)
{
digitalWrite(indFinger, LOW);
digitalWrite(buzzer, HIGH);
delay(100);
digitalWrite(buzzer, LOW);
lcd.clear();
lcd.print("ID:");
lcd.print(result);
lcd.setCursor(0,1);
lcd.print("Please Wait....");
delay(1000);
attendance(result);
lcd.clear();
lcd.print("Attendance ");
lcd.setCursor(0,1);
lcd.print("Registered");
delay(1000);
digitalWrite(indFinger, HIGH);
return;
}
checkKeys();
delay(300);
}
 
// dmyyhms - 7 bytes
void attendance(int id)
{
int user=0,eepLoc=0;
if(id == 1)
{
eepLoc=0;
user=user1++;
}
else if(id == 2)
{
eepLoc=210;
user=user2++;
}
else if(id == 3)
{
eepLoc=420;
user=user3++;
}
else if(id == 4)
{
eepLoc=630;
user=user4++;
}
else if(id == 5)
{
eepLoc=0;
user=user5++;
}
else if(id == 6)
{
eepLoc=840;
user=user5++;
}
else if(id == 7)
{
eepLoc=1050;
user=user7++;
}
else if(id == 8)
{
eepLoc=1260;
user=user8++;
}
else if(id == 9)
{
eepLoc=1470;
user=user9++;
}
else if(id == 10)
{
eepLoc=1680;
user=user8++;
}
/*else if(id == 5) // fifth user
{
eepLoc=840;
user=user5++;
}*/
else
return;
 
int eepIndex=(user*7)+eepLoc;
EEPROM.write(eepIndex++, now.hour());
EEPROM.write(eepIndex++, now.minute());
EEPROM.write(eepIndex++, now.second());
EEPROM.write(eepIndex++, now.day());
EEPROM.write(eepIndex++, now.month());
EEPROM.write(eepIndex++, now.year()>>8 );
EEPROM.write(eepIndex++, now.year());
 
EEPROM.write(1000,user1);
EEPROM.write(1001,user2);
EEPROM.write(1002,user3);
EEPROM.write(1003,user4);
// EEPROM.write(4,user5); // figth user
}
 
void checkKeys()
{
if(digitalRead(register_back) == 0)
{
lcd.clear();
lcd.print("Please Wait");
delay(1000);
while(digitalRead(register_back) == 0);
Enroll();
}
 
else if(digitalRead(delete_ok) == 0)
{
lcd.clear();
lcd.print("Please Wait");
delay(1000);
delet();
}
}
 
void Enroll()
{
int count=1;
lcd.clear();
lcd.print("Enter Finger ID:");
 
while(1)
{
lcd.setCursor(0,1);
lcd.print(count);
if(digitalRead(forward) == 0)
{
count++;
if(count>records)
count=1;
delay(500);
}
 
else if(digitalRead(reverse) == 0)
{
count--;
if(count<1)
count=records;
delay(500);
}
else if(digitalRead(delete_ok) == 0)
{
id=count;
getFingerprintEnroll();
for(int i=0;i<records;i++)
{
if(EEPROM.read(i) != 0xff)
{
EEPROM.write(i, id);
break;
}
}
return;
}
 
else if(digitalRead(register_back) == 0)
{
return;
}
}
}
 
void delet()
{
int count=1;
lcd.clear();
lcd.print("Enter Finger ID");
 
while(1)
{
lcd.setCursor(0,1);
lcd.print(count);
if(digitalRead(forward) == 0)
{
count++;
if(count>records)
count=1;
delay(500);
}
 
else if(digitalRead(reverse) == 0)
{
count--;
if(count<1)
count=records;
delay(500);
}
else if(digitalRead(delete_ok) == 0)
{
id=count;
deleteFingerprint(id);
for(int i=0;i<records;i++)
{
if(EEPROM.read(i) == id)
{
EEPROM.write(i, 0xff);
break;
}
}
return;
}
 
else if(digitalRead(register_back) == 0)
{
return;
}
}
}
 
uint8_t getFingerprintEnroll()
{
int p = -1;
lcd.clear();
lcd.print("finger ID:");
lcd.print(id);
lcd.setCursor(0,1);
lcd.print("Place Finger");
delay(2000);
while (p != FINGERPRINT_OK)
{
p = finger.getImage();
switch (p)
{
case FINGERPRINT_OK:
Serial.println("Image taken");
lcd.clear();
lcd.print("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.println("No Finger");
lcd.clear();
lcd.print("No Finger Found");
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
lcd.clear();
lcd.print("Comm Error");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
lcd.clear();
lcd.print("Imaging Error");
break;
default:
Serial.println("Unknown error");
lcd.clear();
lcd.print("Unknown Error");
break;
}
}
 
// OK success!
 
p = finger.image2Tz(1);
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
lcd.clear();
lcd.print("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
lcd.clear();
lcd.print("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
lcd.clear();
lcd.print("Comm Error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
lcd.clear();
lcd.print("Feature Not Found");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
lcd.clear();
lcd.print("Feature Not Found");
return p;
default:
Serial.println("Unknown error");
lcd.clear();
lcd.print("Unknown Error");
return p;
}
 
Serial.println("Remove finger");
lcd.clear();
lcd.print("Remove Finger");
delay(2000);
p = 0;
while (p != FINGERPRINT_NOFINGER) {
p = finger.getImage();
}
Serial.print("ID "); Serial.println(id);
p = -1;
Serial.println("Place same finger again");
lcd.clear();
lcd.print("Place Finger");
lcd.setCursor(0,1);
lcd.print(" Again");
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");
return;
}
}
 
// OK success!
 
p = finger.image2Tz(2);
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!
Serial.print("Creating model for #"); Serial.println(id);
 
p = finger.createModel();
if (p == FINGERPRINT_OK) {
Serial.println("Prints matched!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_ENROLLMISMATCH) {
Serial.println("Fingerprints did not match");
return p;
} else {
Serial.println("Unknown error");
return p;
}
 
Serial.print("ID "); Serial.println(id);
p = finger.storeModel(id);
if (p == FINGERPRINT_OK) {
Serial.println("Stored!");
lcd.clear();
lcd.print(" Finger Stored!");
delay(2000);
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_BADLOCATION) {
Serial.println("Could not store in that location");
return p;
} else if (p == FINGERPRINT_FLASHERR) {
Serial.println("Error writing to flash");
return p;
}
else {
Serial.println("Unknown error");
return p;
}
}
 
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)
{
lcd.clear();
lcd.print("Finger Not Found");
lcd.setCursor(0,1);
lcd.print("Try Later");
delay(2000);
return -1;
}
// found a match!
Serial.print("Found ID #");
Serial.print(finger.fingerID);
return finger.fingerID;
}
 
uint8_t deleteFingerprint(uint8_t id)
{
uint8_t p = -1;
lcd.clear();
lcd.print("Please wait");
p = finger.deleteModel(id);
if (p == FINGERPRINT_OK)
{
Serial.println("Deleted!");
lcd.clear();
lcd.print("Finger Deleted");
lcd.setCursor(0,1);
lcd.print("Successfully");
delay(1000);
}
 
else
{
Serial.print("Something Wrong");
lcd.clear();
lcd.print("Something Wrong");
lcd.setCursor(0,1);
lcd.print("Try Again Later");
delay(2000);
return p;
}
}
 
void download(int eepIndex)
{
 
if(EEPROM.read(eepIndex) != 0xff)
{
Serial.print("T->");
if(EEPROM.read(eepIndex)<10)
Serial.print('0');
Serial.print(EEPROM.read(eepIndex++));
Serial.print(':');
if(EEPROM.read(eepIndex)<10)
Serial.print('0');
Serial.print(EEPROM.read(eepIndex++));
Serial.print(':');
if(EEPROM.read(eepIndex)<10)
Serial.print('0');
Serial.print(EEPROM.read(eepIndex++));
Serial.print(" D->");
if(EEPROM.read(eepIndex)<10)
Serial.print('0');
Serial.print(EEPROM.read(eepIndex++));
Serial.print('/');
if(EEPROM.read(eepIndex)<10)
Serial.print('0');
Serial.print(EEPROM.read(eepIndex++));
Serial.print('/');
Serial.print(EEPROM.read(eepIndex++)<<8 | EEPROM.read(eepIndex++));
}
else
{
Serial.print("---------------------------");
}
 
Serial.print(" ");
}



Working Explanation:

The working of the Fingerprint Sensor Based Biometric Attendance System. In this project, we have used a DS3231 RTC Module for time & date display. We used 1 LED for power indication, and 1 buzzer for different function indications. We have interfaced 16*2 LCD which displays everything whenever the finger is placed or removed, or registering attendance or downloading data.

We have used 4 push buttons which are used to control the entire system. The functions of each button are:
1. Register/Back Button – Used for enrolling new fingerprints as well as reversing the back process or going back
2. Delete/OK Button – This Button is used for deleting the earlier stored fingerprint system as well as granting access as an OK selection.
3. Forward Button – Used for moving forward while selecting the memory location for storing or deleting fingerprints.
4. Reverse Button – Used for moving backward while selecting memory location for storing or deleting fingerprints.

Fingerprint Enrolling

Fingerprint Sensor Based Biometric Attendance System

Fingerprint Deleting

Fingerprint Scanning

Enrolling New Fingerprint

To enroll New Fingerprint Click on the Enroll button. Then select the memory location where you want to store your fingerprint using the UP/DOWN button. Then click on OK. Put your finger and remove your finger as the LCD instructs. Put your finger again. So finally your fingerprint gets stored.

Deleting Stored Fingerprint

To delete the fingerprint which is already clicked on DEL Button. Then select the memory location where your fingerprint was stored earlier using the UP/DOWN button. Then click on OK. So finally your fingerprint is deleted.

Downloading Data:

Simply click on Register/Back Button and reset the button together. At this movement, the serial monitor should be opened.


Video Tutorial & Guide

Fingerprint Based Biometric Attendance System using Arduino
Watch this video on YouTube.

Share. Facebook Twitter Pinterest LinkedIn Tumblr Email Reddit Telegram WhatsApp
Previous ArticleBluetooth Low Energy Basics: Classic Bluetooth Vs. Bluetooth LE
Next Article Interfacing Multiple DS18B20 Temperature Sensors to Arduino

Related Posts

DC Energy Meter using Arduino

Build a DC Energy Meter using Arduino – 32V/5A

Updated:August 26, 20252K
Interfacing ADXL375 Accelerometer with Arduino

Interfacing ADXL375 Accelerometer with Arduino (±200g)

Updated:June 28, 2025
PZEM-004T Arduino Energy Meter

DIY AC Energy Meter using PZEM-004T & Arduino

Updated:March 6, 20258K
Interfacing BMI160 Accelerometer & Gyroscope with Arduino

Interfacing BMI160 Accelerometer & Gyroscope with Arduino

Updated:February 2, 20259K
Password Based Door Lock Security System Using Arduino & Keypad

Password Based Door Lock Security System Using Arduino & Keypad

Updated:February 2, 20252436K
Earthquake Detector Alarm with with Accelerometer & Arduino

Earthquake Detector Alarm with Accelerometer & Arduino

Updated:February 2, 2025661K
View 77 Comments

77 Comments

  1. Shri k on October 19, 2018 12:22 PM

    ‘RTC_DS3231’ does not name a type
    why this error occur…????
    Can u help out..????

    Reply
    • Alex Newton on October 19, 2018 9:18 PM

      You might have used incorrect library.

      Reply
  2. manuel on November 11, 2018 11:59 AM

    what is the type of log file?
    can i download the log as CSV file?

    Reply
    • Nafiul on March 9, 2019 2:02 PM

      How can i download data as a attendance data sheet?

      Reply
  3. Shahulhameed on January 10, 2019 7:28 AM

    How to expand the storage for enrolling more than 100 students attendance for one month.

    Reply
    • Alex Newton on January 10, 2019 11:40 AM

      it can store 200 fingerprint.

      Reply
  4. shahulhameed on January 16, 2019 9:59 AM

    i downloaded the library file from this link, but ‘RTC_DS3231’ does not name a type
    why this error occur…????

    Reply
  5. Trisha on January 23, 2019 11:01 AM

    Can i use an sd card instead of an eeprom?

    Reply
    • Alex Newton on January 23, 2019 2:49 PM

      You can add additional sd card. EEPROM is used for R305 Finger image storage.

      Reply
  6. M D NAIDU on January 23, 2019 6:34 PM

    Hellooo
    Can any one please provide code for GSM module interface with above project code

    Reply
  7. M D NAIDU on January 23, 2019 6:40 PM

    I need code for above project with GSM sim900 module for my final year project
    Please can anyone help to me
    [email protected]

    Reply
    • rajkumar on April 3, 2019 6:09 AM

      can you provide the code to connect this project to iot plzz…or any webpage

      Reply
  8. Ajmal on January 27, 2019 10:52 PM

    The uploading is error due to high size of programme. How to overcome that?

    Reply
  9. Sendhu on January 28, 2019 10:48 AM

    Can anyone say why the eeprom is incremented by 210?

    Reply
  10. Alex Cookiecream on February 10, 2019 9:46 PM

    When I entered the code, the lcd blinks alternatively with the fingerprint scanner and it does not show any characters. I already checked the wirings and the code, still not fixed. Someone help me.

    Reply
  11. ovi mahmud on February 18, 2019 4:21 PM

    i downloaded the library file from your link, but shows ……‘RTC_DS3231’ does not name a type

    Reply
  12. Parthvi Kher on February 23, 2019 7:16 PM

    Hey,

    It shows nothing after “Attendance System” on the LCD and ” sensor found” on serial monitor. Also, I am using Mega 2560 board instead of Uno.

    Reply
    • Alex Newton on February 23, 2019 11:06 PM

      Did you check your software serial pin of Mega. All the pins doesn’t support interrupt. Assign correct software serial pin.

      Reply
  13. Nihal on March 5, 2019 4:28 PM

    Nothing is displaying on the LCD please help

    Reply
  14. Nafiul on March 9, 2019 2:06 PM

    when i push enroll button and arduino reset button at the same time, it always takes reset, not downloading the data, what can i do now pease help…

    Reply
  15. Hieu on April 14, 2019 9:12 AM

    hello I got error code like this:
    C:\Users\Hieupham\Desktop\sketch_apr08a\sketch_apr12a\sketch_apr12a\sketch_apr12a\sketch_apr12a\sketch_apr13a\sketch_apr13a.ino: In function ‘uint8_t getFingerprintEnroll()’:

    C:\Users\Hieupham\Desktop\sketch_apr08a\sketch_apr12a\sketch_apr12a\sketch_apr12a\sketch_apr12a\sketch_apr13a\sketch_apr13a.ino:527:1: warning: return-statement with no value, in function returning ‘uint8_t {aka unsigned char}’ [-fpermissive]

    return;

    ^

    Reply
  16. lyrhoortal on May 4, 2019 6:07 AM

    Pls Help the code is not okay

    Reply
  17. awol on May 5, 2019 1:14 PM

    I need code for above project with arduino uno software for my semister(4yr) project.
    Please can anyone help to me,
    [email protected]

    Reply
  18. Garv on August 11, 2019 5:19 PM

    if anyone is having prob with RTC_DS3231/1307 then just remove the space between RTC_DS3231/1307 and rtc and then the line will look like this:

    RTC_DS1307rtc;

    Reply
  19. Shinteri on August 24, 2019 8:57 AM

    Why does your diagram circuit doesnt same with your real project….and what wire did u use. With head or just wire?

    Reply
    • Alex Newton on August 24, 2019 8:58 AM

      Its the same circuit diagram. The circuit depends upon coding and pin assignment. If you are making this project, go with the same circuit.

      Reply
    • shinteri on August 28, 2019 11:07 AM

      hello sir, may i ask u for the coding i want to ask you something. i have download the zip.file for fingerprint and rtc module. how to include that zip file…..help me

      Reply
      • Alex Newton on August 28, 2019 11:13 AM

        Through library manager

  20. sum on September 10, 2019 8:22 PM

    can i use other fingerprinit module? also a adafruitfingerprint

    Reply
    • Alex Newton on September 10, 2019 8:28 PM

      Yes R305, R307 or Adafruit Fingerprint Senspr can be used.

      Reply
  21. Naveenkumar on September 10, 2019 8:32 PM

    Sir,Nothing is displaying in lcd lcd screen.pls help

    Reply
    • Alex Newton on September 10, 2019 8:34 PM

      Check lcd connection with arduino and also recheck with program code. Also use 10k potentiometer at pin 3 of lcd to adjust the contrast.

      Reply
  22. Tugino on September 14, 2019 11:30 PM

    no data in serial!

    Reply
    • Alex Newton on September 14, 2019 11:31 PM

      Check baud rate. Set it to 9600.

      Reply
  23. Sum on September 16, 2019 6:37 PM

    I press the register and reset button at the same time, but cant download the data.

    Reply
  24. HING on September 21, 2019 9:01 PM

    I press the register and reset button at the same time, but cant download the data.

    Reply
  25. HING BING CHEN on September 22, 2019 5:46 AM

    why i cannot downloading the data??

    Reply
    • Alex Newton on September 22, 2019 9:29 AM

      If you are unable to download the data, then try this code. https://drive.google.com/open?id=13JE8boYp-cXQltzA6UmHC7J5ILtOX2d5
      Don’t forget to change the pin assignment according to this code and your hardware pin mapping.

      Reply
      • HING BING CHEN on September 22, 2019 4:37 PM

        already can download but when download data, data of user 5 will shown the time and date although i have not taking attendance of user 5

      • Alex Newton on September 22, 2019 4:37 PM

        Modify the code according to num of users.

  26. suman on September 24, 2019 6:27 AM

    sir when i change time and date in coding but in LCD not change.

    Reply
  27. Gagan on October 10, 2019 1:48 PM

    Hey, can you please tell me how many students can i enroll by this fingerprint based attendance system bcz in one website i saw that only 4 persons could be enrolled bcz arduino has only 1024 bytes & i want to enroll at least 60 students so is it possible? Please reply ASAP. Thanks!

    Reply
    • Alex Newton on October 10, 2019 1:49 PM

      200 fingerprints can be stored. Fingerprints data get stored in FIngerprint Sensor EEPROM not in Arduino Memory.

      Reply
  28. Fuse Box on October 25, 2019 8:44 PM

    Why does it not download data when I press the register and reset button at the same time? It only resets every time.

    Reply
    • Alex Newton on October 25, 2019 8:54 PM

      Those who are having the problem of downloading fingerprint data. Please try with this code https://drive.google.com/open?id=1YVyGnCoR3KfHjFFrMdyf7a63Z-fED4Wy.
      Note: Modify code or the circuit according to pin assignment.

      Reply
  29. dilsh on October 28, 2019 10:42 PM

    shorturl.at/anvJY
    Can I use this fingerprint module.Please check this module and let me know.I need to do this project.Please reply me as soon as possible.

    Reply
  30. Dilsh on October 29, 2019 11:22 AM

    shorturl.at/ltxR2 Can I use this sensor module instead of using R305. Please reply me as soon as you can. Because I need to do this as my project.

    Reply
    • Alex Newton on October 29, 2019 11:32 AM

      You can try

      Reply
  31. Aakaash on December 13, 2019 6:44 PM

    When I try to download the data to the serial monitor, I get the attendance logs, but say if I scanned my finger (User 1) only say 5 times, I should get only those date and times. But alongwith it a fixed value for all the records until 30 which I didn’t use.
    What needs to be corrected? Please help.

    Reply
  32. Aakaash on December 13, 2019 7:03 PM

    I am able to download the data to the serial monitor. But alongwith the records where the fingers have actually been scanned, a fixed unrelated value is also being displayed, instead of dashes. What needs to be corrected here? Please help.

    Reply
  33. Victoria on February 25, 2020 8:10 AM

    Please, when I verify it, it says
    “download not declared in this scope”
    “I not declared in this scope”
    Please how can I come about it
    Please is urgent.

    Reply
  34. hakimi amir on March 3, 2020 7:39 PM

    Hello sir if on the display said module not found check connection what i need to d0

    Reply
    • Mr. Alam on March 3, 2020 7:41 PM

      Check connection of fingerprint sensor.
      Check whether you have reversed the tx rx connection.

      Reply
  35. Sudheer on March 5, 2020 1:08 AM

    I given connection correctly but it’s coming finger print module does not found give suggestions for it

    Reply
  36. Sahil verma on March 10, 2020 10:52 AM

    I also face this same problem how to fix it plz tell sir

    Reply
  37. Sahil verma on March 10, 2020 12:22 PM

    I will also use a second code which you can provide us but in it the lcd error is occur and can’t download data plz tell us

    Reply
  38. Sahil verma on March 10, 2020 1:58 PM

    Plz tell sir now what I can do I made all project but when I get data I can’t download it plz tell some solution

    Reply
  39. Solution is Science on July 23, 2020 3:27 PM

    Hello sir…once…i did message you for help…now can you help me in completing this circuit…i did buy things that needed for this fingerprint…but some are not exactly same as yours…my old teacher said even the component is diffrent…..the usage of that things still same….but because of differences make me headache to choose wether to follow the diagram or needed to change a little bit…also about the coding…when the items is diffrent…does i need to change a little bit the coding….and the important one….does you have heart to help me completing this project until it done 100%? I have the skills to loop…but in coding i was weak actually….so if you can teach and guide me…i would love that 100%….i hope i can finish back this project that have been let go for long time…..😊

    Reply
  40. ivan raju on October 31, 2020 6:52 PM

    still cant get it

    Reply
  41. Jilani Safdar on January 22, 2021 7:14 PM

    you should add the RTC lib not this one only that mentioned

    Reply
  42. sahal imran on February 21, 2021 5:35 PM

    hi bro!
    Arduino is not downloading the data
    please help

    Reply
  43. Uttam Darji on March 9, 2021 6:37 PM

    you get the solution of your problem?
    because i have a same problem.

    Reply
  44. Deepak on September 30, 2021 3:09 PM

    Is it possible to add seperate download button to this system bcs, the arduino is resetting when we click reset button

    Reply
  45. Deepak on September 30, 2021 3:11 PM

    Me too need help

    Reply
  46. Ajele maxwell on December 16, 2021 4:44 PM

    I need a visual studio code for combating crime in a rural area.crime like sea parite,arm robering

    Reply
  47. Pranae H2E on March 25, 2022 1:24 PM

    Is there a way to set a name for each ID/finger registered?
    Like if someone puts their finger to be scanned, can it say “welcome, student (name)”?

    Reply
  48. Subrat Biswaal on May 10, 2022 6:26 PM

    Can I buy this project

    Reply
  49. Vedant Nawkarkar on May 13, 2022 11:14 AM

    can you provide proteus model for this project please?

    Reply
  50. Manjunath on May 24, 2022 4:23 PM

    I’m getting an error in the code
    How do i go further

    Reply
  51. Niharika Vankireddy on June 11, 2022 2:17 PM

    We are getting the error in uploading the code only 85% is getting uploaded

    Reply
  52. Freeman on August 25, 2022 6:44 AM

    when I try to use the code you provided, I get an error message saying: available memory is low, errors may occur…
    what is the solution to this problem

    Reply
  53. samplustech on September 23, 2022 4:55 AM

    DO you sell already constructed one.

    Reply
  54. jamyang chophel on November 24, 2022 9:59 AM

    is it possible to appear the recorded data at exel

    Reply
  55. Lindsae Valdez on November 25, 2022 1:56 PM

    Hello have you tried using this with TFT LCD Touch Screen?

    Reply
  56. Eshetu Geletu on December 4, 2022 1:03 PM

    guys how i can download the source code

    Reply
  57. rahulhrm on April 7, 2023 8:04 AM

    I have used a biometric attendance system of my organization, can you please share the list of best attendance system.

    Reply
  58. rix on May 1, 2023 6:38 AM

    I have used i2c module in attendance system and rtc as 1307 how i can get the output?

    Reply

CommentsCancel reply

Latest Posts
IoT Based PM & Air Quality Monitoring System using ESP32

IoT Based PM & Air Quality Monitoring System using ESP32

May 31, 2026
DIY ESP32 MLX90640 IR Thermal Camera with Live Web Display

DIY ESP32 MLX90640 IR Thermal Camera with Live Web Display

May 10, 2026
IoT Activity Tracker with ESP32 & Accelerometer Gyroscope

IoT Activity Tracker with ESP32 & Accelerometer/Gyroscope

May 2, 2026
A Guide to Sourcing Obsolete ICs for Vintage Projects

Beyond AliExpress: A Guide to Sourcing Obsolete ICs for Vintage Projects

April 21, 2026

ESP32 IoT Vehicle Motion Analyzer with MPU6050 & LIS3MDL

April 27, 2026
Building a Smart Sensor Node with a BLE Microcontroller

Building a Smart Sensor Node with a BLE Microcontroller

February 26, 2026
High-Accuracy Pitch, Roll, Yaw with ESP32 & BNO08x IMU

High-Accuracy Pitch, Roll, Yaw with ESP32 & BNO08x IMU

April 27, 2026
DIY Colorimeter using AS7265x Spectroscopy Sensor & ESP32

DIY Colorimeter using AS7265x Spectroscopy Sensor & ESP32

February 1, 2026
Top Posts & Pages
  • IoT Based PM & Air Quality Monitoring System using ESP32
    IoT Based PM & Air Quality Monitoring System using ESP32
  • 12V DC to 220V AC Inverter Circuit & PCB
    12V DC to 220V AC Inverter Circuit & PCB
  • IoT AC Energy Meter with PZEM-004T & ESP32 WebServer
    IoT AC Energy Meter with PZEM-004T & ESP32 WebServer
  • Buck Converter: Basics, Working, Design & Application
    Buck Converter: Basics, Working, Design & Application
  • LD2410 Sensor with ESP32 - Human Presence Detection
    LD2410 Sensor with ESP32 - Human Presence Detection
  • ECG Graph Monitoring with AD8232 ECG Sensor & Arduino
    ECG Graph Monitoring with AD8232 ECG Sensor & Arduino
  • ESP32 CAN Bus Tutorial | Interfacing MCP2515 CAN Module with ESP32
    ESP32 CAN Bus Tutorial | Interfacing MCP2515 CAN Module with ESP32
  • L293D Dual H-Bridge Motor Driver IC Pins, Circuit, Working
    L293D Dual H-Bridge Motor Driver IC Pins, Circuit, Working
Categories
  • Arduino Projects (197)
  • Articles (60)
    • Learn Electronics (19)
    • Product Review (15)
    • Tech Articles (28)
  • Electronics Circuits (46)
    • 555 Timer Projects (21)
    • Op-Amp Circuits (7)
    • Power Electronics (13)
  • IoT Projects (204)
    • ESP32 MicroPython (7)
    • ESP32 Projects (81)
    • ESP32-CAM Projects (15)
    • ESP8266 Projects (76)
    • LoRa/LoRaWAN Projects (22)
  • Microcontrollers (38)
    • AMB82-Mini IoT AI Camera (4)
    • BLE Projects (18)
    • STM32 Projects (19)
  • Raspberry Pi (93)
    • Raspberry Pi Pico Projects (57)
    • Raspberry Pi Pico W Projects (12)
    • Raspberry Pi Projects (24)
Follow Us
  • Facebook
  • Twitter
  • Pinterest
  • Instagram
  • YouTube
About Us

“‘How to Electronics’ is a vibrant community for electronics enthusiasts and professionals. We deliver latest insights in areas such as Embedded Systems, Power Electronics, AI, IoT, and Robotics. Our goal is to stimulate innovation and provide practical solutions for students, organizations, and industries. Join us to transform learning into a joyful journey of discovery and innovation.

Copyright © How To Electronics. All rights reserved.
  • About Us
  • Disclaimer
  • Privacy Policy
  • Contact Us
  • Advertise With Us

Type above and press Enter to search. Press Esc to cancel.

Ad Blocker Enabled!
Ad Blocker Enabled!
Looks like you're using an ad blocker. Please allow ads on our site. We rely on advertising to help fund our site.