0% found this document useful (0 votes)
66 views35 pages

Biometric Attendance System With Automatic Voice Messages Using Arduino Report

This document describes a biometric attendance system that uses fingerprint scanning and voice messages. The system scans fingerprints to record attendance data with date and time. It also acts as a security system by only allowing authorized people. To improve the user experience, it provides automated voice messages to guide the user. The system uses an Arduino, fingerprint module, LCD display, buttons, LED, buzzer, and speaker. It takes fingerprint images and converts them into templates to store in memory with user IDs. Voice prompts are generated to instruct users through the enrollment and attendance processes.

Uploaded by

Amshuman Gk
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
66 views35 pages

Biometric Attendance System With Automatic Voice Messages Using Arduino Report

This document describes a biometric attendance system that uses fingerprint scanning and voice messages. The system scans fingerprints to record attendance data with date and time. It also acts as a security system by only allowing authorized people. To improve the user experience, it provides automated voice messages to guide the user. The system uses an Arduino, fingerprint module, LCD display, buttons, LED, buzzer, and speaker. It takes fingerprint images and converts them into templates to store in memory with user IDs. Voice prompts are generated to instruct users through the enrollment and attendance processes.

Uploaded by

Amshuman Gk
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 35

1

BIOMETRIC ATTENDANCE SYSTEM WITH


AUTOMATIC VOICE MESSAGES USING ARDUINO

By

AMSHUMAN G 18BEC1075

MAHESH JAYARAMAN 18BEC1143

J KIRON 18BEC1150

B VISWESHWARAN 18BEC1152

A project report submitted to


Prof. B. Chanthini
SCHOOL OF ELECTRONICS ENGINEERING
in partial fulfilment of the requirements for the course of
ECE 4003 – EMBEDDED SYSTEM DESIGN
in
B.Tech. ELECTRONICS AND COMMUNICATION
ENGINEERING

VELLORE INSTITUTE OF TECHNOLOGY, CHENNAI


Vandalur – Kelambakkam Road
Chennai – 600127
DECEMBER 2021
2

BONAFIDE CERTIFICATE

Certified that this project report entitled “Biometric Attendance System with
Automatic Voice Messages using Arduino” is a bonafide work of
AMSHUMAN G (18BEC1075), MAHESH JAYARAMAN (18BEC1143), J
KIRON (18BEC1150) and B VISWESHWARAN (18BEC1152) who carried
out the Project work under my supervision and guidance for ECE4003:
Embedded System Design.

Prof. B. CHANTHINI

Associate Professor

School of Electronics Engineering (SENSE),

Vellore Institute of Technology, Chennai– 600 127.


3

ABSTRACT

In this project we implement a biometric attendance system that scans


for fingerprints to record and store attendance data with the date and
time of entry. It is also used as a security system that allows access to
authorized people only. To improve the quality of life of the user,
custom automated voice messages are used to welcome or guide the
user through the process. We use the fingerprint module to scan or input
the fingerprint templates of the user. After storing their fingerprint, the
users can now use it to gain access into their place of work where the
system will record the date and time of entry of the person. Along with
this, a speaker is used to give voice messages. Audio encoding software
such as audacity is used to convert AI based MP3 audio file to convert
into 16-bit PCM. This can be utilized with help of PCM library on
Arduino IDE. With the use of 4 buttons; ENROLL, OK/DEL, UP and
DOWN users can navigate their way around this simple but cost-
effective system. Administrator can view, delete the attendance log at
any point of time. With a EEPROM of 1 KB, we can store 7 bytes of
date and time data for 4 different users up to 30 entries at any given
time. With increased memory, higher number of people can be
enrolled.
4

ACKNOWLEDGEMENT

We wish to express our sincere thanks and deep sense of gratitude to our project
guide, Prof. B. Chanthini, Associate Professor, School of Electronics
Engineering, for her consistent encouragement and valuable guidance offered to
us in a pleasant manner throughout the course of the project work.

We are extremely grateful to, Dr. Sivasubramanian. A Dean of the School of


Electronics Engineering, Vellore Institute of Technology, Chennai, for extending
the facilities of the school towards our project and for her unstinting support.

We express our thanks to our Head of the Department Dr. Vetrivelan. P for his
support throughout the course of this project. We also take this opportunity to
thank all the faculty of the school for their support and their wisdom imparted to
us throughout the course.

We thank our parents, family, and friends for bearing with us throughout the
course of our project and for the opportunity they provided us in undergoing this
course in such a prestigious institution.

AMSHUMAN G MAHESH JAYARAMAN J KIRON B VISWESHWARAN


5

TABLE OF CONTENTS

SERIAL CHAPTER NAME PAGE


NO. NO.
ABSTRACT 3
ACKNOWLEDGEMENT 4

1 INTRODUCTION 6

1.1 OBJECTIVES AND GOALS 6


1.2 BENEFITS 6
1.3 FEATURES 6

2 DESIGN 7-14
2.1 BLOCK DIAGRAM 7
2.2 CIRCUIT DIAGRAM 8
2.3 HARDWARE ANALYSIS 8-14

3 IMPLEMENTATION AND RESULTS 15-33

3.1 SOURCE CODE 15-28


3.2 SOFTWARE SIMULATION RESULTS 29-31

3.3 HARDWARE SIMULATION RESULTS 32-33

4 CONCLUSION AND FUTURE WORKS 34


4.1 CONCLUSION 34

4.2 FUTURE WORK 34


5 REFERENCES 35
6

CHAPTER 1

INTRODUCTION

1.1 OBJECTIVES AND GOALS

The objective of the project is to implement a biometric attendance system that


scans for fingerprints to record and store attendance data with the date and time
of entry. It is also used as a security system that allows access to authorized people
only. To improve the quality of life of the user, custom automated voice messages
are used to welcome or guide the user through the process.

1.2 PROJECT DESCRIPTION

We used the Fingerprint Sensor module in this biometric systems circuit to


validate a real person or employee by capturing their finger input into the system.
We're utilising four push buttons to enrol, delete, and go up and down. The
ENROLL and DEL keys have three functions. The ENROLL key is used to
register a new user in the system. When the user wants to enrol a new finger, he
or she must first press the ENROLL key, after which the LCD will ask for the ID,
which will be used to store the finger print image. If the user does not wish to
continue, he or she can press the ENROLL key again to return to the previous
screen. This time, the ENROLL key acts as a Back key, i.e., the ENROLL key
serves as both an enrolment and a back key. In addition to enrolling, the enrol key
is used to obtain attendance data from a serial monitor. Similarly, the DEL/OK
key serves a dual purpose, as when a user enrols a new finger, he or she must
select a finger ID using another two keys, notably UP and DOWN. To proceed
with the selected ID, the user must press the DEL/OK key (this time this key
behaves like OK). The Del key is used to reset or remove data from the Arduino's
EEPROM. The fingerprint sensor module collects the image of a finger's print,
turns it into an analogous template, and saves it in memory according to the ID
set by Arduino. All of the processes, such as capturing a picture of a finger's print,
converting it into templates, and saving it as an ID, are controlled by Arduino. A
yellow LED has been put here to signal that the fingerprint module is ready to
take an image of the finger. For various indicators, a buzzer is also used. The
major component of this system is the Arduino, which is in charge of system
control. In addition to this, a speaker is used to guide the user
7

CHAPTER 2

DESIGN

2.1 Block Diagram

The three main features of the basic block diagram (given below) are

- Arduino UNO
- 16x2 LCD
- Fingerprint module
- Speaker

Each of the above units may consist of the sensory units, communication
modules, etc.

Figure 1: Block Diagram


8

2.2 Circuit Diagram

The circuit diagram of the system has been depicted in Figure 2. It was designed
using Proteus.

Figure 2 a: Circuit Diagram on Proteus

Figure 2 b: Real-time circuitry


9

Figure 2c: PCB Layout on EasyEDA

2.3 Hardware Analysis

2.3.1 Arduino Uno


Arduino Uno is a microcontroller board based on the Microchip ATmega328P. The
board is equipped with sets of digital and analog I/O pins that may be interfaced to
various expansion boards and other circuits. Unlike most previous programmable
circuit boards, the Arduino does not need separate piece of hardware in order to load
new code onto the board and additionally, the Arduino IDE uses a simplified version of
C++, making it easier to learn to program. The pin configuration of the the Arduino is
depicted in Table 1.

Figure 3: Arduino UNO


10

Pin Configuration

Pin Name Description

3V3, 5V Power Supply Input

GND Power Supply Ground

Reset Reset the microcontroller

A0-A5 Analog input (range 0-5V)

TX0 UART pin is a transmitter

RX0 UART pin is a receiver

D2-D3 Used to produce the external interrupt

D3-D11 PMW pins used to convert digital signal into


varying width of the pulse

SS: pin D10 Used as a slave select

MOSI: pin D11 Used as Master out Slave in

MISO: pin D12 Used as Master In Slave Out

SCK: pin D13 Used as serial clock

LED pin: D13 Inbuilt LED which glows when the digita pin
becomes high

AREF Used to provide a reference voltage, from


exterior power supply

Table 1: Pin configuration of Arduino Uno


11

2.3.2 Fingerprint Module

Fingerprint sensor module captures finger’s print image and then converts it into
the equivalent template and saves them into its memory as per selected ID by
Arduino. All the process is commanded by Arduino like taking an image of
finger’s print, convert it into templates and storing as ID etc. can check some
more projects using fingerprint module.

Figure 4: R305 Finger Print Module Figure 5: 16 x 2 LCD

2.3.3 16x2 LCD:

An LCD is an electronic display module which uses liquid crystal to produce a


visible image. The 16×2 LCD display is a very basic module commonly used
in DIYs and circuits. The 16×2 translates displays 16 characters per line in 2 such
lines. In this LCD each character is displayed in a 5×8-pixel matrix. The pin
configuration of LCD is mentioned in Table 2.

Features of 16×2 LCD module


• Operating Voltage is 4.7V to 5.3V
• Current consumption is 1mA without backlight
• Alphanumeric LCD display module, meaning can display alphabets and
numbers
• Consists of two rows and each row can print 16 characters.
• Each character is built by a 5×8-pixel box
• Can work on both 8-bit and 4-bit mode
• It can also display any custom generated characters
• Available in Green and Blue Backlight
12

Pin Configuration

Pin
Name
No. Function

1 Ground (0V) Ground

2 Supply voltage; 5V (4.7V – 5.3V) Vcc

Contrast adjustment; the best way is to use a variable resistor such as


a potentiometer. The output of the potentiometer is connected to this
3 Vo / VEE
pin. Rotate the potentiometer knob forward and backwards to adjust
the LCD contrast.

RS (Register
4 Selects command register when low, and data register when high
Select )
5 Low to write to the register; High to read from the register Read/write
Sends data to data pins when a high to low pulse is given; Extra voltage
push is required to execute the instruction and EN(enable) signal is
6 used for this purpose. Usually, we make it en=0 and when we want to Enable
execute the instruction we make it high en=1 for some milliseconds.
After this we again make it ground that is, en=0.
7 DB0
8 DB1
9 DB2
10 DB3
8-bit data pins
11 DB4
12 DB5
13 DB6
14 DB7
15 Backlight VCC (5V) Led+
16 Backlight Ground (0V) Led-
Table 2: Pin configuration of LCD
13

2.3.4 RTC Module

Real Time Clock modules are simple TIME and DATE remembering systems.
They have battery setup which in the absence of external power keeps the
module running. This keeps the TIME and DATE up to date.

Figure 6: DS3231 RTS Module


Pin Name Description

VCC Connected to positive of power


source

GND Power Supply Ground

SDA Serial Data pin (I2C interface)

SCL Serial Clock pin (I2C interface)

SQW Square Wave output pin

32K 32K oscillator output

2.3.4 Push Button

The pushbutton is a component that connects two points in a circuit when it is


pressed. The basic example is when the button is pressed LED turns on.

Figure 7: 4-pin Push button


14

2.3.5 Buzzer

The buzzer produces the same noise sound irrespective of the voltage variation
applied to it. It consists of piezo crystals between two conductors, when a
potential is applied across these crystals, they push on one conductor and pull
on the other. This, push and pull action, results in a sound wave. Most buzzers
produce sound in the range of 2 to 4kHz.

Figure 8: Piezoelectric buzzer

2.3.6 Speaker

The ISD1820 recording module voice board is a way to add voice recording.
The module can be operated directly by using the 3 Push-Buttons or with every
microcontroller.

Specification and Features of ISD1820 Voice Recording Module:


• The main chip: ISD1820.
• Dimensions: 43 x 34 x 11 (LxWxH) mm.
• The working voltage: DC 3V-5V.
• Loudspeaker: 8 Ohm, 0.5W.
• High-quality, natural voice restored.
• With looping, jog playback, single-pass play function.
• This module can directly drive a small speaker 8 ohm 0.5W.
• Power supply: 3-5V, which can be accessed pin power.
• Audio recording control mode: the key to control or microcontroller, IO
has drawn the line of control.
15

CHAPTER 3
IMPLEMENTATION & RESULTS

The software used to complete the project is Arduino IDE, Proteus Simulator and
EasyEDA.

3.1 Source Code


#include<EEPROM.h>
#include<LiquidCrystal.h>
LiquidCrystal lcd(12, 10, 5, 4, 8, 7);
#include <SoftwareSerial.h>
SoftwareSerial fingerPrint(2, 3);
#include <PCM.h>
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
#include <PCM.h>
DateTime now;
int flag = 1;
const unsigned char sample[] PROGMEM = { “16bit pcm code for given mp3 file” };

#include "Adafruit_Fingerprint.h"
uint8_t id;
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&fingerPrint);

#define enroll A0
#define del A1
#define up A2
#define down A3
#define indFinger 7
int Contrast = 60;
#define buzzer 9
#define records 4 // 5 for 5 user
int user1,user2,user3,user4,user5;

void setup()
{

delay(1000);
analogWrite(6, Contrast);
lcd.begin(16,2);
Serial.begin(9600);
pinMode(enroll, INPUT_PULLUP);
pinMode(up, INPUT_PULLUP);
pinMode(down, INPUT_PULLUP);
pinMode(del, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);
pinMode(indFinger, OUTPUT);
16

digitalWrite(buzzer, LOW);
if(digitalRead(enroll) == 1)
{
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer, LOW);
lcd.clear();
lcd.print("Please wait");
lcd.setCursor(0,1);
lcd.print("Downloading 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; // 5th user
// download(eepIndex);
Serial.println();
}
}
if(digitalRead(del) == 1)
{
lcd.clear();
lcd.print("Please Wait");
17

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(" Attendance ");
lcd.setCursor(0,1);
lcd.print(" System ");
delay(2000);
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(1000);
if (finger.verifyPassword())
{
Serial.println("Found fingerprint sensor!");
lcd.clear();
lcd.print("Found Module ");
delay(1000);
}
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())
18

Serial.println("Couldn't find RTC");


//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

if (! rtc.isrunning())
{
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}

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()
{
lcd.clear();
now = rtc.now();
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
//rtc.adjust(DateTime(now.unixtime()+10));

//rtc.adjust(DateTime(__DATE__, __TIME__));
//DateTime t = DateTime(rtc.now().unixtime()+7);
//rtc.adjust(t);
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();
19

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");

startPlayback(sample, sizeof(sample));

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

user=user4++;
}
/*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(enroll) == 0)
{
lcd.clear();
lcd.print("Please Wait");
delay(1000);
while(digitalRead(enroll) == 0);
Enroll();
}

else if(digitalRead(del) == 0)
{
lcd.clear();
lcd.print("Please Wait");
delay(1000);
delet();
}
}

void Enroll()
{
int count=1;
lcd.clear();
21

lcd.print("Enter Finger ID:");

while(1)
{
lcd.setCursor(0,1);
lcd.print(count);
if(digitalRead(up) == 0)
{
count++;
if(count>records)
count=1;
delay(500);
}

else if(digitalRead(down) == 0)
{
count--;
if(count<1)
count=records;
delay(500);
}
else if(digitalRead(del) == 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(enroll) == 0)
{
return;
}
}
}

void delet()
{
int count=1;
lcd.clear();
lcd.print("Enter Finger ID");

while(1)
22

{
lcd.setCursor(0,1);
lcd.print(count);
if(digitalRead(up) == 0)
{
count++;
if(count>records)
count=1;
delay(500);
}

else if(digitalRead(down) == 0)
{
count--;
if(count<1)
count=records;
delay(500);
}
else if(digitalRead(del) == 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(enroll) == 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)
23

{
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");
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");
24

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");
delay(1000);
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:
25

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!");
26

lcd.clear();
lcd.print("Stored!");
delay(2000);
lcd.clear();
} 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;
27

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++));
28

Serial.print('/');
Serial.print(EEPROM.read(eepIndex++)<<8 | EEPROM.read(eepIndex++));
}
else
{
Serial.print("---------------------------");
}

Serial.print(" ");
}
29

3.2 Software Simulation Results

Figure 9a: Initial Attendance Record


30

Figure 9b: Deletion and Storing of Fingerprints

Figure 9c: Attendance being registered


31

Figure 9d: Updated attendance log


32

3.3 Hardware Simulation Results

Figure 10a: Starting up

Figure 10b: RTC Module’s time date output


33

Figure 10c: Deletion Operation

Figure 10d: Storing Operation

Figure 10e: Attendance Registration


34

CHAPTER 4
CONCLUSION AND FUTURE WORK

4.1 Conclusion

An efficient method to keep track of attendance and also impart security to a


facility is achieved using this project. The biometric system is one of the best
ways to ensure safety since fingerprints are hard to duplicate. The date and time
of entry is also stored, which enables us to mark attendance for the people of the
facility. To add to this, for the purpose of assisting people, voice messages are
incorporated during the process of usage of the system. Furthermore, the system
can be made better by adding a few more things. The future scope of this
technology is wide spread and quite essential in both domestic and industrial
applications. We could improve the system by adding temperature recorder which
will be of great use in this COVID period. . Further enhancing the system, the
designed system can be interfaced with camera and GSM module through which
we will be able to send SMS to the parents/security persons/concerned staff so as
to take care of the attendance if any false entry is made or when recognized by
unauthorized user. This enables the added advantage to the person concerned/in-
charge for monitoring attendance of students/employees. Through this the
institute/organization is all time ready with the record of attendance of all the
students/employees anytime.

4.2 Future work

1. The Infrared sensor can be used for mapping of the environment and detect
objects.
2. The sensor can be used for vehicles as parking sensors which can be used
for detecting walls and other vehicles.
3. The sensor can also be used as a radar of the environment to detect
movements and can also be placed in safe places of the pipelines to detect
any leaks in the pipeline.
4. Ships can use more accurate and bigger sensors to gain vision deep inside
the ocean. Enemy Submarines can also be detected using this sensor.
5. It can also be used as a home theft alert system as the two sensors can be
used to detect a person entering the room and vice -versa.
35

CHAPTER 5

REFERENCES

• Getting started with Arduino UNO by Arduino.cc. Link:


https://www.arduino.cc/en/Guide/ArduinoUno
• How to Set Up Fingerprint Sensor With Arduino by Arduino project hub.
Link: https://create.arduino.cc/projecthub/MissionCritical/how-to-set-up-
fingerprint-sensor-with-arduino-ebd543
• ATMega328p Datasheet by Alldatasheet.com. Link:
https://pdf1.alldatasheet.com/datasheetpdf/view/241077/ATMEL/ATME
GA328P.html
• Arduino UNO R3 Libraries by Arduino.cc. Link:
https://www.arduino.cc/reference/en/libraries/
• Text to Speech using Arduino Uno, Lalit Kumar et. Al, International
Journal of Engineering Science and Computing, Volume 11 Issue No.01,
January 2021.
Link:https://ijesc.org/upload/0744dcd475df082d0feada7ff70a5717.Text%
20to%20Speech%20using%20Arduino%20Uno.pdf
• MP3 to 16-bit PCM using audio encoder on Arduino UNO Link:
https://www.instructables.com/Talking-Arduino-Playing-a-MP3-With-
Arduino-Without/

You might also like