基于单片机的智能家庭门禁系统的设计
2023-04-27宋天慧曾建钱进贾保凯王静
宋天慧 曾建 钱进 贾保凯 王静
关键词:门禁系统;STM32;人脸识别;WiFi;二维码;GSM
0 引言
随着物联网技术的蓬勃发展和科技服务生活理念的深入人心,人们对家庭门禁系统的安全性、便捷性和智能性的要求逐步提高[1-3]。在现有的门禁系统中,2016年廖杰和黄文强提出了基于云计算的动态密码门禁系统,通过手机App和云平台获取随机动态密码开锁[4],解决了密码遗忘和易破解的问题,安全性高,但操作复杂。2021年金陵科技学院的顾姗姗等人提出了基于STM32的智能指纹门禁系统,将指纹作为开门密钥,具备便捷性的优点[5],但存在指纹可复制,破损或潮湿的指纹难以识别的问题。2021年淮南师范学院的蔡俊等人提出了基于二维码识别的门禁系统,将用户信息制作成唯一的二维码,扫码后开门,该系统操作方便[6],但二维码图片丢失被他人获取即可开门,存在一定的安全问题。以上设计的开门方式均较为单一,无法满足复杂多变的应用情况。
本论文结合以上三种门禁系统的优势,设计了基于STM32的智能家庭门禁系统,该系统以难以复制的人脸信息作为开门密钥,访客到来时可通过手机App、WiFi和云平台实现远程开门。若家中断网,可通过手机App生成加密二维码发给访客开门。若有入侵者企图撬门,则启动报警模块警告,并发送短信提醒用户。该系统通过生物识别技术、无线通信技术等,提高了门禁系统的安全性能和用户使用的便利性,采用多种开门方式,提高了门禁系统的稳定性。
1 系统设计
该门禁系统以STM32F103C8T6最小核心板为主控,接收并处理红外传感器和震动传感器采集的信息,同时通过ESP8266和云平台接收App发送的指令进行开关门,通过MF1进行人脸识别,GM65进行二维码识别,识别的信息经主控模块分析处理,判断是否开门,若感受到威胁,主控发送相应指令控制GSM模块发送短信提醒。外设与主控采用星形拓扑结构连接,人脸识别、二维码、WiFi、GSM 四个模块分别与STM32的不同串行通信接口进行通信,任一模块出现故障并不会影响其他模块,门禁系统仍能保持正常工作,且出现故障易诊断,系统构架图如图1所示。
1.1 系统电路设计
1.1.1 人脸识别模块
本系统采用了Sipeed公司设计的基于K210的AI视觉处理模组(Sipeed MF1) 作为人脸识别的核心图像处理单元[7]。如图2所示,本设计中MF1与STM32共地,TX、RX引脚连接STM32的串口2进行通信,MF1的引脚VSYS、USB与PNP晶体三极管IRF5210的漏极连接,三极管的源极接5V电源,栅极接STM32的B15引脚,通过光电传感器控制MF1上电工作,如图3所示,光电传感器的输出引脚连接STM32的B14,若感应到人,输入低电平,此时STM32向B15引脚输出低电平,三极管导通,人脸识别模块上电启动。
1.1.2 二维码识别模块
本系统使用GM65实现二维码扫描,能识别手机屏幕上的二维码,在本系统中用TTL232串行通信接口与STM32的串口1连接,若串口1收到的二维码数据经过异或运算解密后与设定的密码相同,STM32控制舵机开门,电路图如图4所示。
1.1.3 WiFi 模块
ESP8266与STM32通过串口3连接,二者共地,手机App通过云服务器向ESP8266模塊发送开门指令,识别到指令后,ESP8266 模块通过串口发送相应数据,STM32接收到数据后进行判断,一致则控制舵机转动,模块电路图如图5所示。
1.1.4 系统报警模块
震动传感器电路图如图6所示,其数字量输出口DO与STM32的A1引脚连接,感受到震动时,震动势能传到传感器内的弹簧末端引起共振,弹簧触碰到金属内壁形成通路,此时A1输入低电平,若同时光电传感器感应到人,STM32控制有源蜂鸣器连接的B0口为低电平,蜂鸣器长鸣,并通过虚拟串口向GSM模块发送AT指令,控制GSM发送短信给户主进行提醒,电路图如图7和图8所示。
1.2 系统软件设计
1.2.1 人脸识别模块程序设计
该系统采用的人脸识别算法是K210官方提供的开源人脸识别模型,检测到人脸后,获取左右眼、鼻子、左右嘴角五个关键点的坐标,根据该坐标与标准正脸坐标获取仿射变换矩阵,对原始的人脸图像进行仿射变换,变为正脸图像,接着计算并存储正脸图像的196维特征值,再次识别到人脸时,将该人脸图像计算出的特征值与存储的特征值一一对比,若最大分数大于85,则被认定为同一人。
本系统使用2个按键进行人脸图像的存储和删除。以增加人脸数据为例,按下按键1,首先清屏,准备增加人脸数据。若按下的时间小于等于1秒,UID加一,将该UID添加到数组中,再次按下按键1,若时间大于1秒,根据K210的串口通信协议,STM32通过串口发送“指定UID添加人脸”的信息,发送完数据后初始化发送缓冲区,为下一次发送数据做准备。K210接收到指令后将人脸数据存储在内存中并返回添加结果,添加人脸数据的流程图如图9所示。下面是发送指令的代码。
1.2.2 二维码开门模块程序设计
二维码加密方法为异或加密,该方法易于实现,计算成本小。信息论的创始人香农(Claude ElwoodShannon) 证明了在满足以下两个条件的情况下,异或加密是无法破解的。
(1) 密钥的长度大于等于信息。
(2) 密钥必须是一次性的,且每次都随机产生。
于是在本设计中,将开门信息初始化为四位数,每生成一次二维码该信息加一,加密的密钥初始化为六位数,每次减一,来保证二者异或生成的二维码数据的一次性和随机性,提高门禁系统的安全性。使用localstorage本地存储这些数据,确保App关闭后重新打开时这些数据保持不变。
二维码开门模块中,GM65模块扫描加密二维码,STM32预先存储了初始信息和加密信息在数组中,每接收到串口1传来的二维码信息,将初始信息加一,加密信息减一,通过函数将加密信息字符串和串口接收的字符串转换成整形数字,并进行异或运算,得到结果后将数字转换成字符串,然后与初始信息字符串对比,相同则开门。
1.2.3 WiFi 模块程序设计
本设计选择贝壳物联作为手机App和ESP8266沟通的桥梁,设计ESP8266与云平台之间进行TCP通信,手机端与云平台通过websocket 协议通信。ESP8266的STA工作模式可实现硬件设备的远程控制,于是设计ESP8266工作在STA模式下作为客户端接收家庭路由器的信号进行联网。ESP8266与STM32之间通过串口3进行通信,这部分的通信连接示意图如图10所示。
申请贝壳物联的设备编号和密钥,开启串口后,根据ssid和密码连接家中路由器,连接成功后根据贝壳物联服务器的网址和TCP端口创建TCP连接,进行数据透传。根据申请的设备编号和密钥向服务器发送登录指令,服务器收到指令后会判断登录信息是否正确,若正确,将返回登录成功的结果。此时可与其他设备互相收发信息。
在手机App中点击开门按键,触发send事件发送内容为“sw”的指令,用相应ID 指示发送目标为ESP8266端设备,在ESP8266端,对收到的信息JSON解析,信息中的ID指示该指令来源为手机端设备,若M 的内容为“say”且C 的内容为“sw”,通过串口向STM32发送“9”,STM32判断接收的数据为0x39,则控制舵机开门,并向WiFi模块发送字符“o”,WiFi模块收到字符“o”就向手机端设备发送内容为“the door'sopen!”的指令,手机端设备解析出指令内容就在div框中打印开门信息。
1.2.4 短信报警模块程序设计
短信报警模块首先对相应的串口和I/O口初始化,判断若红外传感器感应到人且同时震动传感器感受到震动,即PB14和PA1输入为低电平时,STM32向串口4发送AT指令,将发送的短信设置为文本格式,然后设置接收短信的手机号码,接着发送短信信息,最后发送“0x1a”,即短信发送标志。
GSM模块连接的是虚拟串口,在模拟串口时,本设计采用的是延时法,发送数据时先是发送一位起始位,再从低位到高位发送8位数据,最后发送一位停止位,串口通信的波特率,是每位电平持续的时间,波特率越高,持续的时间越短。如波特率为9600bps,表示1 秒传输9600 位数据,传输一位数据需要1s/9600=104us。在代码中可以通过每发送或接收一位数据就延时104us来实现串口的数据传输。
1.2.5 舵机控制模块程序设计
使用STM32控制SG90舵机,首先需产生基本的PWM 脉冲信号,本设计中舵机的信号线连接在STM32的PB9引脚,所以利用TIM4的CH4产生一路20ms 的脉冲信号,在该信号中,0.5ms 对应-90 度,1.0ms对应-45度,依次类推。其次是调整占空比,占空比为信号在整个信号周期内处于高电平的时间百分比。PWM所使用的公式如下:
时钟频率f=f0(/ TIM_Prescaler+1)
其中,f0表示对应定时器频率,本设计中取值为72MHz。
脉冲周期T=(TIM_Period+1)/f
占空比N=TIM_Pulse M/ T
為使脉冲周期为20ms,在设计中令TIM_Period为1 999,TIM_Prescaler 为719,(2 000*720) /72 000 000=0.02=20ms,由于PB9 引脚是TIM4 的4 路PWM 输出口,所以使用TIM_SetCompare4(TIM4,Compare4) 函数控制PWM输出,想要舵机转到0度位置,即TIM_Pulse为1.5ms,占空比为1.5ms/20ms=7.5%,只需令Com⁃pare4的值为2 000-2 000*0.075=1 850。
2 系统测试
2.1 人脸识别模块测试
人脸识别模块测试,如图11所示。按下按键,在屏幕上显示相应的UID,未录入人脸信息时进行人脸识别,舵机无法转动,不能开门;录入人脸信息后,进行人脸识别,识别成功后舵机能正常转动,且屏幕上显示Welcome字样,如图12所示,人脸识别模块功能正常。而使用照片或录制的人像视频进行人脸识别时,识别不通过,进一步保证了门禁系统的安全性。
2.2 手机App 测试
本设计中实现的App可通过用户手机录入的指纹登录或以贝壳物联的设备号及密钥作为用户名和密码登录,如图13所示,点击开门按钮后,舵机成功转动后,主界面div框中打印相应的时间和信息提示用户门已打开。如图14和15所示,每点击一次生成二维码按钮,输入框中的数值都相应变化,考虑到若门禁系统断电重启,门禁端的开门密码将变为初始值,所以在手机App上增加了重置按钮,点击该按钮,密码和加密密钥都将变为初始值,确保手机端和门禁端密码相同,手机App的功能均正常实现。
3 结论
针对目前存在的几种门禁系统存在的安全性低、操作复杂、指纹磨损或脏污难以识别等问题,设计了以STM32F103C8T6最小核心板为主控,集人脸识别开门的便捷性、二维码识别开门的安全性、App远程开门的智能性为一体,兼具防盗报警功能的家庭智能门禁系统。经软硬件测试,本设计的功能均能够实现,红外传感器一旦感应到人,MF1模块上电,可通过人脸识别开门,访客到来可用手机App远程一键开门,如果断网可以通过手机App生成加密的一次性二维码发给访客扫码开门,红外传感器感应到人且震动传感器感受到震动则触发蜂鸣器响,短信模块发送短信提醒。整个设计实现了智能门禁所需要的智能性、安全性、便利性等优点。当然,本次设计也有很多不足之处,比如手机App中无法保存开门数据等,后续可以与SQL数据库结合进行优化。