专业小程序设计开发——助力新电商新零售
电话+V:159999-78052,欢迎咨询rfid电子标签系统制作视频,[小程序设计与开发],[小程序投流与推广],[小程序后台搭建],[小程序整套源码打包],[为个体及小微企业助力],[电商新零售模式],[小程序运营推广及维护]
一、一个基本的rfid系统由哪些基本组件组成
RFID是RadioFrequencyIdentification的缩写,即射频识别,俗称电子标签。什么是RFID的基本组成部分?最基本的RFID系统由三部分组成:?标签(Tag):由耦合元件及芯片组成,每个标签具有唯一的电子编码,附着在物体上标识目标对象;?阅读器(Reader):读取(有时还可以写入)标签信息的设备,可设计为手持式或固定式;?天线(Antenna):在标签和读取器间传递射频信号。
二、rfid系统由哪三部分组成
RFID系统由标签、阅读器、天线三部分组成。
标签:由耦合元件及芯片组成,每个标签具有唯一的电子编码,高容量电子标签有用户可写入的存储空间,附着在物体上标识目标对象。
阅读器:读取(有时还可以写入)标签信息的设备,可设计为手持式或固定式。
天线:在标签和读取器间传递射频信号。
RFID射频识别是一种非接触式的自动识别技术,它通过射频信号自动识别目标对象并获取相关数据,识别工作无须人工干预,可工作于各种恶劣环境。RFID技术可识别高速运动物体并可同时识别多个标签,操作快捷方便。
RFID电子标签是一种突破性的技术:“第一,可以识别单个的非常具体的物体,而不是像条形码那样只能识别一类物体;第二,其采用无线电射频,可以透过外部材料读取数据,而条形码必须靠激光来读取信息;第三,可以同时对多个物体进行识读,而条形码只能一个一个地读。此外,储存的信息量也非常大。”
RFID技术的基本工作原理并不复杂:标签进入磁场后,接收解读器发出的射频信号,凭借感应电流所获得的能量发送出存储在芯片中的产品信息(PassiveTag,无源标签或被动标签),或者主动发送某一频率的信号(ActiveTag,有源标签或主动标签);解读器读取信息并解码后,送至中央信息系统进行有关数据处理。
Arduino的RFID门锁制作-原理,接线图,代码
原创2021-06-1112:59·机电乐
在本教程中,我们将了解什么是RFID、它是如何工作的以及如何制作基于Arduino的RFID门锁。您可以观看以下视频或阅读下面的书面教程以了解更多详细信息。
概述
RFID代表射频识别(RadioFrequencyIdentification),它是一种非接触式技术,广泛应用于许多行业,用于人员跟踪、访问控制、供应链管理、图书馆书籍跟踪、收费站系统等任务。应用场景
RFID的工作原理
RFID系统由两个主要组件组成,一个是位于我们想要识别的对象上的标签,另一个是阅读器。
流程框架RFID阅读器由射频模块、控制单元和产生高频电磁场的天线线圈组成。另一方面,标签通常是无源元件,仅由天线和电子微芯片组成,因此当它靠近收发器的电磁场时,由于感应,在其天线线圈中产生电压,这电压作为微芯片的电源。
工作原理实物模块现在,当标签通电时,它可以从阅读器中提取传输的消息,并将消息发送回阅读器,它使用一种称为负载操作的技术。打开和关闭标签天线上的负载会影响阅读器天线的功耗,这可以用电压降来衡量。电压的这种变化将被捕获为1和0,这就是数据从标签传输到阅读器的方式。
阅读器和标签之间还有另一种数据传输方式,称为反向散射耦合。在这种情况下,标签使用部分接收功率来生成另一个电磁场,该电磁场将被阅读器的天线接收。
RFID和Arduino
这就是基本的工作原理,现在让我们看看如何将RFID与Arduino结合使用并构建我们自己的RFID门锁。我们将使用基于MIFARE协议和MFRC522RFID阅读器的标签,它们的成本仅为几元。
这些标签有1kb的内存,并有一个可以进行算术运算的微芯片。它们的工作频率为13.56MHz,工作距离可达10cm,具体取决于天线的几何形状。如果我们将这些标签中的一个放在光源前面,我们可以注意到我们之前谈到的天线和微芯片。
RFID卡内部结构至于RFID阅读器模块,它使用SPI协议与Arduino板进行通信,以下是我们需要如何连接它们。请注意,我们必须将模块的VCC连接到3.3V,至于其他引脚,我们不必担心,因为它们可以承受5V。
接线图连接模块后,我们需要从GitHub下载MFRC522库。该库附带了几个很好的示例,我们可以从中学习如何使用该模块。首先我们可以上传“DumpInfo”示例并测试我们的系统是否正常工作。现在,如果我们运行串行监视器并将标签放在模块附近,阅读器将开始读取标签,并且来自标签的所有信息都将显示在串行监视器上。标签信息这里我们可以看到标签的UID号以及1KB的内存,实际分成16个扇区,每个扇区分成4个块,每个块可以存储2个字节的数据。在本教程中,我们不会使用任何标签的内存,我们将只使用标签的UID号。
ArduinoRFID门锁门禁控制项目
在我们介绍我们的RFID门锁项目的代码之前,让我们先来看看这个项目的组件和电路原理图。
项目组件及原理图除了RFID模块外,我们还将使用接近传感器来检查门是关闭还是打开,伺服电机用于锁定机构和字符显示器。
本Arduino教程所需的组件:·MFRC522RFID模块·伺服电机·LCD显示屏·Arduino板·面包板和跳线·接近传感器CNY70该项目有以下工作流程:首先我们必须设置一个主标签,然后系统进入正常模式。如果我们扫描未知标签,访问将被拒绝,但如果我们扫描主服务器,我们将进入一个程序模式,我们可以从中添加和授权未知标签。所以现在如果我们再次扫描标签,将被授予访问权限,因此我们可以打开门。实物图我们关上门后,门会自动锁上。如果我们想从系统中删除一个标签,我们只需要再次进入程序模式,扫描已知标签,它将被删除。
源代码解释
现在让我们来看看代码。首先我们需要包含RFID模块、显示器和伺服电机的库,定义下面程序所需的一些变量以及创建库的实例。#include<SPI.h>#include<MFRC522.h>#include<LiquidCrystal.h>#include<Servo.h>#defineRST_PIN9#defineSS_PIN10bytereadCard[4];char*myTags[100]={};inttagsCount=0;StringtagID="";booleansuccessRead=false;booleancorrectTag=false;intproximitySensor;booleandoorOpened=false;//CreateinstancesMFRC522mfrc522(SS_PIN,RST_PIN);LiquidCrystallcd(2,3,4,5,6,7);//Parameters:(rs,enable,d4,d5,d6,d7)ServomyServo;//Servomotor在setup部分,我们初始化模块,并将伺服电机的初始值设置为锁定位置。然后我们将初始消息打印到显示器上,并通过以下“while”循环等待主标签被扫描。getID()自定义函数获取标签UID并将其放入myTags[0]数组的第一个位置。voidsetup(){//InitiatingSPI.begin();//SPIbusmfrc522.PCD_Init();//MFRC522lcd.begin(16,2);//LCDscreenmyServo.attach(8);//ServomotormyServo.write(10);//Initiallockpositionoftheservomotor//Printstheinitialmessagelcd.print("-NoMasterTag!-");lcd.setCursor(0,1);lcd.print("SCANNOW");//Waitsuntilamastercardisscannedwhile(!successRead){successRead=getID();if(successRead==true){myTags[tagsCount]=strdup(tagID.c_str());//Setsthemastertagintoposition0inthearraylcd.clear();lcd.setCursor(0,0);lcd.print("MasterTagSet!");tagsCount++;}}successRead=false;printNormalModeMessage();}我们来看看getID()自定义函数。首先,它检查阅读器附近是否放置了新标签,如果有,我们将继续“for”循环,获取标签的UID。我们使用的标签有4个字节的UID号,这就是为什么我们需要对这个循环进行4次迭代,并使用concat()函数将4个字节添加到单个String变量中。我们还将字符串的所有字符设置为大写,最后我们停止阅读。uint8_tgetID(){//GettingreadyforReadingPICCsif(!mfrc522.PICC_IsNewCardPresent()){//IfanewPICCplacedtoRFIDreadercontinuereturn0;}if(!mfrc522.PICC_ReadCardSerial()){//SinceaPICCplacedgetSerialandcontinuereturn0;}tagID="";for(uint8_ti=0;i<4;i++){//TheMIFAREPICCsthatweusehave4byteUIDreadCard[i]=mfrc522.uid.uidByte[i];tagID.concat(String(mfrc522.uid.uidByte[i],HEX));//Addsthe4bytesinasingleStringvariable}tagID.toUpperCase();mfrc522.PICC_HaltA();//Stopreadingreturn1;}Beforeweenterthemainloop,attheendofthesetupsection,wealsocalltheprintNormalModeMessage()customfunctionwhichprintsthe“AccessControl”messageonthedisplay.voidprintNormalModeMessage(){delay(1500);lcd.clear();lcd.print("-AccessControl-");lcd.setCursor(0,1);lcd.print("ScanYourTag!");}在主循环中,我们从读取接近传感器的值开始,它告诉我们门是否关闭。
intproximitySensor=analogRead(A0);因此,如果门是关闭的,使用与我们在getID()自定义函数中描述的相同的行,我们将扫描并获取新标签的UID。我们在这里可以注意到,由于“if”语句中的“return”行,在我们扫描标签之前,代码不会继续进行。
一旦我们扫描了标签,我们就会检查该标签是否是我们之前注册的主,如果是,我们将进入程序模式。在这种模式下,如果我们扫描一个已经授权的标签,它将从系统中删除,或者如果标签未知,它将作为授权添加到系统中。
//检查扫描到的标签是否是主标签if(tagID==myTags[0]){lcd.clear();lcd.print("Programmode:");lcd.setCursor(0,1);lcd.print("Add/RemoveTag");while(!successRead){successRead=getID();if(successRead==true){for(inti=0;i<100;i++){if(tagID==myTags[i]){myTags[i]="";lcd.clear();lcd.setCursor(0,0);lcd.print("TagRemoved!");printNormalModeMessage();return;}}myTags[tagsCount]=strdup(tagID.c_str());lcd.clear();lcd.setCursor(0,0);lcd.print("TagAdded!");printNormalModeMessage();tagsCount++;return;}}}在程序模式之外,在下一个“for”循环中,我们检查扫描的标签是否与任何已注册的标签相同,我们要么解锁门,要么保持拒绝访问。在“else”语句的最后,我们等到门关闭,然后锁上门并再次打印正常模式消息。
//检查扫描的标签是否被授权for(inti=0;i<100;i++){if(tagID==myTags[i]){lcd.clear();lcd.setCursor(0,0);lcd.print("AccessGranted!");myServo.write(170);//UnlocksthedoorprintNormalModeMessage();correctTag=true;}}if(correctTag==false){lcd.clear();lcd.setCursor(0,0);lcd.print("AccessDenied!");printNormalModeMessage();}}//Ifdoorisopen...else{lcd.clear();lcd.setCursor(0,0);lcd.print("DoorOpened!");while(!doorOpened){proximitySensor=analogRead(A0);if(proximitySensor>200){doorOpened=true;}}doorOpened=false;delay(500);myServo.write(10);//LocksthedoorprintNormalModeMessage();}项目的完整代码:/*Arduino门锁门禁控制项目**作者:DejanNedelkovski,www.HowToMechatronics.com**库:MFRC522,https://github.com/miguelbalboa/rfid*/#include<SPI.h>#include<MFRC522.h>#include<LiquidCrystal.h>#include<Servo.h>#defineRST_PIN9#defineSS_PIN10bytereadCard[4];char*myTags[100]={};inttagsCount=0;StringtagID="";booleansuccessRead=false;booleancorrectTag=false;intproximitySensor;booleandoorOpened=false;//CreateinstancesMFRC522mfrc522(SS_PIN,RST_PIN);LiquidCrystallcd(2,3,4,5,6,7);//Parameters:(rs,enable,d4,d5,d6,d7)ServomyServo;//Servomotorvoidsetup(){//InitiatingSPI.begin();//SPIbusmfrc522.PCD_Init();//MFRC522lcd.begin(16,2);//LCDscreenmyServo.attach(8);//ServomotormyServo.write(10);//Initiallockpositionoftheservomotor//Printstheinitialmessagelcd.print("-NoMasterTag!-");lcd.setCursor(0,1);lcd.print("SCANNOW");//Waitsuntilamastercardisscannedwhile(!successRead){successRead=getID();if(successRead==true){myTags[tagsCount]=strdup(tagID.c_str());//Setsthemastertagintoposition0inthearraylcd.clear();lcd.setCursor(0,0);lcd.print("MasterTagSet!");tagsCount++;}}successRead=false;printNormalModeMessage();}voidloop(){intproximitySensor=analogRead(A0);//Ifdoorisclosed...if(proximitySensor>200){if(!mfrc522.PICC_IsNewCardPresent()){//IfanewPICCplacedtoRFIDreadercontinuereturn;}if(!mfrc522.PICC_ReadCardSerial()){//SinceaPICCplacedgetSerialandcontinuereturn;}tagID="";//TheMIFAREPICCsthatweusehave4byteUIDfor(uint8_ti=0;i<4;i++){//readCard[i]=mfrc522.uid.uidByte[i];tagID.concat(String(mfrc522.uid.uidByte[i],HEX));//Addsthe4bytesinasingleStringvariable}tagID.toUpperCase();mfrc522.PICC_HaltA();//StopreadingcorrectTag=false;//Checkswhetherthescannedtagisthemastertagif(tagID==myTags[0]){lcd.clear();lcd.print("Programmode:");lcd.setCursor(0,1);lcd.print("Add/RemoveTag");while(!successRead){successRead=getID();if(successRead==true){for(inti=0;i<100;i++){if(tagID==myTags[i]){myTags[i]="";lcd.clear();lcd.setCursor(0,0);lcd.print("TagRemoved!");printNormalModeMessage();return;}}myTags[tagsCount]=strdup(tagID.c_str());lcd.clear();lcd.setCursor(0,0);lcd.print("TagAdded!");printNormalModeMessage();tagsCount++;return;}}}successRead=false;//Checkswhetherthescannedtagisauthorizedfor(inti=0;i<100;i++){if(tagID==myTags[i]){lcd.clear();lcd.setCursor(0,0);lcd.print("AccessGranted!");myServo.write(170);//UnlocksthedoorprintNormalModeMessage();correctTag=true;}}if(correctTag==false){lcd.clear();lcd.setCursor(0,0);lcd.print("AccessDenied!");printNormalModeMessage();}}//Ifdoorisopen...else{lcd.clear();lcd.setCursor(0,0);lcd.print("DoorOpened!");while(!doorOpened){proximitySensor=analogRead(A0);if(proximitySensor>200){doorOpened=true;}}doorOpened=false;delay(500);myServo.write(10);//LocksthedoorprintNormalModeMessage();}}uint8_tgetID(){//GettingreadyforReadingPICCsif(!mfrc522.PICC_IsNewCardPresent()){//IfanewPICCplacedtoRFIDreadercontinuereturn0;}if(!mfrc522.PICC_ReadCardSerial()){//SinceaPICCplacedgetSerialandcontinuereturn0;}tagID="";for(uint8_ti=0;i<4;i++){//TheMIFAREPICCsthatweusehave4byteUIDreadCard[i]=mfrc522.uid.uidByte[i];tagID.concat(String(mfrc522.uid.uidByte[i],HEX));//Addsthe4bytesinasingleStringvariable}tagID.toUpperCase();mfrc522.PICC_HaltA();//Stopreadingreturn1;}voidprintNormalModeMessage(){delay(1500);lcd.clear();lcd.print("-AccessControl-");lcd.setCursor(0,1);lcd.print("ScanYourTag!");}让我们一起动手试试吧!如果您喜欢本教程,欢迎收藏,点赞加关注喔!这将为我后续文章提供更大的动力。【WINDRISES MINIPROGRAM PROMOTION】尊享直接对接老板
电话+V: 159999-78052
专注于小程序推广配套流程服务方案。为企业及个人客户提供了高性价比的运营方案,解决小微企业和个体拓展客户的问题