基于STM32的二维码智能开门取电控制系统*
2018-05-14李天祥田青松许谢飞夏志勇马志明高宏峰
李天祥,田青松,许谢飞,夏志勇,马志明,高宏峰
(河南科技大学信息工程学院,河南 洛阳 471023)
0 引言
目前,酒店房门的开锁和取电都是刷卡插卡式的[1],这种方式过于简单,在一定程度上影响入住,有时候会不可避免的出现出门忘记带卡的状况,这时旅客就需要到前台求助,由服务人员为旅客打开房门,这样无疑是同时浪费了旅客和服务前台的时间[2]。为了解决这一现状,本论文对当前酒店的门禁系统进行了改进,在刷卡的基础上增加了二维码开锁的功能。旅客在入住时,服务前台会将旅客信息写入数据库,成功激活旅客在该酒店的入住权限,旅客可以直接刷卡或者使用特制APP进行扫码开锁和控制取电等功能。当旅客在房屋休息时,可以使用APP控制电灯的通断。在外出忘记取下房卡时,可以避免和前台打交道的麻烦,直接用手机扫码开门。当旅客退房离开酒店后,前台将相应的信息从数据库删除,旅客将没有权限继续使用APP。在满足当前的需求之后,在该系统上留下了预留接口,为以后的智能一体化的升级留下可能。
本文介绍一种低功耗、实时性强、设计新颖、实用性强的二维码智能开门取电控制系统。利用STM32处理数据速度快、稳定等优点,将数据库技术、I/O及中断控制并和其他协议传输技术结合起来,实现酒店客房管理和旅客对房间有机控制,方便酒店方面管理和增强旅客入住体验。
1 总体设计功能与方案
以STM32为主控板控制的智能开门取电控制系统实现的功能是多选择性的解锁开门及智能取电。旅客入住酒店首先会在前台登记个人信息,登记完毕后根据前台服务员提供的扫码专用APP使旅客获取APP的使用权限,实现扫码进门。一般情况下开门方式默认为刷卡开门,旅客同时也可以选择通过扫二维码进行开锁。在进行开锁时,旅客选择二维码开锁方式(按下二维码开锁选择功能键)后,单片机会生成一个包含随机数信息的二维码,由LCD屏显示,客人通过专用APP扫码后会自动生成密码,客人向系统通过按键输入密码,确认后由系统进行比对,如果密码是错误的就会提醒重新输入,一旦超过3次数后就会启动报警,若密码一经确认相同后就会开启房门同时驱动继电器开锁取电。
当微控制器STM32F103ZET6发生倍频后,最高频率可达72 MHz,通过倍频技术可以在处理速度和功耗间任意选择。内嵌512 kB的FLASH存储器、64 kB的SRAM,丰富的外设也深得工程师们的喜爱,定时器、外部中断、ADC、DMA、FSMC及各种通信协议,如USART、SPI、IIC、CAN等等[3]。本系统利用STM32的串口、外部中断、FSMC、SPI协议等系统资源。为了系统的安全性和可靠性,通过基于互联网架构的应用层数据库技术,上位机和下位机采取统一的密码算法取代传输层技术,避免数据在传输时遭到恶意攻击,极大的保障系统的安全性,隐藏系统所有内容使外界不可见。系统总体分为两部分,控制系统和APP。控制系统负责总体的控制,主要包括STM32F103ZET6,矩阵键盘,REID-RC522,TFT显示屏,红外传感器,继电器,蜂鸣器和电磁锁等,图1为控制系统框图,其中RFID-RC522模块是通过SPI通信方式与主控进行通信的,显示屏由STM32内部FSMC驱动,矩阵键盘由外部中断控制,红外传感器通过ADC驱动,蜂鸣器和继电器由GPIO高低电平来驱动控制。
图1 控制系统框图
图2为APP系统框图,主要包括权限识别,扫码功能,解密功能,密码显示等功能。
图2 APP系统框图
登录过程需要使用到旅客房间号作为账号,密码由前台指定,这样能排除任何人对本系统进行操作的可能,APP在登录成功后才能调用摄像头进行扫码和解密的工作,最终获取密码并入住。
2 硬件接口电路
STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核。在整个系统当中,使用了TFT显示屏、射频卡、矩阵键盘、继电器、红外传感器、蜂鸣器等。其中显示屏由STM32内部FSMC(灵活的静态存储器控制器)驱动,射频卡的通信协议使用的是SPI,矩阵键盘用的是外部中断,红外传感器通过AD器件将模拟信号转换成我们作为度量的数字信号,继电器和蜂鸣器由普通I/O控制。
2.1 TFT显示屏
为配合控制系统做人机交互界面,显示二维码提供给旅客,系统设计了一个3.5寸液晶显示模组,该液晶模组是 320*480 的真彩屏,驱动芯片为 ILI9488。该屏使用 16位总线模式,采用 6 个白色 LED 作为背光源。液晶显示模块电路设计见图3,图中U10驱动芯片为 ILI9488,背光采用一个三极管驱动六个白色LED光源(LCDK1-LCDK6),LCD_BL引脚接单片机普通IO引脚,通过控制三极管的导通控制LCD的背光亮灭。液晶显示模块可以选择8位或者16位数据并口,默认采用 16位接口,这样才可以充分发挥STM32的优势。
图3 TFT液晶显示屏设计图
2.2 按键电路
矩阵键盘的设计在于选择扫码功能和键入密码作为一个人机交互的输入系统。矩阵键盘列线接普通IO引脚作为输出引脚,将行线所接的单片机的I/O口作为输入端,接外部中断线。这样,当产生了外部中断信号我们就能判断是在哪一行发生了按键,再通过检测列线的输出引脚的电平和初始状态相比是否发生跳变来最终确定矩阵键盘被按下的按键。
2.3 报警电路
在设计过程中为了防止恶意操作,对系统中添加了报警装置,其本质就是通过GPIO口控制三极管驱动蜂鸣器,由于GPIO口输出电流有限,而蜂鸣器在蜂鸣时需要较大的电流,GPIO输出口无法满足要求。而S8550最大可提供1A的输出电流,足以驱动蜂鸣器。所以,用GPIO口来控制S8550的导通和截至,从而来控制蜂鸣器。在系统中它作为实现报警信号和其他提示音的功能,当系统判断输入错误密码达到三次后就会启动报警,蜂鸣器长鸣,直到解除警报。
2.4 电磁锁
电磁锁是系统最终控制的一部分,它的核心组成是一个电磁铁,通电使电磁铁产生磁性,锁舌缩回,开锁成功。由于需要达到足够的驱动电流,系统采用外接12 V直流电源,电流的通断由继电器控制,继电器由单片机IO的高低电平控制来完成整个控制。
3 软件设计
3.1 二维码生成过程
二维码又称QR CODE,是近几年来移动设备上比较流行的一种编码方式。二维码共有40个尺寸,根据系统需要的信息量选择尺寸大小为21*21的version1版本,一个可用的二维码图像包含定位图案、功能性数据、数据码和纠错码。
在系统中,二维码中包含的信息是一个随机数,随机数由随机数种子生成,通过数字转字符串方式将随机数变成一个字符串,如数字1234转换成字符串”1234”。生成二维码图案的实现中将数据接口设计成字符指针类型,方便传入任意长度的字符串,通过计算二维码的长度宽度按点从左到右依次显示在LCD屏上。具体软件设计流程如图4所示。图中检查数据的合法性是检测数据是否为指定的数据类型。
图4 二维码生成流程图
3.2 解密算法
解密方案中,使用了随机数生成算法。密码学中安全的伪随机数需要满足统计学伪随机性和密码安全伪随机性。随机数产生后将它截取成两个等长的随机数,如”12345678”截取成为”1234”和”5678”,这样通过两个新的随机数同时进行解密才能获取正确的密码。如果rand1和rand2代表截取的两个随机数,用psd表示密码,解密后的密码表示为:
psd=(~rand1)∧(~rand2).
式中,~表示按位取反 ,∧表示异或.
上位机中采用了一致的算法,扫描二维码后获取原始数据,经过上述解密算法获取密码。向控制系统输入密码后,跟psd进行比对,如果一致则开锁并给房间进行供电,如果连续超过三次密码错误则蜂鸣器报警,软件实现流程如图5所示。
图5 解密流程图
3.3 取电设计
在控制系统中使用了红外传感器,其作用就是检测是否有人进入房间,因为只有当房间有人时才有取电的必要,系统通过两排红外传感器来检测旅客的进出,由于一般房门的宽度只允许一个人进出,而两排红外传感器的作用就是根据传感器检测到的顺序来判断人员的进出,考虑到这点后在程序中通过对进出人员进行计数,当进入房间时计数器加1,当人员出来计数器就减1,只要计数器大于0则表示房间依然有人,这样就能保证电源在有人的情况下一直连通,而电源的获取是通过继电器的通断控制,其实现流程如图6所示。
图6 取电设计流程图
4 结束语
本文介绍了新型酒店开门取电系统,本系统属于电子门禁系统,但是与传统的刷卡开门相比有很大的创新性,它将现在二维码与门禁结合起来,构成多选择性的开门系统,它让入住酒店变得更便捷,将不再与服务前台打交道,省事更安全。
[1] 查振元,朱华炳.电子门禁系统组成[J].机电产品开发与创新,2003,13-14.
[2] 闫宏毅.酒店管理实务[M].北京:电子工业出版社,2009:187-220.
[3] 蒙博宇.STM32自学笔记[M].北京:北京航空航天大学出版社,2012:18-24.
[4] itwriter.二维码的生成细节和原理[EB/OL]. www.news.cnblogs.com/n/191671/2013-10-29.