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

Fingerprint Sensor using Arduino
Fingerprint Sensor using Arduino

Comments
Only logged in users can leave comments