0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

VL53L8CX TOF开发(5)----运动阈值检测

嵌入式单片机MCU开发 来源:嵌入式单片机MCU开发 作者:嵌入式单片机MCU开 2024-06-19 10:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

概述

最近在弄ST的课程,需要样片的可以加群申请:615061293 。

本章目的是展示如何充分利用VL53L8CX传感器的高级特性,通过结合运动指示器和阈值检测功能,实现对特定场景的精确监控。首先,程序通过特定的配置,确保了传感器能够在特定的分辨率下工作,同时还可调整用于检测运动的最小和最大距离。其次,一旦在传感器的视野中检测到运动,并且该运动的强度超出了预先设置的阈值,那么这种情况将被认为是一个有效的运动事件。最后,该程序不仅会捕获这些事件,还会详细地显示相关的数据,如运动发生在哪个区域,以及运动的强度如何。这种结合使用多种功能的方法,使得VL53L8CX传感器在各种应用场景中都能提供高效、准确的运动检测结果。

wKgaomZyQ1mAXBWEAAcB-Ql8Cok445.png

视频教学

https://www.bilibili.com/video/BV11w4m1D7sc/

样品申请

https://www.wjx.top/vm/OhcKxJk.aspx#

wKgaomZyQ1mAXBWEAAcB-Ql8Cok445.png

源码下载

硬件准备

首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
主控为STM32G431CB,TOF为VL53L8CX

wKgaomZyQ1mAXBWEAAcB-Ql8Cok445.png

生成STM32CUBEMX

选择MCU

测试版所用的MCU为STM32G431CB。

wKgZomZyRMGAdRRoAARB-YbOkK4270.png

串口配置

查看原理图,PA9和PA10设置为开发板的串口。

wKgZomZyQ1iARTymAAHBFIZYfLo226.png

配置串口。

wKgaomZyQ1mAc0EHAAKBhL00-c0246.png

IIC配置

在这个应用中,VL53L8CX模块通过I2C(IIC)接口与主控器通信。具体来说,VL53L8CX模块的I2C引脚连接到主控器的PA8和PB5两个IO口。

wKgZomZyQ1iAN3IpAAJSKsghdCo717.pngwKgZomZyQ1iAAR9eAAR1UeljDKE713.png

配置IIC为快速模式,速度为400k。

LPn 设置

若进行IIC通讯,LPn设置为高电平状态。

wKgaomZyQ1mAYc1kAAYzNgmAqRE866.png

这里对应管脚为PA12。

wKgaomZyQ1mAc0EHAAKBhL00-c0246.png

配置为PA12。

wKgaomZyQ1mAIizLAAYrxgqYN9o078.png

INT设置

自主模式可以通过获取INT管脚进行判断数据是否准备好。

wKgZomZyQ1iAQLaDAAMThLQO4ig448.png


配置PA11为输入模式。

wKgZomZyQ1iAV6hRAAWxXavDHGw277.png

X-CUBE-TOF1

本节介绍在不需要使用样例应用时如何使用STM32CubeMX将X-CUBE-TOF1软件包添加到项目中。有了这样的设置,就只配置了驱动层。

wKgZomZyQ1mAYAseAAb8yKQ-MaA164.png

串口重定向

打开魔术棒,勾选MicroLIB

wKgZomZyQ1iAQLaDAAMThLQO4ig448.png

在main.c中,添加头文件,若不添加会出现 identifier “FILE” is undefined报错。

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

函数声明和串口重定向:

/* USER CODE BEGIN PFP */
int fputc(int ch, FILE *f){
	HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
	return ch;
}
/* USER CODE END PFP */

代码配置

在custom_ranging_sensor.c代码中,有IO口驱动VL53L8CX进行复位的代码,由于没有配置对应的IO,所以需要注释掉。

wKgaomZyQ1mALB1NAAe6JgBX4N8744.png

检测流程

初始化变量:
○ 创建相关变量,如状态(status)、运动配置(motion_config)、设备对象(pL5obj)和结果数据(Results)。

配置运动指示器:
○ 使用8x8的分辨率初始化运动指示器。
○ 设置用于检测运动的最小和最大距离(在这里,是设置为1000mm到2000mm)。
○ 如果用户需要改变分辨率,他也需要更新运动指示器的分辨率(代码中此部分被注释掉了)。

设备配置:
○ 设置设备的分辨率为8x8。
○ 将设备设置为自主测距模式。
○ 设置测距频率为2Hz。
○ 设置集成时间为10ms以降低功耗。

配置检测阈值:
○ 对于8x8的分辨率,我们希望每个区域有一个阈值。
○ 初始化阈值数组。
○ 为所有64个区域设置阈值,当运动指示器的值超过44时,将其视为运动。
○ 将阈值数组发送到传感器。
○ 启用检测阈值。

开始测距:
○ 启动传感器的测距功能。
○ 输出消息,等待在1m到2m之间的视野中有运动发生。

无限循环监测:
○ 不断检查数据是否准备好。
○ 如果数据准备好或者某个特定的GPIO引脚被按下,获取测距数据。
○ 因为传感器默认设置为8x8模式,所以有64个区域要打印。但这个例子中,只打印首个区域的数据。
○ 如果某个区域的运动指示器的值大于或等于44,打印该区域有运动发生的消息。
通过上述流程,该程序能够检测并显示在预定距离范围内、运动强度超过预定阈值的运动情况。

TOF代码配置

在main.c中添加对应头文件。

/* USER CODE BEGIN Includes */
#include "stdio.h"

#include "custom_ranging_sensor.h"
#include "vl53l8cx_plugin_motion_indicator.h"
/* USER CODE END Includes */

函数与变量定义:

/* USER CODE BEGIN PFP */
int fputc(int ch, FILE *f){
	HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
	return ch;
}




/* USER CODE END PFP */

添加TOF初始化。
主要为配置运动指示器。

  /* USER CODE BEGIN 2 */

	uint8_t 				status, isReady, i;
	VL53L8CX_Motion_Configuration 	motion_config;	/* 运动配置 */
	VL53L8CX_Object_t *pL8obj = CUSTOM_RANGING_CompObj[CUSTOM_VL53L8CX];
	VL53L8CX_ResultsData 	Results;		/* 来自VL53L8CX的结果数据 */

	/*********************************/
	/*   配置运动指示器               */
	/*********************************/

	/* 使用4x4分辨率初始化运动指示器 */
	status = vl53l8cx_motion_indicator_init(&pL8obj->Dev, &motion_config, VL53L8CX_RESOLUTION_8X8);
	if(status)
	{
		printf("运动指示器初始化失败,状态码 : %un", status);
		return status;
	}

	/* (可选) 设置用于检测运动的最小和最大距离。注意距离的限制 */
	status = vl53l8cx_motion_indicator_set_distance_motion(&pL8obj->Dev, &motion_config, 1000, 2000);
	if(status)
	{
		printf("设置运动检测距离失败,状态码 : %un", status);
		return status;
	}

	/* 如果用户需要更改分辨率,则也需要更新运动指示器的分辨率(此部分已注释) */
	//status = vl53l5cx_set_resolution(&Dev, VL53L5CX_RESOLUTION_4X4);
	//status = vl53l5cx_motion_indicator_set_resolution(&Dev, &motion_config, VL53L5CX_RESOLUTION_4X4);

	/* 将设备设置为自主模式,并设置较小的集成时间以降低功耗 */
	status = vl53l8cx_set_resolution(&pL8obj->Dev, VL53L8CX_RESOLUTION_8X8);
	status = vl53l8cx_set_ranging_mode(&pL8obj->Dev, VL53L8CX_RANGING_MODE_AUTONOMOUS);
	status = vl53l8cx_set_ranging_frequency_hz(&pL8obj->Dev, 2);
	status = vl53l8cx_set_integration_time_ms(&pL8obj->Dev, 10);	
	

	/*********************************/
	/*   配置检测阈值                 */
	/*********************************/

	/* 对于8x8的分辨率,我们希望为每个区域设置一个阈值 */
	VL53L8CX_DetectionThresholds thresholds[VL53L8CX_NB_THRESHOLDS];

	/* 将所有阈值设置为0 */
	memset(&thresholds, 0, sizeof(thresholds));

	/* 为所有64个区域设置阈值 */
	for(i = 0; i < 64; i++){
		thresholds[i].zone_num = i;
		thresholds[i].measurement = VL53L8CX_MOTION_INDICATOR;
		thresholds[i].type = VL53L8CX_GREATER_THAN_MAX_CHECKER;
		thresholds[i].mathematic_operation = VL53L8CX_OPERATION_NONE;

		/* 示例值44,超过此值的运动将被认为是移动 */
		thresholds[i].param_low_thresh = 44;
		thresholds[i].param_high_thresh = 44;
	}

	/* 明确标记最后一个阈值。因为我们有64个检查器,所以最后一个是第63个 */
	thresholds[63].zone_num = VL53L8CX_LAST_THRESHOLD | thresholds[63].zone_num;

	/* 将阈值数组发送到传感器 */
	vl53l8cx_set_detection_thresholds(&pL8obj- >Dev, thresholds);

	/* 启用检测阈值 */
	vl53l8cx_set_detection_thresholds_enable(&pL8obj->Dev, 1);	


	/* 开始测距 */
	status = vl53l8cx_start_ranging(&pL8obj->Dev);
	printf("等待在1m和2m之间的视场中发生的运动...n");	
  /* USER CODE END 2 */

主程序

主程序来获取对应的isReady位状态来判定数据是否准备好或者判断INT的IO状态也可。

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	if(HAL_GPIO_ReadPin  ( GPIOA, GPIO_PIN_11) ==0)		
	{
		status = vl53l8cx_check_data_ready(&pL8obj->Dev, &isReady);			
		if(isReady)
		{
			/* 获取测距数据 */
			vl53l8cx_get_ranging_data(&pL8obj->Dev, &Results);

			/* 默认情况下,传感器设置为8x8模式,因此我们有64个区域的数据。
			   但在此示例中,只打印了第一个区域的数据 */
			for(i = 0; i < 64; i++)
			{
				if(Results.motion_indicator.motion[motion_config.map_id[i]] >= 44)
				{
					printf(" 在这个区域检测到运动 : %3d !n", i);
				}
			}
			printf("n");
		}		
	}
    /* USER CODE END WHILE */

//  MX_TOF_Process();
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

演示结果

检测运动情况下运动强度如下所示。

wKgZomZyRYSAdH8zAARhmmpy3UA577.png

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2573

    文章

    54374

    浏览量

    786093
  • TOF
    TOF
    +关注

    关注

    9

    文章

    521

    浏览量

    38154
  • stm32cubemx
    +关注

    关注

    5

    文章

    287

    浏览量

    17149
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    VL53L5CX驱动开发(1)----驱动TOF进行区域检测

    VL53L5CX是一款先进的飞行感应(FlightSense)产品系列的飞行时间(ToF)多区间测距传感器。封装在微型的可回流焊盘封装内,它集成了SPAD阵列、物理红外滤光片和衍射光学元件(DOE),以在不同的环境光照条件和各种覆盖玻璃材料下实现最佳测距性能。
    的头像 发表于 12-01 16:26 2072次阅读
    <b class='flag-5'>VL53L5CX</b>驱动<b class='flag-5'>开发</b>(1)----驱动<b class='flag-5'>TOF</b>进行区域<b class='flag-5'>检测</b>

    VL53L5CX驱动开发(3)----检测阈值

    本章展示如何使用VL53L5CX近接传感器的"检测阈值"功能。这个功能允许用户为传感器设置预定义的条件,当这些条件满足时,传感器可以触发一个中断。
    的头像 发表于 12-01 16:30 1747次阅读
    <b class='flag-5'>VL53L5CX</b>驱动<b class='flag-5'>开发</b>(3)----<b class='flag-5'>检测</b><b class='flag-5'>阈值</b>

    VL53L5CX驱动开发(4)----运动指示器

    VL53L5CX传感器内置了一个固件功能,可以检测场景中的运动。这个运动指示器是基于连续帧之间来计算的。使用插件vl53l5cx_plugi
    的头像 发表于 12-01 16:31 1479次阅读
    <b class='flag-5'>VL53L5CX</b>驱动<b class='flag-5'>开发</b>(4)----<b class='flag-5'>运动</b>指示器

    VL53L5CX驱动开发(5)----运动阈值检测

    本章目的是展示如何充分利用VL53L5CX传感器的高级特性,通过结合运动指示器和阈值检测功能,实现对特定场景的精确监控。首先,程序通过特定的配置,确保了传感器能够在特定的分辨率下工作,
    的头像 发表于 12-01 16:33 1501次阅读
    <b class='flag-5'>VL53L5CX</b>驱动<b class='flag-5'>开发</b>(<b class='flag-5'>5</b>)----<b class='flag-5'>运动</b><b class='flag-5'>阈值</b><b class='flag-5'>检测</b>

    VL53L8CX TOF开发(1)----驱动TOF进行区域检测

    VL53L8CX是一款8x8多区域ToF测距传感器,它在环境光下能够在降低功耗的同时增强性能。该传感器基于意法半导体的FlightSense技术设计,能够提供最高400 cm的精确测距,并具有65
    的头像 发表于 05-20 09:42 2131次阅读
    <b class='flag-5'>VL53L8CX</b> <b class='flag-5'>TOF</b><b class='flag-5'>开发</b>(1)----驱动<b class='flag-5'>TOF</b>进行区域<b class='flag-5'>检测</b>

    VL53L8CX TOF开发(4)----运动指示器

    VL53L8CX传感器内置了一个固件功能,可以检测场景中的运动。这个运动指示器是基于连续帧之间来计算的。使用插件vl53l8cx_plugi
    的头像 发表于 06-19 10:43 2510次阅读
    <b class='flag-5'>VL53L8CX</b> <b class='flag-5'>TOF</b><b class='flag-5'>开发</b>(4)----<b class='flag-5'>运动</b>指示器

    VL53L4CD TOF开发(3)----检测阈值

    了如何基于VL53L4CD传感器实现连续测距,并通过配置检测阈值来优化系统的响应能力。 我们将详细讲解如何初始化VL53L4CD传感器,设置其测量参数和
    的头像 发表于 06-19 10:56 2700次阅读
    <b class='flag-5'>VL53L</b>4CD <b class='flag-5'>TOF</b><b class='flag-5'>开发</b>(3)----<b class='flag-5'>检测</b><b class='flag-5'>阈值</b>

    VL53L5CX #高达 8x8 多区域测距和 63°对角线宽视场 飞行时间多区域测距传感器

    意法半导体 – VL53L5CX 飞行时间传感器高达 8x8 多区域测距和 63°对角线宽视场意法半导体VL53L5CX是一款先进的飞行时间 (ToF) 多区域测距传感器,增强了意法半
    发表于 09-01 10:10

    VL53L5CX ULD API和单个4x4阈值之间为什么会发生冲突呢

    (uint8_t i = 0; i < 16; i++) { 阈值 .zone_num = i; 阈值.measurement = VL53L5CX_DISTANCE_MM;
    发表于 12-21 06:22

    vl53l5cx_plugin_detection_thresholds.h文件中,检测阈值混乱怎么解决?

    几个问题。首先,似乎有一些相互矛盾的评论。在 vl53l5cx_plugin_detection_thresholds.h 文件中,有以下关于多个检查器的数学运算符的声明。“请注意,第一个检查器必须
    发表于 12-26 07:51

    意法半导体推出新一代8 x 8多区飞行时间测距传感器VL53L8CX

    据麦姆斯咨询介绍,意法半导体的最新一代8 x 8多区飞行时间(ToF)测距传感器VL53L8CX实现了一系列改进,包括更强的抗环境光干扰能力、更低的功耗和更强的光学性能。
    的头像 发表于 12-27 09:23 2809次阅读
    意法半导体推出新一代<b class='flag-5'>8</b> x <b class='flag-5'>8</b>多区飞行时间测距传感器<b class='flag-5'>VL53L8CX</b>

    VL53L8CX TOF开发(3)----检测阈值

    本章展示如何使用VL53L8CX近接传感器的"检测阈值"功能。这个功能允许用户为传感器设置预定义的条件,当这些条件满足时,传感器可以触发一个中断。实现demo 配置
    的头像 发表于 06-19 10:36 2664次阅读
    <b class='flag-5'>VL53L8CX</b> <b class='flag-5'>TOF</b><b class='flag-5'>开发</b>(3)----<b class='flag-5'>检测</b><b class='flag-5'>阈值</b>

    ‌STM32 ToF传感器评估套件技术解析:基于P-NUCLEO-53L8A1数据手册

    STMicroelectronics P-NUCLEO-53L8A1传感器评估套件是一个完整的评估套件,让用户可使用VL53L8系列飞行时间传感器的不同商业产品来学习、评估和开发应用程序。VL
    的头像 发表于 10-25 11:14 922次阅读
    ‌STM32 <b class='flag-5'>ToF</b>传感器评估套件技术解析:基于P-NUCLEO-<b class='flag-5'>53L8</b>A1数据手册

    VL53L8系列ToF传感器开发板技术解析与应用指南

    STMicroelectronics SATEL-VL53L8分线板具有两个分线板,设计用于轻松集成到用户设计中。PCB部分穿孔并嵌入VL53L8飞行时间传感器模块。VL53L8CX是一款8x
    的头像 发表于 10-25 11:37 924次阅读
    <b class='flag-5'>VL53L8</b>系列<b class='flag-5'>ToF</b>传感器<b class='flag-5'>开发</b>板技术解析与应用指南

    基于ST VL53L8CX ToF传感器的技术解析与应用设计

    STMicroelectronics VL53L8CX 8x8多区域飞行时间传感器提高了环境光下的性能,降低了功耗。VL53L8CX基于ST的FlightSense技术,设计用于提供高达400cm
    的头像 发表于 10-25 17:44 1370次阅读
    基于ST <b class='flag-5'>VL53L8CX</b> <b class='flag-5'>ToF</b>传感器的技术解析与应用设计