您將學(xué)習(xí)如何使用Arduino創(chuàng)建自己的停車(chē)門(mén)禁控制系統(tǒng)。
硬件部件:
定制PCB× 1個(gè)
Arduino Uno × 1個(gè)
SparkFun RFID Qwiic套件 × 1個(gè)
SG90微型伺服電機(jī) × 1個(gè)
LED(通用) × 2
面包板(通用) × 1個(gè)
跳線(通用) × 1個(gè)
RGB背光LCD-16x2 × 1個(gè)
軟件應(yīng)用程序和在線服務(wù):
Arduino IDE
射頻識(shí)別或RFID(無(wú)線電頻率識(shí)別)是一種通過(guò)無(wú)線電信號(hào)自動(dòng)識(shí)別,通過(guò)RFID標(biāo)簽檢索和存儲(chǔ)數(shù)據(jù)的方法。
這些RFID標(biāo)簽可以放置在動(dòng)物,物體上。
因此,這些標(biāo)簽具有許多應(yīng)用,例如放置在車(chē)輛上的不間斷標(biāo)簽,動(dòng)物識(shí)別。
RFID標(biāo)簽有3種類(lèi)型:無(wú)源是對(duì)發(fā)送器發(fā)送的信號(hào)做出響應(yīng)的標(biāo)簽,半無(wú)源和會(huì)發(fā)出信號(hào)本身的有源標(biāo)簽。
當(dāng)前,有幾種方法可以控制對(duì)位置的訪問(wèn):使用指紋,帶密碼的小鍵盤(pán)以及使用RFID系統(tǒng)。
在本文中,我們將學(xué)習(xí)如何使用RFID技術(shù)開(kāi)發(fā)訪問(wèn)控制系統(tǒng)。
該系統(tǒng)將包括MFRC522 RFID模塊,用于打開(kāi)門(mén)的伺服電動(dòng)機(jī),作為系統(tǒng)HMI的顯示器以及信號(hào)LED。
因此,在本文中,我們將學(xué)習(xí)如何使用RFID模塊開(kāi)發(fā)訪問(wèn)控制。
因此,通過(guò)本文您將學(xué)到:
在原型板上執(zhí)行電路組裝;
了解RFID模塊的功能;
伺服電機(jī)啟動(dòng);
在液晶顯示屏上書(shū)寫(xiě)。
現(xiàn)在,我們將開(kāi)始使用RFID模塊完整介紹停車(chē)門(mén)禁系統(tǒng)項(xiàng)目的開(kāi)發(fā)。
使用帶有Arduino的RFID模塊開(kāi)發(fā)停車(chē)門(mén)禁控制系統(tǒng)
該項(xiàng)目的核心是RFID模塊,該模塊由帶有MFRC522集成電路的印刷電路板和板上的天線組成。
當(dāng)電路板通電時(shí),模塊會(huì)發(fā)射射頻信號(hào),并且當(dāng)標(biāo)簽接近模塊時(shí),將讀取標(biāo)簽,每個(gè)標(biāo)簽具有不同的代碼。
該模塊由3.3 V供電,并使用SPI(串行外設(shè)接口)通信與所使用的微控制器進(jìn)行通信。
要開(kāi)發(fā)此項(xiàng)目,第一步是組裝圖1中的電路。
電路的操作非常簡(jiǎn)單!伺服電機(jī)是用于打開(kāi)和關(guān)閉門(mén)的機(jī)構(gòu)。每次RFID模塊識(shí)別標(biāo)簽時(shí),Arduino都會(huì)發(fā)送信息以激活或關(guān)閉門(mén)。
LCD被用作與用戶(hù)的通信接口。
接下來(lái),我們將看到該項(xiàng)目的編程邏輯如何工作。
Arduino的停車(chē)系統(tǒng)控制的操作邏輯
要編程Arduino Nano,我們將需要以下庫(kù):
SPI-包含執(zhí)行SPI通信所需功能的庫(kù)。
MFRC522-包含與RFID模塊通信所需功能的庫(kù)。
伺服-包含啟動(dòng)伺服電動(dòng)機(jī)所需功能的庫(kù)。
電線-包含與LCD顯示器進(jìn)行I2C通信所需功能的庫(kù)。
Arduino IDE中未安裝liquidCrystal_I2C和MFRC522庫(kù),因此我們必須安裝它們。
安裝庫(kù)后,關(guān)閉Arduino IDE并再次打開(kāi)它。
完整的代碼如下所示。
/*
* Teste Leitor RFID
* tag 1 F1 B103 1F 241 17703 31
F1 B1 03 1F
tag 2 14 45 29 57 20 69 41 87
14 45 29 57
*/
#include 《SPI.h》
#include 《MFRC522.h》
#include 《Servo.h》
#include 《Wire.h》
#include 《LiquidCrystal_I2C.h》
Servo myservo ;
LiquidCrystal_I2C lcd (0x27,2,1,0,4,5,6,7,3,POSITIVE);
#define vermelho 4
#define verde 5
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522 (SS_PIN, RST_PIN);
void setup()
{
Wire.begin();
lcd.begin(16,2);
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print(“Aproxime a sua ”);
lcd.setCursor(0,1);
lcd.print(“tag do leitor ”);
pinMode(verde,OUTPUT);
pinMode(vermelho,OUTPUT);
Serial.begin(9600);
SPI.begin();
Serial.println(“Aproxime a tag do leitor ”);
mfrc522.PCD_Init();
digitalWrite(verde,0);
digitalWrite(vermelho,0);
myservo.attach(6);
}
void loop()
{
if(!mfrc522.PICC_IsNewCardPresent())
{
return;
}
if(!mfrc522.PICC_ReadCardSerial())
{
return;
}
Serial.print(“ UID da tag : ”);
String conteudo = “”;
byte letra;
for (byte i = 0; i《 mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] 《0x10 ? “0”:“ ”);
Serial.print(mfrc522.uid.uidByte[i], HEX);
conteudo.concat(String(mfrc522.uid.uidByte[i] 《 0x10 ? “ 0” : “ ”));
conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print(“Mensagem : ”);
conteudo.toUpperCase();
if(conteudo.substring(1) == “14 45 29 57”)
{
lcd.clear();
Serial.println(“Acesso liberado ”);
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print(“Ola !”);
lcd.setCursor(0,1);
lcd.print(“Acesso liberado”);
digitalWrite(verde,1);
digitalWrite(vermelho,0);
myservo.write(95);
delay(800);
myservo.write(10);
digitalWrite(verde,0);
digitalWrite(vermelho,1);
}
if(conteudo.substring(1) == “F1 B1 03 1F”)
{
lcd.clear();
Serial.println(“Acesso negado ”);
digitalWrite(verde,0);
digitalWrite(vermelho,1);
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print(“Erro ! Tag nao ”);
lcd.setCursor(0,1);
lcd.print(“autorizada ”);
}
delay(1000);
lcd.clear();
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print(“Aproxime a sua ”);
lcd.setCursor(0,1);
lcd.print(“tag do leitor ”);
}
在下面,我們將解釋該項(xiàng)目的完整邏輯。
您需要做的第一件事是聲明項(xiàng)目中使用的組件的所有庫(kù)。
#include 《SPI.h》
#include 《MFRC522.h》
#include 《Servo.h》
#include 《Wire.h》
#include 《LiquidCrystal_I2C.h》
然后,聲明伺服電機(jī)和LCD的對(duì)象。對(duì)象的創(chuàng)建如下。
Servo myservo;
LiquidCrystal_I2C lcd (0x27,2,1,0,4,5,6,7,3,POSITIVE);
MFRC522 mfrc522 (SS_PIN, RST_PIN);
現(xiàn)在,我們已經(jīng)在Arduino上連接了引腳。
#define vermelho 4
#define verde 5
#define SS_PIN 10
#define RST_PIN 9
下面是void設(shè)置功能。它初始化I2C串行通信,串行通信,將引腳配置為輸出,以及連接伺服電機(jī)的引腳。
void setup()
{
Wire.begin();
lcd.begin(16,2);
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print(“Aproxime a sua ”);
lcd.setCursor(0,1);
lcd.print(“tag do leitor ”);
pinMode(verde,OUTPUT);
pinMode(vermelho,OUTPUT);
Serial.begin(9600);
SPI.begin();
Serial.println(“Aproxime a tag do leitor ”);
mfrc522.PCD_Init();
digitalWrite(verde,0);
digitalWrite(vermelho,0);
myservo.attach(6);
}
現(xiàn)在讓我們了解在void循環(huán)函數(shù)中實(shí)現(xiàn)的完整編程邏輯如何工作。請(qǐng)參見(jiàn)下面的空循環(huán)代碼。
void loop()
{
if(!mfrc522.PICC_IsNewCardPresent())
{
return;
}
if(!mfrc522.PICC_ReadCardSerial())
{
return;
}
Serial.print(“ UID da tag : ”);
String conteudo = “”;
byte letra;
for (byte i = 0; i《 mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] 《0x10 ? “0”:“ ”);
Serial.print(mfrc522.uid.uidByte[i], HEX);
conteudo.concat(String(mfrc522.uid.uidByte[i] 《 0x10 ? “ 0” : “ ”));
conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print(“Mensagem : ”);
conteudo.toUpperCase();
if(conteudo.substring(1) == “14 45 29 57”)
{
lcd.clear();
Serial.println(“Acesso liberado ”);
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print(“Ola !”);
lcd.setCursor(0,1);
lcd.print(“Acesso liberado”);
digitalWrite(verde,1);
digitalWrite(vermelho,0);
myservo.write(95);
delay(800);
myservo.write(10);
digitalWrite(verde,0);
digitalWrite(vermelho,1);
}
if(conteudo.substring(1) == “F1 B1 03 1F”)
{
lcd.clear();
Serial.println(“Acesso negado ”);
digitalWrite(verde,0);
digitalWrite(vermelho,1);
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print(“Erro ! Tag nao ”);
lcd.setCursor(0,1);
lcd.print(“autorizada ”);
}
delay(1000);
lcd.clear();
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print(“Aproxime a sua ”);
lcd.setCursor(0,1);
lcd.print(“tag do leitor ”);
}
您應(yīng)該做的第一件事是檢查沒(méi)有檢測(cè)到標(biāo)簽并且沒(méi)有讀取標(biāo)簽。代碼如下所示。
if(!mfrc522.PICC_IsNewCardPresent())
{
return;
}
if(!mfrc522.PICC_ReadCardSerial())
{
return;
}
之后,系統(tǒng)讀取標(biāo)簽并在IDE Arduino串行監(jiān)視器上顯示其值。請(qǐng)參閱下面的代碼部分。
Serial.print(“ UID da tag : ”);
String conteudo = “”;
byte letra;
for (byte i = 0; i《 mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] 《0x10 ? “0”:“ ”);
Serial.print(mfrc522.uid.uidByte[i], HEX);
conteudo.concat(String(mfrc522.uid.uidByte[i] 《 0x10 ? “ 0” : “ ”));
conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print(“Mensagem : ”);
conteudo.toUpperCase();
不能在sistema上使用apresenta??odocódigo標(biāo)簽,請(qǐng)?jiān)趘al上使用十六進(jìn)制cadastrado no sistema。
if(conteudo.substring(1) == “14 45 29 57”)
{
lcd.clear();
Serial.println(“Acesso liberado ”);
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print(“Ola !”);
lcd.setCursor(0,1);
lcd.print(“Acesso liberado”);
digitalWrite(verde,1);
digitalWrite(vermelho,0);
myservo.write(95);
delay(800);
myservo.write(10);
digitalWrite(verde,0);
digitalWrite(vermelho,1);
}
如果標(biāo)簽值等于14 45 29 57,則將執(zhí)行上述條件的命令。在這些命令中,LCD將打印訪問(wèn)消息并激活伺服電機(jī)以打開(kāi)入口門(mén)。
如果標(biāo)簽值等于F1 B1 03 1F值,則代碼流輸入條件并顯示消息“標(biāo)簽未授權(quán)!”。并且不會(huì)觸發(fā)伺服電機(jī)釋放訪問(wèn)權(quán)限。
代碼部分如下所示。
if(conteudo.substring(1) == “F1 B1 03 1F”)
{
lcd.clear();
Serial.println(“Acesso negado ”);
digitalWrite(verde,0);
digitalWrite(vermelho,1);
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print(“Erro ! Tag nao ”);
lcd.setCursor(0,1);
lcd.print(“autorizada ”);
}
最后,系統(tǒng)清潔LCD屏幕并顯示消息,以使用戶(hù)將標(biāo)簽靠近RFID閱讀器。代碼區(qū)域如下所示。
delay(1000);
lcd.clear();
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print(“Aproxime a sua ”);
lcd.setCursor(0,1);
lcd.print(“tag do leitor ”);
現(xiàn)在,我們將在平臺(tái)上的電路上看到代碼的結(jié)果。
對(duì)Arduino Uno進(jìn)行編程后,我們將使系統(tǒng)正常工作。
在圖2中,我們收到系統(tǒng)的初始消息,要求用戶(hù)接近標(biāo)簽以釋放訪問(wèn)權(quán)限。
在圖3中,我們讓用戶(hù)使用正確的標(biāo)簽進(jìn)行訪問(wèn),然后綠色LED亮起并激活伺服電機(jī),并且訪問(wèn)顯示在顯示屏上。
800毫秒后,伺服電動(dòng)機(jī)返回初始位置,綠色指示燈熄滅,紅色指示燈亮起。
在圖4中,用戶(hù)使用了未注冊(cè)的標(biāo)簽,因此系統(tǒng)出現(xiàn)錯(cuò)誤,并且不釋放訪問(wèn)權(quán)限。
之后,系統(tǒng)重新啟動(dòng)編程邏輯操作周期。
結(jié)論和未來(lái)項(xiàng)目改進(jìn)
使用RFID技術(shù)的系統(tǒng)已應(yīng)用于多種類(lèi)型的項(xiàng)目。它們不僅限于控制和訪問(wèn)系統(tǒng)。例如,一種非常常見(jiàn)的應(yīng)用是使用它來(lái)識(shí)別成批的服裝和其他商品。
利用您的創(chuàng)造力,您將通過(guò)帶有Arduino的RFID模塊為您的項(xiàng)目找到不同類(lèi)型的應(yīng)用程序。
將來(lái),我們將使用Arduino創(chuàng)建門(mén)系統(tǒng)的原型,供您在實(shí)際中使用激光切割機(jī)或3D打印機(jī)設(shè)置停車(chē)場(chǎng)。
責(zé)任編輯:pj
-
led
+關(guān)注
關(guān)注
242文章
23813瀏覽量
673202 -
控制系統(tǒng)
+關(guān)注
關(guān)注
41文章
6776瀏覽量
112057 -
應(yīng)用程序
+關(guān)注
關(guān)注
38文章
3333瀏覽量
58963 -
Arduino
+關(guān)注
關(guān)注
189文章
6497瀏覽量
190660
發(fā)布評(píng)論請(qǐng)先 登錄
請(qǐng)問(wèn)怎樣去設(shè)計(jì)一種車(chē)門(mén)分布式控制系統(tǒng)?
請(qǐng)問(wèn)怎樣去設(shè)計(jì)一種基于Arduino Nano的智能門(mén)禁控制系統(tǒng)
停車(chē)場(chǎng)門(mén)禁管理系統(tǒng)應(yīng)該如何選購(gòu) 精選資料分享
基于RT-Thread和N32G457的門(mén)禁控制系統(tǒng)設(shè)計(jì)方案
汽車(chē)門(mén)禁和胎壓監(jiān)測(cè)系統(tǒng)解決方案

基于TLE7810的車(chē)門(mén)控制系統(tǒng)設(shè)計(jì)

遙控車(chē)門(mén)開(kāi)關(guān)系統(tǒng)的原理和設(shè)計(jì)方案分析

基于CAN/LIN 實(shí)現(xiàn)車(chē)門(mén)分布式控制系統(tǒng)的設(shè)計(jì)與研究

基于新唐MCU門(mén)禁控制系統(tǒng),其基本構(gòu)架是怎樣的
基于DSP的門(mén)禁控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

使用Arduino的基于RFID的訪問(wèn)控制系統(tǒng)

如何為汽車(chē)門(mén)禁系統(tǒng)的發(fā)展打開(kāi)機(jī)遇大門(mén)

Arduino球和光束控制系統(tǒng)

基于NFC技術(shù)的門(mén)禁控制系統(tǒng)設(shè)計(jì)

評(píng)論