您已經(jīng)在一些酒店和其他地方看到了RFID門鎖機(jī)制,在那里您不需要鑰匙即可解鎖房間。你會(huì)得到一張卡,你只需要把它放在一個(gè)RFID閱讀器盒前面,鎖就會(huì)通過(guò)嗶嗶聲和LED閃爍解鎖。此RFID門鎖可以在家中輕松制作,您可以將其安裝在任何門上。這些門鎖只是電動(dòng)門鎖,當(dāng)您對(duì)其施加一些電壓(通常為 12v)時(shí)會(huì)打開(kāi)。
在這個(gè)項(xiàng)目中,我們使用Arduino和繼電器來(lái)觸發(fā)電動(dòng)門鎖和RFID進(jìn)行身份驗(yàn)證,因此您的RFID標(biāo)簽將充當(dāng)鑰匙。如果您在RFID閱讀器附近放置了錯(cuò)誤的RFID卡,蜂鳴器將發(fā)出嗶嗶聲以提醒錯(cuò)誤的卡。
所需材料:
Arduino UNO
EM-18 帶標(biāo)簽的讀卡器模塊
繼電器 5v
發(fā)光二極管
蜂鳴器
連接線
Arduino RFID門鎖電路圖
EM-18 無(wú)線射頻識(shí)別讀寫(xiě)器:
RFID代表射頻識(shí)別。每張RFID卡中都嵌入了一個(gè)唯一的ID,RFID閱讀器用于讀取RFID卡號(hào)。EM-18 RFID閱讀器的工作頻率為125 KHz,并配有片上天線,可采用5V電源供電。它提供串行輸出以及 weigand 輸出。范圍約為8-12厘米。串行通信參數(shù)為9600bps,8個(gè)數(shù)據(jù)位,1個(gè)停止位。
EM-18 RFID閱讀器提供的輸出為12位ASCII格式。在 12 位數(shù)字中,前 10 位數(shù)字是卡號(hào),后兩位數(shù)字是卡號(hào)的異或結(jié)果。最后兩位數(shù)字用于錯(cuò)誤檢查。
例如,從讀卡器讀取的卡號(hào)是0200107D0D62,那么卡上的卡號(hào)將如下所示。
02 – 序言
00107D0D = 十進(jìn)制1080589。
62 是 (02 XOR 00 XOR 10 XOR 7D XOR 0D) 的 XOR 值。
因此,卡上的數(shù)字是0001080589
代碼和說(shuō)明:
完整的RFID門鎖Arduino代碼在本項(xiàng)目結(jié)束時(shí)給出。
在下面的代碼中,RFID標(biāo)簽編號(hào)存儲(chǔ)在“char標(biāo)簽”中?!?80088F889E1”是我存儲(chǔ)在應(yīng)答器微芯片中的RFID標(biāo)簽號(hào)碼。標(biāo)簽號(hào)的長(zhǎng)度為 12,我們定義了像“char input [12]”這樣的數(shù)組,12 定義了 no。字符或數(shù)組大小。
char tag[] ="180088F889E1";
char input[12];
int count = 0;
boolean flag = 0;
現(xiàn)在,在下面的代碼中,我們?cè)O(shè)置了Arduino UNO板的引腳用于操作,并且serial.begin()用于串行數(shù)據(jù)傳輸。此處,引腳 2 用于繼電器操作,引腳 3 用于備用紅色 LED,引腳 4 用于蜂鳴器。
void setup()
{
pinMode(2,OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
Serial.begin(9600);
}
代碼的條件主體是 void loop() ,對(duì)于備用紅色 LED,引腳 3 保持 HIGH 狀態(tài),直到執(zhí)行任何任務(wù)。
我們將使用 if 條件檢查是否有任何可用的串行數(shù)據(jù)。意味著我們將檢查是否有任何RFID標(biāo)簽被掃描。如果有任何串行數(shù)據(jù)(RFID標(biāo)簽號(hào)),我們會(huì)將其保存在我們定義的用于保存RFID標(biāo)簽編號(hào)的input[]數(shù)組中。
void loop(
{
digitalWrite(3,1);
if(Serial.available())
{
count = 0;
while(Serial.available() && count < 12)
{
input[count] = Serial.read();
count++;
delay(5);
}
現(xiàn)在我們將比較掃描的RFID卡號(hào)。使用我們?cè)?char tag[] 數(shù)組中定義的數(shù)字。如果兩個(gè) umber 匹配,則我們將標(biāo)志變量設(shè)置為 1,如果掃描了錯(cuò)誤的卡或兩個(gè)數(shù)字都不匹配,則我們將標(biāo)志變量設(shè)置為 0。
if(count == 12)
{
count =0;
flag = 1;
while(count<12 && flag !=0)?
{
if(tag[count]==input[count])
flag = 1;
else
flag= 0;
}
如果您放置正確的 RFID 標(biāo)簽,則標(biāo)志等于 1,在這種情況下,引腳 2 變?yōu)楦唠娖剑ɡ^電器通過(guò)該標(biāo)簽運(yùn)行),引腳 3 此時(shí)變?yōu)榈碗娖?,延遲 5 秒后,兩個(gè)引腳將恢復(fù)其初始狀態(tài)。繼電器將進(jìn)一步連接到電動(dòng)門鎖,因此在繼電器打開(kāi)的情況下,門鎖將被打開(kāi),5 秒后它將再次被鎖定。
if(flag == 1)
{
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
delay(5000);
digitalWrite(2,LOW);
}
如果您放置了錯(cuò)誤的RFID 卡,標(biāo)志將為零,蜂鳴器開(kāi)始發(fā)出嗶嗶聲,提醒 RFID 卡錯(cuò)誤。
if(flag == 0)
{
for(int k =0; k<= 10; k++)
{
digitalWrite(4,HIGH);
delay(300);
digitalWrite(4,LOW);
delay(300);
}
}
基于Arduino的RFID門鎖的工作原理
RFID系統(tǒng)由兩個(gè)組件組成:RFID標(biāo)簽和閱讀器。RFID標(biāo)簽由集成電路和天線組成,集成電路用于存儲(chǔ)數(shù)據(jù),天線用于將數(shù)據(jù)傳輸?shù)絉FID閱讀器模塊。每當(dāng)RFID標(biāo)簽進(jìn)入RFID閱讀器的范圍內(nèi)時(shí),RF信號(hào)為標(biāo)簽供電,然后標(biāo)簽開(kāi)始串行傳輸數(shù)據(jù)。數(shù)據(jù)進(jìn)一步由RFID閱讀器接收,閱讀器將其發(fā)送到Arduino板。之后,根據(jù)微控制器中的代碼執(zhí)行不同的任務(wù)。
在我們的電路中,我們已經(jīng)在代碼中保存了RFID標(biāo)簽的值。因此,每當(dāng)該特定標(biāo)簽進(jìn)入范圍內(nèi)時(shí),繼電器就會(huì)被激活。在這里,我們將LED與繼電器連接起來(lái)進(jìn)行演示,但是該LED可以用電動(dòng)門鎖代替,因此每當(dāng)繼電器被激活時(shí),鎖都會(huì)打開(kāi)。
如果我們掃描任何其他RFID卡,蜂鳴器將開(kāi)始發(fā)出嗶嗶聲,因?yàn)樗清e(cuò)誤的RFID標(biāo)簽。因此,對(duì)于門鎖系統(tǒng),我們使用了這個(gè)概念,即只有使用正確的RFID標(biāo)簽才能打開(kāi)門。繼電器本身將在 5 秒后停用,門將在 5 秒后關(guān)閉,您可以在代碼中更改此延遲。
char tag[] ="180088F889E1";
char input[12];
int count = 0;
boolean flag = 0;
void setup()
{
pinMode(2,OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
Serial.begin(9600);
}
void loop()
{
digitalWrite(3,1);
if(Serial.available())
{
count = 0;
while(Serial.available() && count < 12)
{
input[count] = Serial.read();
count++;
delay(5);
}
if(count == 12)
{
count =0;
flag = 1;
while(count<12 && flag !=0)?
{
if(tag[count]==input[count])
flag = 1;
else
flag= 0;
}
if(flag == 1)
{
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
delay(5000);
digitalWrite(2,LOW);
}
if(flag == 0)
{
for(int k =0; k<= 10; k++)
{
digitalWrite(4,HIGH);
}
}
}
}
}
-
繼電器
+關(guān)注
關(guān)注
132文章
5300瀏覽量
148130 -
RFID
+關(guān)注
關(guān)注
387文章
6044瀏覽量
237028 -
Arduino
+關(guān)注
關(guān)注
187文章
6455瀏覽量
186350
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論