基于Android和STM32的学生宿舍智能防盗锁
2021-10-19于克龙王贵和田家恒
赵 娜,于克龙 ,王贵和,田家恒
(1.辽东学院 化工与机械学院,辽宁 丹东 118003;2.辽东学院 信息工程学院,辽宁 丹东 118003)
经过不断演变,如今的防盗锁再也不是单纯的锁芯锁体了,而是一个系统[1]。目前,在国内,传统的安全防盗报警系统设计因功能性差等缺点不能满足人们的需求,高科技的智能型系统又因需要大量的资金作为技术支持而难以实现普及[2],因此急需研究和开发一种简易的安全防盗报警系统。在国外,大多数的报警器技术先进、功能丰富,比如红外对射防盗报警系统、触摸感应报警系统、超声波防盗报警系统等都已经发展成熟[3],智能安全防盗产品已经成为很多人选择的必要安全防护措施。
随着物联网技术的发展和智慧校园概念的提出,越来越多的智能装备已经进入校园。门锁作为校园宿舍的一道防线,对学生财产和人身安全起到了重要作用[4]。目前,我国高校宿舍绝大多数使用的都是机械锁。对于学生来说,机械锁存在钥匙不便携带和容易遗失等问题;对于宿舍管理人员来说,他们要管理大量钥匙,当学生忘带或遗失钥匙时,需要从备用钥匙中找到对应宿舍钥匙,还需要做好借出与归还的登记工作;对于学校管理者来说,他们每晚需要到寝室记录学生归寝的情况:这些人工管理方式效率低、耗时长[5]。本文将嵌入式及物联网技术相结合,利用Android系统和STM32单片机,开发出一款既廉价又便利的智能防盗锁。
1 防盗锁控制系统总体设计
1.1 总体方案设计
门锁是家的第一道安全屏障,门锁智能化是一种发展趋势。基于Android系统的智能防盗锁通过手机进行远程开锁,用户可以通过手机观察门外状况,只有被邀请的人才可以进门[6]。 防盗锁控制系统的总体设计结构如图1所示。
下位机以STM32为主要控制核心,控制各个子模块进行工作。其中超声模块利用超声波传感器发射超声波并接收信号,计算出接近门锁人的距离;OV7670模块为摄像模组电路,负责采集图像数据直接传输到STM32处理器上进行存储;DTU为4G通信模块,进行上下位机通讯;蜂鸣器模块为控制系统提供报警;L298n为电机驱动模块,执行开锁动作。上位机采用基于Android的App通过DTU接收下位机数据并进行实时显示。
1.2 电路设计
STM32核心系统由时钟电路与复位电路实现系统的时钟与复位功能。在防盗锁硬件设计方案中,驱动电路工作,实现对摄像模块的拍照上传,通过DTU数据传输到上位机。同时上位机作出一系列反应,发送一个指令使蜂鸣器处于报警状态。超声测距传感器把来人离门的距离测出来,STM32单片机把数据通过DTU模块上传到手机。
超声测距电路就是利用模块上的器件向某一个方向发射超声波。由于接收的声波信号特别微弱,需要经过电路放大信号。放大信号有一定干扰成分,还需设计滤波电路进行滤波和整形,得出平稳信号[7],利用该信号返回与发射时的时间差与声速的关系计算出距离。当把超声模块固定在门锁附近后并开启,模块就不断发出超声波,当前方有物体挡住时,声波就反射回来至接收器,通过声速与时间计算出距离并显示出来。工作时,由程序产生一个10 μs宽的脉冲信号,触发模块工作,发射超声波,并检测返回信号。
所构建的摄像模组采集图像数据电路设计如图2所示。该摄像模组电路自带了一个有源晶振Y1,Y1给OV7670芯片提供12 M的时钟输入。AL422B用来存储图片的数据,一般摄像模组不带FIFO做存储,由该摄像模组采集图像数据直接传输到处理器上存储。数据传输是通过P1双排插针进行,该双排插针上有一个3.3 V的直流电源[8]。
1.3 程序设计
程序设计包括摄像模组程序、通信模块软件、 发送与接收指令和超声测距等子程序的设计, 其程序流程图如图3所示。
超声传感器设计的安全距离是30 cm,如果有人接近门锁,与门的距离小于30 cm时,摄像头拍照上传至上位机,屋主识别是否为陌生人。若为陌生人,则系统判断为异常,警报立即响起并重复上述判断[9]。反之系统判断非异常,等待主人发送开门指令,如果接收不到开门指令则重复判断距离直至结束。发送指令与程序设计如图4所示。
上位机主要完成发送指令。指令设置比较简单,发送单字节数字和文本字符,每个指令都对应一个功能,当发送单字节数字“3”时,下位机接收并开锁;当发送指令文本字符“2”时,防盗锁立即关闭[10]。下位机的一系列防盗功能最终会设置相应的指令:“res2”是串口接收变量,LED0与LED1是调试灯,EN_A是电机使能,IN1是驱动输入信号。当上位机App发送对应指令,下位机接收信号做出反应。部分程序如下:
Res2 =USART_ReceiveData(USART2);//读取接收到的数据
if(Res2==3)
{ LED0=1; //开锁
LED1=1;
EN_A=0;
IN1=0;}
if(Res2==2)
{ LED0=0;
LED1=0;
EN_A=1;
IN1=1;}
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{ Res =USART_ReceiveData(USART1);//读取接收到的数据
if((USART_RX_STA&0x8000)==0);//接收未完成
{ if(USART_RX_STA&0x4000);//接收到0x0d
{ if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
else USART_RX_STA|=0x8000;//接收完成 }
else;//还没收到0X0D
{if(Res==0x0d)USART_RX_STA|=0x4000;
else
{ USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0; }}}}
2 调试与结果分析
调试结果分析由通信模块调试分析和摄像模组调试分析两部分组成。
2.1 通信模块调试及分析
为了下位机调试方便,上位机采用电脑进行模拟调试,指示灯出现缓慢闪烁说明已经注册上网络,从电脑打开调试软件SSCOM3.2,效果展示如图5。把USB转TTL模块插到电脑时,根据对应串口号,设置波特率为9 600,数据位是8位,停止位是1位,点击打开串口开始运行。
设置一个TCP服务端供模块连接,选择协议类型为TCP服务端,打开电脑查看本地IP地址并依次填入,得到图6所示端口号的查询。
在本机电脑CMD窗口上,输入指令netstat,自动弹出端口号,如:“127.0.0.1:53269”,其中前面是本地IP,后面是端口号。端口号不是固定不变的,可选其中一个即可,最后点击连接。当通过指令“AT+CIPSTART="TCP","www.tjh12010.xyz",8080”正常应返回CONNECT OK。
2.2 摄像模组调试及分析
两条串口线中,一条串口线作为控制指令,另一条作为数据传输。图5所示为图像串口助手,图像数据传输口先选择对应串口号和波特率,再选择命令控制口串口号以及波特率。点击自动拍照按钮后,生成图像,如图7所示。
图8所示为摄像头处于调试阶段。用一张带有汉字的图片进行采集并传输数据,图片采集的数据缓存在FIFO里,STM32作为主要处理器进行数据处理并显示在液晶显示屏上。最终调试成功,图片与液晶显示一致,但是方向有很大区别,原因是摄像头方向不正确。
3 结论
本文利用Android系统和STM32单片机实现了智能锁的远程控制,针对校园宿舍的应用场景,增加了家用锁没有的功能,实现了学校管理者和学生的智能化管理,并有效解决了出入人员身份识别困难及宿舍盗窃频发等常见问题。虽然基本实现了设计要求,仍存在不足之处,功能不够丰富,未来可考虑加装烟雾传感器,当发生火灾可及时报警。