finger print based biometric application

Upload: veeramaniks408

Post on 15-Oct-2015

50 views

Category:

Documents


0 download

DESCRIPTION

Embedded system

TRANSCRIPT

  • MINIPROJECT DOCUMENTATION ON FINGER PRINT MODULE BIO METRIC

    MICRO CONTROLLER INTERFACE BY T.SHRAVANI(07245A0403)

    BATCH: 2007-2011

    DEPARTMENT OF ELECTRONICS AND COMMUNICATION ENGINEERING

    GOKARAJU RANGARAJU INSTITUTE OF ENGINEERING AND TECHNOLOGY

    (Affiliated to Jawaharlal Nehru Technological University) HYDERABAD 500 072

    ABSTRACT:

  • Biometrics can be seen as a solution to a lot of the user identification and security problems in todays networks.Reliable personal recognition is critical to many business processes. Biometrics refers to automatic Recognition of an individual based on their behavioral and/or physiological characteristics. Biometrics removes human error from the security equation. Fingerprint identification is one such method in biometrics.

    Steps involved in Finger print identification:

    Finger Print enrollment through system. Enrolled user places his/her Finger on the Finger sensor for checking IN/OUT

    (Authentication). The terminal compares live finger with the finger stored on built-in memory and checks

    for a match. When a match is found the Authentication is successful and the user is given access.

    1. INTRODUCTION:

    1.1 AIM OF THIS PROJECT: Finger Print Module-Microcontroller Interfacing authenticates using finger print of user. All users are enrolled using the system and our project checks for authentication. 1.2 BLOCKDIAGRAM

  • 1.3 HARDWARE REQUIREMENTS:

    The prototype of the present Embedded System has the following resources:

    Finger print module (FIM3030N) Robo Board Power supply circuit

    Resistors Capacitors Diodes FETs ATmega 8515 chip Crystal oscillator Potentiometer LCD-Liquid Crystal Display

    LCD

    Power supply

    Finger Print Module

    ATMEGA

    8515

  • LEDs-Light Emitting Diodes Switches RegulatorJumpers

    al communication

    , wireless communication.

    Max 232 IC for seriReset button ICs for motor

  • The above resources excluding the fingerprint identification module are placed over a general

    PORTC lower nibble 2,3 pins used as control lines for LCD.

    PORTC upper nibble used as data lines for LCD.

    PORTC pins 0 and 1 used for switches.

    FINGERPRINT MODULE:

    fingerprint is an impression of the friction ridges of all or any part of the finger. A friction

    FINGERPRINT IDENTIFICATION MECHANISM:

    Fingerprint-based identification can be placed into two categories depending on the type of

    Minutiae-based matching (Analyzing the local structure)

    Global pattern matching (Analyzing the global structures)

    Currently the computer aided fingerprint recognition is using the minutiae-based matching.

    These minutiae points are represented by a cloud of dots in a coordination system. They are

    robocon PCB board and soldered accordingly.

    Aridge is a raised portion of the epidermis on the pal mar(palm and fingers) or plantar (sole and toes) skin, consisting of one or more connected ridge units of friction ridge skin. These ridges are sometimes known as dermal ridges or dermal papillae.

    parameter used for comparison.

    Minutiae points are local ridge characteristics and appear as either a ridge ending or a ridge bifurcation. The uniqueness of a fingerprint can be determined by the pattern of the ridges and the valleys a fingerprints made of. A complete fingerprint consists of about 100 minutiae points in average. The measured fingerprint area consists in average of about 30-60 minutiae points depending on the finger and on the sensor area. An individuals fingerprint is scanned to identify 10 to 26 unique points of the finger, and a unique number is assigned to it. The original fingerprint image is not saved, but the fingerprint algorithm is stored.

    stored together with the angle of the tangent of a local minutiae point in a fingerprint-code or directly in a reference template.

  • A template can consist of more than one fingerprint-code to expand the amount of information and to expand the enrolled fingerprint area. In general this leads to higher template quality and therefore to a higher similarity value of the template and the sample.

    THE FINGERPRINT ACQUISITION PROCESS:

    The fingerprint is acquired from a fingerprint scanner

    .

    Image is improved for better contrast and distinctness.

    Noise and defects are eliminated.

    The final scanned finger print layout.

  • Minutiae are identified.

    ENDINGS BIFURCATIONS

    ANALYZED FINGERPRINT

    Fingerprint features are detected and analyzed. Fingerprint search on database is made based on some measures; so polygons are determined connecting 3 minutiae. Thus, internal angles, sides and each minutia angle are computed. These measures are invariant to rotation and translation. This method allows that a desired fingerprint can be localized on database even with position variation (displacement and rotation) in relation to the found fingerprint.

    ADVANTAGES OF USING FINGERPRINTS

    Prevents unauthorized use or access

    Adds a higher level of security to an identification process

    Eliminates the burden and bulk of carrying ID cards or remembering Pins

    Heightens overall confidence of business processes dependent on personal identification.

  • THE FIM3030N FINGERRPINT MODULE: General Descriptions FIM30N is a low-price stand-alone Fingerprint Identification Device with many excellent features. It provides benefits such as high identification performance, low power consumption and RS232 serial interface with the various commands for easy integration into a wide range of applications. It is a durable and compact device with fingerprint identification module containing NITGEN optics-based fingerprint sensor inside. Communication FIM30N has RS-232 serial communication port through that FIM30N communicates at the same time. These ports support 6 baudrate modes such as 9600, 14400, 19200, 38400, 57600, and 115200 bps.

    Pin Pin Name Description 1 VCC 3.3 V (FIM30xx-LV) / 5 V (FIM30xx-HV) 2 RXD RS-232 Rx receiving signal from host 3 TXD RS-232 Tx transmitting signal to host 4 SUCCESS Output for indicating authentication success 5 FAIL Output for indicating authentication fail 6 Enroll_Key Input to enroll fingerprint without

    RS-232 communication

  • 7 Delete_Key Input to delete user without RS-232 communication 8 Identify_Key Input to identify user without RS-232 communication 9 GND Ground

    2.2 LCD:

    PIN DESCRIPTION:

    There are pins along one side of the small printed board used for connection to the microcontroller. There are total of 14 pins and their function is described in the table below

  • 2.3 RS-232 SERIAL COMMUNICATION : We used RS-232 serial communication standards for the communication between the Bio Module and the ATMEGA 8515 microcontroller. The general instruction format of the instructions between the microcontroller and Bio-Module is

  • Command: This field tells the bio module what it has to do. Some of the commands used in our program are: 0x01-Initialization of the module. 0x2F-Entering into master mode. 0x33-Enrolling user. 0x12-Authentication. 0x22-Deletion of a user. Packet index: If data size is so large that the host/device cannot carry data in a single packet, the host/device divides data into small data blocks and sends them over several subsequent packets. The packet index gives information about the number of packets. Data size: Gives information about the size of data that is being sent interms of bytes. Error: If the host sends the command packet, the device returns the acknowledge packet with the packet error code. If Error code is not ERR_NONE, the previously sent command packet is ignored in the device. The host needs to check the returned error code, and then retry or does something.

    Checksum: Checksum data can be calculated by adding all byte data. 2.4 ATMEGA 8515 MICRO CONTROLLER: FEATURES: High-performance, Low-power AVR 8-bit Microcontroller RISC Architecture 130 Powerful Instructions Most Single Clock Cycle Execution

  • 32 x 8 General Purpose Working Registers Fully Static Operation Up to 16 MIPS Throughput at 16 MHz On-chip 2-cycle Multiplier Nonvolatile Program and Data Memories 8K Bytes of In-System Self-programmable Flash Endurance: 10,000 Write/Erase Cycles Optional Boot Code Section with Independent Lock Bits In-System Programming by On-chip Boot Program True Read-While-Write Operation 512 Bytes EEPROM Endurance: 100,000 Write/Erase Cycles 512 Bytes Internal SRAM Up to 64K Bytes Optional External Memory Space Programming Lock for Software Security Peripheral Features One 8-bit Timer/Counter with Separate Prescaler and Compare Mode One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode Three PWM Channels Programmable Serial USART Master/Slave SPI Serial Interface Programmable Watchdog Timer with Separate On-chip Oscillator On-chip Analog Comparator Special Microcontroller Features Power-on Reset and Programmable Brown-out Detection Internal Calibrated RC Oscillator External and Internal Interrupt Sources Three Sleep Modes: Idle, Power-down and Standby I/O and Packages 35 Programmable I/O Lines 40-pin PDIP, 44-lead TQFP, 44-lead PLCC, and 44-pad MLF Operating Voltages 2.7 - 5.5V for ATmega8515L 4.5 - 5.5V for ATmega8515 Speed Grades 0 - 8 MHz for ATmega8515L

    0 - 16 MHz for ATmega8515

  • PIN DIAGRAM:

    PROGRAM ALGORITHM:

    The module is initialized by sending an initialization command to it. An option is provided to user to press a swith & thus enter the authentication mode. If the user has already been enrolled through the system, then Authentication OK is

    displayed on the LCD. Else it shows Authentication Failed.

  • FLOWCHART:

  • 3. PROGRAM CODE :

    #include

    #include

    #include

    #include

    #include

    #define sbi( PORT, BIT) PORT |= (1

  • void ser_out(unsigned char );

    unsigned char Con1[] = " Connection 0";

    unsigned char Con2[] = " Established 0";

    unsigned char NOK1[] = " Failed 0";

    unsigned char ST1[] = " Finger Print 0";

    unsigned char ST2[] = " Impression 0";

    unsigned char CON[] = " Connecting 0";

    unsigned char Auth[] = " Authenticate 0";

    unsigned char PUF[] = "KEEP YOUR FINGER 0";

    unsigned char OK[] = " OK 0";

    unsigned char CON3[]= "Master 0";

    unsigned char CON4[]= "Enroll 0";

    unsigned char ENR[]= "Enrolled 0";

    unsigned char STEP2[] ="Master Entered 0";

    unsigned char STEP3[] = "Step1 ok 0";

    unsigned char STEP4[] = "Step2 ok 0";

    unsigned char NOK2[] = " Step1 Failed 0";

    unsigned char NOK3[] = " Entry failed 0";

    unsigned char NOK4[] = " Step2 failed 0";

    unsigned char TMO[] = " Time Out 0";

    unsigned char DEL[] = " Delete 0";

    unsigned char INTRO1[]="1.ENROLL.0";

    unsigned char INTRO2[]="2.AUTH 3.DEL.0";

  • unsigned char GATEO[] = "Gate Opened.....0";

    unsigned char GATEC[] = "Gate Closed.... 0";

    int main()

    {

    unsigned char Title1[] = "BIOMETRIC SECURE0";

    unsigned char Title2[] = "& ACCESS SYSTEM.. 0";

    unsigned char i;

    DDRC = 0XFC;// LAST 2 MSB BITS SWITCHES

    PORTC=0X03;// INTERNAL PULL UPS

    Lcd_Init();

    Lcd_Cmd(0X80);

    delay(1);

    Lcd_Display(Title1);

    Lcd_Cmd(0XC0);

    delay(1);

    Lcd_Display(Title2);

    Uart_Init();

    _delay_ms(2000);

    q=0;

    for(i=0; i

  • }

    _delay_ms(1000.0);

    fim_init();

    _delay_ms(1000.0);

    while((PINC & 0x01)!=0x00);

    fim_master();

    _delay_ms(100.0);

    _delay_ms(2000.0);

    while(1)

    {

    Lcd_Cmd(0x01);

    delay(1);

    Lcd_Cmd(0X80);

    delay(1);

    Lcd_Display(INTRO1);

    Lcd_Cmd(0XC0);

    delay(1);

    Lcd_Display(INTRO2);

    delay(1);

    _delay_ms(2000.0);

    for(i=9;i>=0;i--)

    {

    Lcd_Cmd(0x01);

  • delay(1);

    Lcd_Cmd(0x80);

    delay(1);

    Lcd_Display(CON4); //Functon name display in line 1

    delay(1);

    Lcd_Cmd(0xC0);

    delay(1);

    Lcd_Data(i+48); // i value in 2nd line decremented from 10 to 0

    if((PINC & 0x01)==0x00)

    {

    _delay_ms(10.0);

    fim_enroll();

    _delay_ms(2000.0);

    goto x;

    }

    if(i==0) //time out for function if i=0

    {

    Lcd_Cmd(0xC0);

    delay(1);

    Lcd_Display(TMO);

    _delay_ms(2000.0);

    goto x;

    }

  • _delay_ms(2000.0);

    }

    x:_delay_ms(100.0);

    for(i=9;i>=0;i--)

    {

    Lcd_Cmd(0x01);

    delay(1);

    Lcd_Cmd(0x80);

    delay(1);

    Lcd_Display(Auth);

    delay(1);

    Lcd_Cmd(0xC0);

    delay(1);

    Lcd_Data(i+48);

    if((PINC & 0x01)==0x00)

    {

    _delay_ms(10.0);

    fim_auth();

    _delay_ms(2000.0);

    goto y;

    }

    if(i==0)

    {

  • Lcd_Cmd(0xC0);

    delay(1);

    Lcd_Display(TMO);

    _delay_ms(2000.0);

    goto y;

    }

    _delay_ms(2000.0);

    }

    y:_delay_ms(100.0);

    for(i=9;i>=0;i--)

    {

    Lcd_Cmd(0x01);

    delay(1);

    Lcd_Cmd(0x80);

    delay(1);

    Lcd_Display(DEL);

    delay(1);

    Lcd_Cmd(0xC0);

    delay(1);

    Lcd_Data(i+48);

    if((PINC & 0x01)==0x00)

    {

    _delay_ms(10.0);

  • fim_delete();

    _delay_ms(2000.0);

    goto z;

    }

    if(i==0)

    {

    Lcd_Cmd(0xC0);

    delay(1);

    Lcd_Display(TMO);

    _delay_ms(2000.0);

    goto z;

    }

    _delay_ms(2000.0);

    }

    z:_delay_ms(3000.0);

    }

    }

    void Uart_Init()

    {

    UBRRH=0;

    UBRRL=51;

  • UCSRB=0X18;

    UCSRC=0X86;

    }

    ISR(UART_RX_vect)

    {

    cli();

    fim[q]= UDR;

    q++;

    sei();

    }

    void fim_init()

    {

    UCSRB = 0x08;//only tx is enabled

    cli();// no interrupts

    _delay_ms(10.0);

    ser_out(0x7e);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x01);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

  • ser_out(0x01);

    q=0;

    UCSRB = 0x90;//rx complete int enabled and rx enabled

    _delay_ms(1.0);

    sei();

    while(q

  • Lcd_Cmd(0x80);

    delay(10);

    Lcd_Display(Con1);

    delay(10);

    Lcd_Cmd(0xC0);

    delay(10);

    Lcd_Display(NOK1);

    delay(10);

    }

    }//end fim_init

    void ser_out(unsigned char ser)

    {

    while(!(UCSRA &0x20));

    UDR =ser;

    _delay_ms(1.0);

    }//end ser-out

    void fim_master()

    {

    Lcd_Cmd(0X01);

    delay(1);

    Lcd_Cmd(0X80);

    delay(1);

    Lcd_Display(CON3);

  • delay(10);

    UCSRB = 0x08;//only tx is enabled

    cli();// no interrupts

    _delay_ms(10.0);

    ser_out(0x7e);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x2F);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x0A);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x39);

    ser_out(0x34);ser_out(0x37);ser_out(0x37);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0xA2);

    q=0;

    UCSRB = 0x90;//rx complete int enabled and rx enabled

    sei();

    while(q

  • Lcd_Cmd(0X01);

    delay(1);

    Lcd_Cmd(0X80);

    delay(1);

    Lcd_Display(STEP2);

    delay(10);

    PORTD = 0x80;

    }

    else

    {

    Lcd_Cmd(0xC0);

    delay(1000);

    delay(1000);

    Lcd_Data(fim[20]+48);

    delay(1000);

    delay(10);

    PORTD =0x40;

    }

    }

    void fim_enroll()

    {

    Lcd_Cmd(0X01);

  • delay(1);

    Lcd_Cmd(0X80);

    delay(1);

    Lcd_Display(CON4);

    delay(1);

    Lcd_Cmd(0xC0);

    delay(1);

    Lcd_Display(PUF);

    UCSRB = 0x08;//only tx is enabled

    cli();// no interrupts

    _delay_ms(10.0);

    ser_out(0x7e);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x33);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x10);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x43);

    q=0;

    UCSRB = 0x90;//rx complete int enabled and rx enabled

    _delay_ms(10.0);

    sei();

    while(q

  • cli();

    _delay_ms(10.0);

    if(fim[4]==0x33 && fim[8]==0x01)

    {

    Lcd_Cmd(0X01);

    delay(1);

    Lcd_Cmd(0X80);

    delay(1);

    Lcd_Display(STEP3);

    delay(1);

    PORTD = 0x80;

    UCSRB = 0x08;//only tx is enabled

    cli();// no interrupts

    _delay_ms(10.0);

    ser_out(0x7e);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x33);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x01);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x01);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x35);

    q=0;

    UCSRB = 0x90;//rx complete int enabled and rx enabled

  • _delay_ms(10.0);

    sei();

    while(q

  • delay(1);

    Lcd_Display(NOK4);

    delay(1);

    }

    }

    else

    {

    Lcd_Cmd(0xC0);

    delay(1);

    Lcd_Display(NOK2);

    delay(1);

    }

    }

    void fim_auth()

    {

    Lcd_Cmd(0X01);

    delay(1);

    Lcd_Cmd(0X80);

    delay(1);

    Lcd_Display(Auth);

    delay(1);

    Lcd_Cmd(0XC0);

  • delay(1);

    Lcd_Display(PUF);

    delay(1);

    UCSRB = 0x08;//only tx is enabled

    cli();// no interrupts

    _delay_ms(10.0);

    ser_out(0x7e);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x12);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x12);

    q=0;

    UCSRB = 0x90;//rx complete int enabled and rx enabled

    _delay_ms(10.0);

    sei();

    while(q

  • delay(1);

    Lcd_Cmd(0X80);

    delay(1);

    Lcd_Display(Auth);

    delay(1);

    Lcd_Cmd(0XC0);

    delay(1);

    Lcd_Display(OK);

    delay(1);

    _delay_ms(300.0);

    Lcd_Cmd(0x01);

    delay(1);

    Lcd_Cmd(0x80);

    delay(1);

    Lcd_Display(GATEO);

    _delay_ms(5000.0);

    _delay_ms(300.0);

    Lcd_Cmd(0x01);

    delay(1);

    Lcd_Cmd(0x80);

    delay(1);

    Lcd_Display(GATEC);

    _delay_ms(1000.0);

  • }

    else //auth failed

    {

    Lcd_Cmd(0X01);

    delay(1);

    Lcd_Cmd(0X80);

    delay(1);

    Lcd_Display(Auth);

    delay(1);

    Lcd_Cmd(0XC0);

    delay(1);

    Lcd_Display(NOK1);

    delay(1);

    }

    }//end fim-auth

    void fim_delete()

    {

    Lcd_Cmd(0X01);

    delay(1);

    Lcd_Cmd(0X80);

    delay(1);

    Lcd_Display(DEL);

  • delay(100);

    UCSRB = 0x08;//only tx is enabled

    cli();// no interrupts

    _delay_ms(10.0);

    ser_out(0x7e);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x22);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x0A);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x2C);

    ser_out(0x34);ser_out(0x37);ser_out(0x35);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);

    ser_out(0x00);ser_out(0x00);ser_out(0x00);ser_out(0xA0);

    q=0;

    UCSRB = 0x90;//rx complete int enabled and rx enabled

    sei();

    while(q

  • Lcd_Cmd(0XC0);

    delay(1);

    Lcd_Display(OK);

    delay(10);

    }

    else

    {

    Lcd_Cmd(0xC0);

    delay(1);

    Lcd_Display(NOK1);

    delay(1);

    }

    }

    void delay(int d)

    {

    int i;

    for(i=0;i

  • Lcd_Cmd(0X30);

    delay(1);

    Lcd_Cmd(0X01);

    delay(1);

    Lcd_Cmd(0X28);

    delay(1);

    Lcd_Cmd(0x0E);

    delay(1);

    }

    void Lcd_Cmd(unsigned char d)

    {

    unsigned char d1;

    d1=0xF0 & d;

    PORTC = d1;

    cbi(PORTC,2);//Rs=0;

    sbi(PORTC,3);//En =1

    cbi(PORTC,3);//En = 0

    d1=d &0x0F;

    d1=d1

  • cbi(PORTC,3);//En = 0

    }

    void Lcd_Data(unsigned char d)

    {

    unsigned char d1;

    d1=0xF0 & d;

    PORTC = d1;

    sbi(PORTC,2);//Rs=1;

    sbi(PORTC,3);//En =1

    cbi(PORTC,3);//En = 0

    d=d

  • Lcd_Data(msg[i]);

    delay(1);

    }

    }

    SCOPE:

    Finger print identification system can be extensively used for attendance system in schools & colleges.

    For security purposes, employees in banks, managers of huge organisations are required to make use of finger-print recogntion systems.

    Based on this, future applications can be extended to face-recognition and retina-recognition systems.

    OBSERVATION:

    Connection Established Enrolling through PC Authentication

    RESULT:

    When Biomodule is connected to the Robo-board through RS232 cable, a request is sent to the module & thus Connection Established is displayed on LCD. Next, when the switch is pressed, it identifies if the user is enrolled or not.

    PIN DESCRIPTION: