首页 > 代码库 > 射频识别技术漫谈(28)——基于MF1射频卡的酒店门锁设计
射频识别技术漫谈(28)——基于MF1射频卡的酒店门锁设计
电子门锁是现代星级酒店管理电子化、智能化的重要电子设备。相较于传统的机械锁,基于RFID技术的电子门锁使用方便,易于管理,安全性高,可实现对开锁用户的分优先级自动管理,对房间入住信息实现自动统计与报表输出。
1 系统整体分析
MF1 S50和S70卡是遵守ISO14443A国际标准的非接触式逻辑加密卡,S50卡内共有1024字节非易失性存储空间,分为16个扇区,每个扇区包含4个数据块,每个扇区都有一组独立的密码A和B,扇区内的每个数据块都可单独设置存取条件。S70存储结构与S50类似,存储空间为4096字节,分为40个扇区。
旅客入住酒店时,酒店前台将旅客的入住时间、退房时间、房间号等信息写入已授权卡片指定扇区的数据块。客人在选定的房间门锁前刷卡,门锁射频读卡模块使用定时红外线扫描,当探测到卡片后启动读卡程序,读出卡片的全球唯一序列号和卡内的旅客入住信息,并比对房间号和入住与退房时间,决定是否开门,并将事件记录在门锁的E2PROM中。
卡内使用一个字节作为卡类型标识,除了客人卡、还可识别管理卡、清洁卡、楼层卡、报警卡、时钟卡等不同功能的卡片,并设置不同的权限。卡内的门锁操作记录可以使用MF1 S70卡片采集,以便定期导出进行汇总统计。
2 系统硬件设计
如图1所示,整个系统以ATMEGA88V为核心,外围电路包括RC522读卡操作模块、门锁电机驱动控制模块、红外探测模块、E2PROM存储模块以及电源、时钟、声光指示等功能模块。ATMEGA88V进行红外线探测,当探测到红外线有遮挡时启动RC522进行读卡操作,根据卡内信息决定是否进行开门操作,并通过实时时钟获得时间信息,最后将事件记入E2PROM中;如果是设置卡,则对系统进行参数设置。蜂鸣器和LED灯可以在卡片和门锁操作的过程中指示不同的状态,ISP接口实现应用程序的下载和更新。
图1 系统框图
2.1 主控芯片电路
由于门锁工作时对能耗指标的要求非常苛刻,所以选取主控芯片的原则是运行速度快,耗电少,内部资源够用即可,尽量减少闲置不用的资源。因此综合考虑选用美国ATMEL公司的高性能、低功耗的 AVR 8位微处理器ATMEGA88V作为本系统的核心。
该微控制器特点如下:
◆ 先进的 RISC 结构(工作于16 MHz 时性能高达16 MIPS)。
◆ 23个可编程的I/O口,8路10位ADC通道。
◆ 1K字节内部数据RAM,8K字节FLASH存储器,可以在系统编程。
◆ 3个通用计数器、定时器阵列, SPI串口。
◆ 多种节电休眠和停机方式,掉电模式下最低仅需0.5μA。
2.2 RC522读卡接口电路
读卡电路读取卡片信息供单片机用于控制门锁或进行参数设置,并在导出记录时将记录信息写入S70卡。射频接口芯片选用了体积小、低电压、低功耗的RC522芯片,以满足门锁控制模块对体积和能耗的要求。RC522支持ISO14443 TYPEA及MIFARE CRYPTO1加密协议,最大读写距离6cm,具备硬件掉电、软件掉电和发送器掉电等多种节电工作模式[2]。RC522读卡接口电路如图2所示。
图2 RC522读卡接口电路
RC522与单片机之间的通讯可以使用UART、I2C、SPI接口,此处我们选用SPI接口。硬件上电路板分为两个部分,天线和红外探测以及LED显示组成PCB前板,其它元件作为硬件底板,TX1和TX2连接PCB前板上的天线。Q1控制RC522的电源,在单片机休眠时RC522完全断电,以节省能量延长更换模块电池的间隔时间。
2.3 门锁电机控制电路与红外探测电路
门锁电机控制电路选用一片BA6287作为驱动。BA6287的供电电压范围4.5-15V,最大输出驱动电流可达1A。M+和M-分别接门锁直流电机的正负极,FIN和RIN接单片机的I/O口。BA6287可以实现电机的正转、反转、刹车以及芯片本身的掉电休眠模式,非常适合于门锁电机的驱动控制。
图3 门锁电机控制电路与红外探测电路
红外探测电路用于探测天线区域内是否有卡片存在。探测时,单片机将IR_E_D置高电平,Q21导通,二极管IR_E向模块正前方区域发射红外线,同时置位IR_R_D电压,并通过ADC通道读取IR_R的电压值。当射频场内有卡片时,发射的红外线通过卡片反射回来被Q22接收,Q22导通, IR_R的电压高于基准值,单片机据此启动RC522读卡电路。反之当没有卡片时,红外线没有反射,Q22不导通,此时IR_R电压为基准值。
3 软件设计
射频卡门锁电路的软件主要由射频卡探测与读写程序、门锁驱动与状态指示程序以及门开关记录保存与导出程序三部分组成。射频卡探测与读写程序实现了卡片探测与卡片操作,门锁驱动与状态指示根据读取的卡片信息对电机进行驱动,并显示门的当前状态信息,这两部分是软件程序的重点。开关记录保存与导出程序将开关记录记入模块的E2PROM并可导出到S70卡片,供PC主机采集与分析使用。门锁电路软件总框图如图4所示。
图4 软件总流程图
3.1 RC522卡操作程序
红外探测到射频场内有卡片后,单片机启动RC522进行读卡操作。由于模块每间隔250ms探测一次卡片,在间歇期内RC522处于掉电休眠状态,因此读卡的第一步是先给RC522上电复位,然后进行端口和RC522寄存器配置,之后开启天线进行卡呼叫、卡防冲突、卡选择和卡认证。只有获得授权的卡片才能通过卡认证一步,之后单片机根据卡类型进行判断,如果是MIFARE S50卡,则读取两个BLOCK的卡内配置信息,并根据这些信息调用门锁驱动程序执行开、关门操作或进行系统参数设置;如果是S70卡,则调用开关门记录导出程序,将模块内存储的开关门记录写入S70卡片。
如果红外探测到场内有卡片,但卡呼叫未成功,则可能是有其他物体遮挡红外线或可见光干扰,此时单片机将启动ADC基准值的动态平滑机制,将本次采样值加入样本,同时剔除最老的样本并计算样本平均值作为下次ADC采样比较的基准。经过较短时间的采样平滑后,基准值实现跟随外部干扰变化动态调整,从而消除干扰的影响。
3.2 门锁驱动与状态指示程序
门锁驱动程序根据读取的MF1 S50卡片配置信息进行各种操作。卡片内的配置信息使用卡片的两个BLOCK共32字节,第一个BLOCK的16个字节格式固定,第二个BLOCK的内容根据不同的卡类型所存储的信息有差别。其结构如下:
00 01 02 06 07 0B 0C 0D 0E 0F 10 11 16 17 1C 1D 1E 1F
卡型 | FLAG | BEGIN | END | 楼号 | 楼层 | 房号 |
|
|
|
|
|
卡型:一个字节的卡类型标识不同功能类型的卡片。常见的卡片类型可以分为两大类,开门卡和设置卡。开门卡可以实现开关门,如客人卡、楼层卡、清洁卡、楼号卡、应急卡、常开卡等;设置卡用来设置模块参数,不能开门,如退房卡、管理卡、房号设置卡、时钟设置卡、勿扰卡、报警卡等。
FLAG:标志字节,可以设置8个标志,比如是否允许开反锁,是否比较开门时间,是否比较房号等。
BEGIN和END:开始时间和结束时间,格式为年、月、日、时、分,只有在这个时间区间内,才能开门。当卡片为时钟设置卡时,使用BEGIN来设置系统时钟。
楼号、楼层和房号:用来比较房间是否正确。房号有两个字节,第一个字节为主房间号,第二个字节为子房间号。有些高级套房内部有子房间,并具有独立的门锁控制。没有子房间的客房在比较时忽略子房间号。
第二个BLOCK的内容根据不同的卡类型,其意义有所不同,比如清洁卡可用来设置清洁区域号和清洁时间段,设置卡用来存放模块的授权码等。
门锁驱动程序根据上述卡片信息对门锁电机驱动或将设置卡的设置参数写入模块内的E2PROM。
门锁状态指示程序用来显示门锁的当前状态。门锁状态使用一个蜂鸣器和一个双色LED来表示。正常开门蜂鸣器和绿灯同时动作0.5秒;发生错误时蜂鸣器和红灯同时动作0.2秒;设置卡设置成功后蜂鸣器和绿灯同时动作0.2秒;宾客在房间内将门反锁,绿灯每隔5秒闪烁一次;正常开门卡开门后5秒门未正常关闭,则蜂鸣器和红灯每隔1秒动作一次;电池电压低则蜂鸣器发出旋律可变的报警声。
3.3 开关门记录存储与采集程序
系统扩展了一片AT24C64 E2PROM芯片用来存储系统参数和开关门记录。AT24C64的容量为8K字节,其中前256字节(地址00H~FFH)用来存储系统参数,包括卡片密码、楼号、楼层号、房间号等。AT24C64剩余的存储空间(100H-1FFFH)用来存储开门记录,每条记录的长度为16个字节,其结构如下:
00 01 04 05 0 A 0B 0C 0F
卡型 | 卡序列号 | 操作时间 | 操作类型 | 备注 |
卡型占用一个字节,记录所刷卡片的类型;卡序列号记录卡片的全球唯一4字节序列号;操作时间记录刷卡的年、月、日、时、分、秒,占用6个字节;操作类型记录开关门的类型,包括正常开门、常开卡开门、常开卡关门、机械钥匙开门等。一片AT24C64共可以存储496条记录。
门锁中的记录使用MF1 S70卡导出。S70卡的容量为4K字节,除去制造商块和每个区的区尾块,每张S70卡可以记录215条记录,导出全部模块中的记录共需要3张S70卡。当用授权的S70卡刷卡时,门锁控制模块自动将E2PROM中记录读出,然后依次写入S70卡的BLOCK中,每一条记录对应一个BLOCK。写完第一张卡片后,模块自动等待第二张卡片进入射频场,直到写完第三张卡片。如果等待超过10秒钟未检测到卡片,程序将超时退出。