
基于FDC2214的手势识别系统
简介
本装置的手势识别以STM32芯片为主控芯片,主要由FDC2214测量模块,蓝牙通信模块,LCD显示模块组成。该系统可以对三种猜拳手势,五种数字手势进行识别,还实现了人机对战的猜拳游戏和简易计算器功能。
简介:本装置的手势识别以STM32芯片为主控芯片,主要由FDC2214测量模块,蓝牙通信模块,LCD显示模块组成。该系统可以对三种猜拳手势,五种数字手势进行识别,还实现了人机对战的猜拳游戏和简易计算器功能。开源协议
:CC-BY 3.0
描述
题目要求
任务
(1)基于 TI 公司传感芯片 FDC2214 设计制作一个手势识别装置,实现对猜拳游戏和划拳游戏的判决。
要求
(1)装置工作在判决模式下,能对参赛者指定人员进行猜拳判决,给出手势“石头”、“剪刀”和“布”的准确判决,要求每一次判决的时间不大于 1 秒。
(2)装置工作在判决模式下,能对参赛者指定人员进行划拳判决,给出手势“1”、“2”、“3”、“4”和“5”的准确判决,要求每一次判决的时间不大于1秒。
(4)装置工作在训练模式下,对任意测试者进行划拳的手势训练,每种动 作训练次数不大于 3 次,总的训练时间不大于 2 分钟;然后切换工作模式到判决 模式,对被训练的人员进行划拳判决,要求每一次判决的时间不大于 1 秒。
(5)其他
题目分析
(1)按题目要求,要求1-2实现的是对不同手势的判决,本系统采用六块摆成手掌形状的铜板,不同手势下通过FDC2214测量模块即可实现手势识别
(2)其次是手势判决显示部分,本装置采用LCD屏幕以及舵机控制的机械装置进行对手势判决的显示。
(3)此外还完成了要求中的其他部分实现了人机对抗的猜拳游戏以及简易计算器功能
系统方案
结构方案设计
(2)考虑到手势识别装置需便于展示,采用电路板堆叠的方式来尽可能的减小空间,并将所有电路板以及测量元件均固定在一块木板上。
(3)布局方面,手掌放置位置以外为电路模块,手掌放置部位为测量元件。考虑到时间成本以及可控性,所有元件均采用热熔胶来固定,既牢固,又便于调整。
(5)本系统在要求中的“其他”,实现了人机对抗的猜拳游戏,在该游戏中,系统做出的手势通过整个系统左上角的圆形转盘来展现:通过舵机转动不同的角度来改变未遮罩的三角部分所露出的符号,从而达到展示对方手势的目的。
系统设计方案
根据题目需求,整体系统共如下几个模块:供电模块、微处理器、FDC2214 测量模块、LCD 显示模块、蓝牙通信模块、对战判决模块。通过手机 APP 来选择系统需要执行的功能,抛弃了传统按键,从而免去其固定性、不可拓展性,让开发变得随心所欲。各模块之间的关联方式如图片 2 所示。
理论分析与计算
测量的基本原理
本系统手势识别的测量主要应用了LC谐振的基本原理。在FDC2214测量模块上载有LC谐振电路,由LC谐振驱动器产生谐振,如图片 3所示。当人体靠近铜板时,由于人体产生的干扰,将会改变该谐振的频率,而该频率又可以通过L和C来计算,这样就可以反推出由于人体靠近所带来的额外电容,如公式(1)所示。
数据处理方式
由于本系统在结构设计时,没有采用矩阵铜板的形式,而是将铜板布局成手的形状,因此在数据处理时,无需获得精密的数据,只需将数值进行低通滤波(滤除高频噪声)、叠加偏置(统一多通道的数据阈值),而后按阈值将数据进行非零即一的划分即可,具体处理如下:
(1)在滤波时,为了去除掉高频噪声,采用了软硬件结合的滤波方式,这里先介绍一下软件处理的方法,硬件处理见下一部分。
硬件电路设计
供电电路设计
考虑到时间成本以及电路较为简单,采用了洞洞板焊接的方式制作供电电路板,如图4所示。整体电路采用 12V 圆孔 DC 适配器进行供电,能够完全避免插错线导致的电路损坏。同时,由于电流较大的 LCD 屏为 5V 供电,因此将 5V 和 3V3 分成两路并联的形式,这样虽然会给 3V3 的稳压芯片带来额外的压降,从而导致芯片发热,但考虑到使用 3V3 的模块并没有很大电流,因此其发热不会非常严重。这样的接法大大降低了 LCD 屏幕在启动时产生的电流串扰导致的工作不稳定。
测量电路设计
在测量电路方面,并没有完全按照 TI 官网上的电路进行设计,而是将电路中的 0 欧电阻替换成 120 欧的磁珠(如图片 5中的 L2 和 L3)。由于磁珠对高频信号具有更高的阻抗,而对低频信号的阻抗更小,因此在替换后,芯片采集到的信号中高频噪声将会大大减小,因而大大降低了后续数据处理的难度。
软件说明
提高手势识别的鲁棒性
对于摆放成手的形状的铜板,想要识别出一个已经放置好的手势是很简单的,根据每块铜板是否有物体接触即可推断出当前手势。但是现实情况是要实现从没有放手到放好手并检测出手势这一流程。由于并不想在系统中添加额外的开关,以告知系统“我已经放好手,请开始检测”,而是想要实现用户随意的将手掌放上去之后,即可在 1 秒内检测出手势。具体实现如图6所示。
手掌处的铜板作为开始的标志位,当手掌接触到铜板时,所有手指部位的铜板开始采集,连续8次后,将求和结果以阈值的方式划分为不同的手势。这样一来,用户在放置手掌的时候就算不能一步到位的摆出要求手势,前后有一定的时间差,也可以被该判定方法所弥补,大大提高了系统的鲁棒性。
“多核”处理提高工作效率
由于本系统采用的主控为STM32F103,主频只有72MHz。同时,采用的屏幕为16位真彩色屏,分辨率为320x240。如果将运算和显示都放在主控里,将会大大增加主控的压力,导致屏幕显示卡顿以及运算速度缓慢。
为了消除这一影响,本系统采用了“多核”的处理方式,将LCD显示的任务交给了另一块芯片STM32H750。主控芯片F1在需要显示某一张图片的时候,通过串口向H7发送一个包,包内含有显示指定图片的信息;在计算器功能下,还有显示指定数字的信息。不同包头对应的含义如表格 1所示。
在显示计算公式时,由于需要用户输入一个字符就显示一个字符,因此在H7中,使用了队列的数据结构,将每次输入的字符储存在队列中,每次刷新屏幕时,根据入队的顺序,在光标处显示字符,每显示一个字符,光标移动一格,以准备显示下一个字符,直至队列尾部。主控F1在执行整体流程的时候,就不需要停下手头所有运算来显示一张图片,而是通过串口发几个字节即可实现显示。
计算器的实现
由于输入方式的限制,该系统中的计算器模式没有完全复刻完整的计算器,只保留了数字0~5、加、减、乘、等于、归零。由于没有括号、乘方、根号这些复杂的运算逻辑,该计算器只有两级的优先度:乘法最高、加减其次。
因此,本系统没有使用传统的堆栈方式来实现计算器,而是使用链表的方式。用户输入字符时,是以字节的形式输入的,在输入完毕按下“=”时,系统会把所有相邻的数字进行组合,以数字和运算符作为最小单元。然后,系统会遍历这一算式,寻找乘号并运算乘号两侧的数字,运算后,整个链表将会减少两个单元,因此系统会将后面的单元链接到运算后的结果之后,并将运算结果链接到前面的算式之后,这样即完成了一次乘法运算。当运算完所有的乘法后,再以同样的方式运算加减法,直至链表的长度减小至2,一个为最终运算结果,另一个为不参与运算的“=”,即可输出结果并显示到LCD上。运算流程如图片7所示。
可自由拓展的APP
本系统抛弃了集成在设备上的硬件按钮,取而代之的是使用蓝牙来接收控制指令,用安卓APP来控制整个系统。这样做的好处在于可以方便的修改所需按钮,而不用在需要改动的时候,重新焊接电路板,大大节省了开发时间。
整个界面如图片8所示,界面上方为校名及赛事名称;中间部分为DEBUG区域,在调试过程中,可以通过蓝牙接收并显示系统的一些信息,在最终的演示中,不打印任何信息;界面的下方为键盘矩阵,系统的所有功能都在此处进行操作。
演示视频及代码链接:https://pan.baidu.com/s/1VW8SXxrLdm90hrcCDc1dow
提取码:wy3t
设计图

BOM


评论