私たちは皆、あなたの投票が電子的に登録され、選挙で投票するために投票用紙を使用する必要がない電子投票機に精通しています。今日、セキュリティは大きな懸念事項であり、誰かが2回投票できないようにする必要もあります。この問題は、指紋ベースの投票を導入することで解決できます。指紋ベースの投票では、指紋に基づいて人を承認できます。これにより、偽の投票も停止されます。そのため、今日はArduinoを使用してFingerPrintベースの生体認証投票機を構築しています。
また、さまざまなマイクロコントローラーを使用した以前の電子投票機プロジェクトも確認してください。
- RaspberryPiを使用した電子投票機
- RFIDベースの投票機
- AVRマイクロコントローラーベースの電子投票機プロジェクト
- Arduinoを使用した電子投票機
必要なコンポーネント:
- Arduino Uno
- 指紋センサーモジュール
- ボタンを押す
- LED -2
- 1K抵抗-3
- 2.2K抵抗
- 力
- 接続線
- ブザー
- 16x2 LCD
- ブレッドボード
投票機の指紋センサーモジュール:
指紋センサーモジュールまたは指紋スキャナーは、指の印刷画像をキャプチャし、それを同等のテンプレートに変換して、Arduinoによって選択されたID(場所)のメモリに保存するモジュールです。ここでは、指紋の画像を取得し、それをテンプレートに変換し、場所を保存するなど、すべてのプロセスがArduinoによって指示されています。
このFingerPrint投票機回路では、指紋センサーモジュールを使用して、システムに指で入力した真の投票者を認証しました。ここでは、5つのプッシュボタンを使用して、一致、登録/戻る、削除/ OK、上および下を使用しています。登録とデルキーには、ここで2つの機能があります。 登録キー は、新しい指の印象をシステムに登録し、機能を戻すためにも使用されます。ユーザーが新しい指を登録したい場合、登録キーを押す必要があり、LCDはユーザーが指紋出力を保存したいIDまたは場所を尋ねます。この時点でユーザーが先に進みたくない場合は、もう一度登録キーを押して戻ることができます(今回は登録キーは戻るキーとして動作します)。手段登録キーには、登録機能と戻る機能の両方があります。 DEL / OKキー また、ユーザーが新しい指を登録するときと同じ二重機能があり、ユーザーは別の2つのキー、つまり上下を使用して指IDまたは場所を選択する必要があります。ユーザーはDEL / OKキーを押す必要があります(今回はこのキーはOKのように動作します)。選択したIDまたは場所に進みます。一致キーは、投票者が投票したい場合に使用されます。最初に、指紋センサーに指を置いて真の投票者を認証する必要があります。この認証に合格すると、投票できます。
指紋の登録などの詳細については、指紋センサーとArduinoのインターフェイスに関する以前のチュートリアルを確認してください。また、このチュートリアルの最後にあるデモビデオも確認してください。
作業説明:
選挙のためのこの生体認証投票システムの働き 初心者にとっては少し複雑です。まず、ユーザーはプッシュボタン/キーを使用して指または有権者(このコードでは有権者の最大制限は25)を登録する必要があります。これを行うには、ユーザーがENROLLキーを押す必要があります。その後、LCDは、指が保管される場所/ IDの入力を求めます。そのため、ユーザーは上/下キーを使用してID(場所)を入力する必要があります。場所/ IDを選択した後、ユーザーはOKキー(DELキー)を押す必要があります。 LCDは、指紋モジュールの上に指を置くように要求します。次に、ユーザーは指紋モジュールの上に指を置く必要があります。次に、LCDは指紋モジュールから指を離すように要求し、再び指を置くように要求します。ここで、ユーザーは指紋モジュールの上にもう一度指を置く必要があります。これで、指紋モジュールは画像を取得してテンプレートに変換し、選択したIDで指紋モジュールのメモリに保存します。これで投票者が登録され、投票できるようになります。同じ方法で、すべての投票者をシステムに登録できます。
これで、ユーザーが保存されているIDのいずれかを削除または削除する場合は、DELキーを押す必要があります。DELキーを押した後、LCDは場所の選択を要求します。つまり、削除するIDを選択します。ここで、ユーザーはIDを選択し、OKキー(同じDELキー)を押す必要があります。これで、LCDは指が正常に削除されたことを通知します。
投票プロセス:
これで、ユーザーが投票したい場合は、一致キーを押す必要があります。その後、ブザーが鳴り、LEDも点灯し、LCDが指紋モジュールの上に指を置くように要求します。これで、Arduinoは指を置く試みを3回行います。指紋モジュールの上に指を置いた後、指紋モジュールは指の画像をキャプチャし、そのIDがシステムに存在することを確認します。指IDが検出されると、LCDに承認された投票者が表示されます。これは、ユーザーが投票することを許可されていることを意味します。そして、システムは投票のために次の段階に進みます。これで緑色のLEDが点灯します。これは、投票者が(このデモの赤色のブレッドボードから)選択したキーを押すことで候補者に投票できることを意味します。同じ投票者が再度投票したい場合、システムは 「すでに投票済み」 と表示します。 。同じ投票者が再度投票できず、ブザーが5秒間鳴ります。未登録のユーザーが投票したい場合、指紋モジュールはシステムへのIDを検出せず、LCDに「 指紋が見つかりません 」と表示 され ます。
ここでのCAN1、CAN2、CAN3は、選挙に立候補した候補者1、候補者2、候補者3を表しています。
回路の説明:
このFingerPrintベースの投票機プロジェクトの回路は非常にシンプルで、プロジェクトのプロセス全体を制御するためのArduino、登録、削除、IDと投票目的の選択のためのプッシュボタン、アラート用のブザー、表示用のLED、指示用の16x2LCDが含まれています有権者と結果も表示します。黄色のLEDは、指紋モジュールが指の画像を撮影する準備ができていることを示し、緑色のLEDは、システムが投票または結果を確認する準備ができていることを示します。
押しボタンはピンA0(ENROL)、A1(DEL)、A2(UP)、A3(DOWN)、A4(Match)、D5(Can1)、D4(Can2)、D3(Can3)、D2(結果)地面に関するArduinoの。黄色のLEDは1k抵抗を介してアースに対してArduinoのデジタルピンD7に接続され、緑色のLEDは同じ方法でArduinoのD6に接続されます。Arduinoのシリアルピン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指紋センサーライブラリを 使用しました。以下の完全なコードを確認できます。ここでは、Arduinoプログラムの主な機能について説明します。
セットアップ機能では、定義されたピンに指示を与え、LCDおよび指紋モジュールを開始しました。
その後、 void loop() 関数で、checkキーを待ち、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); delay(200); digitalWrite(ブザー、LOW); digitalWrite(indFinger、HIGH); for(int i = 0; i <3; i ++)………………..。
与えられた voidcheckKeys() 関数は、登録またはDELキーが押されたかどうか、および押された場合の処理をチェックするために使用されます。ENROLLキーが押された場合、 Enroll() 関数が呼び出され、DELキーが 押された場合、 delete() 関数が呼び出されます。
void checkKeys(){if(digitalRead(enroll)== 0){lcd.clear(); lcd.print( "お待ちください"); delay(1000); while(digitalRead(enroll)== 0); Enroll(); } else if(digitalRead(del)== 0){lcd.clear(); lcd.print( "お待ちください"); delay(1000); delet(); }}
指定された関数は、削除するIDを入力し、レコードから指を削除する uint8_t deleteFingerprint(uint8_t id) 関数を呼び出すために使用さ れます。
void delet(){int count = 0; lcd.clear(); lcd.print( "指を削除"); lcd.setCursor(0,1); lcd.print( "場所:"); while(1){lcd.setCursor(9,1); lcd.print(count); if(digitalRead(up)== 0){count ++; if(count> 25)count = 0; delay(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( "Deleted!"); lcd.clear(); lcd.print( "Figer 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( "後で再試行"); delay(2000); pを返します。}}
指定された関数は、指紋画像を取得してテンプレートに変換し、選択したIDで指紋モジュールメモリに保存するために使用されます。
uint8_t getFingerprintEnroll(){int p = -1; lcd.clear(); lcd.print( "指ID:"); lcd.print(id); lcd.setCursor(0,1); lcd.print( "指を置く"); delay(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); delay(500); digitalWrite(ブザー、LOW); delay(1000); while(1){if(digitalRead(sw1)== 0)………………..。
以下の完全なコードとデモビデオを確認してください。