如何使用Arduino创建停车门禁控制系统?

您将学习如何使用arduino创建自己的停车门禁控制系统。
硬件部件:
定制pcb× 1个
arduino uno × 1个
sparkfun rfid qwiic套件 × 1个
sg90微型伺服电机 × 1个
led(通用) × 2
面包板(通用) × 1个
跳线(通用) × 1个
rgb背光lcd-16x2 × 1个
软件应用程序和在线服务:
arduino ide
射频识别或rfid(无线电频率识别)是一种通过无线电信号自动识别,通过rfid标签检索和存储数据的方法。
这些rfid标签可以放置在动物,物体上。
因此,这些标签具有许多应用,例如放置在车辆上的不间断标签,动物识别。
rfid标签有3种类型:无源是对发送器发送的信号做出响应的标签,半无源和会发出信号本身的有源标签。
当前,有几种方法可以控制对位置的访问:使用指纹,带密码的小键盘以及使用rfid系统。
在本文中,我们将学习如何使用rfid技术开发访问控制系统。
该系统将包括mfrc522 rfid模块,用于打开门的伺服电动机,作为系统hmi的显示器以及信号led。
因此,在本文中,我们将学习如何使用rfid模块开发访问控制。
因此,通过本文您将学到:
在原型板上执行电路组装;
了解rfid模块的功能;
伺服电机启动;
在液晶显示屏上书写。
现在,我们将开始使用rfid模块完整介绍停车门禁系统项目的开发。
使用带有arduino的rfid模块开发停车门禁控制系统
该项目的核心是rfid模块,该模块由带有mfrc522集成电路的印刷电路板和板上的天线组成。
当电路板通电时,模块会发射射频信号,并且当标签接近模块时,将读取标签,每个标签具有不同的代码。
该模块由3.3 v供电,并使用spi(串行外设接口)通信与所使用的微控制器进行通信。
要开发此项目,第一步是组装图1中的电路。
电路的操作非常简单!伺服电机是用于打开和关闭门的机构。每次rfid模块识别标签时,arduino都会发送信息以激活或关闭门。
lcd被用作与用户的通信接口。
接下来,我们将看到该项目的编程逻辑如何工作。
arduino的停车系统控制的操作逻辑
要编程arduino nano,我们将需要以下库:
spi-包含执行spi通信所需功能的库。
mfrc522-包含与rfid模块通信所需功能的库。
伺服-包含启动伺服电动机所需功能的库。
电线-包含与lcd显示器进行i2c通信所需功能的库。
arduino ide中未安装liquidcrystal_i2c和mfrc522库,因此我们必须安装它们。
安装库后,关闭arduino ide并再次打开它。
完整的代码如下所示。
/*
* 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 ”);
}
在下面,我们将解释该项目的完整逻辑。
您需要做的第一件事是声明项目中使用的组件的所有库。
#include 《spi.h》
#include 《mfrc522.h》
#include 《servo.h》
#include 《wire.h》
#include 《liquidcrystal_i2c.h》
然后,声明伺服电机和lcd的对象。对象的创建如下。
servo myservo;
liquidcrystal_i2c lcd (0x27,2,1,0,4,5,6,7,3,positive);
mfrc522 mfrc522 (ss_pin, rst_pin);
现在,我们已经在arduino上连接了引脚。
#define vermelho 4
#define verde 5
#define ss_pin 10
#define rst_pin 9
下面是void设置功能。它初始化i2c串行通信,串行通信,将引脚配置为输出,以及连接伺服电机的引脚。
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循环函数中实现的完整编程逻辑如何工作。请参见下面的空循环代码。
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 ”);
}
您应该做的第一件事是检查没有检测到标签并且没有读取标签。代码如下所示。
if(!mfrc522.picc_isnewcardpresent())
{
return;
}
if(!mfrc522.picc_readcardserial())
{
return;
}
之后,系统读取标签并在ide arduino串行监视器上显示其值。请参阅下面的代码部分。
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标签,请在val上使用十六进制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);
}
如果标签值等于14 45 29 57,则将执行上述条件的命令。在这些命令中,lcd将打印访问消息并激活伺服电机以打开入口门。
如果标签值等于f1 b1 03 1f值,则代码流输入条件并显示消息“标签未授权!”。并且不会触发伺服电机释放访问权限。
代码部分如下所示。
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 ”);
}
最后,系统清洁lcd屏幕并显示消息,以使用户将标签靠近rfid阅读器。代码区域如下所示。
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 ”);
现在,我们将在平台上的电路上看到代码的结果。
对arduino uno进行编程后,我们将使系统正常工作。
在图2中,我们收到系统的初始消息,要求用户接近标签以释放访问权限。
在图3中,我们让用户使用正确的标签进行访问,然后绿色led亮起并激活伺服电机,并且访问显示在显示屏上。
800毫秒后,伺服电动机返回初始位置,绿色指示灯熄灭,红色指示灯亮起。
在图4中,用户使用了未注册的标签,因此系统出现错误,并且不释放访问权限。
之后,系统重新启动编程逻辑操作周期。
结论和未来项目改进
使用rfid技术的系统已应用于多种类型的项目。它们不仅限于控制和访问系统。例如,一种非常常见的应用是使用它来识别成批的服装和其他商品。
利用您的创造力,您将通过带有arduino的rfid模块为您的项目找到不同类型的应用程序。
将来,我们将使用arduino创建门系统的原型,供您在实际中使用激光切割机或3d打印机设置停车场。


智慧医疗是怎样促进智慧城市的发展
如何在PCB设计中实现复杂的焊盘形状?
深入理解Linux修改hostname
号称小“低配版昂科威”?新款雪佛兰探界者中型大SUV即将上市
选择AlmaLinux作为CentOS替代方案的一些原因
如何使用Arduino创建停车门禁控制系统?
8051单片机供水系统水位控制的硬件电路设计
容器配置及Spring Boot注解
无线连接航空航天和国防世界
数字电路中施密特触发器与比较器电路有何区别
电磁流量计参数性能介绍
未来网络的关键技术
小米1s和小米青春版的区别_小米1s和小米青春版对比
AWE2023全电智慧厨房受追捧 国爱等离子电火灶开创“电明火”时代
电池保护应用防死锁电流的保护器件
iPhone12翻车不断?许多买了iPhone12的人大呼后悔
Silicon Labs其蓝牙Mesh技术被小米用于发布的智能家居产品中
App Store经过重新设计后,浏览下载量提高显著
如何使用区块链进行数字签名
红魔5G新机曝光搭载了骁龙865平台支持55W快充