現(xiàn)在大部分汽車都配備了無(wú)鑰匙進(jìn)入和一鍵式點(diǎn)火系統(tǒng),您只需將鑰匙放在口袋里,只需將手指放在門把手上的電容式傳感器上即可打開車門。在此項(xiàng)目中,我們通過(guò)使用 RFID 和指紋傳感器為該系統(tǒng)添加了更多安全功能。RFID 傳感器將驗(yàn)證用戶的許可證,指紋傳感器僅允許授權(quán)人員進(jìn)入車輛。
對(duì)于這個(gè)基于指紋的汽車點(diǎn)火系統(tǒng),我們使用帶有 R305 指紋傳感器和 EM18 RFID 閱讀器的 Arduino。
使用的材料
Arduino納米
R305 指紋傳感器
EM18 RFID閱讀器
16*2 字母數(shù)字液晶屏
直流電機(jī)
L293D電機(jī)驅(qū)動(dòng)IC
Veroboard 或面包板(無(wú)論哪個(gè)可用)
連接線
12V直流電池
EM18 RFID閱讀器模塊
RFID代表射頻識(shí)別。它指的是一種技術(shù),其中數(shù)字?jǐn)?shù)據(jù)被編碼在 RFID 標(biāo)簽中,并且可以由 RFID 閱讀器使用無(wú)線電波對(duì)其進(jìn)行解碼。RFID 類似于條形碼,其中來(lái)自標(biāo)簽的數(shù)據(jù)由設(shè)備解碼。RFID技術(shù)用于各種應(yīng)用,如安全系統(tǒng)、員工考勤系統(tǒng)、 RFID門鎖、基于RFID的投票機(jī)、收費(fèi)系統(tǒng)等。
EM18 Reader是一個(gè)可以讀取存儲(chǔ)在RFID標(biāo)簽中的ID信息的模塊。RFID 標(biāo)簽存儲(chǔ)一個(gè) 12 位唯一編號(hào),當(dāng)標(biāo)簽進(jìn)入讀取器的范圍內(nèi)時(shí),該編號(hào)可由 EM18 讀取器模塊解碼。該模塊以 125 kHz 的頻率運(yùn)行,具有內(nèi)置天線,并使用 5 伏直流電源供電。
它提供串行數(shù)據(jù)輸出,范圍為 8-12 厘米。串行通信參數(shù)為 8 個(gè)數(shù)據(jù)位、1 個(gè)停止位和 9600 波特率。
EM18 特點(diǎn):
工作電壓:+4.5V 至 +5.5V DC
電流消耗:50mA
工作頻率:125KHZ
工作溫度:0-80℃
通訊波特率:9600
閱讀距離:8-12厘米
天線:內(nèi)置
EM18 引腳排列:
引腳說(shuō)明:
VCC:4.5-5V直流電壓輸入
GND:接地引腳
蜂鳴器:蜂鳴器或 LED 引腳
TX:EM18 串行數(shù)據(jù)發(fā)送引腳,用于 RS232(輸出)
SEL:使用 RS232 必須為 HIGH(如果使用 WEIGAND,則為 LOW)
數(shù)據(jù)0:WEIGAND數(shù)據(jù)0
數(shù)據(jù) 1:WEIGAND 數(shù)據(jù) 1
要了解有關(guān) RFID 和標(biāo)簽的更多信息,請(qǐng)查看我們以前 基于 RFID 的項(xiàng)目。
使用 Arduino 找出 RFID 標(biāo)簽唯一的 12 位代碼
在為Arduino 汽車點(diǎn)火系統(tǒng)編程 Arduino 之前,首先,我們需要找出 12 位 RFID 標(biāo)簽的唯一代碼。正如我們之前所討論的,RFID 標(biāo)簽包含一個(gè) 12 位的唯一代碼,可以使用 RFID 閱讀器對(duì)其進(jìn)行解碼。當(dāng)我們?cè)陂喿x器附近刷RFID標(biāo)簽時(shí),閱讀器將通過(guò)輸出串口給出唯一代碼。首先,根據(jù)電路圖將 Arduino 連接到 RFID 閱讀器,然后將以下給定代碼上傳到 Arduino。
整數(shù)計(jì)數(shù) = 0;
?
char card_no[12]; 無(wú)效設(shè)置() { 序列號(hào).開始(9600); } 無(wú)效循環(huán)() { 如果(串行。可用()) { 計(jì)數(shù) = 0; 而(Serial.available() && 計(jì)數(shù) < 12) { card_no[count] = Serial.read(); 計(jì)數(shù)++; 延遲(5); } 序列號(hào).print(card_no); } }
?
成功上傳代碼后,打開串口監(jiān)視器,將波特率設(shè)置為9600。然后在讀卡器附近刷卡。然后 12 位代碼將開始顯示在串行監(jiān)視器上。對(duì)所有使用過(guò)的 RFID 標(biāo)簽執(zhí)行此過(guò)程,并記下它以供將來(lái)參考。
電路原理圖
該基于指紋的點(diǎn)火系統(tǒng)的電路圖如下所示:
就我而言,我已將完整的電路焊接在 perf 板上,如下所示:
指紋傳感器模塊
指紋傳感器模塊或指紋掃描儀 是一個(gè)模塊,它捕獲指紋圖像,然后將其轉(zhuǎn)換為等效模板,并由 Arduino 將它們保存到其內(nèi)存中的選定 ID(位置)上。在這里,所有過(guò)程都由 Arduino 控制,例如拍攝指紋圖像、將其轉(zhuǎn)換為模板、存儲(chǔ)位置等。
我們之前使用相同的 R305 傳感器構(gòu)建了投票機(jī)、考勤系統(tǒng)、安全系統(tǒng)等。您可以在此處查看所有基于指紋的項(xiàng)目。
將指紋注冊(cè)到傳感器:
在繼續(xù)程序之前,我們需要安裝指紋傳感器所需的庫(kù)。在這里,我們使用“ Adafruit_Fingerprint.h ”來(lái)使用 R305 指紋傳感器。所以首先使用下面給出的鏈接下載庫(kù):
Adafruit 指紋傳感器庫(kù)
成功下載后,在 Arduino IDE 中,轉(zhuǎn)到文件》 工具 》 包含庫(kù) 》 添加 .zip 庫(kù),然后選擇 zip 文件位置以安裝庫(kù)。
成功安裝庫(kù)后,請(qǐng)按照以下步驟在傳感器內(nèi)存中注冊(cè)新指紋。
1.在 Arduino IDE 中,轉(zhuǎn)到文件》示例》 Adafruit 指紋 傳感器 庫(kù)》注冊(cè)。
2.將代碼上傳到Arduino,打開串口監(jiān)視器,波特率為9600。
重要提示:將程序中的軟件串行引腳更改為 SoftwareSerial mySerial(12, 11)。
3.您應(yīng)該輸入要存儲(chǔ)指紋的指紋 ID。因?yàn)檫@是我的第一個(gè)指紋,所以我在左上角輸入 1,然后單擊發(fā)送按鈕。
4.然后指紋傳感器上的燈會(huì)閃爍,表示您應(yīng)該將手指放在傳感器上,然后按照串行監(jiān)視器上顯示的步驟操作,直到它確認(rèn)您成功注冊(cè)。
RFID無(wú)鑰匙點(diǎn)火編程
此生物識(shí)別點(diǎn)火系統(tǒng)的完整代碼在本教程的末尾給出。在這里,我們將解釋代碼的幾個(gè)重要部分。
首先是包含所有必需的庫(kù)。在我的例子中,我包含了“?Adafruit_Fingerprint.h?”用于使用 R305 指紋傳感器。然后配置將連接指紋傳感器的串行端口。就我而言,我已將 12 聲明為 RX 引腳,將 11 聲明為 TX 引腳。
?
#include#include SoftwareSerial mySerial(12,11); Adafruit_Fingerprint 手指 = Adafruit_Fingerprint(&mySerial);
?
在下一步中,聲明將在整個(gè)代碼中使用的所有變量。然后用 Arduino 定義 LCD 連接引腳,然后聲明LiquidCrystal類的對(duì)象。
?
字符輸入[12]; 整數(shù)計(jì)數(shù) = 0; 整數(shù)a = 0; const int rs = 6, en = 7, d4 = 2, d5 = 3, d6 = 4, d7 = 5; LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
?
接下來(lái),在loop() 中,編寫代碼以獲取 RFID 標(biāo)簽的唯一 12 位代碼,并將它們存儲(chǔ)在一個(gè)數(shù)組中。在這里,數(shù)組的元素將與內(nèi)存中存儲(chǔ)的唯一代碼進(jìn)行匹配,以獲取經(jīng)過(guò)身份驗(yàn)證的人員詳細(xì)信息。
?
計(jì)數(shù) = 0; while (Serial.available() && count < 12) { input[count] = Serial.read(); 計(jì)數(shù)++; 延遲(5); }
?
然后,將接收到的數(shù)組與存儲(chǔ)的標(biāo)簽代碼進(jìn)行比較。如果代碼匹配,那么許可證被認(rèn)為是有效的,這允許用戶放置有效的指紋。否則,它將顯示無(wú)效的許可證。
?
if ((strncmp(input, "3F009590566C", 12) == 0) && (a == 0)) { lcd.setCursor(0, 0); lcd.print("許可證有效"); lcd.setCursor(0, 1); lcd.print("歡迎"); 延遲(1000); a = 1; 指紋(); }
?
在下一步中,將編寫一個(gè)函數(shù)getFingerprintID?,該函數(shù)將為已注冊(cè)的指紋返回一個(gè)有效的指紋 ID。
?
int getFingerprintID() { uint8_t p = finger.getImage(); 如果(p!= FINGERPRINT_OK)返回-1; p = 手指.image2Tz(); 如果(p!= FINGERPRINT_OK)返回-1; p = finger.fingerFastSearch(); 如果(p!= FINGERPRINT_OK)返回-1; 返回finger.fingerID; }
?
在RFID 匹配成功后調(diào)用的函數(shù)指紋()內(nèi)部,調(diào)用getFingerprintID函數(shù)以獲取有效的指紋 ID。然后使用if-else 循環(huán)進(jìn)行比較,得到經(jīng)過(guò)身份驗(yàn)證的人員數(shù)據(jù)的信息,如果數(shù)據(jù)匹配,則車輛被點(diǎn)燃,否則將提示輸入錯(cuò)誤的指紋。
?
int指紋ID = getFingerprintID(); 延遲(50); if (fingerprintID == 1) { lcd.setCursor(0, 0); lcd.print("已授予訪問權(quán)限"); lcd.setCursor(0, 1); lcd.print("車輛啟動(dòng)"); 數(shù)字寫入(9,高); 數(shù)字寫入(10,低); 而(1); }
?
這就是這個(gè)RFID 汽車點(diǎn)火系統(tǒng)的工作原理,它為您的汽車增加了兩層安全性。
#include#include 字符輸入[12]; 整數(shù)計(jì)數(shù) = 0; 整數(shù)a = 0; const int rs = 6, en = 7, d4 = 2, d5 = 3, d6 = 4, d7 = 5; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); SoftwareSerial mySerial(12,11); Adafruit_Fingerprint 手指 = Adafruit_Fingerprint(&mySerial); 無(wú)效設(shè)置() { pinMode(9,輸出); pinMode(10,輸出); 數(shù)字寫入(9,低); 數(shù)字寫入(10,低); 序列號(hào).開始(9600); lcd.begin(16, 2); lcd.setCursor(0, 0); lcd.print("歡迎來(lái)到"); lcd.setCursor(0, 1); lcd.print("電路文摘"); 延遲(2000); lcd.clear(); lcd.setCursor(0, 0); lcd.print("請(qǐng)刷卡"); lcd.setCursor(0, 1); lcd.print("你的許可證"); } 無(wú)效循環(huán)() { if (Serial.available()) { 計(jì)數(shù) = 0; while (Serial.available() && count < 12) { 輸入[計(jì)數(shù)] = Serial.read(); 計(jì)數(shù)++; 延遲(5); } 如果(計(jì)數(shù) == 12) { if ((strncmp(input, "3F009590566C", 12) == 0) && (a == 0)) { lcd.setCursor(0, 0); lcd.print("許可證有效"); lcd.setCursor(0, 1); lcd.print("歡迎"); 延遲(1000); a = 1; 指紋(); } 否則 if ((strncmp(input, "0B0028883E95", 12) == 0) && (a == 0)) { lcd.setCursor(0, 0); lcd.print("許可證有效"); lcd.setCursor(0, 1); lcd.print("歡迎"); 延遲(1000); a = 1; 指紋(); } 別的 { 如果 (a != 1) { lcd.setCursor(0, 0); lcd.print("許可證無(wú)效"); lcd.setCursor(0, 1); lcd.print("再試一次?。。?); 延遲(2000); lcd.clear(); lcd.setCursor(0, 0); lcd.print("請(qǐng)刷卡"); lcd.setCursor(0, 1); lcd.print("你的許可證"); } } } } } int getFingerprintID() { uint8_t p = finger.getImage(); 如果(p!= FINGERPRINT_OK)返回-1; p = 手指.image2Tz(); 如果(p!= FINGERPRINT_OK)返回-1; p = finger.fingerFastSearch(); 如果(p!= FINGERPRINT_OK)返回-1; 返回finger.fingerID; } 無(wú)效指紋() { 手指.開始(57600); 而(a==1) { int指紋ID = getFingerprintID(); 延遲(50); 如果(指紋 ID == 1) { lcd.setCursor(0, 0); lcd.print("已授予訪問權(quán)限"); lcd.setCursor(0, 1); lcd.print("車輛啟動(dòng)"); 數(shù)字寫入(9,高); 數(shù)字寫入(10,低); 而(1); } else if (fingerprintID == 2) { lcd.setCursor(0, 0); lcd.print("已授予訪問權(quán)限"); lcd.setCursor(0, 1); lcd.print("車輛啟動(dòng)"); 數(shù)字寫入(9,高); 數(shù)字寫入(10,低); 而(1); } 別的 { lcd.setCursor(0, 0); lcd.print("請(qǐng)放置一個(gè)"); lcd.setCursor(0, 1); lcd.print("有效手指"); } } }
?
評(píng)論
查看更多