우리 모두는 귀하의 투표가 전자적으로 등록되고 선거에서 투표하기 위해 투표 용지를 사용할 필요가없는 전자 투표 기계에 대해 잘 알고 있습니다. 오늘날 보안은 주요 관심사이며 누군가가 두 번 투표 할 수 없도록 보장해야하므로이 문제는 지문을 기반으로 권한을 부여 할 수있는 지문 기반 투표를 도입하여 해결할 수 있습니다. 이것은 또한 가짜 투표를 중지합니다. 그래서 오늘 우리는 Arduino를 사용하여 지문 기반 생체 인식 투표기를 구축하고 있습니다.
다른 마이크로 컨트롤러를 사용하는 이전 전자 투표 기계 프로젝트도 확인하십시오.
- Raspberry Pi를 사용하는 전자 투표기
- RFID 기반 투표기
- AVR 마이크로 컨트롤러 기반 전자 투표 기계 프로젝트
- Arduino를 사용한 전자 투표기
필수 구성 요소:
- Arduino Uno
- 지문 센서 모듈
- 푸시 버튼
- LED -2
- 1K 저항기 -3
- 2.2K 저항
- 힘
- 전선 연결
- 부저
- 16x2 LCD
- 브레드 보드
투표기의 지문 센서 모듈:
지문 센서 모듈 또는 지문 스캐너 는 지문 이미지를 캡처 한 다음 해당 템플릿으로 변환하여 Arduino가 선택한 ID (위치)에 메모리에 저장하는 모듈입니다. 여기에서 모든 프로세스는 Arduino에서 지문 이미지를 찍고 템플릿으로 변환하고 위치를 저장하는 등의 명령을 내립니다.
이 지문 투표기 회로 에서 우리는 지문 센서 모듈을 사용하여 시스템에 손가락 입력을 받아 진정한 투표자를 인증했습니다. 여기에서는 5 개의 푸시 버튼을 사용하여 일치, 등록 / 뒤로, 삭제 / 확인, 위, 아래로 이동합니다. Enroll 및 Del 키에는 여기에 두 가지 기능이 있습니다. 등록 키 는 새 손가락 인상을 시스템에 등록하고 뒤로 기능을하는데도 사용됩니다. 사용자가 새로운 지문을 등록하고자 할 때 등록 키를 눌러야하며 LCD는 지문 출력을 저장할 ID 또는 위치를 묻습니다. 이제 사용자가 더 이상 진행하지 않으려면 등록 키를 다시 눌러 뒤로 이동할 수 있습니다 (이번에는 등록 키가 뒤로 키로 동작 함). 등록 키에 등록 및 뒤로 기능이 모두 있음을 의미합니다. DEL / OK 키 또한 사용자가 새 손가락을 등록 할 때와 같은 이중 기능을 가지고 있습니다. 그러면 다른 두 개의 키, 즉 UP AND DOWN을 사용하여 손가락 ID 또는 위치를 선택해야합니다. 이제 사용자는 DEL / OK 키를 눌러야합니다. 선택한 ID 또는 위치로 진행합니다. Match key 는 유권자가 투표를 원할 때마다 지문 센서에 손가락을 대고 먼저 진정한 유권자임을 인증해야하며,이 인증을 통과하면 투표 할 수 있습니다.
지문 등록 및 기타 사항에 대해 자세히 알아 보려면 지문 센서와 Arduino의 인터페이스에 대한 이전 자습서를 확인 하고이 자습서 끝에있는 데모 비디오 도 확인하십시오.
작동 설명:
선거를위한 이 생체 인식 투표 시스템의 작동 초보자에게는 조금 복잡합니다. 우선, 사용자는 푸시 버튼 / 키를 사용하여 손가락 또는 유권자를 등록해야합니다 (이 코드에서 유권자의 최대 제한은 25입니다). 이를 위해 사용자는 ENROLL 키를 눌러야하며 LCD는 손가락이 가게 될 위치 / ID를 입력하도록 요청합니다. 이제 사용자는 UP / DOWN 키를 사용하여 ID (위치)를 입력해야합니다. 위치 / ID를 선택한 후 사용자는 확인 키 (DEL 키)를 눌러야합니다. 이제 LCD는 지문 모듈 위에 손가락을 올려달라고 요청할 것입니다. 이제 사용자는 지문 모듈 위에 손가락을 올려야합니다. 그런 다음 LCD는 지문 모듈에서 손가락을 제거하라는 메시지를 표시하고 다시 손가락을 넣을 것을 요청합니다. 이제 사용자는 지문 모듈 위에 다시 손가락을 올려야합니다. 이제 지문 모듈은 이미지를 가져와 템플릿으로 변환하고 선택한 ID로 지문 모듈의 메모리에 저장합니다.이제 유권자가 등록되고 투표 할 수 있습니다. 같은 방법으로 모든 유권자를 시스템에 등록 할 수 있습니다.
이제 사용자가 저장된 ID를 삭제하거나 삭제하려면 DEL 키를 눌러야합니다. DEL 키를 누른 후 LCD는 삭제할 위치를 선택하라는 메시지가 표시됩니다. 이제 사용자는 ID를 선택하고 확인 키 (동일한 DEL 키)를 눌러야합니다. 이제 LCD는 손가락이 성공적으로 삭제되었음을 알려줍니다.
투표 절차:
이제 사용자가 투표를 원할 때 일치 키를 눌러야합니다. 그러면 부저음이 울리고 LED도 켜지고 LCD는 지문 모듈 위에 손가락을 올려달라고 요청합니다. 이제 Arduino는 손가락을 세 번 시도합니다. 지문 모듈 위에 손가락을 대면 지문 모듈이 손가락 이미지를 캡처하여 시스템에 ID가 있는지 확인합니다. 손가락 ID가 감지되면 LCD에 승인 된 유권자가 표시됩니다. 사용자가 투표 할 권한이 있음을 의미합니다. 그리고 시스템은 투표를 위해 다음 단계로 이동합니다. 이제 녹색 LED가 켜지면 유권자가 반사 된 키 (이 데모의 RED 브레드 보드에서)를 눌러 후보자에게 투표 할 수 있습니다. 이제 같은 유권자가 다시 투표를 원하면 시스템이 '이미 투표함'을 표시합니다. . 같은 유권자는 다시 투표 할 수 없으며 부저음이 5 초 동안 울립니다. 등록되지 않은 사용자가 투표를 원하는 경우 지문 모듈은 시스템에서 ID를 감지하지 못하고 LCD에 ' No Fingerprint Found' 가 표시됩니다.
여기서 CAN1, CAN2, CAN3은 선거에 출마 한 후보 1, 후보 2 및 후보 3을 나타냅니다.
회로 설명:
이 지문 기반 투표기 프로젝트 의 회로는 프로젝트의 전체 프로세스를 제어하기위한 Arduino, 등록, 삭제, ID 및 투표 목적 선택을위한 푸시 버튼, 경고 용 부저, 표시 용 LED 및 지시 용 16x2 LCD를 포함하는 매우 간단합니다. 유권자와 결과도 보여줍니다. 노란색 LED는 지문 모듈이 손가락 이미지를 찍을 준비가되었음을 나타내고 녹색 LED는 시스템이 투표를하거나 결과를 볼 준비가되었음을 나타냅니다.
푸시 버튼은 핀 A0 (ENROL), A1 (DEL), A2 (UP), A3 (DOWN) 및 A4 (Match), D5 (Can1), D4 (Can2), D3 (Can3), D2 (결과) 접지에 대한 Arduino의. 노란색 LED는 1k 저항을 통해 아두 이노의 디지털 핀 D7에 접지를 위해 연결되고 녹색 LED는 같은 방법으로 아두 이노의 D6에 연결됩니다. Arduino의 Serial 핀 Tx 및 Rx에 직접 연결된 지문 모듈의 Rx 및 Tx. 5v 전원은 Arduino 보드에서 가져온 지문 모듈에 전원을 공급하는 데 사용됩니다. 부 저도 A5에 연결됩니다. 16x2 LCD는 4 비트 모드로 구성되며 RS, EN, D4, D5, D6 및 D7은 Arduino의 디지털 핀 D13, D12, D11, D10, D9 및 D8에 직접 연결됩니다.
프로그램 설명:
프로그램에서 우리는 Arduino 보드와 지문 모듈 을 인터페이스 하기 위해 Adafruit 지문 센서 라이브러리를 사용 했습니다. 아래에서 전체 코드를 확인할 수 있습니다. 아두 이노 프로그램의 주요 기능을 설명합니다.
설정 기능에서 정의 된 핀에 대한 지침을 제공하고 LCD 및 지문 모듈을 시작했습니다.
그 후 void loop () 함수에서 체크 키를 기다렸다가 Match 키를 눌러 지문을 입력하고 캡처 한 이미지 ID를 저장된 ID와 비교합니다. 일치하는 경우 다음 단계로 진행하십시오.
void loop () {lcd.setCursor (0,0); lcd.print ("일치 키 누르기"); lcd.setCursor (0,1); lcd.print ("시스템 시작"); digitalWrite (indVote, LOW); digitalWrite (indFinger, LOW); if (digitalRead (match) == 0) {digitalWrite (buzzer, HIGH); 지연 (200); digitalWrite (부저, LOW); digitalWrite (indFinger, HIGH); for (int i = 0; i <3; i ++)…………………
주어진 void checkKeys () 함수는 Enroll 또는 DEL 키를 눌렀는지 여부와 눌렀을 때 수행 할 작업을 확인하는 데 사용됩니다. ENROLL 키를 누르면 Enroll () 함수가 호출되고 DEL 키를 누르면 delete () 함수가 호출됩니다.
void checkKeys () {if (digitalRead (enroll) == 0) {lcd.clear (); lcd.print ("기다려주십시오"); 지연 (1000); while (digitalRead (enroll) == 0); 싸다(); } else if (digitalRead (del) == 0) {lcd.clear (); lcd.print ("기다려주십시오"); 지연 (1000); delet (); }}
삭제할 ID를 입력 하고 레코드에서 손가락을 삭제 하는 uint8_t deleteFingerprint (uint8_t id) 함수를 호출하는 함수입니다.
void delet () {정수 개수 = 0; lcd.clear (); lcd.print ("손가락 삭제"); lcd.setCursor (0,1); lcd.print ("위치:"); while (1) {lcd.setCursor (9,1); lcd.print (수); if (digitalRead (up) == 0) {count ++; if (count> 25) count = 0; 지연 (500); }……………….
주어진 기능은 선택된 ID의 기록에서 지문을 삭제하는 데 사용됩니다.
uint8_t deleteFingerprint (uint8_t id) {uint8_t p = -1; lcd.clear (); lcd.print ("기다려주십시오"); p = finger.deleteModel (id); if (p == FINGERPRINT_OK) {Serial.println ("삭제됨!"); lcd.clear (); lcd.print ("Figer 삭제됨"); lcd.setCursor (0,1); lcd.print ("성공적으로"); 지연 (1000); } else {Serial.print ("뭔가 잘못됨"); lcd.clear (); lcd.print ("뭔가 잘못됨"); lcd.setCursor (0,1); lcd.print ("나중에 다시 시도"); 지연 (2000); 반환 p; }}
주어진 기능은 지문 이미지를 가져와 템플릿으로 변환하여 선택한 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 ();…………………
주어진 기능은 투표 및 표시 결과에 사용됩니다.
void Vote () {lcd.clear (); lcd.print ("제발 장소"); lcd.setCursor (0,1); lcd.print ("투표"); digitalWrite (indVote, HIGH); digitalWrite (indFinger, LOW); digitalWrite (부저, HIGH); 지연 (500); digitalWrite (부저, LOW); 지연 (1000); while (1) {if (digitalRead (sw1) == 0)…………………
아래 의 전체 코드 및 데모 비디오를 확인하십시오.