現在、ほとんどの車にはキーレスエントリーとプッシュボタンイグニッションシステムが搭載されており、キーをポケットに入れて持ち運ぶだけで、ドアハンドルの容量センサーに指を置くだけで車のドアを開けることができます。このプロジェクトでは、RFIDと指紋センサーを使用して、このシステムにさらにいくつかのセキュリティ機能を追加します。RFIDセンサーはユーザーのライセンスを検証し、指紋センサーは車両内の許可された人のみを許可します。
この指紋ベースの自動車点火システムでは、R305指紋センサーとEM18RFIDリーダーを備えたArduinoを使用しています。
使用した材料
- Arduino Nano
- R305指紋センサー
- EM18RFIDリーダー
- 16 * 2英数字LCD
- DCモーター
- L293DモータードライバーIC
- VeroboardまたはBreadboard(利用可能な方)
- 接続線
- 12VDCバッテリー
EM18RFIDリーダーモジュール
RFIDは無線周波数識別の略です。これは、デジタルデータがRFIDタグにエンコードされ、電波を使用してRFIDリーダーでデコードできる技術を指します。RFIDは、タグからのデータがデバイスによってデコードされるバーコードに似ています。RFIDテクノロジーは、セキュリティシステム、従業員出席システム、RFIDドアロック、RFIDベースの投票機、料金徴収システムなどのさまざまなアプリケーションで使用されています。
EM18リーダーはRFIDタグに格納されているID情報を読み取ることができるモジュールです。RFIDタグには、タグがリーダーの範囲内にある場合に、EM18リーダーモジュールでデコードできる12桁の一意の番号が格納されます。このモジュールは、アンテナを内蔵した125 kHzの周波数で動作し、5ボルトのDC電源を使用して動作します。
シリアルデータ出力を提供し、8〜12cmの範囲があります。シリアル通信パラメータは、8データビット、1ストップビット、および9600ボーレートです。
EM18の機能:
- 動作電圧:+ 4.5V〜 + 5.5V DC
- 消費電流:50mA
- 動作周波数:125KHZ
- 動作温度:0-80℃
- 通信ボーレート:9600
- 読み取り距離:8〜12 cm
- アンテナ:内蔵
EM18ピン配列:
ピンの説明:
VCC:4.5〜5VDC電圧入力
GND:グランドピン
ブザー:ブザーまたはLEDピン
TX:RS232用EM18のシリアルデータトランスミッタピン(出力)
SEL:RS232を使用する場合はHIGHである必要があります(WEIGANDを使用する場合はLOW)
データ0:WEIGANDデータ0
データ1:WEIGANDデータ1
RFIDとタグの詳細については、以前のRFIDベースのプロジェクトを確認してください。
Arduinoを使用してRFIDタグ固有の12桁のコードを見つける
Arduino車の点火システム用にArduinoをプログラミングする前に、まず、12桁のRFIDタグの一意のコードを見つける必要があります。前に説明したように、RFIDタグには12桁の一意のコードが含まれており、RFIDリーダーを使用してデコードできます。リーダーの近くでRFIDタグをスワイプすると、リーダーは出力シリアルポートを介して一意のコードを提供します。まず、回路図に従ってArduinoをRFIDリーダーに接続してから、以下のコードをArduinoにアップロードします。
int count = 0; char card_no; void setup(){Serial.begin(9600); } void loop(){if(Serial.available()){count = 0; while(Serial.available()&& count <12){card_no = Serial.read(); count ++; delay(5); } Serial.print(card_no); }}
コードが正常にアップロードされたら、シリアルモニターを開き、ボーレートを9600に設定します。次に、リーダーの近くでカードをスワイプします。その後、12桁のコードがシリアルモニターに表示され始めます。使用されているすべてのRFIDタグに対してこのプロセスを実行し、後で参照できるように書き留めておきます。
回路図
この指紋ベースの点火システムの回路図を以下に示します。
私の場合、以下に示すように、回路全体をパフォーマンスボードにはんだ付けしました。
指紋センサーモジュール
指紋センサーモジュールまたは指紋スキャナーは、指の印刷画像をキャプチャし、それを同等のテンプレートに変換して、Arduinoによって選択されたID(場所)のメモリに保存するモジュールです。ここでは、指紋の画像を取得し、それをテンプレートに変換し、場所を保存するなど、すべてのプロセスがArduinoによって命令されます。
以前は同じR305センサーを使用して、投票機、出席システム、セキュリティシステムなどを構築しました。ここで、指紋ベースのすべてのプロジェクトを確認できます。
指紋をセンサーに登録する:
プログラムを続行する前に、指紋センサーに必要なライブラリをインストールする必要があります。ここでは、R305指紋センサーを使用するために「 Adafruit_Fingerprint.h 」を使用しました。したがって、まず最初に、以下のリンクを使用してライブラリをダウンロードします。
- Adafruit指紋センサーライブラリ
ダウンロードが成功したら、Arduino IDEで、 [ファイル] > [ツール]> [ライブラリを含める]> [。zipライブラリ を 追加]に 移動し、zipファイルの場所を選択してライブラリをインストールします。
ライブラリのインストールが成功したら、以下の手順に従って、センサーメモリに新しい指紋を登録します。
1. Arduino IDEで、[ファイル] > [例] > [Adafruit 指紋 センサー ライブラリ] > [登録]に移動します。
2.コードをArduinoにアップロードし、9600のボーレートでシリアルモニターを開きます。
重要:プログラムのソフトウェアシリアルピンをSoftwareSerial mySerial(12、11)に変更します。
3.指紋を保存する指紋のIDを入力する必要があります。これが私の最初の指紋なので、左上隅に1と入力し、[送信]ボタンをクリックします。
4.次に、指紋センサーのライトが点滅します。これは、センサーに指を置く必要があることを示します。その後、登録が成功したことを確認するまで、シリアルモニターに表示される手順に従います。
RFIDキーレス点火のプログラミング
この生体認証システムの完全なコードは、チュートリアルの最後に記載されています。ここでは、コードのいくつかの重要な部分について説明します。
まず、必要なすべてのライブラリを含めることです。私の場合、R305指紋センサーを使用するための「 Adafruit_Fingerprint.h 」を含めました。次に、指紋センサーが接続されるシリアルポートを構成します。私の場合、12をRXピン、11をTXピンとして宣言しました。
#include #include
次のステップでは、コード全体で使用されるすべての変数を宣言します。次に、ArduinoでLCD接続ピンを定義し、続いて LiquidCrystal クラスのオブジェクトを宣言します。
文字入力; int count = 0; int a = 0; const int rs = 6、en = 7、d4 = 2、d5 = 3、d6 = 4、d7 = 5; LiquidCrystal lcd(rs、en、d4、d5、d6、d7);
次に、 loop() 内に、RFIDタグの一意の12桁のコードを取得するコードが記述され、それらが配列に格納されます。ここで、配列の要素は、認証された人物の詳細を取得するために、メモリに保存されている一意のコードと照合されます。
カウント= 0; while(Serial.available()&& count <12) { input = Serial.read(); count ++; delay(5); }
次に、受信した配列が保存されているタグコードと比較されます。コードが一致する場合、ライセンスは有効であると見なされ、ユーザーは有効な指紋を付けることができます。それ以外の場合は、無効なライセンスが表示されます。
if((strncmp(input、 "3F009590566C"、12)== 0)&&(a == 0)) { lcd.setCursor(0、0); lcd.print( "ライセンスが有効"); lcd.setCursor(0、1); lcd.print( "ようこそ"); delay(1000); a = 1; 指紋(); }
次のステップでは、すでに登録されている指紋の有効な指紋IDを返す関数 getFingerprintID が書き込まれます。
int getFingerprintID() { uint8_t p = finger.getImage(); if(p!= FINGERPRINT_OK)return -1; p = finger.image2Tz(); if(p!= FINGERPRINT_OK)return -1; p = finger.fingerFastSearch(); if(p!= FINGERPRINT_OK)return -1; finger.fingerIDを返します。 }
関数の内部で 指紋() 、成功したRFIDの試合後に呼び出され、 getFingerprintIDの 機能は、有効な指紋IDを取得するために呼び出されます。次に、 if-elseループ を使用して比較され、認証された個人データに関する情報が取得されます。データが一致すると、車両が点火されます。一致しない場合は、間違った指紋の入力を求められます。
intフィンガープリントID = getFingerprintID(); delay(50); if(fingerprintID == 1) { lcd.setCursor(0、0); lcd.print( "アクセスが許可されました"); lcd.setCursor(0、1); lcd.print( "Vehicle Started"); digitalWrite(9、HIGH); digitalWrite(10、LOW); while(1); }
これが、このRFIDカーイグニッションシステムの仕組みであり、車に2層のセキュリティを追加します。
完全なコードとデモビデオを以下に示します。