出席システムは、オフィスや学校での存在を示すために一般的に使用されるシステムです。出席記録に出席を手動でマークすることから、ハイテクアプリケーションや生体認証システムを使用することまで、これらのシステムは大幅に改善されました。以前のプロジェクトでは、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キーには3つの機能があります。 ENROLLキーは、新しい人をシステムに登録するために使用されます。したがって、ユーザーが新しい指を登録したい場合は、ENROLLキーを押す必要があります。次に、LCDは、ユーザーが指紋画像を保存するIDを要求します。この時点でユーザーが先に進みたくない場合は、もう一度ENROLLキーを押して戻ることができます。今回は、ENROLLキーはBackキーとして動作します。つまり、ENROLLキーには登録機能と戻る機能の両方があります。登録キーに加えて、シリアルモニターを介して出席データをダウンロードするためにも使用されます。同様に、DEL / OKキーにも、ユーザーが新しい指を登録するときと同じ二重機能があります。次に、UPとDOWNという別の2つのキーを使用して指IDを選択する必要があります。ここで、ユーザーはDEL / OKキー(今回はこのキーはOKのように動作します)を押して、選択したIDに進む必要があります。また、Delキーは、ArduinoのEEPROMからデータをリセットまたは削除するために使用されます。
FingerPrintモジュール:
指紋センサーモジュールは、指の印刷画像をキャプチャし、それを同等のテンプレートに変換して、Arduinoによって選択されたIDに従ってメモリに保存します。指のプリントの画像を撮り、それをテンプレートに変換し、IDとして保存するなど、すべてのプロセスはArduinoによって命令されます。指紋モジュールを使用して、さらにいくつかのプロジェクトを確認できます。
指紋ベースのセキュリティシステム
指紋ベースの生体認証投票機
ここでは、指紋モジュールが指の画像を撮影する準備ができていることを示す黄色のLEDを追加しました。ブザーはさまざまな表示にも使用されます。Arduinoはこのシステムの主要コンポーネントであり、システム全体の制御を担当します。
指紋ベースの出席システムの動作
この指紋出席システムプロジェクトの作業かなり簡単です。まず、ユーザーはプッシュボタンを使用してユーザーの指紋を登録する必要があります。これを行うには、ユーザーがENROLLキーを押す必要があります。次に、LCDが指紋のIDを入力して、ID名でメモリに保存するように要求します。そのため、ユーザーはUP / DOWNキーを使用してIDを入力する必要があります。 IDを選択した後、ユーザーはOKキー(DELキー)を押す必要があります。これで、LCDは指紋モジュールの上に指を置くように要求します。ここで、ユーザーは指紋モジュールの上に指を置く必要があり、モジュールは指の画像を取得します。これで、LCDは指紋モジュールから指を離すように指示し、もう一度指を置くように要求します。ここで、ユーザーはもう一度指を置く必要があり、モジュールは画像を取得してテンプレートに変換し、選択したIDで指紋モジュールのメモリに保存します。これでユーザーが登録され、指紋モジュールに指を置くことで出席をフィードできます。同じ方法で、すべてのユーザーがシステムに登録されます。
ここで、ユーザーが保存されているIDまたは指紋のいずれかを削除または削除する場合は、DELキーを押す必要があります。Deleteキーを押すと、LCDは削除する必要のあるIDを選択するように求めます。ここで、ユーザーはIDを選択し、OKキー(同じDELキー)を押す必要があります。これで、LCDは指紋が正常に削除されたことを通知します。
この指紋出席システムプロジェクトでの出席の仕組み:
ユーザーが指紋モジュールの上に指を置くと、指紋モジュールが指の画像をキャプチャし、システム内でこの指紋に関連付けられているIDがあるかどうかを検索します。指紋IDが検出されると、LCDに出席が登録されたことが表示されると同時に、ブザーが1回鳴り、システムが再び入力できるようになるまでLEDがオフになります。
指紋モジュールに加えて、時刻と日付にもRTCモジュールを使用しました。時刻と日付はシステムで継続的に実行されています。そのため、Arduinoは、真のユーザーが指紋の上に指を置くたびに時間と日付を取り、割り当てられたメモリスロットのEEPROMに保存します。
ここでは、このシステムに30日間で5つのユーザースペースを作成しました。ArduinoのRESETボタンを押してすぐに登録キーを押すと、ArduinoEEPROMメモリからシリアルモニターを介して出席データをダウンロードする責任があります。
メモリ管理:
Arduino UNOには1023バイトのメモリがあり、そのうち1018バイトでデータを保存し、5つのユーザー出席データを30日間取得しました。また、すべての出席者が日時を記録するため、これは7バイトのデータになります。
したがって、必要な合計メモリは
5 * 30 * 7 = 1050なので、ここではさらに32バイトが必要です
ただし、4人のユーザーを使用する場合は、
4 * 30 * 7 = 840
ここでは、5人のユーザーのメモリを使用してこのプロジェクトのデモンストレーションを行いました。これにより、5番目のユーザーの32バイトまたは5つの出席レコードを保存できなくなります。
コードのいくつかの行を変更することで、4人のユーザーが試してみることができます。変更が必要なコードにコメントを付けました。
指紋出席システムプロジェクトの回路図と説明
上の図に示すように、この指紋ベースの出席システムプロジェクトの回路は非常に単純です。プロジェクトのすべてのプロセスを制御するためのArduino、登録、削除、IDの選択と出席のためのプッシュボタン、警告のためのブザー、表示用のLED、ユーザーに指示して結果のメッセージを表示するためのLCDがあります。
回路図に示すように、プッシュボタンはアースに対してArduinoのピンA0(ENROL)、A1(DEL)、A2(UP)、A3(DOWN)に直接接続され、黄色のLEDはデジタルピンD7に接続されています1k抵抗を介したグランドに対するArduinoの ArduinoのシリアルピンD2およびD3(ソフトウェアシリアル)に直接接続された指紋モジュールのRxおよびTx。5V電源は、Arduinoボードから取得した指紋モジュールに電力を供給するために使用されます。A5ピンにもブザーが接続されています。16x2 LCDは4ビットモードで構成され、そのRS、EN、D4、D5、D6、およびD7は、ArduinoのデジタルピンD13、D12、D11、D10、D9、およびD8に直接接続されています。
コードの説明:
arduinoの指紋出席システムコードは、後続のセクションに記載されています。コードはコメントでよく説明されていますが、ここではコードのいくつかの重要な部分について説明します。指紋モジュールをArduinoボードに接続するために指紋ライブラリを使用しました。
まず、ヘッダーファイルをインクルードし、入力ピンと出力ピンを定義し、マクロと宣言された変数を定義します。この後、セットアップ機能で、定義されたピンに指示を与え、LCDと指紋モジュールを開始します
その後、出席データをダウンロードするためのコードを作成する必要があります。
void setup(){delay(1000); lcd.begin(16,2); Serial.begin(9600); pinMode(enroll、INPUT_PULLUP); pinMode(up、INPUT_PULLUP); pinMode(down、INPUT_PULLUP); pinMode(del、INPUT_PULLUP); pinMode(match、INPUT_PULLUP); pinMode(ブザー、出力); pinMode(indFinger、OUTPUT); digitalWrite(ブザー、LOW); if(digitalRead(enroll)== 0){digitalWrite(buzzer、HIGH); delay(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( "システムリセット"); delay(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); delay(100); digitalWrite(ブザー、LOW); lcd.clear(); lcd.print( "ID:"); lcd.print(result); lcd.setCursor(0,1); lcd.print( "お待ちください…."); delay(1000); 出席(結果); lcd.clear(); lcd.print( "出席"); lcd.setCursor(0,1); lcd.print( "登録済み"); delay(1000); digitalWrite(indFinger、HIGH); 戻る; }
与えられた voidcheckKeys() 関数は、登録または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( "指を置く"); delay(2000); while(p!= FINGERPRINT_OK){p = finger.getImage();………………..。
与えられた機能は、EEPROMの割り当てられたスロットに出席日時を保存するために使用されます
voidattendance(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 ++));………..。