在2022年山西省电子设计大赛选题刚刚公布的时候,我们组本来是想做电源题的,奈何学艺不精,最后转做了这道仪器仪表题,经过几天紧张的制作,写报告,最终也是获得了省一,想要代码和报告文档的可以私聊我或者从文章最后的GitHub网站中下载哦 ❛‿˂̵✧
总体概述
本题选用GY906DCI(测量范围1米)红外测温模块读取人体和物体温度;STM32F103单片机进行数据处理和报警控制,并配合OLED屏和独立按键搭建了可实时显示温度相关信息的GUI;利用OpenMV模组进行识别,实现识别被测者身份、是否符合防疫要求(如佩戴口罩)功能及学习被测者身份。人脸识别通过Haar-Like特征和Adaboost算法相结合的级联分类器实现,口罩检测通过基于edge impulse训练的神经网络模型来实现。测试表明,在题目所给定的要求下,本系统能实现误差范围内温度测量及超标报警,身份识别模块等要求。装置具有价格低廉、功能多样的优势,测试中人脸识别、口罩检测、体温检测的准确率都较高。
一、系统方案
1.1红外测温模块的选择
1.1.1 MLX90614红外测温传感器
MLX90614是一款红外非接触温度计。TO-39金属封装里同时集成了红外感应热电堆探测器芯片和信号处理专用集成芯片。由于集成了低噪声放大器、17位模数转换器和强大的数字信号处理单元,使得高精度和高分辨度的温度计得以实现。温度计具备出厂校准化,有数字PWM和SMBus(系统管理总线)输出模式。标准配置为10位的PWM输出格式用于连续传送温度范围为-20℃—120℃的物体温度,其分辨率为0.14℃。POR默认模式是SMBus输出格式。
1.1.2 TN905红外测温模块
TN905红外测温模块的发射率默认设置为0.95.TN905能进行的测温距离很长,至少可达40厘米,远远超出了部分其他种类的红外测温模块。其次是其对于热气流的温度测量,所测温度在40℃—50℃时该模块均能正常工作。但是该模块在没有遮挡探头接收红外光的的情况下,用较高温度的物品覆盖热传感器探头时,其所测温度将不是目标温度。其在环境温度剧烈变化时会造成目标温度测量不正确,如果用高温物体加热探头外壁,不仅探头温度上升,探头前面的菲涅尔透镜也会被加热,故而导致所测温度不准确。此外,该模块对两个数据包之间的延时也会有较高的要求,数据手册要求大于0.1sec,但是过大读取的数据包只有目标温度而没有环境温度。
1.1.3 AMG8833 8×8热成像传感器
AMG8833这款传感器是8x8红外热传感器阵列。当连接到微控制器(时,它将通过I2C返回一组64个单独的红外温度读数。它足够紧凑和简单,易于集成。该部件将测量范围从0℃到80℃(32℉到176℉)的温度,精度为±2.5℃(4.5℉)。它可以在最远7米的距离内检测到人。最大帧速率为10Hz,非常适合创建人体探测器或迷你热像仪。他的分辨率是0.25℃,但是精度是±2.5℃,对精度要求较高的场景不很适用。
1.1.4 结论
通过对以上三种红外测温模块的比较,结合实际的设计要求,从测温距离、测温误差、稳定度等方面进行综合考虑,最终确定选择各种性能都较为优秀的MLX90614红外测温传感器模块。
1.2 视觉识别模块的选择
1.2.1 OV7670摄像头模块
OV7670一种CMOS VGA图像传感器。该传感器体积小、工作电压低,提供单片VGA摄像头和影像处理器的所有功能。通过SCCB总线控制,可以输出整帧、子采样、取窗口等方式的各种分辨率8位影像数据。该产品VGA图像最高达到30帧/秒。用户可以完全控制图像质量、数据格式和传输方式。所有图像处理功能过程包括伽玛曲线、白平衡、度、色度等都可以通过SCCB接口编程。
1.2.2 OpenMV机器视觉模块
OpenMV是一个开源,低成本,功能强大的机器视觉模块。以STM32F427CPU为核心,集成了OV7725摄像头芯片,在小巧的硬件模块上,用C语言高效地实现了核心机器视觉算法,提供Python编程接口,可以用Python语言使用OpenMV提供的机器视觉功能。OpenMV上的机器视觉算法包括寻找色块、人脸检测、眼球跟踪、边缘检测、标志跟踪等。可以用来实现非法入侵检测、产品的残次品筛选、跟踪固定的标记物等。
1.2.3 结论
OV7670与OpenMV比较,在实现人脸识别功能时需要另加单片机处理,会加重控制系统负担,因此综合各种考量,我们选择OpenMV机器视觉模块。
二、模块选用
模块的选用有STM32F103C8T6,GY906DCI,0.96寸OLED显示屏,OpenMv4 Plus及OpenMv1.8寸显示屏,低电平触发的蜂鸣器,一个红色发光二极管,电源模块(如果没有电源模块可以用稳压模块代替)以及两节18650电池。模块如下:
STM32F103C8T6 GY906DCI 0.96寸OLED显示屏
OpenMv4 Plus及OpenMv1.8寸显示屏 6~10V转3.3V或5V电源模块
三、设计与论证
3.1 红外测温部分
3.1.1 红外测温原理
物体红外辐射能量的大小和波长的分布与其表面温度关系密切。因此,通过对物体自身红外辐射的测量,能准确地确定其表面温度,红外测温就是利用这一原理测量温度的。红外 测温器由光学系统、光电探测器、信号放大器和信号处理及输出等部分组成。光学系统汇聚其视场内的目标红外辐射能量,视场的大小由测温仪的光学零件及其位置确定。红外能量聚焦在光电探测器上并转变为相应的电信号。该信号经过放大器和信号处理电路,并按照仪器内的算法和目标发射率校正后转变为被测目标的温度值。
3.1.2 GY-906-BAA测温方式
通过I2C总线与STM32F103建立通信,用I2C通信方式的优点在于传输速度快,传输稳定,想要实时传输温度信息,必须做到快准。当检测到温度超过额定温度时触发LED灯亮,蜂鸣器响进行报警。
3.2 红外测温部分参数确定
3.2.1 理想情况下热电原件输出电压
MLX90614系列测温模块是应用非常方便的红外测温装置,其所有的模块都在出厂前进行了校验,并且可以直接输出线性或准线性信号,具有很好的互换性, 免去了复杂的校正过程。该模块以81101热电元件作为红外感应部分。输出是被测物体温度(TO)与传感器自身温度(Ta)共同作用的结果,理想情况下热电元件的输出电压为:
其中温度单位均为 Kelvin,A 为元件的灵敏度常数。
3.2.2 温度值
发送和接收数据是以字节为单位进行的。每次发送一个字节(按位发送,发送 8 个位就是一个字节),然后就判断对方是否有应答,如果有应答,就接着发送下一个字节;如果没有应答,多次重发该字节,直到有应答,就接着发送下一个字节,如果多次重发后,仍然没有应答,就结束。接收数据时,每次接收一个字节(按位接收, 接收8个位就是一个字节),然后向对方发送一个应答信号,然后就可以继续接收下一个字节。 从MLX90614读出的数据为16位,由高8位(DataH)和低8位(DataL)两部分组成,其中RAM地址07H单元存储的时数据,数据范围从0x27AD至0x7FFF,表示的温度范围是-70.01℃至+382.19℃。
3.3 视觉识别部分
3.3.1 基于Haar特征的Cascade分类器
这是一种机器学习方法,通过许多正负样例中训练得到Cascade方程,然后将其应用于其他图片。算法利用许多正样例(包含人脸的图片)和负样例(不含人脸的图片)来训练分类器,利用白方块下的像素和减去黑方块的像素和来得到图片中的特征。如可以利用眼睛所在位置通常比脸颊和鼻子颜色深、眼睛比鼻梁处颜色深来选择,使用Adaboost来实现特征分析。利用Cascade分类器,将许多特征分为不同阶段,然后一个阶段一个阶段应用这些特征,如果窗口在第一个阶段就检测失败了,那么就直接舍弃它,无需考虑剩下的特征;如果检测通过,则考虑第二阶段的特征并继续处理。如果所有阶段都通过,则这个窗口就是人脸区域。
3.3.2 自建人脸库
为保证识别的可靠性,对OpenMV拍摄的图像以及人脸库中的图片均要进行检测,以确保整个识别过程拍摄到的人脸是在与人脸库中的人脸图像进行对比识别。
3.3.3 口罩训练模型
EdgeImpulse是一个为嵌入式设备提供在线训练神经网络模型服务的网站,它是OpenMV的合作伙伴,同时也均为ST意法半导体的官方合作伙伴。目前EdgeImpulse对OpenMV用户是免费开放的,OpenMV用户可以免费的使用EdgeImpulse在线训练适用于OpenMV的神经网络模型。通过收集400张男女戴口罩的图像和400张男女不带口罩的图像建立一个高质量的数据集,在EdgeImpulse上应用迁移学习训练口罩识别神经网络,将系统部署到OpenMV上。
3.4 OpenMV相关参数确定
Adaboost算法是通过无数次循环迭代来寻求最优分类器的过程,通过下列积分式可快速得到Haar特征值:
ii(x,y)为经过计算后积分图上的各个像素点的像素值。一个完整的图像包括每个像素的左方及上方的区域总和。
四、电路及程序设计
4.1无接触温度检测电路
使用GY906DCI作为核心模块,设计时同时以1cm、2cm、3cm、4cm为不同的距离,用测温枪和该装置同时进行测量温度,对比温度,矫正参数多次测量取平均值判断误差范围,通过不断改正参数来减小误差值。温度检测电路包括检测人体温度以及物体温度。为了进一步减小测量的误差,在程序中设计了温度动态补偿的算法。基于当前环境温度,对人体测温补偿较高,对物体测温补偿较低。
图4.1.1 GY906DCI接口电路图
通过 SMBus 将 MLX90614 的 RAM 与主控芯片STM32F103连接起来,以读取其测得的温度。VDD与3.3V 电源相连进行供电,为了确保SDA和SCL能够在总线空闲时都处于高电平状态,电路中设计了两个上拉电阻。为了使电流低于 1.3mA,阻值选用常用的4.7kW。
图4.1.2 MLX90614与STM32连接电路图
图4.1.3 OpenMV与STM32连接电路图
4.2 视觉识别电路
设计使用OpenMV机器视觉模块实现人脸识别、口罩识别功能。为保证设计电路的可靠性,对OpenMV拍摄的图像以及人脸库中的图片均要进行对比检测。对于是否佩戴口罩的识别,与上述方式相同,对不同颜色、形状的口罩做特征点检测,建立类似于人脸库的口罩库,在识别后进行模块匹配即可。当OpenMV人脸匹配模式启动后,摄像头就会捕捉被测人的脸部图像,并将收取的多张照片提取LBP特征并与人脸库中的队员的面部信息进行逐条比对来实现被测人的身份识别,若识别成功,则OLED显示对象名字,若识别失败,则触发报警电路,蜂鸣器响同时红灯亮。当Openmv进入口罩识别模式后,摄像头通过在edge impulse中使用800张男女性人脸照片来判断是否佩戴口罩,oled上显示是否佩戴口罩并提示是否安全。
图4.2.1 视觉识别电路框图
4.3 报警模块电路
本电路采用声光报警,选用的蜂鸣器是电磁式的有源蜂鸣器和红色LED灯。单片机输出低电平时,三极管导通蜂鸣器报警,红色LED灯亮报警。
图4.3.1 报警电路
4.4 按键模块电路
系统使用了5个按键实现对不同模式的转换,2个按键实现对阈值的修改
K6、K7为阈值修改按键,步进值均为0.5℃。按下K6阈值以0.5增加,按下K7,阈值以0.5减小。K6,K7按键在进入任何模式时都可使用。阈值初始化设置为35℃。
K1为人体温度检测模式,按下后通过温度检测电路检测人体温度,并在OLED上显示。温度正常时OLED上显示 ’正常’ ,不正常时显示 ’不正常’ 。
K2为物体温度检测模式,按下后通过温度检测电路检测物体温度,并在OLED上显示。温度正常时OLED上显示 ’正常’ ,不正常时显示 ’不正常’ 。
K3为人脸配对模式,按下后通过OpenMv识别电路检测扫描的人脸和录入队员的人脸图像匹配。
K4为人脸学习模式,按下后进入学习模块,通过OpenmMv学习三个陌生人脸。
K5为口罩识别模式,按下后通过OpenMv检测待测试人有没有带口罩。若戴口罩则OLED上显示 ’成功’ ,若没有则OLED上显示 ’不成功’ 。
4.5 系统组成及原理框图
此系统主要以STM32单片机主控系统为核心,由红外模块、视觉模块、蜂鸣器LED报警模块、OLED显示模块、按键模块、7.4V电池组以及电源模块组成。
图4.5.1 系统组成与原理框图
4.6 程序流程图
4.6.1 总体程序流程图
图4.6.1 总体程序流程图
4.6.2 MLX90614程序流程图
图4.6.2 MLX90614程序流程图
4.6.3 OpenMV程序流程图
图4.6.3 OpenMV程序流程图
五、测量方案及测量结果
5.1 红外测温模块模块测量方案及结果
常用的温度测量工具主要有水银温度计、双金属温度计、煤油温度计、电子温度计、电子测温枪等,考虑到效率、经济、精确度等具体情况,我们选择医用电子测温枪与MLX90614进行对比测试,在不同测量距离的情况下对不同温度的物体进行温度测量。
表5-1 不同工具、不同距离情况下测温结果(℃)
室内温度 |
室外温度 |
人体1体温 |
人体2体温 |
人体3体温 |
温水水温 |
热水水温 |
|
测温枪2厘米处 |
25.6 |
11.0 |
36.4 |
36.6 |
36.7 |
20.3 |
45.9 |
测温枪3厘米处 |
25.6 |
11.2 |
36.3 |
36.6 |
36.6 |
20.4 |
45.7 |
测温枪4厘米处 |
25.7 |
11.2 |
36.3 |
36.5 |
36.5 |
20.2 |
45.6 |
MLX90614 2厘米处 |
25.3 |
10.6 |
36.5 |
36.3 |
36.4 |
20.0 |
45.3 |
MLX90614 3厘米处 |
25.4 |
10.7 |
36.4 |
36.3 |
36.4 |
19.7 |
45.1 |
MLX90614 4厘米处 |
25.5 |
10.8 |
36.4 |
36.2 |
36.3 |
19.5 |
44.8 |
5.2 红外测温结果分析
通过对比使用电子测温枪与MLX90614在不同测量距离下对不同温度的物体进行测量的结果可以看出,MLX90614的测量误差最大为4.5%,位于可接受范围内。
造成红外测温测量不准的原因主要有以下两点:
(1)测量距离增加时,由于红外温度测量系统的视场不变,如果被测物体不能填满视场,那么系统检测到的来自被测物体的红外辐射能量就会减少,从而导致测量精度降低。
(2)当测量距离增加时,在大气吸收的影响下,温度测量系统接收的辐射将减少,导致测温系统产生误差。
由表5-1可以看出,使用MLX90614对人体和不同温度的液体进行测温时,测量误差均小于1℃,达到了设计需求。
5.3 视觉识别模块测试方法与结果
在不同距离、不同光线情况下对测试者进行身份识别和是否佩戴口罩的检测。
表5-2 不同距离、不同光线情况下识别结果
距离20cm |
距离30cm |
距离40cm |
正常光线 |
较暗光线 |
较亮光线 |
佩戴口罩检测 |
|
队员1 |
成功 |
成功 |
成功 |
成功 |
失败 |
成功 |
成功 |
队员2 |
成功 |
成功 |
失败 |
成功 |
成功 |
成功 |
成功 |
队员3 |
成功 |
成功 |
成功 |
成功 |
成功 |
失败 |
成功 |
5.4 视觉识别模块结果分析
通过表5-2中数据分析可得,视觉识别的成功率为85.71%,准确率较高。
造成识别失败的原因主要有以下两点:
1.距离过远后对于面部特征的采集不够准确;
2.光线较暗或较亮时,也会导致面部的明暗部分发生变化,导致面部特征采集出错。
5.5 结论
综上,本文章设计并制作了简易无接触温度测量与身份识别装置,成功读取人体和物体温度;实现了数据处理和报警控制,可实时显示温度相关信息;实现识别被测者身份、是否符合防疫要求(如佩戴口罩)功能及学习被测者身份。测试表明,在题目所给定的要求下,本系统能实现误差范围内温度测量及超标报警,身份识别模块等要求,基本实现了所有功能。
附录1 设计的GUI
附录2 工作中的实物图
代码文档库:
PS:有不懂的或者有什么建议都可以私聊我哦,如果觉得我写的对你有帮助那给我点个赞吧 ❛‿˂̵✧