RFID代表射频识别。RFID模块可以将少量数据读取或写入无源RFID标签,可用于各种系统的识别过程,例如考勤系统,安全系统,投票系统等。RFID是一种非常便捷的技术。
要读取无源RFID卡和标签,我们需要具有UART硬件的微控制器。如果选择不带UART的微控制器,则需要实现软件UART。在这里,我们使用PIC微控制器PIC16F877A来连接RFID。我们将只读取唯一的标识号。RFID标签并在16x2 LCD上显示。
RFID模块及其工作
在这个项目中,我们选择了EM-18 RFID模块,它是小尺寸,低成本和高能效模块。EM-18 RFID模块使用125 KHz射频频率读取无源125 KHz RFID标签。EM-18模块使用振荡器,解调器和数据解码器从无源卡读取数据。
RFID标签
共有三种类型的RFID标签,无源,有源或电池辅助无源。市场上有具有不同形状和尺寸的不同种类的RFID标签。他们中很少有人使用不同的频率进行通信。我们将使用具有唯一ID数据的125Khz无源RFID卡。这是我们用于该项目的RFID卡和标签。
RFID的工作
如果我们看到EM-18模块的数据表(http://www.alselectro.com/files/rfid-ttl-em18.pdf),则可以看到该模块的背面和应用电路:
该模块使用9600波特率的UART通信协议。当将有效频率标签插入EM-18阅读器的磁场时,BC557晶体管导通,并且蜂鸣器将开始发出蜂鸣声,并且还使LED发光。我们使用的模块很容易在市场上购买,并具有带蜂鸣器,LED和附加RS232端口的完整电路。
这是我们使用的带有引脚名称的RFID板模块。此模块还具有其他电源选件。
需要牢记的是EM-18阅读器的输出使用5V逻辑电平。我们可以使用另一个使用较低逻辑电平的微控制器,但是在这种情况下,需要附加的逻辑电平转换器。在少数情况下,3.3V微控制器的UART引脚通常可承受5V电压。
UART输出提供12位ASCII数据。前10位是RFID标签号,这是唯一ID,后两位用于错误测试。最后两位数字是标签号的XOR。EM-18模块将从125 KHz无源RFID标签或卡中读取数据。
这些标签或ID具有工厂编程的存储阵列,用于存储唯一的ID号。由于它们是无源的,因此卡或标签中没有电池,它们会被RF收发器模块的磁场激励。这些RFID标签也是使用EM4102 CMOS IC制成的,EM4102 CMOS IC也由磁场提供时钟。
所需材料
要进行此项目,我们需要以下项目-
- PIC16F877A
- 20Mhz晶体
- 2个33pF陶瓷圆盘电容器
- 16x2字符LCD
- 面包板
- 10k预设锅
- 4.7k电阻
- 单股线连接
- 5V适配器
- 射频模块EM-18
- 5V蜂鸣器
- 100uF和.1uF 12V电容器
- BC557晶体管
- LED
- 2.2k和470R电阻器。
我们正在使用带有蜂鸣器和led的EM-18模块板。因此,不需要从11到15列出的组件。
电路原理图
原理图很简单;我们通过端口RB连接LCD,并通过UART Rx引脚连接EM-18模块。
我们已经根据示意图在面包板上建立了连接。
代码说明
与往常一样,首先我们需要在pic微控制器中设置配置位,定义一些宏,包括库和晶体频率。您可以 在末尾给出的完整代码中检查所有 代码。
// PIC16F877A配置位设置 //'C'源线配置语句 // CONFIG #pragma config FOSC = HS //振荡器选择位(HS振荡器) #pragma config WDTE = OFF //看门狗定时器使能位(禁止WDT) # pragma config PWRTE = OFF //开机定时器使能位(禁止PWRT) #pragma config BOREN = ON //欠压复位使能位(BOR使能) #pragma config LVP = OFF //低压(单电源) )在线串行编程使能位(RB3 / PGM引脚具有PGM功能;低电压编程使能) #pragma config CPD = OFF //数据EEPROM存储器代码保护位(数据EEPROM代码保护关闭) #pragma config WRT = OFF //闪存程序存储器写使能位(写保护关闭;所有程序存储器均可通过EECON控件写入) #pragma config CP = OFF //闪存程序存储器代码保护位(代码保护关闭) #包括“ supporing_cfile \ lcd.h” #包括“ supporing_cfile \ eusart1.h”
如果看到 主 函数,我们将调用一个函数来初始化系统。我们在此功能中初始化LCD和UART。
/ * 此函数用于系统初始化。 * / void system_init(void){ TRISB = 0x00; //将端口B设置为输出引脚 lcd_init(); //这将初始化LCD EUSART1_Initialize(); //这将初始化Eusart }
现在,在 主要 功能中,我们使用了一个13位的数组,即RFID Number。我们收到RFID号的每一位。使用 EUSART1_Read(); 函数,在UART库中声明。接收到12位后,我们在LCD上将字符串打印为字符串。
void main(void){ unsigned char count; 未签名的字符RF_ID; system_init(); lcd_com(0x80); lcd_puts(“ Circuit Digest”); 而(1){ for(count = 0; count <12; count ++){ RF_ID = 0; RF_ID = EUSART1_Read(); } lcd_com(0xC0); //将光标设置为以 lcd_puts(“ ID:”); 开始的第二行 lcd_puts(RF_ID); } }
演示视频的完整代码如下。
还要检查与其他微控制器的RFID接口:
与MSP430 Launchpad的RFID接口
与8051微控制器的RFID接口
RFID与Arduino的接口