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

这篇具有很好参考价值的文章主要介绍了VL53L5CX驱动开发(5)----运动阈值检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

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

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

VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

视频教学

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

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

样品申请

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

VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

源码下载

https://download.csdn.net/download/qq_24312945/88431356

生成STM32CUBEMX

选择MCU

测试版所用的MCU为STM32G431CB。
VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

串口配置

查看原理图,PA9和PA10设置为开发板的串口。
VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

配置串口。
VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

IIC配置

在这个应用中,VL53L5CX模块通过I2C(IIC)接口与主控器通信。具体来说,VL53L5CX模块的I2C引脚连接到主控器的PA8和PB5两个IO口。
VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

配置IIC为快速模式,速度为400k。
VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

INT设置

自主模式可以通过获取INT管脚进行判断数据是否准备好。
VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

配置PB4为输入模式。
VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

配置使能与复位

驱动中有对模块进行复位的操作。
VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

配置PB15和PB3为输出管脚。
VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

X-CUBE-TOF1

本节介绍在不需要使用样例应用时如何使用STM32CubeMX将X-CUBE-TOF1软件包添加到项目中。有了这样的设置,就只配置了驱动层。
VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

由于需要自主模式,所以可以不开启主程序TOF执行代码。
VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划
修改堆栈大小。

VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

串口重定向

打开魔术棒,勾选MicroLIB
VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

在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口驱动VL53L5CX进行复位的代码,由于没有配置对应的IO,所以需要注释掉。
VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

由于没加载串口定义,所以注释掉#include “custom.h”
VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划
VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划
VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划

检测流程

  1. 初始化变量:
    ○ 创建相关变量,如状态(status)、运动配置(motion_config)、设备对象(pL5obj)和结果数据(Results)。
  2. 配置运动指示器:
    ○ 使用8x8的分辨率初始化运动指示器。
    ○ 设置用于检测运动的最小和最大距离(在这里,是设置为1000mm到2000mm)。
    ○ 如果用户需要改变分辨率,他也需要更新运动指示器的分辨率(代码中此部分被注释掉了)。
  3. 设备配置:
    ○ 设置设备的分辨率为8x8。
    ○ 将设备设置为自主测距模式。
    ○ 设置测距频率为2Hz。
    ○ 设置集成时间为10ms以降低功耗。
  4. 配置检测阈值:
    ○ 对于8x8的分辨率,我们希望每个区域有一个阈值。
    ○ 初始化阈值数组。
    ○ 为所有64个区域设置阈值,当运动指示器的值超过44时,将其视为运动。
    ○ 将阈值数组发送到传感器。
    ○ 启用检测阈值。
  5. 开始测距:
    ○ 启动传感器的测距功能。
    ○ 输出消息,等待在1m到2m之间的视野中有运动发生。
  6. 无限循环监测:
    ○ 不断检查数据是否准备好。
    ○ 如果数据准备好或者某个特定的GPIO引脚被按下,获取测距数据。
    ○ 因为传感器默认设置为8x8模式,所以有64个区域要打印。但这个例子中,只打印首个区域的数据。
    ○ 如果某个区域的运动指示器的值大于或等于44,打印该区域有运动发生的消息。
    通过上述流程,该程序能够检测并显示在预定距离范围内、运动强度超过预定阈值的运动情况。

TOF代码配置

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

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

#include "custom_ranging_sensor.h"
#include "vl53l5cx_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;
	VL53L5CX_Motion_Configuration 	motion_config;	/* 运动配置 */
	VL53L5CX_Object_t *pL5obj = CUSTOM_RANGING_CompObj[CUSTOM_VL53L5CX];
	VL53L5CX_ResultsData 	Results;		/* 来自VL53L5CX的结果数据 */

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

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

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

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

	/* 将设备设置为自主模式,并设置较小的集成时间以降低功耗 */
	status = vl53l5cx_set_resolution(&pL5obj->Dev, VL53L5CX_RESOLUTION_8X8);
	status = vl53l5cx_set_ranging_mode(&pL5obj->Dev, VL53L5CX_RANGING_MODE_AUTONOMOUS);
	status = vl53l5cx_set_ranging_frequency_hz(&pL5obj->Dev, 2);
	status = vl53l5cx_set_integration_time_ms(&pL5obj->Dev, 10);	

	

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

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

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

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

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

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

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

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


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

主程序

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

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		if(HAL_GPIO_ReadPin  ( GPIOB, GPIO_PIN_4) ==0)		
//		status = vl53l5cx_check_data_ready(&pL5obj->Dev, &isReady);			
//		if(isReady)
		{
			/* 获取测距数据 */
			vl53l5cx_get_ranging_data(&pL5obj->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 */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 *

演示结果

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

VL53L5CX驱动开发(5)----运动阈值检测,单片机,传感器,stm32cube,STM32CUBEMX,运动阈值检测,vl53l5cx,tof,雪崩二极管,红外人体感应,飞行时间,原力计划文章来源地址https://www.toymoban.com/news/detail-734767.html

到了这里,关于VL53L5CX驱动开发(5)----运动阈值检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    VL53L8CX是一款8x8多区域ToF测距传感器,它在环境光下能够在降低功耗的同时增强性能。该传感器基于意法半导体的FlightSense技术设计,能够提供最高400 cm的精确测距,并具有65°对角线视场。 VL53L8CX集成了功能强大的新一代VCSEL,以及两个先进的超表面镜头。硬件封装在创新的“

    2024年03月18日
    浏览(70)
  • ESP32应用教程(1)— VL53L3CX距离传感器

    文章目录 前言 1 产品概述 1.1 技术规格 1.2 系统框图 1.3 设备引脚分布 2 工作流程 2.1 系统功能描述 2.2 状态机描述 2.3 测距模式说明 3 控制接口 3.1 设备地址 3.2 I²C写1个字节数据 3.3 I²C读1个字节数据 3.4 I²C写多个字节数据 3.5 I²C读多个字节数据 3.6 I²C 接口 - 参考寄存

    2024年02月11日
    浏览(67)
  • K_A12_022 基于STM32等单片机驱动VL53L0X模块 串口与OLED0.96双显示

    注:偏差校准步骤(均十六进制发送) 1、偏差校准命令 A5 21 0A D0(此处是在10CM处校准) 2、加载数据命令 A5 43 04 EC(断电重启后加载偏差补偿) 3、保存设置命令 A5 87 01 2D(保存设置后生效) 单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M VL53L0X模块 STC89C52RC驱动VL53L0X模

    2024年02月13日
    浏览(38)
  • STM32F103实现激光测距传感器测距WT-VL53L0 L1

    目录 本博客将采用标准库和HAL库实现 所用设备选择 引脚说明 与单片机的接线表 标准库实现  HAL库实现 本博客将采用 标准库 和 HAL库 实现 所用设备选择 单片机型号:STM32F103C8T6  激光测距传感器型号:WT-VL53L0 L1   采用串口TTL电平输出,可以接USB-TTL串口到电脑,或者直接接

    2024年02月14日
    浏览(40)
  • 基于STM32CUBEMX驱动TOF模块VL6180与VL6180X(1)----单模块距离获取的最佳实践

    VL6180X是基于ST FlightSense™专利技术的最新产品。作为一项突破性技术,它实现了独立于目标反射率的绝对距离测量。传统的测量方法通过测量反射光的光量来估算距离,然而这种方法存在一个主要缺点,即被测物体的颜色和表面特性对测量精度产生很大影响。VL6180X采用了一种

    2024年02月10日
    浏览(38)
  • VL28 输入序列不连续的序列检测

    题目来源:https://www.nowcoder.com/practice/f96d0e94ec604592b502b0f1800ed8aa?tpId=302tags=title=difficulty=0judgeStatus=0rp=0sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3DVerilog%25E7%25AF%2587%26topicId%3D302 请编写一个序列检测模块,输入信号端口为data,表示数据有效的指示信号端口为data_valid。当data_valid信号为高时,表

    2024年01月25日
    浏览(35)
  • EtherCAT驱动器回零与控制器回零:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(九)

    XPCIE1032H是一款基于PCI Express的EtherCAT总线运动控制卡,可选6-64轴运动控制,支持多路高速数字输入输出,可轻松实现多轴同步控制和高速数据传输。 XPCIE1032H集成了强大的运动控制功能,结合MotionRT7运动控制实时软核,解决了高速高精应用中,PC Windows开发的非实时痛点,指令

    2024年02月02日
    浏览(50)
  • 图像处理之canny边缘检测(非极大值抑制和高低阈值)

    Canny算子是John F.Canny 大佬在1986年在其发表的论文 《Canny J. A computational approach to edge detection [J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 1986 (6): 679-698.》提出来的。 低错误率。所有边缘都应该被找到,并且应该没有伪响应。也就是检测到的边缘必须尽可能时真实的边缘

    2024年02月16日
    浏览(46)
  • 微软向开发者推出搭载高通骁龙8cx Gen 3的迷你主机

    在 Microsoft Build 2022 开发者大会上,微软宣布将向开发者推出定制的 Windows Dev Kit 2023 开发套件,该套件实际就是一套迷你主机,搭载高通骁龙 8cx Gen 3 计算平台。 推出这个开发套件显而易见是为了 ARM 平台的,微软希望帮助开发者将他们的应用程序带到 ARM 设备上。目前 Windo

    2024年02月13日
    浏览(72)
  • 目标检测YOLOv3基于DarkNet53模型测试-笔记

    目标检测YOLOv3基于DarkNet53模型测试-笔记 预测和试测结果: YOLOv3和DarkNet53网络示意图: DarkNet-53网络中Residual Block列差块(基本单元)结构和代码BasicBlock类实现 YOLOv3网络图中基本图的描述 (1)Res Unit即为上图的BasicBlock残差块 (2)CBL即为Conv2D+BatchNorm+LeakReLU组合的卷积基本层 (

    2024年02月14日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包