基于小凌派RK2206的智能门锁设计
本项目由宁德师范学院郑炜坤、刘宏伟和游凯欣同学完成,作品获得福建省首届开源鸿蒙开发者大赛一等奖,感谢杨烈君老师倾情供稿!
1、项目背景
门锁一直都是一个非常经典的项目工程,从最早的钥匙锁,到后来的有指纹、密码、遥控等功能的电子锁。可以说门锁在不同时代下都有着不同的改进和顺应时代的创新,而近年来AI技术越来越完善,准确率和速率也越来越好,如何将AI技术应用在门锁上就是本作品的设计初衷。尽管人脸识别已经投入使用很久了,但大多数都是应用在隘口闸门、宿舍门禁等方面,并没有投入日常生活使用的人脸识别门锁。本作品针对这一问题,做出了些许尝试。 2、 项目简介
2.1 项目描述
本作品由搭载OpenHarmony的小凌派RK2206进行开发。将AI人脸识别技术应用到智能门锁项目中,极大程度提升了便捷度,并有效避免了钥匙丢失、忘记录入的是哪根手指的指纹等情况发生时无法开门的情况。还保留了传统智能门锁的指纹开锁、遥控开锁等功能。用于当人脸识别出现问题时的备用措施。我们在开锁中使用舵机转动来代替钥匙,做到了效率和安全度的提升。
2.2 功能说明
智能门锁舵机模块用于开关门,FPM383C模块用于指纹识别,K210用于人脸识别身份、红外接收模块用于接收红外遥控器的指令。
2.3 系统功能模块划分
小凌派RK2206主要完成智能门锁的指纹识别、开门关门、红外接收等功能。K210开发板用于人脸识别。 2.4 项目展示
智能门锁模型实物
3、硬件方案
3.1 硬件总体框架
3.2 主控芯片
采用小凌派RK2206 OpenHarmony开发板,主控为瑞芯微RK2206芯片,200MHz主频,RAM 256KB、ROM16KB、PSRAM 8M、FLASH 8M。板载NFC Tag芯片及天线,可实现OpenHarmony“碰一碰”功能。支持 IEEE 802.11b/g/n 制式,AP 模式。USB 2.0 、SDcard /SPI/I2C 接口、麦克风接口、E53 接口(包含 UART、 I2C、ADC、DAC、PWM、5 个 GPIO)。一根TypeC USB线,即可实现供电、下载等功能。一根TypeC USB线,可支持串口调试功能。 3.3 TFT显示屏
显示屏采用2.4寸TFT液晶,支持5V或者3.3V供电,通信协议采用spi协议。 3.4 舵机
舵机采用MG955舵机,支持5V或者3.3V供电。
3.5 K210人脸识别模块
K210开发板用于人脸识别。
3.6 指纹识别模块
指纹识别采用FPM383C指纹模块。
4、软件方案
4.1 人脸识别
使用yolo2算法+人脸模型来识别人脸,当识别到镜头中有人脸后将该人脸信息作为人脸5点模型的输入层获取该人脸的5点信息(左眼、右眼、鼻子、嘴巴左侧、嘴巴右侧),然后再将获取的人脸5点信息作为人脸特征值模型的输入层获取该人脸的特征值,然后通过比对已存储的人脸特征值和识别到的特征值进行打分,当分数超过75分时认为该人脸是同一个人,该分数阈值可调。
4.2 K210和RK2206之间的通讯
我们团队采用GPIO中断的方式实现K210和RK2206之间的通讯。当K210识别到正确的人脸之后会在LCD上输出Hello,并给RK2206的PB5引脚高电平,触发PB5引脚的GPIO上升沿中断,在该中断中写入EVENT_FACE_OPEN事件来唤醒开锁线程。同时我们还在K210中使用了一个定时器,该定时器在识别人脸成功后打开,定时3秒,3秒后触发定时器中断,在该中断中将给RK2206的PB5引脚的高电平置低为下一次触发PB5中断做准备,然后关闭该定时器为下次触发做准备。之所以不用串口作通讯是因为:micropython中数据采用Unicode编码,而Unicode在传输的时候比较费时,而且传给RK2206之后还需要解码,比较费时,实时性不如使用GPIO中断。
4.3 FPM383C指纹模块与RK2206通讯
FPM383C指纹模块内置各种指令包,我们团队通过串口通讯让RK2206发送不同的指令包并读取FPM383C回传的应答包,通过判断应答包的特征码从而执行不同指令以及判断是否执行成功。
4.4 RK2206与8266D1通讯
通过手机端的blinker软件发送不同的信号给8266D1,8266D1识别到该信号后8266D1给RK2206的不同GPIO引脚发送电平信号,RK2206检测到信号后执行对应的指令,若指令成功执行后RK2206的对应GPIO引脚将发送高电平回去给8266D1,8266D1检测到该高电平后在blinker上显示执行成功。 4.5 遥控模块
遥控模块采用红外遥控器+433编解码接收器实现。遥控事先用外部威廉希尔官方网站
进行和433编解码接收器学习互联后,将433编解码接收器的D0口接至RK2206的PA0引脚,D3口接至PA1引脚,并设置这两个引脚的GPIO上升沿中断。当遥控器的开们键按下时,向D0口发送上升沿信号,触发PA0的GPIO中断。当遥控器的关门键按下时,向D3口发送上升沿信号,触发PA1的GPIO中断。以此实现遥控控制开关门的功能。 4.6 任务管理
本项目RK2206的各个任务之间采用中断+事件的方式管理。一共定义了EVENT_FACE_OPEN、EVENT_KEY_OPEN、EVENT_FINGER_OPEN、EVENT_tiME_CLOSE、EVENT_KEY_CLOSE、EVENT_FINGER_TOUCH共6个事件,分别对应人脸识别开锁、遥控开锁、指纹开锁、超时上锁、遥控上锁、检测手指触摸状态等6个功能。本项目共4个任务,其中1个是低优先级的空跑任务,3个高优先级任务分别用来开锁、上锁与检测手指触摸状态。开锁、上锁与检测手指触摸状态任务使用阻塞方式读事件,并使用或模式和自动清理事件模式触发。当对应事件触发时唤醒对应任务来完成上锁、开锁和指纹验证的功能。其中开锁任务中完成开锁功能后会休眠5秒然后写入EVENT_TIME_CLOSE事件唤醒上锁任务来完成开锁5秒后自动上锁的功能。
5、项目总结和展望
回想整个参赛过程,受益匪浅。最初选择参加比赛主要就是因为对AI和计算机视觉有些兴趣,在做本项目的过程中虽然遇到了很多的困难以及问题、像是开发环境的搭建、套件的学习困难等,好在最后坚持下来了。并成功完成了作品也算是有所收获。
在学习RK2206的相关知识中,不仅对开源鸿蒙的OpenHarmony操作系统有了一定了解,还对实时操作系统的各个功能有了比较深刻的了解,像是事件、信号量、任务等功能。同时在人脸识别开发的过程中了解到了micropython的许多知识,同时也对AI技术有了一定了解,对于我参赛的初衷只是想借此机会来学习一下AI相关知识来说,能够完成作品已经是收获满满了。
就本次比赛来说,给我的最直观的印象就是,资料齐全,查找便捷以及各位指导老师也非常有耐心和负责,这也是使得我们团队在紧凑的时间下任然能交出一份还算满意的答卷的重要原因。所以也是非常感谢大赛的各位指导老师和负责人老师。