一种智能门锁系统的设计与实现
2021-06-29西安电子科技大学机电工程学院朱俊杰韩雨辰赵明英郭雨佳
西安电子科技大学机电工程学院 朱俊杰 韩雨辰 赵明英 郭雨佳
在本文中,介绍了一种全新的智能门锁系统。它是利用STM32单片机为控制芯片,以RT-Thread作为实时操作系统,读取指纹模块、IC卡模块、键盘模块的信息,将这些信息作为电子钥匙,与外部FLASH中已经存储的电子钥匙信息进行对比,若匹配成功,则STM32发出PWM波,驱动电机转动,实现开锁,OLED模块显示验证成功;若匹配失败,则电机不产生动作,OLED显示验证失败。
目前,随着现代人们生活品质水平的提升以及人们对安全隐患防范的高度重视,智能锁已经逐渐成为广大消费者进行门锁升级换代的最佳选择;同时,随着中国的智能家居、物联网技术的成熟与快速发展,各大门锁企业也纷纷开始抢滩中国智能锁的市场,以图以智能锁为入口抢占智能家居的市场份额。智能锁取代传统机械锁是一个必然的发展趋势,我们有很多理由相信,在不久的将来,智能锁将以其得天独厚的专业技术优势,带领中国锁具行业得到更好的发展,让更多的人更放心地在更多的场合使用。
1 系统组成及其各部分作用
系统硬件框图如图1所示。
该系统主要可以分为四部分,第一部分是IC卡、指纹、键盘模块,在本系统中,电子钥匙的类型有三种,分别是IC卡、指纹、数字密码,这三类分别对应上述三个模块,这三个模块用于采集外部电子钥匙的信息,并且将这些信息通过设定好的通信协议,发送给主控芯片;第二部分则是主控芯片部分,该系统的核心器件是STM32单片机,采用的具体型号是STM32F103RCT6,它是一款基于Cortex-M3内核的32位处理器,STM32通过与三个信息采集模块进行通信,获取当前的开锁信息,并且与外部FLASH中存储的密码信息进行对比,若匹配成功,则发出PWM波驱动电机转动,进而开锁;第三部分是外部FLASH,借助其掉电仍然保存的特点,就可以将电子钥匙的信息存储在其中,同时,通过与其通信,可以添加电子钥匙信息,删除电子钥匙信息、还可以查询当前FLASH中已经存储的账户数量;第四部分则是OLED显示部分,该部分提供了友好的人机交互界面,用户可以从OLED中看到实时的时间、电子钥匙的ID号、开锁记录、还会提示用户钥匙是否验证成功。
图1 系统硬件框图
2 电路实现
2.1 单片机介绍
在本系统中,选择的是STM32F103RCT6作为MCU,它拥有的资源包括:48KB SRAM、256KB FLASH、2个基本定时器、4个通用定时器、2个高级定时器、2个DMA控制器(共12个通道)、3个SPI、2个IIC、5个串口、1个USB、1个CAN、3个12位ADC、1个12位DAC、1个SDIO接口及51个通用IO口。该芯片性价比极高,在本系统中,其主要作用是以下4点:第一,是负责与指纹、IC卡、键盘进行通信,实时采集电子钥匙的信息;第二,是对FLASH进行读写操作,用于存储账户信息和开锁记录;第三,是驱动电机转动,执行开锁和关锁的动作;第四,是对OLED模块进行读写操作,将系统的一部分信息显示在OLED上。
2.2 IC卡模块介绍
在本系统中,采用的IC卡读写芯片是斯凯瑞利公司的SKY1311T芯片,它是一款应用于13.56MHz RFID系统非接触式读写设备芯片,支持ISO14443 Type A/B标准协议,数据传输速率是106kbps到848kbps,集成了双向加密认证,只需要极少数的外围元器件,就可以实现有效距离10cm的通信。同时它还有灵活的中断模式,与单片机的通信接口为标准的SPI接口,与MCU连接图如图2所示。当非接触智能卡进入读卡器建立的磁场有效区域中时,磁场中储能将受卡片影响将产生变化。SKY1311T可监测磁场强度并感知其细微变化,判定是否有卡片进入磁场。在本系统中,将模块配置为自动有卡检测之后,就可以不需要MCU的接入,SKY1311T自动按照配置完成寻卡操作,寻到卡后发出中断,唤醒MCU。
图2 与MCU连接图
2.3 指纹模块介绍
在本系统中,采用的指纹模组是鑫泓佳F4系列半导体一体化指纹模组,它主要由指纹传感器BF81260F、算法芯片GD32FFPRTGU6和瑞典著名算法公司Precise Biometrics(PB)指纹算法等组成。F4系列半导体指纹模组结构简单,模块化设计,提高了产品的稳定性和一致性,最重要的是它提供了一个通用串口,按照F4系列一体化程序通信协议交互通信,来实现指纹处理模块功能,方便二次开发。在本系统中,要实现添加指纹、比对指纹的功能,主要需要用到PS_GetImage(验证用获取图像)、PS_GenChar(生成特征)、PS_RegModel(合并特征且生成模板)、PS_StoreChar(存储模板)等四个指令。
2.4 键盘模块介绍
在本系统中,键盘的作用就相当于是一个控制台,本次总共需要用到16个按键,正好可以采用4x4的矩阵键盘,这16个按键分别是数字0~9,以及‘*’按键和‘#’按键,这两个按键分别代表删除数字和输入结束。还有4个按键则是“A”、“B”、“C”、“D”,分别代表添加IC卡、添加指纹、添加数字密码和删除某一个ID号的密码。数字密码是由6~10位的阿拉伯数字组成的,当用户按下这其中的某一个按键时,单片机会通过逐行扫描查询的方法,得出键值,然后单片机就会执行该键值所对应的动作。
2.5 外部FLASH介绍
在本系统中,所采用的外部FLASH型号是W25Q64。它是由华邦公司推出的大容量SPI FLASH产品,其容量为64Mb。当用户完成了添加电子钥匙的操作之后,单片机会将这些数据,按照一定的格式进行组合,通过对W25Q64进行读写操作,将这些数据存储起来,并且会给每一个电子钥匙分配一个独一无二的ID号码,并且将这一ID号码显示在OLED上。若是要删除电子钥匙,单片机也会根据这一指令,完成对应的读写操作。当系统刚上电时,单片机会从FLASH中读出所有的电子钥匙信息,并且存储到单片机的内部RAM中,方便后续的信息比对工作。当电子钥匙比对成功之后,系统会执行开锁的动作。此时,单片机从RTC时钟读取当前的时间,结合本次的电子钥匙信息以及ID号,生成开锁记录,并且将这个开锁记录存到外部FLASH中,方便以后能够查询开锁记录。
2.6 OLED显示模块
在本系统中,使用的显示模块是0.96寸的IIC接口的OLED模块。相比于传统的显示屏,OLED显示屏具有反应速度极高、广视角等优点。在设计电路是,将该模块的数据引脚挂载在IIC总线上,片选CS引脚则连接至单片机的IO口即可。OLED正常工作后,再配合着按键,用户就可以从OLED上查看自己需要的信息。
3 软件实现
图3 系统流程图
在本系统中,采用了RT-Thread作为实时操作系统,方便进行多线程的开发。RT-Thread是一个国产的嵌入式实时多线程操作系统,基本属性之一是支持多任务,在RT-Thread系统中,任务是通过线程实现的,任务与任务之间通过任务调度器进行非常快速地切换(调度器根据优先级决定此刻该执行的任务)。在本系统中,总共设计了4个线程,分别是Task_IC,Task_Finger,Task_Key和Task_Board,分别代表IC卡线程、指纹线程、按键线程和主线程,各个线程之间通信采用消息队列的方式,这种方式能够接收来自线程或中断服务例程中不固定长度的消息,并把消息缓存在自己的内存空间中。其他线程也能够从消息队列中读取相应的消息,而当消息队列是空的时候,可以挂起读取线程。当此时有一个新的消息请求到达时,挂起的线程将被自动唤醒以便于接收并自动处理新的消息。
在Task_IC(IC卡线程)中,当检测到有卡进入时,线圈周围的磁场会发生变化,进而产生中断。此时在Task_IC线程中,会通过SPI总线读取寄存器中的值,单片机会将读取到的值按照特定的格式转化为电子钥匙信息,然后就会将这一信息通过消息队列的形式发送给主线程,为主线程执行后续的动作提供条件。类似的,在Task_Finger(指纹线程)中,当有手指贴近时,指纹模组会产生一个中断,唤醒MCU。由于本系统采用的是一体化的指纹模组,指纹比对的工作在指纹模组内部就已经完成了,所以,此时指纹模组会给MCU返回比对成功或者比对失败的指令,若比对成功,MCU就会向指纹模组查询当前指纹的信息,查询完成之后,该线程也会将这些信息发送给主线程,通知主线程执行下一步的操作。若是比对失败,指纹线程则会向主线程发送开锁失败的相关信息。在Task_Key(按键线程)中,当有按键被按下时,MCU负责读取该按键的键值,并且将信息发送给主线程,通知主线程执行下一步的操作。而在Task_Board(主线程)中,主线程负责接收上述三个分支线程发来的信息,并且将这些信息进行处理和整合,完成对外部FLASH进行读写、控制电机转动和对OLED进行写数据等一系列操作。
4 系统流程图(图3)
小结:在本系统中,介绍了一种多功能的智能门锁系统,用户可以通过IC卡、指纹和数字键盘这三种方式来进行开锁。同时,还可以通过键盘输入,来查看开锁记录和用户信息。这样,这种智能门锁系统就可以运用在多种场景中,譬如酒店、公寓和私人住宅等。