一、项目介绍
本项目基于 TMF8821 dToF 传感器的 3x3 多区域高精度测距数据,开发了轻量化手势识别算法,通过阈值滤波、空间轨迹建模及模式匹配技术,实现了对挥手方向(左/右/接近)的毫秒级实时识别;结合 CH582F 单片机的双模通信能力(蓝牙 5.3/USB 2.0),设计低功耗多媒体键盘控制协议,将手势映射为系统级媒体指令(切歌、暂停、播放),支持跨平台免驱兼容(Windows/macOS/Android)。经测试,识别准确率在95%以上,极速响应并触发多媒体控制。
二、硬件介绍
- TMF8821 dToF模块
dToF模块是基于 TMF8821 设计的直接飞行时间 (dToF) 传感器模块,TMF8821采用单个模块化封装,带有相关的 VCSEL(垂直腔面发射激光器)。dToF 设备基于 SPAD、TDC 和直方图技术,可实现 5000 mm 的检测范围。由于它的镜头位于 SPAD 上,它支持 3x3、4x4 和 3x6 多区域输出数据以及宽广的、动态可调的视野。VCSEL 上方的封装内的多透镜阵列 (MLA) 拓宽了 FoI(照明场)。原始数据的所有处理都在片上进行,TMF8821在其 I2C 接口上提供距离信息和置信度值。TMF8821 具有如下特点:
- 具有高灵敏度SPAD检测的Direct ToF技术
- 4x4 可配置的多区域配置,具有多目标检测功能
- 可调视野(最大63°对角线)
- 快速时间数字转换器(TDC)架构
- 亚纳秒级光脉冲
- 10 – 5000mm 距离感应 @30Hz
- 片上直方图处理
- 940nm VCSEL 1类人眼安全
- 高性能片上阳光阻隔滤波器和算法
- 小型模块化OLGA 2.0mm x 4.6mm x 1.4mm封装
项目中基于该dToF模块,通过IIC方式进行配置和数据读取,获得 3x3 区域的距离数据,用于后续的手势检测。
- CH582 单片机
CH582 是南京沁恒微电子推出的高性能 32 位 RISC-V 单片机,专为物联网设备设计。其核心搭载青稞 V4F 内核(主频 40MHz),集成 蓝牙 5.3(BLE/BR/EDR) 和 Zigbee 3.0 双模无线通信,支持百米级射频传输,并内置硬件浮点单元(FPU)加速复杂运算。芯片配备 448KB Flash 和 32KB SRAM,支持 USB 2.0、12 位 ADC、多路 PWM 及电容触摸检测,外设资源丰富;通过超低功耗设计(待机电流低至 1μA)和高度集成化架构,可显著降低系统成本与功耗,适用于智能家居、穿戴设备及工业无线控制等场景。
- TMF8821 dToF模块原理图
TMF8821模块采用了本次活动主办方推荐的模块,其原理图中包含了LDO稳压、TMF8821传感器和排针。
其中传感器的供电需要稳定,因此使用了多个电容进行抗干扰。
传感器通信方式为IIC,并引出了中断引脚和使能引脚。
通过排针与其他模块连接。
- CH582底板硬件介绍
所设计的CH582F模块,使用了相同大小的PCB,可以完美与传感器模块适配。
其中电源电路中,包含了LDO稳压电路、锂电池充电电路和双电源切换电路。
CH582F单片机的蓝牙馈线进行了阻抗匹配,在PCB制作时,选择双面板、1.2mm厚度。
排针用于串口通信,在校准时需要通过排针读取校准数据。
按键,既是进入BL模式的按键,也是进行USB/蓝牙模式切换的按键。
指示灯用户交互,很有用。
三、设计思路介绍
- TMF8821传感器校准
TMF8821的出厂校准是必要的,官方程序的校准数据不适配每个传感器,需要自己进行校准获得校准数据,校准依照教程进行。
在校准过程中,开启程序中的校准宏定义,即可进行校准。
校准可使用所打印的3D外壳,贴上透明胶带作为滤波薄膜。
完成校准后将校准数组放置在cali.c文件中。
通过放置平板来判断校准是否成功。
- 矩阵数据读取
TMF8821在使能、烧录固件、启动测量后,可周期读取距离数据和置信度。通过对数据进行处理,转换成矩阵分布,方便后续处理。
TMF8821的功能强大, 可以根据不同的需求,烧录相应的固件来实现。【没想到除了单片机能够烧录,连传感器也可以烧录。】
对于本项目,将基础固件进行烧录,输出3x3距离数据,单位mm,测量范围在11-3000mm之间。
- 手势识别
考虑到单片机的性能,不采用机器学习和深度学习,使用基础的算法。滤波是最最重要的,影响着识别准确度。
CH582单片机通过IIC读取3x3的距离数据,手掌在前方挥动、接近时会导致距离矩阵发生变化,通过滤波和模式匹配,对不同的手势动作进行识别。其中,有以下几点特点注意:
- 距离滤波:考虑到挥动的范围和防止其他移动物体的影响,对检测到的距离数据,在30mm到200mm之间的数据为有效数据,会用于触发手势识别并进行模式匹配。
- 模式匹配:TMF8821在连续读取时,频率为30Hz,满足挥动的检测。在模式匹配算法中,主要利用平均值、方差和差值进行计算。当平均值和方差满足特定要求时,则会开始记录,并在后续1s内进行数据判断,从而实现了对挥手方向(左/右/接近)的毫秒级实时识别。
- 冷却时间:为防止重复识别,会有1s的识别冷却时间。
- 多媒体控制
双模控制能够为电脑、手机和平板提供多媒体控制。通过按键进行模式切换,并通过Flash进行存储。
CH582单片机具有双模通信能力(蓝牙 5.3/USB 2.0),无需安装驱动,可以通过侧面按键进行切换。其中蓝牙连接,可以连接多系统,包括电脑和手机。
- 交互体验提升
考虑到识别并非100%,用户需要一种直观方式判断是否手势识别成功。
通过一个小小的LED,进行亮灯指示,当识别到手势后,会亮LED 1s。
四、 软件代码
- 软件流程图
在程序运行中,通过TMOS这类轻量化RTOS进行程序控制,主要完成如下三个功能的协同工作。
矩阵距离数据:在使能TMF8821并烧录固件后,启动测量读取矩阵距离数据,同时进行数据滤波,对于错误值0和超过范围的距离数据进行筛除。
手势识别:考虑到单片机的性能,手势识别并没有采用机器学习或者神经网络方式,而是通过基础算法对数据进行滤波和模式匹配。滤波算法用到了平均值滤波、方差滤波等。模式匹配实现手势的识别,并映射至所需的多媒体控制功能中。
多媒体控制:模式数据存放在Flash中,以USB或蓝牙的方式进行控制,开机自动载入模式。然后基于手势识别的映射数据,发送多媒体指令给主机,实现切歌和播放等功能。指示灯进一步实现用户交互。
算法重点在于手势识别,虽然所采用的算法看似简单,但是能够准确识别手势,准确率达95%以上,并且控制基本无延时。
- 关键代码
关键代码包括两个部分,一个是TMF8821驱动的移植,一个是USB/蓝牙多媒体的实现。
TMF8821驱动:所参考的驱动为官方Arduino驱动,对途中几个部分进行了修改和补充。其中特别注意的是接口的改写,需要对包括IIC接口、中断接口、和串口进行改写,并映射到shim.c文件中。
USB/蓝牙:将USB HID和蓝牙HID进行移植,实现双模功能,可通过按键进行模式切换。
五、功能展示
- 外观展示
TMF8821传感器模块和CH582F底板通过排针连接,并设计严丝合缝的3D外壳,可作为一个桌面小摆搭。
内部还可放置一块小锂电池,实现无需USB连接,用蓝牙的方式进行多媒体控制。
- 交互指示灯
为了方便用户对手势识别结果的快速掌握,内部的LED指示灯会在识别到手势后,进行亮灯提示。
3D打印的半透明外壳可以将亮光透出。
此设计虽然简单,但在交互上起到了重要作用。
- USB多媒体控制
程序中启用了三种主要手势的识别,分别为左挥手、右挥手和接近,分别映射至多媒体控制的上一曲、下一曲和播放。
基于USB HID开发,无需安装驱动。
用户需要在20cm范围内进行上述操作,在博主一段时间的使用来看,基本可以做到随手挥动即可控制。
在所设计手势识别算法中,可做到95%以上的识别准确率,并做到ms级别的响应,挥手即可控制多媒体。
图片展示了挥手切歌和按压暂停的多媒体控制。
- 蓝牙多媒体控制
通过TYPE-C接口旁边的按键,即可切换USB/蓝牙模式,模式保存在Flash中,下次开机自动加载模式。
蓝牙模式下,支持电脑和手机。
通过添加蓝牙设备,找到一个名为“TMF Consumer”的设备,连接后即可。
蓝牙模式下,上传周期虽然提高到了10ms,但基本无感。
六、难题与解决方法
- TMF8821传感器距离错误问题
问题:依照手册子在程序中进行TMF8821初始化,然而矩阵距离数据误差大,其左下角的距离数据误差超过3cm。
过程:通过多次查看开发手册,了解到TMF8821需要进行出场校准,得到校准数据并复制到cali.c文件中,才能在测量中获取到准确的矩阵距离。然而在多测校准中,发现校准后的数据仍不佳,继续查看手册,发现最好在传感器前方放置薄膜以减少外部干扰。
解决:在所设计的3D外壳开孔中,贴上透明胶带,实现校准所需的滤波薄膜功能。之后进行校准,距离数据基本准确。
- 手势识别准确率不高难题
问题:初期尝试过多种手势识别的算法和方案,然而会出现误触发、难触发和错误触发的问题,基本无法使用。
过程:观察数据输出,了解到手势识别准确率不高的原因,主要是TMF8821检测周期不足、算法缺乏有效滤波算法导致,需要从这两方面进行解决。
解决:将TMF8821的输出速率提高到了30Hz,添加距离范围滤波、方差滤波和平均值滤波等手段,对数据进行处理,并优化逻辑为先触发再识别接下来1S数据,大幅提高识别准确率到95%以上。
七、复刻教程
- PCB制作
由于使用了蓝牙天线,要阻抗匹配。使用1.2mm厚度的双层板进行制作。
- 程序烧录
底板没有供电时,按住按键后插入USB,通过软件WCHISPTOOL进行烧录。
- 3D打印外壳
推荐透明PETG材料,可以清楚看到LED指示灯。
八、心得体会
- TMF8821传感器虽然配置过程复杂,但这也带来了其功能的多样性。在初始化时,通过烧录不同的固件来实现不同的功能,其热烧录的方法令人印象深刻。
- 在算法开发过程中,不要对基础函数进行忽视,在本项目中利用了基础公式如平均值、方差对手势识别的准确性和实时性提供了重要支撑。
- 项目开发前期,就需要大致规划好开发路程。