|
楼主
查看: 3495回复: 1
发表于 2018-9-11 09:01:09
只看该作者
硬件平台
在亚克力板下排列8块单面覆铜板形成一个可以覆盖全手的方形区域(经测试亚克力板和单面覆铜板的距离在0.5cm上下时读取容值最佳),把单面覆铜板用整齐的,互不干扰的连线接到两个并联的FDC2214的4个通道上,通过控制继电器的开断实现一路 IIC通信控制两个FDC2214采集电容值,通过降压模块实现单电源供电回路,在oled12864显示屏上显示模式以及要学习或者要判决的手势。
软件编程
我们的代码主要由三个模块组成,分别为fdc2214.c(实现容值检测功能),oled12864.c(通过IIC通信实现显示模式及手势),main.c(实现数据处理,电路控制,完成功能要求)。
相关算法
我们用STM32编写了图像处理的相关算法,通过容值求和取加权平均,差值判断以及阈值设定实现测得的数值归一化,最大程度减小因为人手的差异以及按压重量的差异带来的容值误差。
参赛感想
本次TI杯省赛是我们三人第一次配合参加比赛,比赛中,我们分工明确,一人主要负责代码,一人主要负责电路和测试记录数据,一人负责算法,查找资料与报告。比赛的过程中我们遇到了很多困难,从刚开始的显示问题到最后一次又一次更改算法,经验的不足导致我们花费了大量时间与精力,但是我们三人始终团结一心,没有出现过互相抱怨这样的情况,遇到问题我们共同想办法、查找资料寻求解决方法,团队氛围活泼而不失凝聚力,最终那些大大小小的问题都成功被我们一一解决。
我们作为大一新生,能力上确实有很多不足,但我们可以充分利用每个成员不同的优势,相互鼓励相互帮助,最终完成了本次比赛的手势识别题目,这次收获的二等奖给了我们继续做下去信心,相信只要我们团结一心,定会在来年的国赛上取得更好的成绩。
摘要
我们的作品手势识别装置,是竞赛组要求芯片FDC2214的一个实际应用,它可以通过对人手摆放处相应电容值的读取,差值梯度的计算以及记忆,根据人手的不同特征,实现基本的猜拳模式(石头剪刀布)和划拳模式(12345)的学习和判决,并通过oled12864屏进行显示。
我们采用了安放8块大小最合适单面覆铜板组成一个可以覆盖人手的方形区域,通过容值之和的加权平均实现面积归一化,通过不同手势覆盖面积的不同实现手势的准确判断。
作品设计与实现
一.方案选择
1.相关器件
STM32F103C8T6,FDC2214芯片*2,oled12864显示屏*1,单面覆铜板*8,继电器*1,导线若干。
2.方案选择
经过讨论,我们初步筛选出三种方案。
方案一:
用8块方形单面覆铜板拼成一个能够放下全手的方形区域,以面积值为度量,实现对手势的识别和判断。
优点:平台搭建简单,算法较容易实现,面积差异较大,判断准确。
缺点:由于代码运算量较大,我们选择了STM32F103系列单片机,其功耗相较于msp430系列单片机大了不少,导致偶尔系统不够稳定。
方案二:
在每个手指处安一片单面覆铜板,因为当没有手指放上时,电容初始值近似为0,从而可以把手放上后测出容值做成曲线图,通过曲线图的图形可以判断放上手指的个数以及手指的位置。
优点:因为有无手指时容值差距足够大,所以测得的曲线准确。
缺点:需要比对的情况有3^6之多,比对库太过庞大,执行效率慢。只通过手指位置和数量进行判断,导致能够判断的情况很局限,不利于进一步优化。
方案三:
利用2片FDC2214的8个通道,通过实验找出手放上时容值差距最大的8个位置,放上面积合理的单面覆铜板,通过测量这8个容值,并用差值梯度计算,比较,欧拉距离计算选择出归一化的值进行图像处理,实现准确的自主识别和判决。
优点:结果较为可靠,电路较为简单。
缺点:数据分析工作量相对很大,算法难度较大,对手势摆放位置要求高,容错率低。
经过综合比较方案的优缺点以及本组队员的综合能力,由于方案一结果更加准确,可以测量的手势更加多样,容错率最高,而只是在系统功耗上有些许不足,我们最终选择使用方案一来完成我们的手势识别装置。
二.理论基础
1.FDC2214工作原理:FDC2214是基于LC谐振电路原理的一个电容检测传感器。在芯片每个检测通道的输入端连接一个电感和电容,组成LC电路,被测电容传感端与LC电路相连接,将产生一个振荡频率,根据该频率值可计算出被测电容值。
2.Oled12864工作原理:oled12864使用IIC总线进行通信,通过IIC通信给oled12864写入要显示的指令即可进行显示。
3.图像处理基础:通过对容值之和的采集,实现手势面积的归一化,并通过与学习模式记忆值和设定阈值进行比对判决手势。
三.设计计算
1.硬件平台:在亚克力板下排列8块单面覆铜板形成一个可以覆盖全手的方形区域(经测试亚克力板和单面覆铜板的距离在0.5cm上下时读取容值最佳),把单面覆铜板用整齐的,互不干扰的连线接到两个并联的FDC2214的4个通道上,通过控制继电器的开断实现一路 IIC通信控制两个FDC2214采集电容值,通过降压模块实现单电源供电回路,在oled12864显示屏上显示模式以及要学习或者要判决的手势。
2.软件编程:我们的代码主要由三个模块组成,分别为fdc2214.c(实现容值检测功能),oled12864.c(通过IIC通信实现显示模式及手势),main.c(实现数据处理,电路控制,完成功能要求)。
3.相关算法:我们用STM32编写了图像处理的相关算法,通过容值求和取加权平均,差值判断以及阈值设定实现测得的数值归一化,最大程度减小因为人手的差异以及按压重量的差异带来的容值误差。
系统调试
一. 硬件平台
1. 问题
(1)8块单面覆铜板位置的摆放问题,单面覆铜板面积过大会导致精度降低,但如果面积做的过小又不足以完成测量,同样会导致精度不足以达到题目要求,同时还会导致对手势位置依赖过高,容错率低。
(2)两个FDC2214通道的测量问题,因为两个模块的地址相同,双路IIC通信于我们来说实现难度较大,担心时间不足以完成两路通信地址修改这一系列代码。
2.解决方案
(1)通过多次实验与数据的采集,出于对精度和容错率的考虑,我们选择了用8个大小适中的方块排列成一个大小刚好足以覆盖一个全手的方形区域,此法精度足以达到要求,并且并不依赖手势放置位置,容错率高。
(2)通过制作一个用继电器控制的开关电路,实现对两路FDC2214的顺序采样,经试验,采样速率能够达到指标,采样值精确不受电路影响,此法有效可行。
二.软件编程
此题主要在于软件编程,所以遇到的问题也多是软件编程。软件代码主要需要实现以下三个功能:FDC2214芯片编程实现容值的准确读取,oled12864IIC通信显示代码,以及电容计算比较代码。
1. 问题
(1) FDC2214测容值准确度以及稳定度的调节与优化。
(2) oled12864IIC通信时序,字符串传输和显示函数。
(3) 手势采集,学习,记忆以及判决模式准确匹配的相关算法的比较以及选择。
2. 解决方案
(1) 通过主要对FDC2214数据手册其性能,工作原理,通信模式以及各种注意事项的学习,通过软件IIC通信的方式实现对容值的采集,可靠度判断以及通道的自动切换。
(2) 根据IIC通信协议,通过对oled12864的学习研究,用msp430单片机IIC通信显示屏代码进行移植,重新进行IO口定义以及管脚配置,此处较为顺利。
(3) 通过查阅各种图像处理的算法以及多次的实验和数据记录,比对各种算法的难度、精确度、容错率以及工作性能和稳定性,我们最终决定采用容值求和再去加权平均来实现手势接触面积的归一化,并设定阈值进一步提高判决的准确性,通过多次测试以及微调,此算法难度适中,执行可靠,工作稳定,是为可行解决方式。
三.数据记录及处理
均值 标准差 RATIO threshold MAX MIN
石头 4.0575 0.547752 1 0.547752 4.411752 3.316248
剪刀 5.22375 0.481581 1 0.481581 5.995781 5.032619
布 8.83875 0.971448 1 0.971448 8.987648 7.044752
1 5.4775 0.503153 1 0.503153 5.553953 4.547647
2 5.22375 0.481581 1 0.481581 5.995781 5.032619
3 6.64875 0.462875 1 0.462875 6.927675 6.001925
4 7.92 0.562428 1 0.562428 7.921828 6.796972
5 8.83875 0.971448 1 0.971448 8.987648 7.044752
设计总结
在经过方案的比较选择,多组数据测试,以及长达一天的代码调试和精度的不断比对测量,我们终于大体完成了我们的系统,达到了指标要求。以下是我们的方案电路图以及代码流程图
二.主要子文件
1.FDC2214.C
(1)实现功能:
<1>准确读取8个电容值。
<2>实现通道的自动转换。
(2)实现方式:
<1>对FDC2214寄存器进行配置,设定间隔时间,稳定时间,频率,选择对应模式,配置相关通道。
<2>通过软件IIC通信实现容值的读取和输出。
<3>通过循环实现线路的自动切换。
2.OLED.C
(1)实现功能
<1>第一行显示相应状态(学习/训练)和相应模式(猜拳/划拳)。
<2>第二行显示工作时的相应指示,报错及一系列提示语。
<3>第三行显示相应手势(12345/剪刀石头布)。
(2)实现方式
<1>oled12864进行初始化,重点在于延时,管口配置以及清屏。
<2>软件IIC配置,通过选择正确通信地址实现向oled12864写命令/数据。
<3>通过oled12864字符串显示函数实现在指定坐标处显示一个指定字符。
参考文献
[1]fdc2214数据手册,http://www.findic.com/pdf/fdc2214evm-vQ0vbb0em.html。
[2]oled12864模块使用手册,
https://wenku.baidu.com/view/199ede2c55270722192ef7d2.html
[3]STM32C8T6Datasheet, https://www.alldatasheet.com/dat ... /STM32F103C8T6.html
[4]图像处理算法基础,
https://blog.csdn.net/chensanwa/article/details/78650073
[5]图像归一化,https://blog.csdn.net/u010555688/article/details/25551255
|
|