출석 시스템은 사무실과 학교에서의 존재를 표시하기 위해 일반적으로 사용되는 시스템입니다. 출석 기록부에 수동으로 출석을 표시하는 것부터 첨단 응용 프로그램 및 생체 인식 시스템 사용에 이르기까지 이러한 시스템이 크게 향상되었습니다. 이전 프로젝트에서는 RFID 및 AVR 마이크로 컨트롤러, 8051 및 라즈베리 파이를 사용하는 다른 전자 출석 시스템 프로젝트를 거의 다루지 않았습니다. 이 프로젝트에서 우리는 지문 모듈과 Arduino를 사용하여 출석 데이터와 기록을 가져와 보관했습니다. 지문 센서를 사용하면 시스템이 더욱 안전 해집니다. 다음 섹션에서는 Arduino를 사용하여 지문 기반 생체 인식 시스템 을 만드는 기술적 인 세부 사항을 설명합니다.
필수 구성 요소
- Arduino -1
- 지문 모듈 -1
- 푸시 버튼-4
- LED -1
- 1K 저항 -2
- 2.2K 저항 -1
- 힘
- 전선 연결
- 상자
- 부저 -1
- 16x2 LCD -1
- 브레드 보드 -1
- RTC 모듈 -1
프로젝트 설명:
이 지문 출석 시스템 회로 에서는 지문 센서 모듈을 사용했습니다.시스템에서 손가락 입력을 받아 진정한 사람 또는 직원을 인증합니다. 여기서는 등록, 삭제, 위 / 아래 버튼 4 개를 사용합니다. ENROLL 및 DEL 키에는 세 가지 기능이 있습니다. ENROLL 키는 시스템에 새로운 사람을 등록하는 데 사용됩니다. 따라서 사용자가 새 지문을 등록하려면 ENROLL 키를 눌러야하며 LCD는 지문 이미지를 저장할 ID를 묻습니다. 이제이 때 사용자가 더 이상 진행하지 않으려면 ENROLL 키를 다시 눌러 돌아갈 수 있습니다. 이번에는 ENROLL 키가 Back 키로 동작합니다. 즉, ENROLL 키는 등록 기능과 뒤로 기능이 모두 있습니다. 등록 키 외에도 직렬 모니터를 통해 출석 데이터를 다운로드하는 데 사용됩니다. 마찬가지로 DEL / OK 키는 사용자가 새 손가락을 등록 할 때와 동일한 이중 기능을 가지고 있습니다.그런 다음 UP 및 DOWN이라는 다른 두 개의 키를 사용하여 손가락 ID를 선택해야합니다. 이제 사용자는 선택한 ID로 진행하기 위해 DEL / OK 키 (이번에는이 키가 OK처럼 동작 함)를 눌러야합니다. Del 키는 Arduino의 EEPROM에서 데이터를 재설정하거나 삭제하는 데 사용됩니다.
지문 모듈:
지문 센서 모듈은 지문 이미지를 캡처 한 다음 해당 템플릿으로 변환하여 Arduino에서 선택한 ID에 따라 메모리에 저장합니다. 모든 프로세스는 아두 이노가 지문 이미지를 찍어 템플릿으로 변환하고 ID로 저장하는 등의 명령을 내립니다. 지문 모듈을 사용하여 더 많은 프로젝트를 확인할 수 있습니다.
지문 기반 보안 시스템
지문 기반 생체 인식 투표기
여기에 지문 모듈이 손가락 이미지를 촬영할 준비가되었음을 나타내는 노란색 LED를 추가했습니다. 부저는 다양한 표시에도 사용됩니다. Arduino는이 시스템의 주요 구성 요소로 전체 시스템을 제어합니다.
지문 기반 출석 시스템 작동
이 지문 출석 시스템 프로젝트 작업매우 간단합니다. 우선, 사용자는 푸시 버튼을 사용하여 사용자의 지문을 등록해야합니다. 이를 위해 사용자는 ENROLL 키를 눌러야하며 LCD는 지문을 ID 이름으로 메모리에 저장하기 위해 ID 입력을 요청합니다. 이제 사용자는 UP / DOWN 키를 사용하여 ID를 입력해야합니다. ID를 선택한 후 확인 키 (DEL 키)를 눌러야합니다. 이제 LCD는 지문 모듈 위에 손가락을 올려달라고 요청할 것입니다. 이제 사용자는 지문 모듈 위에 손가락을 대고 모듈이 지문 이미지를 가져와야합니다. 이제 LCD에 지문 모듈에서 손가락을 제거하라는 메시지가 표시되고 다시 손가락을 넣으라는 메시지가 표시됩니다. 이제 사용자는 손가락을 다시 넣어야하며 모듈은 이미지를 가져와 템플릿으로 변환하고 선택한 ID로 지문 모듈의 메모리에 저장합니다.이제 사용자가 등록되고 지문 모듈에 손가락을 대면 출석을 알릴 수 있으며, 같은 방법으로 모든 사용자가 시스템에 등록됩니다.
이제 사용자가 저장된 ID 또는 지문을 삭제하거나 삭제하려면 DEL 키를 눌러야합니다. 삭제 키를 누르면 LCD에서 삭제할 ID를 선택하라는 메시지가 표시됩니다. 이제 사용자는 ID를 선택하고 확인 키 (동일한 DEL 키)를 눌러야합니다. 이제 LCD는 지문이 성공적으로 삭제되었음을 알려줍니다.
이 지문 출석 시스템 프로젝트에서 출석이 작동하는 방식:
사용자가 지문 모듈 위에 손가락을 대면 지문 모듈이 손가락 이미지를 캡처하고 시스템에서이 지문과 관련된 ID가 있는지 검색합니다. 지문 ID가 감지되면 LCD에 등록 된 출석이 표시되고 동시에 부저가 한 번 울리고 시스템이 다시 입력 할 준비가 될 때까지 LED가 꺼집니다.
지문 모듈과 함께 시간 및 날짜에 대한 RTC 모듈 도 사용했습니다. 시간과 날짜는 시스템에서 지속적으로 실행됩니다. 따라서 Arduino는 진정한 사용자가 지문에 손가락을 대고 할당 된 메모리 슬롯의 EEPROM에 저장할 때마다 시간과 날짜를 사용합니다.
여기에서 30 일 동안이 시스템에 5 개의 사용자 공간을 만들었습니다. Arduino에서 RESET 버튼을 누르면 즉시 등록 키가 Arduino EEPROM 메모리에서 직렬 모니터를 통해 출석 데이터를 다운로드하는 역할을합니다.
메모리 관리:
아두 이노 UNO에는 1023 바이트 메모리가 있으며 그 중 데이터를 저장할 1018 바이트가 있으며 30 일 동안 5 개의 사용자 출석 데이터를 가져 왔습니다. 그리고 모든 참석자는 시간과 날짜를 기록하므로 7 바이트 데이터가됩니다.
따라서 필요한 총 메모리는
5 * 30 * 7 = 1050 그래서 여기에 32 바이트가 더 필요합니다.
하지만 4 명의 사용자를 사용하려면
4 * 30 * 7 = 840
여기서 우리는 5 명의 사용자 메모리를 사용하여이 프로젝트 데모를 수행했습니다. 이로 인해 5 번째 사용자 의 출석 기록 32 바이트 또는 5 개를 저장할 수 없습니다.
코드의 일부 줄을 변경하여 4 명의 사용자가 시도 할 수 있습니다. 변경이 필요한 코드에 주석을 달았습니다.
지문 출석 시스템 프로젝트의 회로도 및 설명
이 지문 기반 출석 시스템 프로젝트 의 회로는 위의 다이어그램과 같이 매우 간단합니다. 프로젝트의 모든 프로세스를 제어하는 Arduino, 등록, 삭제, ID 선택 및 출석을위한 푸시 버튼, 경고를위한 부저, 표시를위한 LED 및 사용자에게 지시하고 결과 메시지를 보여주는 LCD가 있습니다.
회로도에서 보는 바와 같이 아두 이노의 A0 (ENROL), A1 (DEL), A2 (UP), A3 (DOWN) 핀에 누름 버튼이 접지를 기준으로 직접 연결되고 노란색 LED는 디지털 핀 D7에 연결됩니다. 1k 저항을 통해 접지와 관련하여 Arduino의. Arduino의 Serial 핀 D2 및 D3 (Software Serial)에 직접 연결된 지문 모듈의 Rx 및 Tx. 5v 전원은 Arduino 보드에서 가져온 지문 모듈에 전원을 공급하는 데 사용됩니다. 부 저도 핀 A5에 연결됩니다. 16x2 LCD는 4 비트 모드로 구성되며 RS, EN, D4, D5, D6 및 D7은 Arduino의 디지털 핀 D13, D12, D11, D10, D9 및 D8에 직접 연결됩니다.
코드 설명:
arduino 의 지문 출석 시스템 코드 는 다음 섹션에서 제공됩니다. 코드는 주석으로 잘 설명되어 있지만 여기서는 코드의 몇 가지 중요한 부분을 논의하고 있습니다. 아두 이노 보드와 지문 모듈 을 연결 하기 위해 지문 라이브러리를 사용 했습니다.
먼저 헤더 파일을 포함하고 입력 및 출력 핀을 정의하고 매크로 및 선언 된 변수를 정의합니다. 이 후 설정 기능에서 정의 된 핀에 방향을 부여하고 LCD 및 지문 모듈을 시작합니다.
그 후에 출석 데이터를 다운로드하기위한 코드를 작성해야합니다.
무효 설정 () {지연 (1000); lcd.begin (16,2); Serial.begin (9600); pinMode (등록, INPUT_PULLUP); pinMode (up, INPUT_PULLUP); pinMode (아래, INPUT_PULLUP); pinMode (del, INPUT_PULLUP); pinMode (일치, INPUT_PULLUP); pinMode (부저, OUTPUT); pinMode (indFinger, OUTPUT); digitalWrite (부저, LOW); if (digitalRead (enroll) == 0) {digitalWrite (buzzer, HIGH); 지연 (500); digitalWrite (부저, LOW); lcd.clear (); lcd.print ("기다려주십시오"); lcd.setCursor (0,1); lcd.print ("데이터 다운 로딩");
그 후에 EEPROM에서 출석 데이터를 지우는 코드를 작성해야합니다.
if (digitalRead (del) == 0) {lcd.clear (); lcd.print ("기다려주십시오"); lcd.setCursor (0,1); lcd.print ("재설정 중….."); 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 ("시스템 재설정"); 지연 (1000); }
그 후 지문 모듈을 시작하여 LCD에 환영 메시지를 표시하고 RTC 모듈도 시작합니다.
그 후 루프 기능에서 RTC 시간을 읽고 LCD에 표시했습니다.
void loop () {now = rtc.now (); lcd.setCursor (0,0); lcd.print ("시간->"); 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 ("날짜->"); lcd.print (now.day (), DEC); lcd.print ('/'); lcd.print (now.month (), DEC); lcd.print ('/'); lcd.print (now.year (), DEC);
그 후, 지문이 입력 될 때까지 기다렸다가 캡처 한 이미지 ID를 저장된 ID와 비교합니다. 일치가 발생하면 다음 단계로 진행하십시오. 그리고 등록 델 키 확인
int result = getFingerprintIDez (); if (result> 0) {digitalWrite (indFinger, LOW); digitalWrite (부저, HIGH); 지연 (100); digitalWrite (부저, LOW); lcd.clear (); lcd.print ("ID:"); lcd.print (결과); lcd.setCursor (0,1); lcd.print ("기다려주십시오…."); 지연 (1000); 출석 (결과); lcd.clear (); lcd.print ("출석"); lcd.setCursor (0,1); lcd.print ("등록됨"); 지연 (1000); digitalWrite (indFinger, HIGH); 반환; }
주어진 void checkKeys () 함수는 Enroll 또는 DEL 키를 눌렀는지 여부와 눌렀을 때 수행 할 작업을 확인하는 데 사용됩니다. ENROLL 키를 누르면 Enroll () 함수가 호출되고 DEL 키를 누르면 delete () 함수가 호출됩니다.
void delet () 함수는 삭제할 ID를 입력 하고 레코드에서 손가락을 삭제 하는 uint8_t deleteFingerprint (uint8_t id) 함수를 호출하는 데 사용됩니다.
주어진 기능은 지문 이미지를 가져와 템플릿으로 변환하고 선택한 ID로 지문 모듈 메모리에 저장하는 데 사용됩니다.
uint8_t getFingerprintEnroll () {int p = -1; lcd.clear (); lcd.print ("손가락 ID:"); lcd.print (id); lcd.setCursor (0,1); lcd.print ("손가락 놓기"); 지연 (2000); while (p! = FINGERPRINT_OK) {p = finger.getImage ();…………………
주어진 기능은 EEPROM의 할당 된 슬롯에 출석 시간과 날짜를 저장하는 데 사용됩니다.
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)………….
주어진 기능은 EEPROM에서 데이터를 가져와 직렬 모니터로 보내는 데 사용됩니다.
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 ++));………….