STHS34PF80人体存在传感器.2--InfraredPD存在感应检测
- 概述
- 视频教学
- 样品申请
- 完整代码下载
- 硬件准备
- 开启CRC
- 串口设置
- 开启X-CUBE-MEMS1
- InfraredPD文件
- InfraredPD算法库
- 注意事项
- 对应DEMO
- MX_MEMS_Init
- MX_MEMS_Process
- t_obj_comp(补偿后的物体温度)
- t_obj_change(物体温度变化率)
- 测试结果
概述
InfraredPD 主要作用是通过与 STHS34PF80 红外传感器配合,提供对存在感应和运动检测的支持,同时对传感器获取的物体温度数据进行环境温度变化补偿。InfraredPD库通过从 STHS34PF80 传感器采集红外数据,实时检测视野中的人或物体的存在和运动情况。它可以判断目标是否在移动,并提供一个精确的输出信号来标识存在或运动状态。 使用特定算法补偿环境温度的变化对物体温度测量的影响,确保在环境温度波动时,传感器输出的物体温度依然准确。补偿算法可以根据应用场景选择线性或非线性补偿。
InfraredPD 库中的算法可以替代 STHS34PF80 传感器内置的智能算法,特别是在传感器工作于低增益模式(宽温度范围)时。它增强了传感器的检测性能,尤其是在温度漂移和视野内物体移动的场景下。
最近在弄ST的课程,需要样片的可以加群申请:615061293 。
视频教学
https://www.bilibili.com/video/BV16MtYe9Erx/
STHS34PF80高灵敏度红外感应器(2)----InfraredPD存在感应检测
样品申请
https://www.wjx.top/vm/OhcKxJk.aspx#
完整代码下载
硬件准备
首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
主控为STM32H503CB,TMOS为STHS34PF80。
开启CRC
串口设置
设置串口速率为2000000。
开启X-CUBE-MEMS1
InfraredPD文件
使用 InfraredPD 库对传感器数据的实时处理和存在检测的功能。
● MX_MEMS_Init() 和 MX_MEMS_Process() 是与 InfraredPD 库交互的核心函数。
○ MX_MEMS_Init() 负责初始化 InfraredPD 库的参数,并调用 InfraredPD_manager_init() 初始化库实例(main)。
○ MX_MEMS_Process() 调用了存在和运动检测算法,并输出相应的结果(main)。
InfraredPD算法库
传感器数据采样频率在 1 Hz 到 30 Hz 之间。 对于不同架构的 Cortex-M 微控制器,库的代码和数据内存需求略有不同 ,主流内核都是支持的。
库的三个主要部分:
- 物体温度的环境补偿:算法会对物体温度进行补偿,以减少环境温度变化对测量结果的影响。该补偿是基于传感器的环境温度数据。
- 运动检测:通过对补偿后的物体温度数据的变化率进行分析,检测视野中的物体是否移动。
- 存在检测:根据补偿后的物体温度数据来判断是否有物体存在。
● 独立运行的算法:这三个功能(温度补偿、运动检测、存在检测)是通过三个独立的算法在库的每次迭代中依次执行的。
● 宽模式支持:即使在传感器启用了增益减少模式(“宽模式”),导致嵌入式算法不能使用时,库仍然能够执行补偿和运动、存在检测。
● 库仅支持 STHS34PF80 传感器:该库专为 STHS34PF80 传感器设计,不能保证在其他传感器上有相同的性能或功能表现。
注意事项
在使用 InfraredPD 库进行存在检测时,开机后的10秒内视野内不能有人或物体。这是因为存在检测算法在初始化时默认视野是空的,也就是说它假定初始化时传感器前没有任何人或物体。如果在这段时间内有物体存在,算法可能会错误地检测到“存在”状态,并在后续检测中卡在这个状态,导致无法准确反映实际情况。
同时,该库允许在初始化后通过重置补偿算法来重新校准环境温度。因此,如果在开机时发生了温度变化,建议在温度稳定后重新初始化算法,以确保更准确的检测结果。
10分钟内传感器再次检测到运动,存在状态会被恢复;但如果超过10分钟没有任何运动检测到,传感器将保持在缺席状态,即使之后检测到运动也不会自动恢复存在状态。这一机制帮助系统处理长时间静止的情景,并避免误判。
对应DEMO
MX_MEMS_Init
MX_MEMS_Init() 函数主要负责初始化 MEMS 传感器 和相关的中间件库,包括 InfraredPD 库。它的主要作用是配置和准备传感器以及相关算法,以便应用程序能够正常运行(app_mems)。
● 该函数首先调用了 MX_PresenceDetection_Init(),这是一个专门用于初始化 Presence Detection(存在检测) 的函数。
● 在 MX_PresenceDetection_Init() 中,会调用 InfraredPD 库的 InfraredPD_manager_init() 函数,负责初始化存在检测算法。此步骤包括设置传感器的参数(如 ODR、增益因子、灵敏度等)并启动补偿算法(app_mems)。
增益模式:增益因子 (gain_factor) 可以控制传感器对输入信号的灵敏度。通常,较高的增益会使传感器对温度变化更加敏感,但可能会增加噪声。较低的增益则能降低噪声,但可能会减少传感器对微小温度变化的检测能力。
MX_MEMS_Process
MX_MEMS_Process() 函数的核心是调用 MX_PresenceDetection_Process(),该函数负责从传感器获取数据,并通过 InfraredPD 库对这些数据进行处理和分析(app_mems)。
在 MX_PresenceDetection_Process() 中,调用了 PD_Data_Handler() 函数,这个函数负责处理传感器的温度数据(如环境温度和物体温度),并将这些数据输入到 InfraredPD 库中进行分析(app_mems)。
库的算法会根据输入数据,判断是否有物体存在(通过 pres_flag)以及是否有运动(通过 mot_flag),然后输出相应的检测结果(app_mems)。
t_obj_comp(补偿后的物体温度)
● 定义:t_obj_comp 表示经过环境温度补偿后的物体温度数据。
● 作用:由于环境温度变化可能影响物体温度的测量结果,t_obj_comp 是通过对原始物体温度 (t_obj) 进行补偿后得到的温度数据,能够更准确地反映真实的物体温度。补偿算法可以是线性或非线性的,取决于你选择的补偿类型(UM3169)。
t_obj_change(物体温度变化率)
● 定义:t_obj_change 是补偿后物体温度的变化率。
● 作用:t_obj_change 用于检测物体温度的变化情况,特别是在进行运动检测时,它可以帮助算法判断物体是否正在移动。一般情况下,快速的温度变化通常意味着有运动发生。通过这个数据,系统可以更精确地识别温度变化是否源于物体的移动(UM3169)。
测试结果
当开机时候,检测范围内尽量不要出现人体之类的热源。
当出现人体的时候,算法库可以很好的识别到热源。