基于stm32的手势识别检测

IT_阿水 IT_阿水     2022-11-28     790

关键词:

基于STM32的手势识别检测

1.简介

  手势识别是计算机科学和语言技术中的一个主题,目的是通过数学算法来识别人类手势。 手势可以源自任何身体运动或状态,但通常源自面部或手。 本领域中的当前焦点包括来自面部和手势识别的情感识别。 用户可以使用简单的手势来控制或与设备交互,而无需接触他们。姿势,步态和人类行为的识别也是手势识别技术的主题。手势识别可以被视为计算机理解人体语言的方式,从而在机器和人之间搭建比原始文本用户界面或甚至GUI(图形用户界面)更丰富的桥梁。

 手势识别使人们能够与机器进行通信,并且无需任何机械设备即可自然交互。 使用手势识别的概念,可以将手指指向计算机屏幕,使得光标将相应地移动。 这可能使常规输入设备(如鼠标,键盘甚至触摸屏)变得冗余。

 越来越多的电子设备都在使用手势识别功能。顾名思义,手势识别旨在识别人类的物理运动或“手势”。例如,在设备前面以特定模式挥动您的手可能会告诉它启动特定的应用程序,诸如此类的手势识别经常出现在智能手机和平板电脑中。

 手势识别被分类为一种非接触式用户界面(TUI)。与触摸屏设备不同,TUI设备无需触摸即可控制。像Google Home和Amazon Alexa这样的语音控制智能扬声器是TUI的主要例子。

 手势识别也打开了通向输入可能性的全新世界的大门。用户可以尝试其他基于手势的输入形式,而不是仅限于传统的输入形式。有些设备甚至允许用户设置自己的手势。

 除智能手机和平板电脑外,手机识别还可用于汽车信息娱乐中心、视频游戏控制台、人机界面等。最重要的是,手势识别技术正变得越来越流行,并且没有任何迹象表明它会很快放慢速度。

2.PAJ7620介绍

PAJ-7620U2是由原相科技公司开发的一款手势识别芯片, 内集成了光学数组式传感器单元,可以快速准确的对输入信号进行感应和输出处理。内置光源和环境光抑制滤波器,能在黑暗或低光环境下工作。它支持上、下、左、右、前、后、顺时针旋转、逆时针旋转和挥动的手势动作识别,以及支持物体接近检测等功能。可大致检测物体体积大小和亮度。使用IIC通信接口可达400KHz通信速率。

 ⚫可直接识别 9 种基本手势,支持手势中断输出

 ⚫ 内置红外 LED 和光学镜头,能在低光和黑暗环境下工作

 ⚫ 支持 I2C 接口通信,仅需两根信号脚即可控制

 ⚫ 板载电平转换电路,可兼容 3.3V/5V 的逻辑电平

基于STM32的手势识别检测_PAJ7620

2.1 通讯方式

  PAJ7620使用IIC通信接口可达400KHz通信速率。
  功能模块框图如下所示:

基于STM32的手势识别检测_手势识别_02

  其中, I2C_SCL 和 I2C_SDA 是连接 MCU 的 IIC 接口, MCU 通过这个 IIC 接口来控制PAJ7620,在上述框图可以看到,该芯片内部自带 LED 驱动器,传感器感应阵列、目标信息提取阵列和手势识别阵列。 芯片工作时通过内部 LED 驱动器,驱动红外 LED向外发射红外线信号,当传感器阵列在有效的距离中探测到物体时,目标信息提取阵列会对探测目标进行特征原始数据的获取,获取的数据会存在寄存器中,同时手势识别阵列会对原始数据进行识别处理,最后将手势结果存到寄存器中,用户可根据 I2C 接口对原始数据和手势识别的结果进行读取。

2.2 硬件驱动

  1.打开STM32CubeMX软件,配置手势识别引脚PB6(IIC_SCL)、PB7(IIC_SDA)。

基于STM32的手势识别检测_HAL库_03

  2.设置引脚模式为推挽输出模式,初始化电平为高电平。

基于STM32的手势识别检测_手势识别_04

  3.手势模块底层接口IIC协议函数。

基于STM32的手势识别检测_STM32_05

  起始信号

  钟线为高电平时,数据线由高变低为起始信号。

/***************发送起始信号*************
*
*说明:时钟线为高电平时,数据线由高变低为起始信号
*******************************************/
void IIC_Start(void)

IIC_SDA_OUT_MODE();//输出模式
IIC_SCL(1);
IIC_SDA_OUT(1);
DelayUs(2);
IIC_SDA_OUT(1);
DelayUs(2);
IIC_SCL(0);//钳住IIC总线,准发送或者接收数据

停止信号

  时钟线为高电平时,数据线由低变高为停止信号。

/**************发送停止信号*****************
**
**说明:时钟线为高电平时,数据线由低变高为停止信号
************************************************/
void IIC_Stop(void)

IIC_SDA_OUT_MODE();//输出模式
IIC_SCL(0);
IIC_SDA_OUT(1);
DelayUs(2);
IIC_SCL(1);
DelayUs(2);
IIC_SDA_OUT(1);
DelayUs(2);

发送应答和发送数据

  时钟上升沿读取数据,下降发送数据。

基于STM32的手势识别检测_HAL库_06

/****************发送应答信号************
**u8 ack -- 0应答,1非应答
**
******************************************/
void IIC_Send_Ack(u8 ack)

IIC_SDA_OUT_MODE();//输出模式
IIC_SCL(0);
if(ack&0X01)IIC_SDA_OUT(1);//非应答
else IIC_SDA_OUT(1);//应答
DelayUs(2);
IIC_SCL(1);//时钟线拉高,数据发送完成
DelayUs(2);
IIC_SCL(0);//时钟线拉低,准备下一次数据收发

/***************发送一字节数据***************/
void IIC_Send_Byte(u8 txd)

u8 i=0;
IIC_SDA_OUT_MODE();//输出模式
for(i=0;i<8;i++)

IIC_SCL(0);
if(txd&0X80)IIC_SDA_OUT(1);
else IIC_SDA_OUT(1);
DelayUs(2);
IIC_SCL(1);
DelayUs(2);
txd<<=1;

IIC_SCL(0);;//时钟线拉低,准备下一次数据收发

获取应答信号和读取数据

  时钟上升沿读取数据,下降发送数据。

/***************检测应答信号********************
**
**返回值:1,接收应答失败
0,接收应答成功
************************************************/
u8 IIC_Check_ACK(void)

u8 i=0;
IIC_SDA_IN_MODE();//输入模式
IIC_SDA_OUT(1);
IIC_SCL(0);
DelayUs(2);
IIC_SCL(1);
while(IIC_SDA_IN)

i++;
if(i>=255)return 1;//非应答

IIC_SCL(0);
return 0;//应答

/**********************接收1字节数据****************/
u8 IIC_ReadByte(void)

u8 i=0;
u8 rxd=0;
IIC_SDA_IN_MODE();//输入模式
for(i=0;i<8;i++)

IIC_SCL(0);
DelayUs(2);
IIC_SCL(1);
rxd<<=1;
if(IIC_SDA_IN)rxd|=0x01;
DelayUs(2);


IIC_SCL(1);
return rxd;

3.软件实现

 1.通过手势实现时间切换、日期切换等;

 2.利用手势实现LED控制、蜂鸣器控制;

 3.实时时间校准,可通过串口校时;

3.1 串口校时

 通过自定义串口协议,通过串口调试助手获取PC端时间,完成RTC时间校准;发送数据格式为:*20220617121220。

以 *作为起始标志,4字节年+2字节月+2字节日+2字节时+2字节分+2字节秒,字符串方式接收数据处理。

if(usart1_flag)

printf("%s\\r\\n",usart1_buff_rx);
if(usart1_buff_rx[0]== *)

DateToUpdate.Year=(usart1_buff_rx[3]-0)*10+(usart1_buff_rx[4]-0)*1;//年
DateToUpdate.Month=(usart1_buff_rx[5]-0)*10+(usart1_buff_rx[6]-0)*1;//月
DateToUpdate.Date=(usart1_buff_rx[7]-0)*10+(usart1_buff_rx[8]-0)*1;//日

sTime.Hours=(usart1_buff_rx[9]-0)*10+(usart1_buff_rx[10]-0)*1;
sTime.Minutes=(usart1_buff_rx[11]-0)*10+(usart1_buff_rx[12]-0)*1;
sTime.Seconds=(usart1_buff_rx[13]-0)*10+(usart1_buff_rx[14]-0)*1;
printf("time:%d/%d/%d -- %d:%d:%d\\r\\n",DateToUpdate.Year,DateToUpdate.Month,DateToUpdate.Date,sTime.Hours,sTime.Minutes,sTime.Seconds);
HAL_RTC_SetDate(&hrtc, &DateToUpdate,RTC_FORMAT_BIN);
HAL_RTC_SetTime(&hrtc,&sTime,RTC_FORMAT_BIN);

usart1_flag=0;
usart1_count=0;

3.2 LED呼吸灯

呼吸灯通过定时器PWM模式实现;设置定时器分频系数为72,周期时间为300us;

TIM_ClockConfigTypeDef sClockSourceConfig = 0;
TIM_MasterConfigTypeDef sMasterConfig = 0;
TIM_OC_InitTypeDef sConfigOC = 0;

/* USER CODE BEGIN TIM4_Init 1 */

/* USER CODE END TIM4_Init 1 */
htim4.Instance = TIM4;
htim4.Init.Prescaler = 72;
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
htim4.Init.Period = 300;
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;

通过改变PWM波占空比来实现呼吸灯效果;

if(flag==0)j++;
else j--;
if(j>=300)flag=1;
if(j==0)flag=0;
Delay_Ms(2);
htim4.Instance->CCR3=j;//调节占空比
htim4.Instance->CCR4=j;

3.3 手势识别检测

  PAJ7620支持上、下、左、右、前、后、顺时针旋转、逆时针旋转和挥动的手势动作识别。用户可根据 I2C 接口对原始数据和手势识别的结果进行读取。

paj7620u2_selectBank(BANK0);//切换BANK0寄存器区域
status = GS_Read_nByte(PAJ_GET_INT_FLAG1,2,&data[0]);//读取手势状态
if(!status)

gesture_data =(u16)data[1]<<8 | data[0];
if(gesture_data)

switch(gesture_data)

case GES_UP: //向上
printf("向上 Up\\r\\n");
HAL_GPIO_WritePin(BEEP_GPIO_Port,BEEP_Pin, GPIO_PIN_RESET);//关闭蜂鸣器
ledflash=1;
break;
case GES_DOWM: //向下
HAL_GPIO_WritePin(BEEP_GPIO_Port,BEEP_Pin, GPIO_PIN_SET);//开启蜂鸣器
printf("向下 Dowm\\r\\n");
ledflash=1;
break;
case GES_LEFT: //向左
if(rtc_stat==0)

rtc_stat=3;

else rtc_stat--;
printf("rtc_stat=%d\\n",rtc_stat);
printf("向左 Left\\r\\n");
ledflash=1;
break;
case GES_RIGHT: //向右
if(rtc_stat==4)

rtc_stat=0;

else rtc_stat++;
printf("向右 Right\\r\\n");
ledflash=1;
break;
case GES_FORWARD: //向前
printf("向前 Forward\\r\\n");
ledflash=1;
break;
case GES_BACKWARD: //向后
printf("向后 Backward\\r\\n");
ledflash=1;
break;
case GES_CLOCKWISE: //顺时针
printf("顺时针 Clockwise\\r\\n");
ledflash=1;
break;
case GES_COUNT_CLOCKWISE: //逆时针
printf("逆时针 AntiClockwise\\r\\n");
ledflash=1;
break;
case GES_WAVE:
printf("挥动 Wave\\r\\n");
ledflash=1;
break; //挥动
default: ledflash=0; break;


基于STM32的手势识别检测_STM32_07


基于yolov5的手势识别系统(含手势识别数据集+训练代码)(代码片段)

基于YOLOv5的手势识别系统(含手势识别数据集+训练代码)目录基于YOLOv5的手势识别系统(含手势识别数据集+训练代码)1.前言2.手势识别的方法(1)基于多目标检测的手势识别方法(2)基于手部检测+手势分类... 查看详情

基于yolov5的手势识别系统(含手势识别数据集+训练代码)(代码片段)

基于YOLOv5的手势识别系统(含手势识别数据集+训练代码)目录基于YOLOv5的手势识别系统(含手势识别数据集+训练代码)1.前言2.手势识别的方法(1)基于多目标检测的手势识别方法(2)基于手部检测+手势分类... 查看详情

基于yolov5的手势识别系统(含手势识别数据集+训练代码)(代码片段)

基于YOLOv5的手势识别系统(含手势识别数据集+训练代码)目录基于YOLOv5的手势识别系统(含手势识别数据集+训练代码)1.前言2.手势识别的方法(1)基于多目标检测的手势识别方法(2)基于手部检测+手势分类... 查看详情

毕设题目:matlab手势识别

1案例背景手势识别可以分为基于可穿戴设备的识别、基于触摸技术的识别和基于计算机视觉的识别。其中,基于计算机视觉的识别,手势图像信息由一个或多个摄像头采集,采集的数据进行预处理,包括去噪和信... 查看详情

stm32入门综合性项目:用手势来产生波形!

...是ZhengN。给大家分享一个关于STM32的综合性小项目:基于手势控制的波形产生题,题目简单,但综合性较强。展示视频:特此放上,设计报告中的部分段落。01 题目要求基于手势控制的波形产生器1.1题目说明... 查看详情

android手部检测和手势识别(含训练代码+android源码+手势识别数据集)(代码片段)

...势识别数据集)1.前言2.手势识别的方法(1)基于多目标检测的手势识别方法(2)基于手部检测+手势分类识别方法3. 查看详情

android手部检测和手势识别(含训练代码+android源码+手势识别数据集)(代码片段)

...势识别数据集)1.前言2.手势识别的方法(1)基于多目标检测的手势识别方法(2)基于手部检测+手势分类识别方法3. 查看详情

android实现手部检测和手势识别(含训练代码+android源码+手势识别数据集)(代码片段)

...势识别数据集)1.前言2.手势识别的方法(1)基于多目标检测的手势识别方法(2)基于手部检测+手势分类识别方法 查看详情

基于stm32的温湿度检测案例(代码片段)

系列文章目录一、基于stm32的温度检测案例(一)文章目录目录系列文章目录一、基于stm32的温度检测案例(一)文章目录前言一、实验器材简介1.1、基于STM32F042F6P6的最小单片机系统1.2、串口通信工具CH340G(USB... 查看详情

基于stm32的温湿度检测案例(代码片段)

系列文章目录一、基于stm32的温度检测案例(一)文章目录目录系列文章目录一、基于stm32的温度检测案例(一)文章目录前言一、实验器材简介1.1、基于STM32F042F6P6的最小单片机系统1.2、串口通信工具CH340G(USB... 查看详情

13基于stm32的语音识别垃圾桶

13、基于STM32的语音识别垃圾桶引言1系统概述1.1设计任务1.2设计要求2方案设计及论证2.1确定控制方案2.2芯片选型2.2.1主控芯片选型2.2单片机STC11L08XE2.3语音识别模块介绍3硬件设计3.1最小系统模块3.2稳压电路3.3语音识别接口4系统程... 查看详情

毕业设计-题目:基于机器视觉opencv的手势检测手势识别算法-深度学习卷积神经网络opencvpython(代码片段)

...后-毕设帮助1简介今天学长向大家介绍一个机器视觉项目基于机器视觉opencv的手势检测手势识别算法毕设帮助,开题指导,技术解答🇶7468760412传统机器视觉的手势检测普通机器视觉手势检测的基本流程如下:其中... 查看详情

手势到文本识别、OCR 或基于手势的本机 .NET 库

】手势到文本识别、OCR或基于手势的本机.NET库【英文标题】:Gesturetotextrecognition,OCRorGesturebased,native.NETlibrary【发布时间】:2012-02-0306:25:37【问题描述】:我正在为WindowsPhone7开发一个项目,我需要一个用于将形状识别为文本的库... 查看详情

基于stm32单片机项目设计目录-加油吧√

★♥基于STM32单片机项目设计目录√♥※目录★♥基于STM32单片机项目设计目录√♥※1、基于STM32的音乐喷泉2、STM32的智能浇水补光系统3、基于STM32的手机通过wifi控LED灯4、基于STM32的电子打铃器5、基于STM32的智能手环6、基于STM32... 查看详情

基于stm32单片机项目设计目录-加油吧√

★♥基于STM32单片机项目设计目录√♥※目录★♥基于STM32单片机项目设计目录√♥※1、基于STM32的音乐喷泉2、STM32的智能浇水补光系统3、基于STM32的手机通过wifi控LED灯4、基于STM32的电子打铃器5、基于STM32的智能手环6、基于STM32... 查看详情

8★☆基于stm32的小区环境检测系统√★☆(代码片段)

8、★☆基于STM32的小区环境检测系统√★☆文章目录8、★☆基于STM32的小区环境检测系统√★☆Introduction引言1、系统概述1.1、设计任务1.2、设计要求2、方案设计与论证2.1、芯片选择方案2.2、系统概述2.3、设计要求2.4、系统总体... 查看详情

8★☆基于stm32的小区环境检测系统√★☆(代码片段)

8、★☆基于STM32的小区环境检测系统√★☆文章目录8、★☆基于STM32的小区环境检测系统√★☆Introduction引言1、系统概述1.1、设计任务1.2、设计要求2、方案设计与论证2.1、芯片选择方案2.2、系统概述2.3、设计要求2.4、系统总体... 查看详情

基于stm32的有限词条语音识别与对话模块

基于STM32的有限词条语音识别与对话模块一、模块整体设计思路二、器件选型与方案确定1、器件选型(1)语音识别模块(2)词条存储模块(3)语音提示模块(4)主控芯片2、方案确定三、IO资源分... 查看详情