本帖最后由 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所示。
图1 射频识别门禁系统架构图 接下来就写代码吧,主要代码包含串口2和串口3,串口2作为语音播报装置的通信,串口3作为与上位机平台进行通讯,RC522的SPI通讯部分,本次RC522采用的是模拟SPI通讯方式实现,主要是模拟SPI便于移植,虽然时序方面不是很好调整,但是可以通过逻辑分析仪来实现对时序的调整。以下是初始化部分代码。
uint8_t JDQ_Flag;
UART2_Init();//串口2初始化,通过串口进行语音播报
UART3_Init(); //串口3初始化,通过串口进行电脑交互
JDQ_Init();//初始化继电器
RC522_Init();//初始化RC522刷卡模块
USART2_SendData(VoiceUp, 5);
在初始化之后就可以实现对IC卡的读取,本次没有对卡内容进行判断,仅仅采用了对IC卡秘钥的判断来实现IC卡是否有权限,其实后续优化可以对卡内容进行判断,同时可以实现IC卡的卡类判断,比如UID和CUID作为复制卡,很容易对IC卡进行复制,这样就会导致管理混乱。在刷卡之后,如果卡秘钥正确,则实现语音播报,并且控制继电器进行动作,表示门禁的锁打开,如果卡秘钥不正确,则会播报“卡无权限”继电器不动作。以下是程序流程代码。
while(1)
{
if(RC522_PcdRequest(PICC_REQALL, RecPcd) == MI_OK) //寻卡,有卡就认
{
if(RC522_PcdAnticoll(uid) == MI_OK) //防冲突,应对同时有多张卡的情况,将被选中卡片的序列号保存到uid中
{
if(RC522_PcdSelect(uid) == MI_OK) //选定序列号为uid的卡片
{
if(RC522_PcdAuthState(PICC_AUTHENT1A, 0x01, DefaultKey, uid) == MI_OK) //验证该卡片第一扇区A密钥
{
if(RC522_PcdRead(0x01, read) == MI_OK) //1.读取块1(16字节)数据
{
printf("刷卡成功");//语音播报刷卡成功
GPIO_WritePin(CW_GPIOA, GPIO_PIN_9, GPIO_Pin_SET); //置高,打开继电器
JDQ_Flag = 1;
USART2_SendData(Voice03, 8);
}
}
else
{
printf("刷卡失败"); //语音播报刷卡失败
USART2_SendData(Voice02, 8);
Delay_s(2); //刷卡间隔
}
}
else printf("刷卡失败"); //语音播报刷卡失败
}
else printf("刷卡失败"); //语音播报刷卡失败
}
if(JDQ_Flag == 1)
{
JDQ_Flag = 0;
Delay_s(3); //刷卡间隔
GPIO_WritePin(CW_GPIOA, GPIO_PIN_9, GPIO_Pin_RESET); //置低,关闭继电器
}
}
总的来说,这段代码写的较为简单,其实继电器的开关控制时间可以采用定时器计数的方式实现,这样继电器动作时间较为准确并且不会利用阻塞来实现。在刷卡部分可以获取卡内容来实现具体的权限判断,可以在卡内加入时间进行权限判断,这样就可以作为一个小产品来使用。不过该项目也有自己的亮点,以前的状态提示一般是靠蜂鸣器实现,后期会采用OTP的语音芯片来实现语音播报,这样的劣势是语音内容不能随时更换,个性化定义内容,并且音质堪忧,本次采用JR6001语音模块可以很好的解决这个问题,因此算是一个亮点。通过本次体验,发现CW32F030的性能还是非常不错的,主要是官方提供的例程比较丰富,让开发来说较为简单方便,采用F030其主频可以高达64MHz,在一般的微控制方面均可以胜任,所以我觉得这款芯片的性价比还是非常高的。最后的最后,来一个视频showtime~简单的展示一下DIY射频门禁的效果,欢迎大家吐槽~
|