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

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

概述

VL53L5CX传感器内置了一个固件功能,可以检测场景中的运动。这个运动指示器是基于连续帧之间来计算的。使用插件vl53l5cx_plugin_motion_indicator可以使用这个选项。
运动指示器通过vl53l5cx_motion_indicator_init()函数进行初始化。如果用户想要更改传感器的分辨率,他必须使用专用函数vl53l5cx_motion_indicator_set_resolution()来更新运动指示器的分辨率。
用户还可以更改检测运动的最小和最大距离。最小距离和最大距离之间的差异不能超过1500毫米。默认情况下,距离是在400毫米到1500毫米之间初始化的。
结果存储在motion_indicator字段中。在这个字段里,数组motion给出了每个区域的运动强度值。高值表示帧之间的高运动变化。典型的运动会给出一个在100到500之间的值。这种敏感性取决于集成时间、目标距离和目标反射率。
对于低功耗应用,理想的组合是使用运动指示器与自主测距模式,并在运动上编程检测阈值。这允许在FoV(视场)中检测运动变化,同时保持最小的功耗。

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

vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

视频教学

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

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

样品申请

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

vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

源码下载

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

生成STM32CUBEMX

选择MCU

测试版所用的MCU为STM32G431CB。
vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

串口配置

查看原理图,PA9和PA10设置为开发板的串口。
vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

配置串口。
vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

IIC配置

在这个应用中,VL53L5CX模块通过I2C(IIC)接口与主控器通信。具体来说,VL53L5CX模块的I2C引脚连接到主控器的PA8和PB5两个IO口。
vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

配置IIC为快速模式,速度为400k。
vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

INT设置

自主模式可以通过获取INT管脚进行判断数据是否准备好。
vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

配置PB4为输入模式。
vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

配置使能与复位

驱动中有对模块进行复位的操作。
vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

配置PB15和PB3为输出管脚。
vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

X-CUBE-TOF1

本节介绍在不需要使用样例应用时如何使用STM32CubeMX将X-CUBE-TOF1软件包添加到项目中。有了这样的设置,就只配置了驱动层。
vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

由于需要自主模式,所以可以不开启主程序TOF执行代码。
vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

串口重定向

打开魔术棒,勾选MicroLIB
vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

在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库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

由于没加载串口定义,所以注释掉#include “custom.h”
vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器
vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器
vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器

检测流程

  1. 初始化阶段 (用户代码开始 2):
    ○ 声明并初始化一些变量,包括status(状态),isReady(准备就绪标志),i(循环变量),以及与VL53L5CX运动检测相关的结构。
    ○ 获取VL53L5CX设备的引用。
  2. 配置运动指示器:
    ○ 使用4x4的分辨率初始化运动指示器。如果失败,则打印错误信息并返回状态。
    ○ 可选地更改用于检测运动的最小和最大距离。这些距离有一些限制,如果超出这些限制,则会返回错误。
    ○ 如果用户需要,可以更改传感器的分辨率。同时,也需要更新运动指示器的分辨率。
    ○ 为示例设置测距频率为2Hz。如果设置失败,打印错误信息。
  3. 开始测距:
    ○ 启动VL53L5CX设备的测距功能。
  4. 测距循环 (无限循环):
    ○ 检查VL53L5CX设备是否有新的数据可用。
    ○ 如果有新数据:
    ■ 获取测距数据。
    ■ 打印数据流计数(可能是一个连续的测量编号)。
    ■ 打印每个区域(在4x4分辨率下有16个区域)的运动强度。
    这个程序主要用于配置VL53L5CX传感器的运动指示器,然后不断地从传感器获取测距数据,并打印出每个区域的运动强度。

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_4X4);
	if(status)
	{
		printf("运动指示器初始化失败,状态 : %u\n", status);
		return status;
	}

	/* (可选) 更改用于检测运动的最小和最大距离。最小和最大之间的差异
	 * 不得超过1500mm,最小值不能小于400mm,否则下面的函数返回错误127 */
	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_ranging_frequency_hz(&pL5obj->Dev, 2);
	if(status)
	{
		printf("设置vl53l5cx测距频率失败,状态 : %u\r\n", status);
		return status;
	}

	/*          测距循环              */

	status = vl53l5cx_start_ranging(&pL5obj->Dev);
  /* 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);

			/* 由于传感器默认设置为4x4模式,我们总共有
			 * 16个区域要打印。在此示例中,只打印第一个区域的数据 */
			printf("打印数据编号 : %3u\n", pL5obj->Dev.streamcount);
			for(i = 0; i < 16; i++)
			{
				printf("区域 : %3d, 运动强度 : %3lu\n",
					i,
					Results.motion_indicator.motion[motion_config.map_id[i]]);
			}
			printf("\n");
		}		
		
    /* USER CODE END WHILE */

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

演示结果

静止状态下运动强度如下所示。
vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器
检测运动情况下运动强度如下所示。

vl53l5cx库函数版本程序,单片机,传感器,stm32cube,STM32CUBEMX,tof,飞行时间,VL53L5CX,人体检测,红外感应,运动指示器文章来源地址https://www.toymoban.com/news/detail-784229.html

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

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

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

相关文章

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

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

    2024年03月18日
    浏览(69)
  • 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日
    浏览(59)
  • 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日
    浏览(35)
  • flutter开发实战-旋转loading指示器

    flutter开发实战-旋转loading指示器。 有些时候我们可能会需要一些复杂的动画,这些动画可能由一个动画序列或重叠的动画组成。一个动画组合在不同阶段包含了多种动画,要实现这种效果,需要使用交织动画(Stagger Animation)实现会比较方法。 实现旋转loading指示器代码 // 旋

    2024年02月14日
    浏览(50)
  • iOS开发-下拉刷新动画依次渐隐渐显Indicator指示器效果

    iOS开发-下拉刷新动画依次渐隐渐显Indicator指示器效果 之前开发中实现下拉刷新动画三个球依次渐隐渐显指示器效果。 CABasicAnimation类的使用方式就是基本的关键帧动画。 所谓关键帧动画,就是将Layer的属性作为KeyPath来注册,指定动画的起始帧和结束帧,然后自动计算和实现

    2024年02月15日
    浏览(38)
  • flutter开发实战-flutter_spinkit实现多种风格进度指示器

    flutter开发实战-flutter_spinkit实现多种风格进度指示器 最近开发过程中flutter_spinkit,这个拥有多种种风格加载指示器 引入flutter_spinkit 效果示例 代码如下 flutter开发实战-flutter_spinkit实现多种风格进度指示器. 学习记录,每天不停进步。

    2024年02月14日
    浏览(47)
  • flutter TabBar指示器

    第一层tabView 第二层tabView 指示器: // Copyright 2018 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import ‘package:flutter/material.dart’; import ‘package:flutter/widgets.dart’; /// Used with [TabBar.indicator] to draw a horizontal line be

    2024年02月04日
    浏览(45)
  • 第二十八回:如何给PageView添加指示器

    我们在前面章回中介绍了PageView这个Widget,本章回中将介绍 如何给PageView添加指示器 .闲话休提,让我们一起Talk Flutter吧。 我们在这里说的指示器表示 PageView 底部的小圆圈,它用来指示当前哪个页面被选中。常用的场景是滑动页面时小圆圈高亮显示当前被选中的页面,其它小圆

    2024年02月04日
    浏览(73)
  • Compose 实战之为下拉刷新添加自定义指示器

    在安卓开发中,下拉刷新是一个非常常用的功能,几乎只要是涉及到列表展示数据的界面都会用到它。 而 Compose 却直到 2022年10月份才在 compose.material:1.3.0 中添加了对下拉刷新的支持: Modifier.pullRefresh 。 在此之前,我们只能使用 accompanist-swiperefresh 来实现下拉刷新。 然而,更

    2024年02月07日
    浏览(41)
  • Android kotlin 实现仿淘宝RecyclerView和对应下的指示器功能

    指示器样式 , 第二个gif是用模拟器的,gif有小问题,第三个截图没问题 在 app 的 build.gradle 在添加以下代码 1、 implementation \\\'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.6\\\' ,这个里面带的适配器,直接调用就即可 这依赖包还需要得到要添加,在 Project 的 build.gradle 在添加以下代码

    2024年02月09日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包