基于STM32的指纹识别系统设计
2019-05-09张乐,王悦
张 乐, 王 悦
(沈阳大学 信息工程学院, 辽宁 沈阳 110044)
当今社会,信息安全成为人们越来越关心的话题,而生物特征因其具有很强的唯一性以及独特性,从而引领着生物识别技术的发展,像指纹识别、虹膜识别、面部识别等更多地被应用到各种不同的领域,代替了部分安全性较低的识别技术.位于巩膜和瞳孔之间的虹膜虽然包含了最丰富的纹理信息,但是就目前的市场来说虹膜识别的应用还不是很广泛[1].据统计,2017年我国安防市场总产值约5 900亿元;前瞻预计,到2023年,门禁系统市场规模将有望达到294亿元[2].
传统的门禁多采用刷卡或输入密码等方式采集并处理信息,这就需要用户随身携带门禁卡片,这样很不方便,另外密码也很容易被破解或盗取,在安全性方面还需要加强[3].基于这些因素加上指纹具有较强的唯一性和稳定性,且指纹相对于其他生物特征来说采集信息较方便,本文将指纹识别技术应用到门禁系统上并实现快速识别.不同于其他指纹识别系统的是,本设计采用STM32单片机,它可以同时处理32位的数据,较51单片机来说传输速率更快,在识别速度上有很大的优势,集成度高、内部资源丰富也是其优势所在[4].选用AS608指纹模块,因为它采集指纹的效率非常高,而且模块内部能自动识别并处理相关信息,无需再研究复杂的算法[5].指纹信息处理完成之后,单片机会将结果发送给LCD12864显示屏,然后以文字的方式呈现给用户.
1 整体方案设计
本文以STM32F103单片机作为主控芯片,采用AS608光学指纹模块来采集处理指纹信息,并用LCD12864显示屏呈现最终结果,单片机与它们进行串行数据传输.最主要的是要不断调试以提高识别的速度.主要实现以下功能:如果用户输入的指纹与之前预留的指纹信息一致,就会被识别成功,继电器产生动作,同时二极管点亮,显示屏显示“门已开”;当输入指纹错误时,显示屏会提示“未搜索到指纹”.有异常情况出现时,管理员也可以通过输入密码的方式手动开锁,实现双重保护功能,从而提高了门禁系统的安全性.本系统的优点在于系统硬件占用体积很小、对指纹的识别用时非常短,也便于在家庭中使用.
该系统结构共分为5个模块:主控芯片(STM32单片机)、指纹模块(AS608)、显示模块(LCD12864)、按键部分以及存储模块(24C02存储器).系统总体结构框图如图1所示.
(1) 主控芯片.根据控制需求,选择STM32F103单片机处理器作为控制芯片.该芯片具有串行调试(SWD)和JTAG接口2种调试模式,方便与该系统中的其他外围电路进行串行传输数据[6].51个多功能双向I/O口,且集成度高、易开发、函数库编程方式也相对简单,内部资源和外设资源也非常丰富,最关键的是该芯片处理数据的速度快,符合本指纹识别技术快速性的要求,而且低能耗,价格也相对较低.
图1系统总体框图
Fig.1Overallframeworkdiagramofthesystem
(2) 指纹模块.采用AS608指纹模块进行指纹的采集与处理,因为该模块内部的DSP单元集成了指纹识别算法,提高了采集图像和识别指纹特征的效率,处理一个指纹图像只需要不到0.4 s的时间.且该模块的拒真率低于1%,认假率低于0.001%,识别率非常好,完全符合本设计的要求[7].另外,该模块内置一个手指检测电路,根据WAK引脚的状态判断手指是否按下.
(3) 显示模块.显示部分采用LCD12864,因为该模块界面灵活、操作指令简单,并且可以形成人机交互图形界面.通过改变V0引脚上滑动变阻器接入的阻值可以改变LCD12864液晶显示屏的亮度[8].且通过串口与单片机进行数据的传送以达到信息的实时显示.
(4) 按键部分.因为本系统共有16个按键,采用矩阵式键盘设计.有按键按下时,与之相连的两根线的电平状态发生变化,所以就能判断被按下按键的具体位置,实现不同的功能.
(5) 存储模块.本系统采用24C02存储器来存储管理员密码.其中WP引脚为写保护引脚,可以防止误改存储区域内部数据,即当该引脚为高时,整个寄存器区域受到保护,因此只能读取24C02.在接收到第一数据字节之后不发送应答信号,以避免存储区域被重写.
2 程序设计
2.1 主程序设计
主程序主要包括指纹模块子程序、LCD子程序、内存子程序和键盘子程序.如图2所示的主程序流程主要有2个部分:一是通过指纹开锁,二是通过按键开锁.上电之后各模块先初始化,当指纹模块上有指纹出现时,其内部的DSP单元会开始处理数据,对比之前指纹库中已经录入的指纹,匹配的结果会传给单片机,然后由单片机发送指令给显示屏,将识别的结果显示出来;就是通过手动按按键产生的一些动作,首先单片机检测按键,如果有按键被按下再具体判断是哪一个按键,同时判断是否需要调用该按键需要的子程序[9].也可以输入6位数字格式的密码,进入管理员模式,然后可以采集新的指纹信息或删除已经录好的指纹,也可以修改管理员密码,为保证安全,在更改密码时需输入2次确认.
图2 主程序流程图Fig.2 Flow chart of main program
2.2 按键程序设计
在键盘模块,当有按键按下时避免不了会有不同程度的抖动,这时就会先利用延时程序消除抖动再判断是否真正有按键按下.如果有按键按下再进行按键分析,由于采用矩阵式设计,按键较多,而且每个按键的功能又不同,所以按键分析要通过程序的编写来达到准确判断的结果.分析之后,将结果传给单片机,由单片机给出指令来控制其他外设电路产生一系列动作来完成操作.若判断出不是按键按下而只是有抖动产生,那么就继续等待,直到有真正的按键产生.工作过程如图3所示.
图3 按键工作流程图Fig.3 Flow chart of key
2.3 LCD程序设计
显示模块就是按照需求将单片机指令执行完成的相关内容呈现在屏幕上.设计程序时,先写初始化和清屏的程序,接下来再完成接收命令和显示结果的程序.当系统开始工作,单片机给出显示屏命令时,它就会按照需求将显示的结果呈现到屏幕上以便于分析操作的结果[10].过程如图4所示.
图4 LCD流程图Fig.4 Flow chart of LCD
2.4 指纹程序设计
指纹模块主要是采集指纹数据,再将识别结果发送出去,所以该部分的程序设计也就分为2个部分:数据接收和数据发送.指纹识别模块与单片机进行串口通信,串口方式下的数据接收需要观察RI的值,如果RI为0就读出SBUF的值.而数据发送主要依据TI值,如果TI不为0,那么返回继续进行串口发送.发送、接收数据的过程如图5.
图5 数据接收和发送流程图Fig.5 Flow chart of data receiving and transmitting
3 系统实现
单片机各引脚与指纹模块、显示电路模块、键盘模块以及其他外围电路按需求相互连接,在经过不断调试之后,设计出整体电路图如图6所示.在整个设计过程中,最难最耗时的就是调试,显示屏有几次不能及时准确地显示出结果,参照它的资料手册修改了几次程序得以解决.在采集完指纹图像存储时,本来是使用EEPROM进行存储,但是发现上传/下载图像过慢,经翻阅资料得知,指纹模块的RAM内设有一个72K bytes的图像缓冲区和两个512K bytes的特征文件区,可以通过指令读写任意一个区,使图像缓冲区上传/下载的速度更快一些.
图6 电路原理图Fig.6 The diagram of circuit schematic
在各电路互相连接好并能正常运行后验证指纹识别的成功率.AS608指纹模块的指纹存储量为300枚,在常温环境下,采集指纹30人×10手指×2样本=600枚,分2组进行,其中每个手指采集的2枚指纹分别为手指中间部分和边缘部分的指纹,以方便使用者触摸到指纹传感器模块就能识别成功.在确保这些手指没有潮湿、划破等异常情况时,以正确方式将第一组的300枚指纹预先录入到指纹模块中,然后再分别触摸解锁[11].测试完成删除全部指纹,以同样方式再录入第二组的300枚指纹.观察到的结果是,600枚指纹中有599枚指纹能识别成功,仅有一枚指纹识别失败,成功率达到了99.83%,失败率为0.17%,远低于AS608指纹模块的拒真率1%.指纹经过处理并识别成功之后,液晶显示屏会显示图7所示的字样.识别失败时显示屏如图8所示.指纹模块经过小于0.1 s的初始化后,处理图像只需要不超过0.4 s的时间,再经过STM32单片机处理反馈出结果,总时长在0.4 s左右.
图7 指纹识别成功图Fig.7 The diagram of successful fingerprint identification
图8 指纹识别失败图
4 结 论
本系统通过AS608模块采集并处理指纹之后,通过STM32F103单片机将信息发送给LCD12864,然后呈现给用户.配合完成指纹识别功能的硬件还有按键、继电器及指示灯.按键可以操作管理员模式下的任何操作指示,通过继电器加之小灯的闪烁可以准确方便地观察到录入及识别指纹是否成功.为了起到双重保护的作用,管理员也可以手动输入密码开锁,在管理员模式下也能够删除、增加指纹信息,或者修改密码.