在本篇文章中,我们将使用stm32和rfid读卡器设计一个读取rfid卡的系统。 rfid表示射频识别,它使用无线电频率读取信息。 rfid用于许多认证系统,如电梯乘坐系统、自动收费系统、医院患者信息维护系统、自动数据收集等。本文中,我们将学习如何使用stm32f103c8微控制器连接em-18 rfid读卡器模块来读取rfid标签的唯一id。
所需的组件
● stm32f103c8控制器
● em-18 rfid读卡器模块
● rfid卡
● 1602 lcd显示屏模块
● 面包板
● 连接线
在将rfid与stm32连接之前,首先我们将了解rfid标签和rfid读卡器。
rfid标签
rfid标签由一组盘绕天线和一片微芯片组成,可以与附近的读卡器无线通信。市场上有各种形状和尺寸的不同类型的rfid标签。很少有人使用不同的频率进行通信。我们将使用125khz无源rfid卡,其中包含唯一的id数据。
当您将rfid标签放在明亮的灯光前时,您可以观察标签内部的线圈和微芯片。
基本上有两种类型的rfid标签:无源和有源
无源rfid标签从em-18等读卡器模块产生的磁场中获取能量,并用它为微芯片的电路供电。然后芯片将信息发送给读卡器。
有源rfid标签需要单独供电,并包含高达1mb的读/写内存。
em-18 rfid读卡器
每个rfid卡都嵌入有一个唯一id,并且使用rfid读取器可以读取rfid卡号。 em-18 rfid读卡器的工作频率为125 khz,它配有一个片上天线,可以用5v电源供电。它提供串行输出。范围大约8-12厘米。串行通信参数为9600bps、8个数据位、1个停止位。这种无线射频识别用于许多系统,如基于rfid的考勤系统、安全系统、投票机以及电子收费公路定价等等。
em-18 rfid读器卡提供的输出为12位ascii格式。在12位数中,前10位是卡号,后两位是卡号的xor结果。最后两位数字用于错误校验。
例如,从读卡器读取到的卡号为0200107d0d62,然后卡上的卡号将如下所示。
02- 前导符
00107d0d =十进制的1080589。
62是(02 xor 00 xor 10 xor 7d xor 0d)的xor值。
因此卡上的号码是0001080589。
em-18的引脚详细信息
em-18 rfid读卡器有九个引脚。在9个引脚中,2个引脚没有连接,所以我们只需要考虑7个端子。下表显示了em-18的引脚说明。
编号
引脚名称
说明
1
vcc
电源正极
2
gnd
电源地
3
buzz
连接到蜂鸣器
4
nc
空
5
nc
空
6
sel
sel = 1(rs232)
sel = 0(weigand)
7
tx
数据通过rs232的tx发出
8
data1
weigand接口data high引脚
9
data0
weigand接口data low引脚
em-18 rfid模块的规格参数
● 读取距离:10厘米
● 工作温度:0ºc至+80ºc
● 通讯参数:9600bps
● 电流消耗:<50ma
● 工作频率:125 khz
● 工作电压:5v
电路图和连接
stm32f103c8和em-18读卡器模块之间的连接如下:
em-18读卡器模块
stm32f103c8
vcc
+ 5v
gnd
gnd
tx
pa10
编程stm32f103c8用于读取rfid
在之前的文章中,我们了解了使用usb端口编程stm32f103c8t6板。所以我们现在不需要ftdi烧写器。只需通过stm32的usb端口将其连接到pc,然后开始使用arduino ide进行编程。在arduino ide中对stm32进行编程以读取rfid标签非常简单
1.首先,包括用于使用lcd显示函数的lcd显示库。然后定义lcd引脚并初始化lcd显示屏。
#include
const int rs = pb11, en = pb10, d4 = pb0, d5 = pb1, d6 = pc13, d7 = pc14;
liquidcrystal lcd(rs, en, d4, d5, d6, d7);
2.接下来在void setup()函数中,我们需要将lcd显示模式设置为16x2,并使用pa10引脚以波特率9600开始串行通信(这是stm32f103c8的serial1通信端口rx1,它与em-18 tx引脚相连。
lcd.begin(16, 2);
serial1.begin(9600);
pinmode(pa10,input);
3.接下来显示欢迎信息并在一段时间后擦除屏幕。
lcd.print(circuit digest); //prints at lcd display
lcd.setcursor(0, 1); //set courser to second line
lcd.print(rfid with stm32); //prints at lcd display
delay(5000); //delay for 5 seconds
lcd.clear(); //clears lcd display
lcd.setcursor(0,0); //sets cursor at first line
lcd.print(rfid tag no:); //prints at lcd display
lcd.setcursor(0,1);
4.在void loop()函数中,一旦stm32f103c8的串行引脚提供em-18 rfid读取器模块(标签id)的数据,该字符将逐位存储并在lcd显示屏上逐个显示。
{
while(serial1.available() && count < 12)
{
rfid[count] = serial1.read();
count++;
lcd.print(rfid[count]);
if (count==12)
{
lcd.print( );
count = 0;
lcd.setcursor(0, 1);
}
}
}
现在只需在stm32中上传完整的代码,您的系统即可运行。然后将rfid标签放在rfid阅读器上,您就会看到标签id出现在1602 lcd显示屏上。
曝美国军方正开发一种便携式人脸识别设备 可用手持设备和无人机识别一公里外的目标
MAX14983E集成高带宽模拟开关,电平转换缓冲器
2020的云计算会变得什么样
小米有大梦想,构筑智能家居生态圈
IT-N2100系列太阳能阵列模拟器的应用案例
使用STM32和RFID连接的读卡器系统设计
浅析电磁流量计工程应用中的要点
iPhone8什么时候上市:攒了10年大招!iphone8革命性的大改动,秒杀一切!
中国新能源汽车市场占有率超30%,持续引领全球风向
大空间移动式智慧消防报警灭火系统设计方案
连接器全球市场概况及竞争格局
恒讯科技分析:静态ip是什么意思?有什么优缺点?
吃够了移动硬盘的苦,我终于找到了一劳永逸的方法!
厦门市未来新建住宅将100%建设充电设施或预留建设条件
小米9 Pro曝光将首发30W无线快充并同时支持大功率反充技术
解读NAND Flash芯片K9F1208在uPSD3234A的应用
箱式变压器主要参数_箱式变压器技术支持
CES2013开幕在即 行业大佬预言未来趋势
25张图详解交换机:秒懂二层交换机的16个问题
基于ARM的超声波发射与控制电路设计[图]