当前位置:文档之家› 门禁

门禁


1.1 课题研究的背景及意义
随着教育的发展,在校学生人数越来越多,而教学设施和学生宿舍的安全管理却有所
欠缺,经常导致学校公共财产损失。因此,校园安全成为了我们十分关心的话题。
引起宿舍和学校安全问题的直接原因是安全保障不到位,人员进出缺乏管理,不明人
员可以进入学校重点区域(如实验室、宿舍等)。实验室的安全管理不够完善,如一些对
学生开放类的实验室总有不明人员进入,从而造成各种损失等等。大多数学校宿舍使用的
是木制门的老式锁,很容易被撬开,而且不少学生容易忘记关闭宿舍门。这些都是威胁学
生宿舍和校园安全的因素。如今学校采取的措施大多是实验室安排学生每日值班;而宿舍
管理员则对宿舍进行地毯式管理,但这样浪费了大量的时间和劳动力,不但无法实现安全
管理,也难以培养学生居安思危的安全意识,无法从根本上解决校园安全的问题。
1.2 本文研究的主要内容
本课题的研究重点是基于 STM32F103ZET6 微控制单元 (MCU)构造的图像预警式门
禁系统。这套门禁系统可以单独实现对门禁检测区域的安全性预警控制和人员进出管理,
它实现了摄像头抓拍体系监控和刷卡进出管理、上位机数据库的查询以及管理者手机蓝牙
智控权限的使用都极大地扩展了门禁系统的应用领域。
基于 STM32F1 系列控制的图像预警式门禁系统的整体框架设计内容,主要是包含了
以下部分:
STM32 微控制单元、射频读卡器刷卡、OV2640 摄像头模块、热释电和触摸传感器、液晶
详情显示,电磁锁控制模块,手机蓝牙智控模块、电源稳压模块、刷卡和抓拍上位机数据
库记录。在其中,OV2640 摄像头模块、射频读卡器、热释电和触摸传感、蓝牙智控模块、
液晶显示、驱动电路与上位机均连接 STM32 单片机最小系统板。
常熟理工学院毕业设计(论文)
2
2. 图像预警系统的基本原理
2.1 摄像头 OV2640 的工作原理
OV2640 是 0.25 寸的 CMOS UXGA (1632*1232)图像传感器。 OV2640 摄像头模块的
大小很小、其电压很低,适合低功耗开发。OV2640 是通过 SCCB 总线来使用的,它能够
输出各类分辨率的影像数据,同时他具有多种输出方式比如一帧、子采样、缩放等方式。
OV2640 摄像头的 UXGA 图像最高可以达到 15 帧每秒。当然使用者是完全可以控制图像
的质量、数据的格式和传输的方式。
OV2640 摄像头带有压缩引擎(Compression Engine),它能够支持图像压缩,自然而
然的它可输出 JPEG 图像数据,它的压缩引擎框图如图 2- 1 所示:压缩引擎包含的三部
分:DCT、QZ 和 entropy encoder(熵编码器),将原始的数据流,压缩成

jpeg 数据输
出。
[5]
图 2-1 OV2640 压缩引擎图
OV2640 的图像数据输出格式有很多,首先我们简单介绍一些定义:
UXGA,它是分辨率达到 1600*1200 的输出格式。
OV2640 的图像数据输出(通过 Y[9:0])就是在 PCLK,VSYNC 和 HREF/ HSYNC 的
控制下进行的。PCLK,是像素时钟脉冲,一个 PCLK 时钟脉冲,输出一个像素(或半个像
素)。VSYNC,即帧同步信号。HREF /HSYNC,即行同步信号。首先来研究下面行输出时
序图,如图 2- 2 所示:
常熟理工学院毕业设计(论文)
3
图 2-2 OV2640 工作行输出时序图
图像数据只有在 HREF 行同步信号为高的时候输出,而当 HREF 变高后,每一个 PCLK
时钟,在 RGB 格式下都会输出一个字节数据。每个 tp=2 个 Tpclk, 所以当我们采用 UXGA
时序,按 RGB565 格式来输出,每 2 个字节组成一个像素的颜色,则每行输出总共有 3200
个 PCLK 周期,总共输出了 3200 个字节。
OV2640 摄像头的图像数据一般用 2 种输出方式:一种为 RGB565 和另一种是 JPEG。
他们有相同点,在数据读取方法上是一模一样的。而不同点体现在,当输出 RGB565 格式
数据的时候,时序完全就是上图介绍的关系。但是当输出数据是 JPEG 数据的时候, PCLK
周期的触发数目将大大减少了,且不连续,输出的数据就是压缩后的 JPEG 数据。同时输
出的 JPEG 数据是以:0XFF,0XD8 开头,以 0XFF,0XD9 结尾。此时会出现一种情况,在
0XFF,0XD8 之前,或者 0XFF,0XD9 之后,会有不定数目的其他数据(一般是 0),这些数
据我们可以直接忽略,只需要将得到的 0XFF,0XD8~0XFF,0XD9 之间的数据,保存
为.jpg/.jpeg 文件,就可以直接在电脑上打开图片文件看到图像了。
OV2640 摄像头拥有 JPEG 输出功能,这一特色极大地减少了图像的数据量,使得其在
网络摄像、无线视频传输等方面拥有很大的优势。
常熟理工学院毕业设计(论文)
4
2.2 电磁门锁使用的工作原理
图 2-3 磁力锁实物展示图
磁力锁,又称电磁锁,它的设计思路是利用了电生磁的物理现象,如图 2- 3 实物图所
示,它的原理简单来说就是:当通电电流通过锁上面的硅钢片部分时,磁力锁就会使内置
硅钢片产生非常大的磁吸力,此时的硅钢片通过紧紧的吸附配套的铁板来实现锁门禁的效
果。磁力锁的吸力强度是以 LB(磅)为单位表示,它只需要很小的电流,通电电流通过电磁
锁就会产生莫大的吸力,牢牢锁住门禁。而且电磁锁没有复杂的机械开关结构以及传统锁
具上锁舌的构造结构, 很方便很实用。 它适用在逃生门领域或是消防门的通路控制领域上,
当然传统的电力设施也在得到广泛应用。
磁力锁模块应用于本设计图像预警式门禁系统

中的工作流程描述如下:当启动本系统
后,电磁锁通电关门,只有当有认证权限的人来刷卡时,电磁锁才会断电,吸力瞬间消失,
打开 3 秒左右的时间,之后电磁锁会自动上电,关上门禁。当内部人员有希望外出时,按
下内部触摸开关即可打开电磁锁出门。
2.3 非接触式 IC 卡(射频卡)工作原理
在现如今,非接触式 IC 卡技术使用相当广泛。它的内部是由 IC 芯片电路和天线构成
的,它自身是无源的。它的成功在于将射频识别和 IC 卡技术完美结合在一起,结束了卡
内无源和刷卡免接触这一领域难题,实现电子器件领域方面的新突破,是近年来风靡的一项
新技术。使用射频卡时,只需要将射频卡摆放在离读写器表面一定高度范围内即可(通常这
个距离为 5—10 厘米)。 由于它内部拥有天线,可以使用无线电波技术来与读卡器数据进行
交互和读写修改操作。射频卡的整体电路都封装卡内, 它采用工业标准的 PVC 设计, 没有
常熟理工学院毕业设计(论文)
5
任何接口外露,设计完善、美观。
射频卡内含有全球唯一且独立的序列号,它在通讯前需要通过无线电波与读卡器之间
进行三次的相互认证操作流程,且通讯过程中所有数据信息都会举行许多加密操作,来保
证安全性。另外,在射频卡中拥有许多个扇区,它们是拥有自己的密码的。因此,完善的
保密性能使得它广泛应用于实现考勤、收费管理等领域,发挥了无可替代的作用。
[10]
下面是射频卡的简单工作原理:
读卡器向射频卡发送出固定频率的无线电波信号,此时射频卡内部拥有的 LC 串联谐
振电路会受到感应激励,并且二者之间的通讯频率为 13.56MHZ。当射频卡中 LC 频率与
读卡器发送频率一样时,便会出现电磁共振现象,使得电路中电容存储了电荷,与其连接
有一个单向通的电子泵,当储存的电荷达到 2V 时,就可以作为电源为其他电路供电,此
时它实现的功能是将卡内信息通过无线电波发射出去验证或者接收读卡器的写入的信息。
射频卡应用于本项目图像预警式门禁系统中的工作流程描述如下:当启动本系统后,
电磁锁通电关门,使用者只能通过非接触式 IC 卡来与 RC522 读写器进行交互,得到系统
验证完毕后,只有拥有认证权限的人,电磁锁才打开,得到验证失败的人则无法入内,会
触发相应预警机制,所有卡的信息记录都会发送给上位机构成考勤管理记录,登记入库。
2.4 热释电传感器(PIR)工作原理
热释电红外(PIR)传感器,它最显著的特色是能够检测到人体发出的红外线信号。PIR
的灵敏度是非常高的,它是一种新型红外探测模块。PIR 能够用扫

描探测的方式知道探测
区域内人发出的红外线能量变化,同时将红外线能量变化转变为输出电压的变化。
下面简单叙述下 PIR 的工作原理内容:因为人体的正常体温范围是 36~37.5℃,换成
华氏则为 309~310.5K ,其辐射的最强的红外线的波长计算为λm=2989/(309~310.5 )
=9.67~9.64um , 因此得到其中心波长为 9.65um,此值就设置为 PIR 传感器检测过程中的中
心波长。
见下图 2- 4 所示,探头探测区域内没有检测到人体发出的红外能量时,在传感器内部
的电容两端产生了两种电荷。这两种电荷是极性相反、电量相等的正、负电荷。正负电荷
会在回路中相互抵消,回路中是没有电流的,因此传感器无输出,一直保持着低电平。
探头探测区域内有人移动,检测到人体发出的红外时,两个电容被照射的红外能量是
不等的,此时形成的光电流在内部回路中是不会抵消的,PIR 肯定会有信号输出。有一种
常熟理工学院毕业设计(论文)
6
特殊情况存在,当传感探测区域内的人静止不动时,虽然能检测到人体辐射的红外信号,
但是两个电容上的光电荷却是一样的,形成了的光电流在内部回路中会互相中和,传感器
是没有信号输出的。
图 2-4 PIR 传感器检测模型示意图
由以上所得结论,PIR 仅仅只会对移动的人体起到检测作用。但是应用到本设计中无
需考虑静止问题,因为,靠近和通过门禁系统不存在一直禁止不动的人或物。
PIR 传感器应用于本课题图像预警式门禁系统中的工作流程描述如下:当启动本系
统后,电磁锁通电关门,当门禁外探测区域内有人体运动或活动时,会触发 PIR 传感器,
当短时间逗留进入则不做记录,当时间逗留较长,则会触发相应预警机制,会抓拍图像传
送给上位机软件,保存于电脑中。
常熟理工学院毕业设计(论文)
7
3. 图像预警式门禁系统的硬件设计
3.1 硬件系统总体概述
本项目 是基于 ARM 的电磁 图像预警式 门禁系统的设计 ,其主控芯片使用的是
STM32F103ZET6 微控制单元(MCU)。从图 3- 1 硬件系统的整体框图可以看出,其中各
子部分包含:
STM32 最小系统、射频读卡器、OV2640 摄像头、热释电和触摸传感、液晶显示,磁
力锁控制模块,手机蓝牙智控模块、电源稳压模块和 PC 端软件。其中,摄像头模块、射
频读卡器刷卡模块、热释电和触摸传感模块、蓝牙智控模块、液晶显示模块、驱动电路与
上位机均连接单片机主控。
图3-1 系统整体框图
常熟理工学院毕业设计(论文)
8
3.2 硬件模块化设计
3.2.1 OV2640 摄像头采集模块
图 3-2 OV2640 摄像头采集模块电路图
在本设计中采用 OV2640 摄像头是用于采集

图像数据。由于它具有 JPEG 格式输出图
像的功能,所有在本设计里是无可替代的选择。原因在于,与直接以 RGB 格式输出的摄
像头相比,以 JPEG 格式输出具有很高的压缩比率。重点在于,一般单片机的硬件资源都
很有限,比如 STM32F103RBT6,该单片机的 RAM 有 64KB,虽然比一般的单片机的 RAM
大很多,但是对于动辄几百 K 的图像数据来说,就显得很小了。举一个例子,就以一幅
320x240 大小的 16 位彩色图像为例,如果没有压缩,图片的大小就是 320 * 240 *2 = 150KB,
而通过 JPEG 格式压缩后,图像的大小只有 4~10KB 左右。 JPEG 处理图像大小的能力适合
单片机开发的优势就很明显。由于 JPEG 压缩比率很高,而且图像信息还原后效果较好,
因此 JPEG 这一标准在世界范围内很短时间就取得了很大的成功。所以在本设计中,选取
了 OV2640 模块作为该系统的图像采集模块。 本设计中 STM32F103 使用 DMA 传输方式来
接收 OV2640 采集到的图像,提高了 CPU 的效率。
3.2.2 微控制器工作电路
STM32F1 系列是 32 位 ARM,它基于 Cortex- M3 内核架构设计。
本课题使用的是 STM32F103ZET6 芯片。 它拥有 512K 中等容量的片内 FLASH。这
款芯片可以设置高达 72M 的频率。其中的数据、指令可以分别走不同的流水线, 以确保
CPU 运行速度达到最大化。
STM32F1 系列 32 位处理器能够提升 了更高的代码效率, 其 最高工作频率达
常熟理工学院毕业设计(论文)
9
1.25DMIPS/MHz 。2.0- 3.6V 的电源供电和 IO 接口的驱动电压,很多多快速 IO 端口,保障
了芯片与外设之间的信号传输。从图 3- 3 STM32F103ZET6 最小系统电路图可以看到,这
是由实验室自制的 STM32 的 PCB 最小系统板,在上面装载了 miniUSB 母口来进行程序的
烧录和串口通信。
图 3-3 STM32F103ZET6 最小系统电路图
本系统采用 STM32F103ZET6 单片机作为核心控制单元,具有控制简单、方便、快捷
的优点。同时 STM32F103ZET6 单片机价格低廉,这是一种较优方案。
3.2.3 热释电红外(PIR)传感器工作电路
本课题中使用的热释电红外传感器模块型号是 HC- SR501,选择原因是 HC- SR501 是运
用了红外线技术且内部包含了自动控制模块,它内置探头采用了德国原装进口的 LHI778
探头设计,具有很高的灵敏度,可靠性非常强。它的电压工作模式超低。HC- SR501 使用
非常广泛,它能够应用于很多的自动感应和电器设备等领域。
它内部有两种信号产生触发方式:
常熟理工学院毕业设计(论文)
10
一种是不可重复触发方式: 当上面的探头感应到人体移动时,输出信号会从低电平跳转
到高电平,延时 1.5S,之后信号输出又从高电平跳转低电平;
另一种方式是可

重复触发方式:当探头感应到人体移动,输出信号会从低电平跳转高
电平,在一段 0.2 秒之后,如果仍然检测到人在其探测范围内运动,它仍旧会继续保持高
电平,直到探测区域内无人为止。
从下图3- 4和图3- 5可以看到,下面是使用第一种方式,不可重复触发方式探测区域内
一直有人体在移动的实验检测结果:
图3-4 当热释电周围无探测目标输出信号图 图3-5 当有探测目标在周围移动输出信号图
当无人时,一直为低电平;当有人在周围移动时,信号就会呈现脉冲矩形波的形式。
3.2.4 射频读卡器模块
本项目中使用的射频卡的通信卡写器模块型号是 MFRC522 。它是适合于智能嵌入式
仪表应用的研发。MFRC522 使用了调制解调技术,完全是频率在 13.56MHz 下的射频通
讯方式和协议。它的双向数据传输速率非常迅速。它跟 MCU 之间的通信可以按照不同的
用户需求来选择,可选择 SPI、I2C 或串行 UART(类似 RS232)方式之一,非常方便。
[11]
如图 3- 6 所示的是 MFRC522 内部工作原理框架图。其中的模拟接口和 RC522 的外部
模块连接,它的作用是用来对外围电路接收的信号进行调制和解调。非接触式 UART 和主
机进行通信的方法,是使用的通信接口方式。FIFO 作用是用来存储 UART 得到的数据,
并将该数据发送给主机。而主机的接口可以根据需求自行选择是 UART、SPI 或者 I2C 接
口。
[15]
常熟理工学院毕业设计(论文)
11
图 3-6 RC522 原理框图
下图 3- 7 是 RC522 读写器的电路原理图。图中所示的 LC 组成的天线电路可减小高次
谐波对信号的干扰,同时可提高 PCB 天线的传输功率。
在本课题应用中,将 MFRC522 的 SDA、 SCK、 MOSI 和 MISO 分别和 STM32F103ZET6
单片机的 PC0、PC3、PC1、PC2 相连接。RC522 和 MCU 进行通讯的方式是通过 SPI 接口
进行数据传输。
图 3-7 RC522 射频读写器电路原理图
常熟理工学院毕业设计(论文)
12
3.2.5 蓝牙智控模块
手机蓝牙智控模块结构示意图见下图 3- 8, YS- BLK 蓝牙控制器采用 5V 供电, IO 输入
输出电平范围为 0- 3.3V,可直接与 MCU 相连,无需做降压处理。且该蓝牙控制器有十个
IO 口可供设计使用。本实用新型中,蓝牙控制器的 P10 和 P9 口分别连接 MCU 的 PB10
和 PB11 引脚来达到控制作用。
个人编写基于 iOS 的手机蓝牙智控 APP 可通过长按模式进入设置模式,来编辑简单
16 进制指令和指令功能名,会保存在手机沙盒之中,通过点按按钮来实现,远程控制蓝牙
控制器上 IO 口电平,达到门禁控制的作用,极大程度提高用户体验的感受以及安全性能。
本实用新型中,我们使用这套体系设计了管理者权限模式,只允许管理者使

用该款手机
APP,可远距离操控门禁开关,以及一键自锁门禁功能等。
图 3-8 蓝牙控制器实物图 图 3-9 iOS 手机蓝牙智控 APP
常熟理工学院毕业设计(论文)
13
3.2.6 电磁锁控制模块电路
电磁锁控制模块包括驱动电路、光耦隔离继电器模块和电磁锁装置,结构示意图和电路
示意图见图 3- 10 与图 3- 11。驱动电路是由 LM339 等组成的电压比较器电路,它的作用是
用来提升 MCU 的门禁开关信号的电压,从而驱动继电器工作。 LM339 的失调电压特别小,
输出端电位可灵活方便的选用。电压比较器通过对光耦隔离继电器的控制,来决定门禁系
统的开关状态。5V 供电的光耦隔离继电器具有寿命长,无噪声、AC/DC 兼用、可以控制
各种负载电路的特点。同时磁力锁是利用电生磁的物理现象,当控制电磁锁的门禁系统判
断正确以后会断电信号控制磁力锁断电,磁力锁会失去吸力开门,3 秒后信号跳转,重新
通电,磁力锁关门。
图 3-10 电磁锁门禁控制模块结构图
图 3-11 电磁锁门禁控制模块整体电路原理图
常熟理工学院毕业设计(论文)
14
3.2.7 触摸传感器工作电路
具体实施中,实现触摸传感开门的功能采用拥有电容式数字传感方式的模块,电路图
见图 3- 12,核心器件是一个 TTP223- BA6 单键电容式触摸检测 IC,利用电荷转移技术将人
体电荷电平在绝缘介质上的电荷电平检测电容的微小改变来检测的,代替传统的机械开关
从根本上增加产品美观和使用寿命,达到人性化设置。
本课题中,触摸传感作为屋内人员出去的开关,简单方便。触摸传感器只需 5V 供电,
信号输出引脚接 MCU 的 PA4 引脚即可,一旦门禁内部有人触摸则信号引脚立刻由低电平
跳转成高电平,传送给单片机 IO 口中断检测处理。
图 3-12 TTP223 电容式数字触摸传感器图
3.2.8 液晶显示电路
考虑到便携性及低功耗,本项目中之所以采用了 NOKIA5110 显示模块,是因为该模
块具有以下优势:
1. 84*84 的点阵 LCD,可以显示 4- 5 行汉字;
2. 价格便宜,模块体积很小;
3.该模块采用的是串行接口与 MCU 进行通信的,接口线需求很少,实验室自制的核
心板 IO 有限,之前搭载太多设备,导致 IO 分配成问题。
常熟理工学院毕业设计(论文)
15
LCD5110 示意图如图 3- 13 所示。
图3-13 LCD5110模块接口图
RST:复位脚(低电平有效);CE:片选引脚(低电平有效);DC:数据和命令切
换脚;DIN:数据输入脚;CLK:时钟引脚;VCC:正电源;BL:背光控制开关;GND:
电源地。
3.2.9 稳压电源电路
本项目中系统有些模块的供电需要 5V 电压,而微控制器电压需要 3.3 V。在本课题中

采用日常的 220V 交流电源通过带保护电路的 9V 充电器来实现供电,再通过 7805 稳压芯
片输出 5V 电压,而磁力锁是 9V 直接供电。
使用 AMS1117 获得 3.3V 电压。因为这 AMS1117 的内置电路集成了过热保护和限流
功能。下图 3- 14 是本课题的稳压电源电路图。
图 3-14 稳压电源电路图
3.2.10 C#上位机
本毕业设计程序除了 ARM 程序,还有一个上位机软件,这个程序是 C#语言编程。用
于接收来自主机的数据。由于此 C#上位机是团队中另外一位成员所写,本文仅介绍一下。
C#软件为用户和系统之间提供了很好的人机界面,实现了数据信息的接收、处理、显示、
存储等功能。在本系统中,上位机软件的数据解析可以对硬件部分的数据进行处理。
常熟理工学院毕业设计(论文)
16
4. 图像预警式门禁系统的软件设计
4.1 系统软件总体概述
第三章已经介绍了门禁系统中各个子模块的硬件设计思路,下面要通过软件编程来协
调各个模块工作。整个项目的软件设计系统分为三部分:(1)控制器端,(2)PC 终端,
(3)手机操作端。
(1)控制器端的软件开发包含:系统时序控制、各个功能子模块控制和信号采集处
理图像传输。
(2)PC 终端的软件开发包含:下位机数据信息解析、启用 SQL Server 数据库存储和
图像信息解析显示与保存。
(3)手机操作端的软件开发包含:CoreBluetooth 框架的使用、UI 编程、指令编辑、
数据归档。
控制器端部分程序编程语言选择 C 语言。原因在于 C 语言既能够直接访问硬件物理地
址又便于模块化设计,因此在 ARM 开发中应用较广。软件开发时所用的集成开发环境为
RVMDK4.70。它源自德国 KEIL 公司。
PC 终端部分软件编程语言是 C#语言,软件开发时所用的开发环境(IDE )是 Visual
Studio 2013,数据库上使用的是轻量级 SQL Server,使用了 SQL 语言来进行数据库开发,十
分方便。队友完成的部分,本章不做过多描述。
手机操作端部分的软件程序是使用专用于 iOS 开发中的编程语言,即 Objective- C 语言
进行开发。OC 语言是苹果公司官方推荐使用的语言,它是完全动态的基于运行时的面向
对象开发语言。Objective- C 语言包含自动内存管理,基于 Foundation 框架,有多种设计模
式,拥有代码块编程。Objective- C 语言也是 UI 编程的基础,可以使用多种第三方框架和
网络编程。
从下图 4- 1 软件系统程序总流程框图,可以清楚的看到整个系统的执行过程。
常熟理工学院毕业设计(论文)
17
图4-1 系统整体软件程序总流程框图
4.2 控制器端
4.2.1 RC522 射频卡读写器程序
RC522 射频卡读写器程序主要工作是:
1、初始化 IO 口,配

置 IO 的输入输出方向和高低电平;
2、配置 RC522 相关寄存器;
常熟理工学院毕业设计(论文)
18
3、开启 PCB 线圈,开始寻卡;
4、判断是否有 M1 卡接近读卡区域,进行防冲突设置;
5、判断卡内密钥和读卡器密钥是否匹配,匹配则读取卡内内容,反之则不可读取;
6、结束读写,使 RC522 芯片和 PCB 线圈进入休眠状态。
RC522 的功能函数都封装在 RC522.c 和 RC522.h 之中,该部分流程函数如下:
RFIDStatus = RFPcdRequest(RFID_PICC_REQALL, g_ucTempbuf); //寻卡操作
if ( RFIDStatus == RFID_MI_OK) //检测是否有 RFM1 卡接近读卡区域
{
RFIDStatus = RFID_MI_ERR; //状态标志位需要清零
RFIDStatus = RFPcdAnticoll(SN); //根据序列号进行防冲撞检测
}
if( RFIDStatus == RFID_MI_OK) //检测 RF 卡防冲撞成功
{
//… //执行相应程序代码操作如读取 SN 序列号等信息
RFIDStatus = MI_ERR;
}
RFPcdHalt(); //使得 RC522 进入休眠操作等待下次唤醒
}
4.2.2 OV2640 摄像头程序
OV2640 摄像头程序主要工作是:
1、初始化 IO 口,分配 IO 资源,配置摄像头 IO 的输入输出方向和高低电平;
2、配置 OV2640 相关寄存器,关闭调试组件初始化外设;
3、初始化 SCCB(串行摄像机控制总线协议),并且配置其相应寄存器;
4、读取设备 ID 号,配置 OV2640 的图片输出格式为 JPEG_320x240,;
5、设置自动曝光和白平衡,设置摄像头初始化各类外部中断,配置输入捕获中断作
为 DMA 传输事件,配置优先级;
OV2640 摄像头程序封装在 dcmi_ov2640.c 和 camera.c 中,需要同时调用 sccb.c 文件初
始化,才能正确配置以上步骤。
OV2640 摄像头传给 PC 终端的图像数据处理代码如下:
/**
*从 cam_data 中寻找 JPEG 图像起始和大小
*参数:p 指向 JPEG 数据起始地址
jpg_size jpg 数据大小
*返回:成功 返回指向 JPEG 缓冲区的指针
失败 返回 NULL
*/
常熟理工学院毕业设计(论文)
19
u8* Jpeg_DataProcess (u32 *jpg_size)
{ u32 i; u32 JpegStart = 0;
for (i = 0; i < CAM_BUFSI ZE; i++) //求出图片起始位置
{ if ((Cam_DataBuf[i] == 0xff) && (Cam_DataBuf[i+1] == 0xd8)) //jpeg 的开头格式
{ JpegStart = i;
break; }
}
printf ("JpegStart = %d\n", JpegStart);
for (i = JpegStart + 1; i < CAM_BUFSIZE; i++) //求出 jpg_size 的大小
{ i f ((Cam_DataBuf[i] == 0xD9) && (Cam_DataBuf[i-1] == 0xff))//jpeg 的结尾格式
{ *jpg_size = i+1- JpegStart; break; }
}
if (*jpg_size < 500) return NULL; //当图片大小明显过小时,则失败
CRC_ JpegCheck (&Cam_DataBuf[start], jpg_size); //CRC 校验

return &Cam_DataBuf[start]; //成功返回指向 JPEG 数据头缓冲区地址
}
/**CRC_JpegCheck CRC 校验,并将校验结果附在图像数据后*/
void CRC_ JpegCheck (u8 *buf , u32 *len) {
u32 i; u32 crc_result; //定义校验结果变量
bitset (RCC->AHBENR, 6); //使能 CRC 时钟
//计算 CRC 值,4 字节计算,不足四字节补齐
CRC->CR = 1; //CRC 复位
for (i = 0; i < *len; i++)
CRC->DR = buf[i];
crc_result = CRC->DR;
*((u32*)(buf + *len)) = crc_result; //将 CRC 码结果添加到 jpeg 数据的尾部
*len += 4; //将 jpg_size 增加 4 字节
}
/** YINGYAN_ImageDataTransmission 鹰眼抓拍,进行图像数据传输 */
void YINGYAN_ImageDataTransmission (void) {
u32 i;
u8 * Jpeg_buf;
u32 Jpeg_len;
Jpeg_OverFlag = 0; //全局变量 Jpeg_OverFlag 清零,启动接收
while (Jpeg_OverFlag == 0); //当接收完成时跳出
Jpeg_buf = Jpeg_DataProcess (&Jpeg_len);//处理缓存区的图像数据并计算大小和 CRC 校验
i f (Jpeg_buf != NULL){
for (i = 0; i < Jpeg_len; i++) //通过串口向上位机发送图片数据,遍历发送图像数组
uart_sendbyte(Jpeg_buf[i]);
}else{
printf ("Send Cam Data Err\n"); //否则发送照片数据失败
}
}
常熟理工学院毕业设计(论文)
20
4.2.3 LCD5110 部分主要程序
LCD5110 程序主要工作是:
1、先进行初始化,设置好 IO 的输入输出方向和改变指定管脚的映射;
2、配置 LCD5110 相关初始化步骤,如使用水平寻址,设定显示模式等;
3、文件中加载字符库,使用汉字需要自取模到汉字数组和编写显示汉字子函数;
4、根据条件判断打印字符或汉字信息来显示门禁使用信息。
判断显示程序如下:
/**LCD5110 显示学号对应库中信息*/
void LCD_ShowMessage(int student_ID)
{ switch(student_ID)
{ case 0 : { LCD_Clear(); //清屏
LCD_Write_cn(0,6,3,20,24);
LCD_WriteString_en(4,5,"CSLG-YU");
LCD_WriteString_en(52,4,"REDAY ");
LCD_Write_cn(0,12,0,0,6); //请出示通行证:
break;
}
case 1: { LCD_Clear();
LCD_Write_Static (); //显示静态元素, 如姓名,学号,请进等
LCD_Write_cn(6,10,0,17,19);//第 0 行 6 到 10 位显示数组 14-16 汉字:于桂成
LCD_WriteNumber(34,2,10112131); //第二行显示学号 10112131
break;
}
// …… //依次显示已录入的学生信息
Default : { LCD_Clear();
LCD_ Write_Static_Forbid();//静态输出显示:通行证不正确,禁止入内
break;
}
}
}
常熟理工学院毕业设计(论文)
21
4.3 手机操作端
使用 macBook 上开发的 Xcode 软件进行高级 UI 编程开发,该款 APP 主要技术点是使用
Corebluetooth 框架,Navigation 导航控制,数据归档,数据格式转换等。
4.

3.1 CoreBluetooth 框架程序
简单来说,手机端作为一个中心要实现完整的通讯,要经过下面几个步骤:
建立中心角色(CentralManager)—扫描外设(discover)—连接外设(connect)—扫描外设
中的服务和特征(Scanning peripherals services)—与外设做数据交互(explore and interact)。
下面是框架使用流程中的类方法调用说明:
1.建立中心角色(CentralManager)
先在我自己类的头文件中要包含 CoreBluetooth 框架库的头文件,并继承两个代理协议
,代码如下:
#import
CBCentralManager *Y GCManager;
Y GCManager = [[CBCentralManager alloc] initWithDelegate: self queue:nil ];
2.扫描外设(discover)
-(void)centralManagerDidUpdateState:(CBCentralManager *)central ;// 检查 App 的设备 BLE 是否可用。
[central scanForPeripheralsWithServices:nil options:nil]; //中心角色开始扫描外设,进行默认设置
//第一个参数为 CBUUID 的数组,需要搜索特点服务的蓝牙设备,只要每搜索到一个符合条件的蓝牙设
备都会调用 didDiscoverPeripheral 代理方法。
3.连接外设(connect)
-(void)centralManager :(CBCentralManager*)central didDiscoverPeripheral:(CBPeripheral*)per ipheral
advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI;
//调用该方法在此程序中过滤掉不相干设备,找到所需要的蓝牙设备,再停止搜素,保存数据
if([https://www.doczj.com/doc/5b8341204.html, isEqualToString:MyDeviceName]){
[Y GCManager connectPeripheral:peripheral options:nil];} //连接外设,进行默认调用
4. 扫描外设中的服务和特征(Scanning peripherals services)
//连接外设成功后获取外设服务后的回调
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error;
//连接外设成功后获取外设特征后的回调
-(void)peripheral:(CBPeripheral*)per ipheral didDiscoverCharacteristics ForService:(CBService*)service
error:(NSError *)error
5.与外设做数据交互(explore and interact)
//通过手机蓝牙发送给外设 NSData 形式的数据
-(void)writeChar:(NSData *)data
{ //回调 didWriteValueForCharacteristic
[Y GCManagerwriteValue:data forCharacteristic:_write CharacteristicType:CBCharacteristicWr ite
WithoutResponse];
}
常熟理工学院毕业设计(论文)
22
4.3.2 数据格式转换程序
编辑的指令是输入为 NSString 格式的字符串,外设需要接收的是 16 进制指令。框架中提
供的服务方法写数据也是转换成 2 进制的 NSData 格式。本设计中指令转换步骤是提示使
用用户按照协议指令上的 16 进制模式输入指令和指令名,点击确认。但此时手机录入为
字符串 NSString 类型,需要经过两轮转换,字符串 NSString 类转换成 16 进制,16 进制转
成 NSData 格

式输出。下面是核心代码:
/**数据指令转换方法*/
- (NSData *)convertHexStrToData:(NSS tring *)str ing {
if (!str ing || [string length] == 0) { return nil;} //指令不存在则返回 nil
NSMutableData *YGCHexData = [[NSMutableData alloc] initWithCapacity:10];//添加可变 Data 容量
NSRange YGCRange; //定义范围类型
//当输入数据字符串为奇数择第一位作为一个 16 进制数据,为偶数则两位作为一个 16 进制数据
if ([str ing length] % 2 == 0) {
YGCRange = NSMakeRange(0, 2);
} else {
YGCRange = NSMakeRange(0, 1);
}
for (NSInteger i = range.location ; i < [str length] ; i += 2) {
unsigned int anInt;
NSString *hexCharStr = [string substringWithRange: range];
NSScanner *YGCScanner = [[NSScanner alloc] initWithString : hexCharStr];
[YGCScanner scanHexInt:&anInt]; //字符串中扫描指定的字符
//把 16 进制字节转换 NSData 类型的数据并返回给方法
NSData *YGCEntity = [[NSData all oc] initWithBytes:&anInt length:1];
[YGCH exData appendData : YGCEntity]; //数据追加到可变 YGCH exData
range.location += range.length;
range.length = 2;
}
return YGCH exData;
}
常熟理工学院毕业设计(论文)
23
5.成果展示
5.1 控制器端成果展示
下图 5- 1 是系统中硬件整体搭建的控制端实物图,此部分包括 STM32 最小控制系统板、
射频读卡器、OV2640 摄像头、热释电和触摸传感模块、液晶显示,电磁锁门禁控制电路,
蓝牙模块、电源稳压模块。
图 5-1 控制器端的整体实物图
常熟理工学院毕业设计(论文)
24
图 5-2 控制器端 PCB 制板图
如图 5- 2 所示是采用 Altium Designer 绘制的控制器端 PCB 双层板制板图,经测试使用
是完全适用。
在程序运行过程中,利用 LCD5110 显示界面分别如图 5- 3、图 5-4 和图 5 - 5 所示,分
别展示了待机界面,刷卡正确显示界面和刷卡错误显示界面。
图 5-3 待机画面 图 5-4 刷卡正确显示画面 图 5-5 刷卡错误显示画面
5.2 PC 终端成果展示
如下图 5- 6 所示,C#上位机接收 MCU 发送过来的卡序列号信息后,再来跟数据库中的
内容进行匹对。它会处理相关信息并且记录本次刷卡人的信息记录,如刷卡人姓名、学号、
以及刷卡时间记录。
常熟理工学院毕业设计(论文)
25
图 5-6 C#上位机显示刷卡内容管理图
当是预警信号发生时,该程序会接收下位机摄像头抓拍图片信息,显示并按 JPEG 文
件格式保存到指定图片存储文件夹中。该程序中间有异常预警图片采集库的进入按钮,可
以直接导向图片存储库文件夹查看。如图 5- 7 所示。
图 5-7 C#上位机实现图像抓拍存储图
常熟理工

学院毕业设计(论文)
26
5.3 手机操作端成果展示
如图 5- 8 和图 5- 9 是手机操作端的 iOS 蓝牙 UI 界面图,加入复杂 Quartz2D 绘制动画,
添加手势机制,长按触发 UI AlertController 来编辑指令和功能名,可以 TableView 细节信息展示。
图 5-8 手机操作端初始 UI 图 图 5-9 手机操作端控制中心 UI 图
如图 5- 10 和图 5- 11 所示为长按手势下的指令编辑模式, 可以查看之前编辑存储过的指
令。在 APP 中编辑过的指令数据是通过解归档技术来实现数据持久化。
图 5-10 更改指令输入模式 UI 图 图 5-11 解归档指令数据 UI 图
常熟理工学院毕业设计(论文)
27
手机操作端的指令编辑可以实现权限管理。此 APP 持有者可以远距离操控门禁开关。
当此处设施暂停使用的时候,管理者可以通过 APP 一键锁住系统,此时所有人刷卡都是无
效的,直到管理者取消锁定系统,才能正常使用。
图 5-12 系统整体实物工作图
如图 5- 10 所示为系统整体实物工作图,当周围无人时,门禁关闭着,当有人刷卡时,
则门禁根据判断内容来选择处理方式,正确则开门放行,错误则拍照记录。同理,有人在
门禁探测区域内逗留许久,便会预警拍照。
常熟理工学院毕业设计(论文)
28
结 束 语
本次课题图像预警门禁系统是基于大学生实践创新项目中省级项目课题来展开进行
的软硬件开发。首先个人通过查阅相关资料了解各个子模块和传感器的工作原理,接着通
过编程控制各个子系统模块,最后经过一个个子模块的调试,搭建起整个项目系统。
本课题主要涵盖了电磁式门禁的控制,非接触式 IC 卡的读写交互、摄像头图像的采
集、手机蓝牙智控 APP 的实现、C#上位机连接 SQL Server 数据库,刷卡记录的存储和预
警图像的本地存储等,总体实现了预期的要求。
实践出真知。整个课题的完成,我使用到了许多课堂内和实验室里学到的知识。例如
基于 STM32F1 系列 ARM 的学习开发, OV2640 摄像头的编程使用和自学的 iOS 手机移动
端的开发。当然经过本次课题的设计,看了很多方面的书籍,接触了许多领域,和老师讨
论了很多,和队友的团队合作,按时完成任务,都使我收获颇多。
通过本次毕设作品的研究设计与调试,整个系统可以正常稳定的运行。当然,本设计
中还有很多的缺陷与不足,希望在以后的设计与研究中变得更加完善和可靠。

相关主题
文本预览
相关文档 最新文档