【摘要】目前市场上的大多数指纹考勤机都不具备实时性,在导入数据,查看数据,导出数据等方面需要耗费管理员很大的时间和精力,这不符合这个时代解决问题所要求的高效性。虽然购买企业级考勤管理系统可以在一定程度上解决这些问题,但是这不仅需要花费大量资金,更重要的是不符合学生与老师之间相互的特定需求。所以我决定要做一个具备实时性、高效性,一个集签到、缴费、学生管理、课程管理为一体的,针对市场特定人群受体的定制化产品。学生可以指纹打卡签到,查看课程信息,老师可以接收实时签到信息,查看缴费信息。
【关键词】指纹打卡,收发短信、实时
引言:通过对学校周边一些教育培训机构的实地调研,我发现这些机构的考勤系统虽然也是利用指纹机进行签到打卡的,但是无一例外,都会需要特定的管理员去查看并整理签到信息,才能得到各学员的出勤信息,这样做其实很不方便,浪费了大量的时间成本和人力成本,更重要的是不具备实时性。
首先我想解决的是一般指纹打卡机的效率问题,就是不需要把指纹打卡机拆下来通过数据线连接到电脑上,然后将数据进行传输导入,管理员再逐个审核查看等繁琐的步骤。所以我面临的第一个问题就是如何实时接收签到信息。经过一段时间的思考,我觉得接收到一条具备实时性的通知短信是个挺不错的方法,那么一些硬件模块就可以发挥它自身的长处了。当与手机联系起来的时候,那么传输数据就成了接下来我所要面临的问题了——用什么来将硬件模块与手机联系起来呢?我第一时间想到的便是用一根数据传输线将二者连接起来,但这样又回到了起初那个问题上面,数据线是一个极其麻烦的存在,那么无线传输技术就很好的解决了这个问题。
此时我已经初步将手机和硬件模块联系了起来,意思就是短信已经可以顺利的发送到手机上了。当然,采集用户指纹特征并将其转化为数据上传保存是必不可少的,那么这个指纹打卡设备能显示当前时间、指纹录入成功或失败、签到成功或失败就是一项非常重要的功能,由此来看,硬件系统的初步功能就诞生了。
为了将硬件设备的功能发挥的淋漓尽致,那么一款合适的软件势必在其中充当衔接段统治级别的作用,软件的研发也就自然而然的纳入了此次项目的未来规划之中。
整个项目是基于硬件设备之上的,同时软件的加入又为此项目增添了不少色彩,所以软硬兼施为我的团队在此次科研训练项目中定下了基调。明确了这个问题之后,软件的自身定位对我而言就是一个比较犹豫的问题:到底是做一款PC端的软件与数据库连接起来呢,还是做一款手机上的软件体现“极简主义”呢?考虑到以下几个因素:一是项目体现实时性是通过短信发送的方式实现的,而短信发送到手机上是比较容易查看的;二是之前已经做过一个PC端的学生信息管理系统了,这次想尝试新东西。所以抱着“挑战自我,直面困难”的良好心态,我们选择了之前从未接触过的手机端应用程序作为本次项目的“软实力”。
我选择了SIM900A硬件模块,它是实现短信收发甚至打接电话的一个不错的选择。在调试的过程中,我选择了基于STM32F10VBT6开发板上进行。我将阐述大致的调试过程:
我选择了蓝牙ATK-HC05-V11模块实现手机端与硬件端的数据传输,此模块的调试十分简单,将引脚的VCC、GND接到STM32的VCC和GND上,接通STM32的电源,打开电脑端的串口调试工具,输入AT指令进行调试(此过程可更改模块默认名称,设置密码,设置连接设备),回复OK时证明完成通信。手机端在安卓应用市场下载“蓝牙串口调试助手”后打开蓝牙,当检测到重命名的蓝牙信号时,证明调试成功;这里也可以使用我研发的手机APP来实现互连。
我选择了带内存的指纹识别模块,可将录好的指纹信息上传到自身的内存芯片中。这里我将阐述实现指纹识别功能的大致过程:首先将此模块按正确的接法接入到STM32板中,之后打开测试工具;选择通讯口及波特率修改后就可以添加指纹了,然后通“指纹1:1比对”,“指纹1:N比对”对添加的指纹进行验证;之后进行“采集指纹图像”、“取特定用户特征值”、“采集指纹特征值”,将数据信息上传到内置存储芯片中;接着对两组指纹进行比对,验证是否为同一用户;考虑到模块一次性可以录取多少组指纹,用户分别是谁以及安全性等问题,我分别通过“取用户信息”、“取模块总容量及用户总数”、“设置模块安全等级”等测试步骤对其做出多样化调试,完成此结构块的功能化实现。
我选择了JLX12864G-086型液晶显示模块,它既可以当成普通的图像型液晶显示模块使用(即显示普通图像型的单色图片功能),又含有JLX-GB2312字库IC,可以从字库IC中读出内置字库的点阵数据写入到LCD驱动IC中,以达到显示汉字的目的。具体的想法是能够在整个硬件模块上面显示简单的功能提示,为硬件提供一个透明化窗口,让用户根据屏幕上的提示完成基本操作,实现指纹录入、发送短信到、接收电话号码的设置以及一个当前时间的显示。在调试过程中,JLX12864G-086型液晶显示模块有12个引脚,根据STM32开发板的接线方式分别将ROM_IN(接PA7/SPI1_MOSI)、ROM_OUT(接PA6/SPI1_MISO)、ROM_SCK(接PA5/SPI1_SCK)、ROM_CS(接PA4/SPI1_NSS)、LEDA(接LED6)、VSS(接GND)、VDD(接VCC)、SCK(PB6/I2C1_SCL)、SDA(PB7/I2C1_SDA)、RS、RST、CS(这三个可接IO端任意三个接线柱,但要在硬件程序中特别声明)。
软以Android Studio为开发平台,Java为开发语言,构建手机APP项目工程,用H5语言进行界面结构布局。完成了以“Fingerprint”命名的手机APP应用程序开发。
软件的初步定位设想是不通过应用市场的“蓝牙调试工具”显示蓝牙连接成功,通俗点讲就是不仅可以通过内嵌接口打开手机端的蓝牙功能,而且能够被硬件的蓝牙模块识别到本机,从而进行互联;其次内嵌按钮与硬件实现通信,通过定制专属按键实现短信一键发送至手机端的功能。在祖逖框架定位完成后,本APP名称暂定设置为我自己的名字,添加了“联系客服”、“检查更新”、“五星好评”、“帮助说明”等功能模块,完善一个软件的边缘化功能,增加用户体验性。
在调试这些相关硬件模块的过程中,我发现每一个模块都需要配套专门的串口调试工具来调试,虽说模块少可以采用这样的方式,但是考虑到后续功能的延展以及最终模块结合起来的相互配合调试,这些工具都很难发挥到想要达到的效果,于是我以Qt为开发平台,C++为开发语言,写了一个集“串口通信”、“串口调试”为一体的应用程序,实现对整个硬件的组合调试功能。同时还增加了“流水灯”、“蜂鸣器”、“短信收发”、“LCD12864”、“红外热释电”等外设控制以及时间显示、矩阵键盘等功能。
所有硬件模块调试通过之后基于STM32开发板组装到一块,连通综合“串口调试”工具,进行整体通信与连接。之后我以Keil V4为开发平台,C为开发语言,写好了硬件测试程序,通过J-Link烧录到STM32中,完成单机测试。在手机端安装.apk安装包,安装好后打开蓝牙与蓝牙模块相连接。用户对设备进行多组指纹录取(录取编号自增1,以此为默认设置),然后进入初步预设的功能测试阶段:用户在设备上录取指纹;液晶显示屏上通过菜单提示,通过矩阵键盘设置用户接收短信的手机号码及接收时间;用户再次进行指纹打卡,设备与内存芯片中上传好的指纹库进行比对;用户可以通过手机短信端回复特定指令(默认设置为1),手机APP端特定虚拟按键,设备指定按键端这三种方式对用户签到打卡的实时状况进行接收。
在此项目完成初步功能实现的基础上,项目后续我准备在硬件端将指纹识别模块更替为人脸识别模块,所用的的技术会涉及到openCV等。软件方面我会新增PC客户端的应用程序,将界面与数据库连接到一起,真正做到学生信息、教师信息、缴费信息、课程信息的一体化管理,涉及到Java、SQL、C++等语言。Web端我将使用Python、H5、PHP这些语言进行开发,把学生对于课程的实时观看、实时下载,综合浏览等功能结合起来,实现真正的教务管理里。
在此次科研训练项目中,通过对硬件的调试让我学会了很多关于硬件方面的知识,从而有了一定的知识储备,除此之外,我对STM32开发板产生了浓厚的学习兴趣,如果有机会我将重新对整个开发板的电路构造做进一步的深究,尝试自己对PCB画线。同时,Android开发是我以前从未接触过的知识领域,但是通过做手机端APP让我对此部分知识有了系统化的学习。QT平台上的开发让我多了一些项目实战经验,也再一次的对C++语言进行了全面的复习。Keil V4平台上的编好的程序可以通过J-Link烧录到单片机中,由此对嵌入式有了一定的掌握。对我来说,此次科研训练项目不仅给了我对知识框架进行重新整理归纳的机会,更多的是一次挑战,一次尝试。在项目开始之前,我和我的团队抱着一颗惶恐的心;在项目过程中,我们时而步履蹒跚,时而通宵达旦,心里充满压力;在项目收尾阶段,我怀揣着一颗感恩的心,感谢自己一年的坚持与努力,也感谢所有团队成员的帮助和鼓励。最后,我给这个设备起了一个叫做“菜鸟一号”的名字,以此来激励我们不断努力,不断学习,不断进步。
《STM32F103VBT6中文参考手册》
《STM32F103VBT6英文数据手册》
《JLX12864G-086带字库》
《ATK-HC05-V11用户手册_V1.03》
《指纹识别模块用户手册》
《Android APP开发》