[CW32F030系列] 【CW32F030FxPx StartKit开发板】2、DIY射频识别门禁系统

[复制链接]
 楼主| Estelle1999 发表于 2024-6-27 20:55 | 显示全部楼层 |阅读模式
本帖最后由 Estelle1999 于 2024-6-27 20:57 编辑
上一篇写了关于CW32F030FxPx StartKit开发板的基础环境搭建与串口的应用,主要是为了DIY射频门禁系统而做准备。上一篇链接如下:https://bbs.21ic.com/icview-3382088-1-1.html
本次将开始DIY射频识别门禁系统,说起射频识别大家可能不太常用,射频识别(RFID)是一种无线通信技术,通过在标签中搭载微型芯片和天线,使标签能够与读写器之间进行无线通信,实现对标签中信息的识别和读取。RFID技术在物联网、供应链管理、智能交通、仓储管理等领域有着广泛的应用。RFID技术的优点包括快速、无需视线直接对标签进行识别、耐用、可以实现远距离识别、同时支持同时识别多个标签等。
本次主要是利用RFID射频中的13.56MHz的频段,利用RC522实现对IC卡的识读,判断IC卡是否有进门权限,如果没有进门权限则语音播报“卡无权限”,如果有进门权限则播报“刷卡成功,请通行”,同时继电器会动作。这些发生事件均可以通过串口将事件信息发送到上位机平台。具体架构如图1所示。
001.png
图1 射频识别门禁系统架构图
接下来就写代码吧,主要代码包含串口2和串口3,串口2作为语音播报装置的通信,串口3作为与上位机平台进行通讯,RC522的SPI通讯部分,本次RC522采用的是模拟SPI通讯方式实现,主要是模拟SPI便于移植,虽然时序方面不是很好调整,但是可以通过逻辑分析仪来实现对时序的调整。以下是初始化部分代码。
  1. uint8_t JDQ_Flag;

  2. UART2_Init();//串口2初始化,通过串口进行语音播报

  3. UART3_Init(); //串口3初始化,通过串口进行电脑交互

  4. JDQ_Init();//初始化继电器

  5. RC522_Init();//初始化RC522刷卡模块

  6. USART2_SendData(VoiceUp, 5);
在初始化之后就可以实现对IC卡的读取,本次没有对卡内容进行判断,仅仅采用了对IC卡秘钥的判断来实现IC卡是否有权限,其实后续优化可以对卡内容进行判断,同时可以实现IC卡的卡类判断,比如UID和CUID作为复制卡,很容易对IC卡进行复制,这样就会导致管理混乱。在刷卡之后,如果卡秘钥正确,则实现语音播报,并且控制继电器进行动作,表示门禁的锁打开,如果卡秘钥不正确,则会播报“卡无权限”继电器不动作。以下是程序流程代码。
  1.     while(1)
  2.     {
  3.         if(RC522_PcdRequest(PICC_REQALL, RecPcd) == MI_OK) //寻卡,有卡就认
  4.         {
  5.             if(RC522_PcdAnticoll(uid) == MI_OK) //防冲突,应对同时有多张卡的情况,将被选中卡片的序列号保存到uid中
  6.             {
  7.                 if(RC522_PcdSelect(uid) == MI_OK) //选定序列号为uid的卡片
  8.                 {
  9.                     if(RC522_PcdAuthState(PICC_AUTHENT1A, 0x01, DefaultKey, uid) == MI_OK) //验证该卡片第一扇区A密钥
  10.                     {
  11.                         if(RC522_PcdRead(0x01, read) == MI_OK)  //1.读取块1(16字节)数据
  12.                         {
  13.                               printf("刷卡成功");//语音播报刷卡成功
  14.                               GPIO_WritePin(CW_GPIOA, GPIO_PIN_9, GPIO_Pin_SET); //置高,打开继电器
  15.                               JDQ_Flag = 1;
  16.                               USART2_SendData(Voice03, 8);
  17.                         }
  18.                     }
  19.                     else
  20.                     {
  21.                               printf("刷卡失败"); //语音播报刷卡失败
  22.                               USART2_SendData(Voice02, 8);
  23.                               Delay_s(2); //刷卡间隔
  24.                     }
  25.                 }
  26.                 else printf("刷卡失败"); //语音播报刷卡失败
  27.             }
  28.             else printf("刷卡失败"); //语音播报刷卡失败
  29.         }

  30.         if(JDQ_Flag == 1)
  31.         {
  32.             JDQ_Flag = 0;
  33.             Delay_s(3); //刷卡间隔
  34.             GPIO_WritePin(CW_GPIOA, GPIO_PIN_9, GPIO_Pin_RESET); //置低,关闭继电器
  35.         }
  36.     }
总的来说,这段代码写的较为简单,其实继电器的开关控制时间可以采用定时器计数的方式实现,这样继电器动作时间较为准确并且不会利用阻塞来实现。在刷卡部分可以获取卡内容来实现具体的权限判断,可以在卡内加入时间进行权限判断,这样就可以作为一个小产品来使用。不过该项目也有自己的亮点,以前的状态提示一般是靠蜂鸣器实现,后期会采用OTP的语音芯片来实现语音播报,这样的劣势是语音内容不能随时更换,个性化定义内容,并且音质堪忧,本次采用JR6001语音模块可以很好的解决这个问题,因此算是一个亮点。通过本次体验,发现CW32F030的性能还是非常不错的,主要是官方提供的例程比较丰富,让开发来说较为简单方便,采用F030其主频可以高达64MHz,在一般的微控制方面均可以胜任,所以我觉得这款芯片的性价比还是非常高的。最后的最后,来一个视频showtime~简单的展示一下DIY射频门禁的效果,欢迎大家吐槽~


DIY射频识别门禁系统.rar

539.3 KB, 下载次数: 2

yangjiaxu 发表于 2024-6-28 15:12 | 显示全部楼层
做的还不错啊,这个创意挺好
xiaoyaodz 发表于 2024-7-4 20:28 | 显示全部楼层
RC522模块以实现IC卡的读取。
iyoum 发表于 2024-7-4 21:42 | 显示全部楼层
重点转向构建一个射频门禁系统,利用RFID技术实现对IC卡的识读和权限验证。
robertesth 发表于 2024-7-7 14:31 | 显示全部楼层
可以使用RC522_PcdRequest函数来检测是否有IC卡靠近读卡器。当有IC卡靠近时,此函数将返回MI(表示检测到IC卡)。
iyoum 发表于 2024-7-7 17:35 | 显示全部楼层
RFID技术因其无需直接视线接触、远距离识别能力、同时读取多个标签以及耐用性等特点,在物联网、供应链、交通和仓储管理等多个领域得到广泛应用。
chenjun89 发表于 2024-7-7 20:08 来自手机 | 显示全部楼层
楼主动手能力不错啊。
AdaMaYun 发表于 2024-7-9 11:28 | 显示全部楼层
射频门禁都有哪些硬件单元以及通讯方式?
phoenixwhite 发表于 2024-7-9 21:19 | 显示全部楼层
用于控制门禁锁的开关。              
iyoum 发表于 2024-7-10 00:25 | 显示全部楼层
探讨如何利用RFID射频识别技术
hilahope 发表于 2024-7-10 03:33 | 显示全部楼层
这是一个常用的RFID读卡器,工作在13.56MHz频段,用于读取IC卡的信息。
Annie556 发表于 2024-7-10 12:24 | 显示全部楼层
其实,我觉得确保系统的安全性,防止未经授权的访问。使用加密技术保护RFID标签和读卡器之间的通信
Carina卡 发表于 2024-7-10 13:31 | 显示全部楼层
考虑使用动态加密或滚动码技术,以防止重放攻击
 楼主| Estelle1999 发表于 2024-7-10 14:38 | 显示全部楼层
可以选择合适的RFID读卡器和标签。根据需求选择低频(LF)、高频(HF)或超高频(UHF)RFID系统
Charlotte夏 发表于 2024-7-10 15:45 | 显示全部楼层
确保读卡器和标签的兼容性,并考虑它们的读取范围和环境适应性
Emily999 发表于 2024-7-10 16:55 | 显示全部楼层
一般来说系统有稳定的电源供应,考虑使用备用电池或不间断电源(UPS)
Betty996 发表于 2024-7-10 19:10 | 显示全部楼层
选择合适的通信接口(如UART、SPI、I2C)和协议,确保读卡器与控制器之间的可靠通信
alxd 发表于 2024-7-11 08:06 | 显示全部楼层
编写可靠的软件来处理RFID读卡器的输入,并控制门锁或其他执行机构
Alina艾 发表于 2024-7-11 09:24 | 显示全部楼层
安装读卡器时,考虑其位置和角度,确保标签能够被正确读取
Betty1299 发表于 2024-7-11 10:09 | 显示全部楼层
我觉得,需要考虑实现远程管理功能,如通过网络更新用户数据库或监控系统状态
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

1568

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部