使用ADUX1020实现手势识别 – ADUX1020, 光学传感器, 前端器件, 手势识别

广告也精彩

ADUX1020是一款集成式光学传感器和前端器件,能够进行高级单点手势识别和近距检测。光学传感器可灵敏感测入射光的强度和角度。通过光学和电子的环境光过滤,它能够在各种嘈声环境中持续稳定工作。该芯片能够在多种模式下配置,以实现非接触式手势识别和控制,还能实现近距检测。

手势识别基础

ADUX1020能够灵敏感测入射光的角度,因此该芯片只需使用集成式光学传感器和单个外部LED即可检测手势。当设置为采样模式时,它可从芯片上的四个输出通道计算入射光的角度。必须使用以下程序来实现手势识别功能:

在ADUX1020工作之前,校准时钟。有关如何校准32 kHz和32 MHz时钟的信息,请参见ADUX1020数据手册。

通过将 0x3 写入寄存器 0x45 的位 [3:0],将 ADUX1020 工作模式设置为采样模式。

收集器件测量的数据。有关如何使用先进先出(FIFO)和中断从寄存器读取数据的说明,请查看ADUX1020数据手册。数据可直接从数据寄存器读取,或从寄存器0x60位[15:0]中的64字节FIFO读取。

利用ADUX1020四个输出通道中的数据计算入射光的角度。收集通道X1、通道X2、通道Y1和通道Y2数据 之后,按照以下公式计算角度和强度:

水平角度:使用ADUX1020实现手势识别 - ADUX1020, 光学传感器, 前端器件, 手势识别(弧度)

垂直角度:使用ADUX1020实现手势识别 - ADUX1020, 光学传感器, 前端器件, 手势识别(弧度)

强度:I = X1 + X2 + Y1 + Y2(代码)

数据示例如图1和图2所示。


使用ADUX1020实现手势识别 - ADUX1020, 光学传感器, 前端器件, 手势识别
图1.强度和时间,ADUX1020 的原始数据输出


 


使用ADUX1020实现手势识别 - ADUX1020, 光学传感器, 前端器件, 手势识别
图2.角度和时间,ADUX1020 的角度计算


事件检测和手势窗口算法

在本部分中,以下算法说明的伪代码基于MATLAB语法。循环、Case语句和函数遵循标准的MATLAB格式,源于实际的MATLAB代码。

ADUX1020评估软件支持五种单元手势:向上轻扫、向下轻扫、向左轻扫、向右轻扫、点击。算法等待事件发生,在事件发生后,再将数据归类为这些手势之一。

在事件检测之前,必须消除所有四个通道的失调,方法是从数字上减去失调,或者修正器件的失调。从数字上减去失调是管理失调的最简单方法;但是,修正器件失调的方法可以充分利用模数转换器(ADC)的动态范围,建议在需要高动态范围的情况下使用。 寄存器0x3A、寄存器0x3B、寄存器0x3C和寄存器0x3D包含ADC失调,其标称值设置为0x2000。为修正这些失调,以ADC代码为单位,测量每个通道的16位输出,并将其从ADC失调寄存器CHx_OFFSET中的16位数字中减去(标称值为0x2000)。然后,使用此减法的结果写入ADC失调寄存器。

事件的起始可定义为当强度数据或其时间导数超出预设的阈值时。在本应用笔记中,我们采用了使用强度导数的方法,但两种方法都是适用的。

强度数据经过低通滤波,以消除高频噪声。通常,高频噪声消除可通过10 Hz转折频率的二阶巴特沃兹低通滤波器完成。

使用ADUX1020实现手势识别 - ADUX1020, 光学传感器, 前端器件, 手势识别

通过提取连续滤波强度样本的差值,来计算滤波强度的导数。

使用ADUX1020实现手势识别 - ADUX1020, 光学传感器, 前端器件, 手势识别

强度的导数dI/dt提高到预设阈值(ITH,以ADC代码为单位)之上,就是事件的起始。通常,这个阈值设置为200个ADC代码,但它可以上下调节,以消除较小的幅度,防止意外事件被识别为手势,或者也可将更小幅度的事件识别为手势。可扫描dI/dt的每个连续值,直至到达阈值,从而找到手势的起始。

For n = 1:numel(dI/dt)

if dI/dt (n) > ITH

gestureStart = n

break

可通过后向扫描dI/dt数据,从手势起始时间开始,加上最长手势持续时间,直至滤波强度的导数降至–ITH之下,从而找到手势的结束。图3和图4显示了确定手势起始和停止时间的示例。

For n = (gestureStart + gestureDuration):−1:gestureStart

if dI/dt (n) < −ITH

gestureStop = n

break



使用ADUX1020实现手势识别 - ADUX1020, 光学传感器, 前端器件, 手势识别
图3.强度和时间,包含手势起始和停止时间


使用ADUX1020实现手势识别 - ADUX1020, 光学传感器, 前端器件, 手势识别

图4. dI/dt和时间,包含手势起始和停止时间


当利用起始和停止时间来描绘手势时,可以计算手势内部的最大和最小的θX和θY。如果两个数量,即max(θX) – min(θX)和max(θY) – min(θY),都小于阈值θTH,则将事件归类为点击。如果事件不是点击,则需要进一步处理,以确定手势的方向。θX和θY之间的线性最小二乘法拟合线确定手势是属于向上、向下还是向左、向右类别,使用以下公式:

使用ADUX1020实现手势识别 - ADUX1020, 光学传感器, 前端器件, 手势识别

其中m 是斜率。

如果此拟合线斜率m的绝对值小于1,则手势为向左和向右。如果斜率的绝对值大于1,则手势为向上和向下。请注意,基本强度阈值还可描绘手势起始和停止时间,以简化计算。

If max(θX) − min(θX) < θTH and max(θY) − min(θY) < θTH

gesture = click

else

 (m, b) = leastSquaresFit(θX, θY)

if m ≤ 1

if θX(gestureStart) > θX(gestureStop)

gesture = left

else

gesture = right

else if m > 1

if θY(gestureStart) > θY(gestureStop)

gesture = up

else

gesture = down

图5显示了最小二乘法拟合线的示例。此手势有较大的θX值扩展,并非点击。最小二乘法拟合线的斜率<1,而且θX(gestureStart) > θX(gestureStop);因此,该手势是向左轻扫。


使用ADUX1020实现手势识别 - ADUX1020, 光学传感器, 前端器件, 手势识别
图5. θY和θX,包含最小二乘法拟合线


调节此方法的参数(–ITH、θTH和gestureDuration)可针对任何用例来优化算法,从而提供进行手势识别的唯一可能方法。使用ADUX1020还有其他方法实现手势识别。如果担心计算负载,可以只考虑手势起始和停止点,而忽略两者之间的点。这种方法非常稳定高效,但它要求强度或强度导数阈值ITH设置得足够高,以确保起始点和停止点具有适当的信噪比。

图6显示了强度dI/dt,以及轻扫手势的手势图,如光学手势评估工具中所示。图7显示了识别为向右轻扫的单元手势。 


使用ADUX1020实现手势识别 - ADUX1020, 光学传感器, 前端器件, 手势识别
图6.手势识别数据(强度dl/dt,以及轻扫手势的手势图),使用光学手势评估工具

使用ADUX1020实现手势识别 - ADUX1020, 光学传感器, 前端器件, 手势识别
图7.轻扫手势结果(识别为向右轻扫),使用光学手势评估工具

广告也精彩
  • 使用ADUX1020实现手势识别 – ADUX1020, 光学传感器, 前端器件, 手势识别已关闭评论
    A+
发布日期:2019年03月17日  所属分类:参考设计