历经四天三夜,经过对题目的分析,我们选择了D题,。针对手势识别装置的特点和需求,同时结合模块化的设计理念,设计实现了以STM32F103C8T6单片机最小系统为核心的手势识别装置。硬件环境搭建好之后,进行软件部分数据调试。系统的工作过程为:首先通过按键设定好工作模式,然后将FDC2214检测的电容值信息传输给控制器。控制器对检测的电容值进行判决后,结合手势动作特征方面进行训练从而检测出测试者的手势。最终利用OLED显示屏显示识别结果,并实时语音播报。通过此次比赛,我们团队对FDC2214芯片、STM32、语音模块的使用原理及使用方法都有了较深入的学习,解决问题的能力得到了提高,受益匪浅。
手势识别装置(D 题) 摘要
针对手势识别装置的特点和需求,同时结合模块化的设计理念,设计实现了以 STM32F103C8T6 单片机最小系统为核心的手势识别装置。运用统计分组法得出电容传感器(FDC2214)检测的手势与金属极板间的电容值与不同手势之间的映射关系,结合端点检测(ED)及动态时间规整(DTW)算法建立手势模板。其工作过程为:首先通过按键设定好工作模式,然后将 FDC2214 检测的电容值信息传输给控制器。控制器对检测的电容值进行判决后,结合手势动作特征,分别从参考模板、失真度和最优路径 3 方面进行训练从而检测出测试者的手势。最终利用 OLED 显示屏显示识别结果,并实时语音播报。经实验测试,所提出的控制方法有效的提高了识别过程的实时性和精确性,缩短了学习时间。 【关键词】STM32;ED-DTW 算法;FDC2214;手势识别;统计分组法;
一、 引言 1. 设计任务与要求 (1)对参赛者指定人员进行手势判决,在猜拳判决模式下给出手势“石头”、“剪刀”和“布”的准确判决,在划拳判决模式下给出手势“1”、“2”、“3”、“4”和“5”的准确判决,每一次判决的时间不大于 1 秒。 (2) 装置工作在训练模式下,对任意测试者进行猜拳和划拳的手势训练,每种动作训练次数不大于 3 次,要求猜拳训练时间不大于 1 分钟,划拳训练时间不大于 2 分钟;然后切换工作模式到判决模式,对被训练的人员进行猜拳及划拳判决,每一次判决的时间不大于 1 秒。 (3) 发挥功能:在猜拳判决模式下,可以将测试者的三种手势在 OLED 显示屏上以图片的形式显示出来;在猜拳对决模式下,可实现两玩家猜拳对决并将对决结果显示并语音播报。
2. 设计思路及特点 (1)系统模块化设计,思路清晰,机械结构稳定,便于查错修改。 (2)手势识别结果由 OLED 显示并实时语音播报,结果准确。 (3)对不同手势的电容值采取统计分组训练方法,训练结果十分精确。
二、 方案设计 1. 总体方案 系统采用模块化设计,应包括主控芯片 STM32F103C8,电容传感器 FDC2214 模块,按键模块(矩阵键盘),显示模块(OLED 显示屏),语音播报模块以及电源转换模块。通过模块间的数据传输与处理,进行手势的识别、显示及语音播报。测试部分的设计采用亚克力板隔开的金属极板的结构,测试者将其手势按压在亚克力板(亚克力板距极板 1cm,极板面积稍大于手掌)上即可完成判决。最终,本设计添加了双人猜拳对决的附加模式,系统总体结构框图如图 1 所示。
图 1 系统结构框图
2. 方案论证 (1) 主控芯片 方案一:采用Arduino mega2560核心板作为主控,其主控芯片为AVR单片机,其操作过程相比于其他单片机较为简单,且引脚资源丰富。但对于本系统,需处理浮点数,故其 8 位处理器的性能很难满足本设计的要求。 方案二:采用STM32f103C8T6作为主控芯片。意法半导体(ST)公司出品的STM32f103C8T6,其内核是 Cortex-M3 是 32 位的处理器,该款单片机内部资源丰富,运算和处理速度远高于 8 位单片机,可以满足本设计的使用要求。 综合以上两种方案,选择方案二。
(2) 显示模块 方案一:采用LCD1602显示屏,LCD1602是一种工业字符型液晶,显示字母和数字比较方便,控制简单,成本较低。但它占用了较多的引脚资源,且不具备显示汉字和图形的功能,不适合应用于本设计。 方案二:采用OLED显示屏,OLED显示屏全称为:有机电激发光二极管,它具有对比度高、厚度薄、视角广、反应速度快等优点,可以清晰的显示汉字和图像。同时仅使用七个引脚控制,占用引脚资源少。 综合以上两种方案,选择方案二。
(3) 按键模块 方案一:采用独立按键,独立按键之间相互不干扰,设计程序时更加简单。但本设计需要较多的按键开关,也考虑到训练模式下需要指定手势进行训练,所需的独立按键更多,占用的 I/O 口资源也更多,会在设计中带来诸多不便。 方案二:采用矩阵键盘。矩阵键盘每一个键都对应了一个数字,通过数字按键设定工作模式,输入变量时不易出错,使用方便,且外观更人性化。同时矩阵键盘占用单片机的 I/O 更少,极大地节约了单片机的 I/O 资源。 综合以上两种方案,选择方案二。
3.理论分析与计算(1)电容值的检测与计算
电容值可由 FDC2214 传感器频率计算,计算公式如下:
(1)
(2)
将通道的引用计数设置为转换时间,转换时间的预算为:
(3)
4. 电路与程序设计(1) 电路设计 ① 主控模块 本系统使用基于 STM32F103C8T6 芯片的最小系统板作为主控模块,除芯片外,仅包含 USB 接口、晶振、复位按键、SDW 调试接口、电源指示灯几个部分,其自带电源稳压芯片,方便进行电平转换。其原理图见附图 7。
② 电源模块 本设计采用“火牛电源+电源转换模块”的方式为整个系统供电。系统总体供电方案如图 2 所示。
图 2 系统电源供电方案
③ FDC2214 模块 传感器模块选用题目指定的 FDC2214 电容传感器,FDC2214 是基于 LC 谐振电路原理的一个电容检测传感器。其大致原理是芯片每个检测通道的输入端连接一个电感和电容,组成 LC 电路,被测电容传感端与 LC 电路相连接,将产生一个振荡频率,根据该频率值可计算出被测电容值。其电路原理图见附图 8。
(2) 程序设计 ① 程序流程图
图 3 系统程序流程图
本设计采用任务结构化的模式进行编程,在系统初始化之后,使用薄膜矩阵键盘选择不同的工作模式,控制器就会执行程序并且在程序中不断循环直到检测到完成了任务要求后才会退出循环,完成一次识别过程,识别结果实时显示并语音播报,程序流程图如图 3 所示。
② 算法实现 基于 ED-DTW 算法进行手势动作训练与识别,先利用 FDC2214 模块检测到的手势所对应电容的值,再采用 DTW 算法对手势动作进行模板匹配和结合手势动作特征分别从参考模板、失真度和最优路径 3 方面进行训练。根据匹配规则最终识别出手势动作。例如对于手势动作“石头”,先组织试验对象多次做动作“布”以获得样本集,再计算每 2 个样本间的电容的阈值,对样本间阈值小的样本集做平均处理,得到互相之间阈值较大的的样本子集。保留该样本子集作为动作“布”的参考模板集。同理依次建立所有手势动作的参考模板集。
三、 设计实现 在设计过程中,我们出现了诸多问题,主要总结为以下三部分: 1. 问题一: (1) 问题:OLED清屏刷新速度太快,显示的结果一直跳动。 (2) 解决方案:不采用直接清屏,利用局部清屏更新原始数据。 (3) 修改方案:在软件中优化OLED屏幕刷新算法,利用局部更新代替大面积清屏,使画面柔和。 (4) 说明:改善过后,OLED上字符变化柔和,不会产生强烈撕裂感与跳动感。
2. 问题二: (1) 问题:当手势缓慢放至亚克力板时,总是先检测到一个“较小”的结果,然后在跳变回正常结果(如:在“石头”未紧贴至亚克力板时,先显示了“剪刀”,紧贴过后才能正常显示)。 (2) 解决方案:显示其他结果说明判断不稳定,等系统判断稳定再显示结果。(3) 修改方案:软件设置状态标志位,当发现数据变化不进行数据更新,待稳定后再显示结果,类似按键消抖。经过实验,状态标志以 15 次为周期效果稳定,且检测时间也满足要求。 (4) 说明:改进之后,在判决结果的显示上有着毫秒级的延时,但可以稳定的显示出我们所测的手势,在符合要求的基础上,使测试结果达到更稳定的状态。
3. 问题三: (1) 问题:采用简单的均值分组法确定阈值的训练效果较差。 (2) 解决方案:对记录的数据进行分析,发现设置的测试高度下,传感器对给定手势区分度明显,利用极值分组法对采集数据进行判断,并确定阈值。 (3) 修改方案:在软件中设置数组,对采集的新数据与旧数据进行判断,在特定手势训练下将得到的传感最大值作为阈值并存储在数组中。 (4) 说明:改进之后可以实现实时更新阈值,且只占用两个指令周期,大大提升了训练速度,且区分度也得到明显提升。
四、 结果测试 可下载附件查看详细结果测试
五、 结论 本设计已经能够完成题目所有要求,且在要求的环境下,测试结果非常稳定。在系统设计中,力求硬件线路简单,充分发挥软件编程灵活的特点,来满足系统设计的要求。因为时间有限,该系统还有值得修改的地方;比如对此系统来讲,统计分组结果不够完美,偶尔会存在数据波动,系统电路工作不够稳定等。 在测试的过程中,我们遇到了许多问题,在四天三夜的比赛中,由于我们测试的疏忽导致电源转换模块烧毁,从而使所有模块无法工作,我们连夜制作新的电源模块,才顺利完成该系统的设计。通过这次比赛,队员们都体会到了团结的重要性。本次大赛也锻炼了大家的实践能力,让大家得到了一次宝贵的经验。
|