历史上的今天
返回首页

历史上的今天

今天是:2024年10月12日(星期六)

正在发生

2020年10月12日 | 单片机+FDC2214手势识别装置设计

2020-10-12 来源:51hei

随着时代的发展与科学技术的广泛应用,现代化科技化生活理念也越来越越多的被人们所接受,高科技为人们带来了很多方便,利用科技手段解决生活生产中的实际问题也就成了当今科技开发者们的共同话题。


本次设计实现手势识别装置,通过人手接近传感端引起电容的变化来判决手势代表含义。该项目基于FDC2214芯片以及KEIL5开发平台,利用18μH电感、22PF电容构成LC谐振电路,设计开发一套手势识别装置,该手势识别装置可实现的模式有:训练和判决。判决模式分别对划拳游戏、猜拳游戏的准确判决;训练模式下根据检测员在有限次的训练后能有效的在判决模式下指出相应手势。该项目灵活的运用电容检测传感器和 LC 谐振电路对频率的控制,为智能化的识别系统提供了全新的设计理念。


第一章:系统方案


1.1 系统总体构成

本次手势识别装置设计主要由IAP15W4K58S4最小系统板、FDC2214模块、OLED显示屏、测试所需极板组成系统总体构成实物图如图1-1


0.png?imageView2/2/w/550

图1-1 系统总体构成实物图

1.2 系统总体实现方案

手势识别装置可实现两种模式:判决模式和训练模式。判决模式下分为划拳游戏和猜拳游戏极,划拳游戏根据极板检测到不同的手势,然后由电容检测传感器和LC谐振电路产生相应的频率值,根据频率值计算出各个手势对应的电容值,最后在OLED显示屏上显示相应的比划“1”,“2”,“3”,“4”,“5”,同理在猜拳游戏下,根据不同的电容幅值判定出“石头”,“剪刀”,“布”三种结果。训练模式同样分为划拳训练和猜拳训练两种测试,在任意一种模式下进行不大于三次的训练后,切换到判决模式对刚才训练的结果进行判定,此上为本次设计总体设计方案。

1.3 方案理论分析与计算


根据电容和频率的有着密切的曲线关系,在LC谐振电路中当在谐振点之前

电容回随着频率的增加而减少,在谐振点之后电容回随着频率的增加而增加,根

           Z=(ESR+jwL-j/wC)                   (1-1)

据公式(1-1)计算各个手势所对应的容抗,相应的一些干扰是不能避免的由电容计算公式 C=εS/4πkd 得出电容不只是受外界磁场的干扰,而且受极板的面积、直径、极板间的电阻、电感同时受引线中的电阻等等一系列不可避免的干扰,在此我们忽略这些干扰利用公式(1-2),因为利用FDC2214四个通道同时进行测值,可以减少误差达到目标预期效果,进行的计算实现判决、训练和输赢模式。

                            F=1/C                          (1-2)                              

第二章:系统硬件设计

2.1 总体硬件框图

设计硬件主要由测试者在测试版上测试不同手势,经FDC2214模块检测传送给主控芯片IAP15W4K58S4单片机,最后通信给OLED显示结果,以此重复测试,框图如2-1

图2-1 总体框图

2.2 硬件设计  

手势识别系统主要采用 IAP15W4K58S4 单片机为主控芯片,其原理图如图2-2、PCB图如图2-3



图2-2 原理图



图2-3 PCB图

2.3 电容检测模块硬件设计

FDC2214 是基于 LC谐振电路原理的一个电容检测传感器。其基本原理如图2-4 所示,在芯片每个检测通道的输入端连接一个电感和电容,组成 LC电路, 被测电容传感端与 LC 电路相连接,将产生一个振荡频率,根据该频率值可计算出被测电容值。


图2-4 FDC2214模块电路图

2.4  单片机模块硬件设计

方案一:AT89S52单片机。AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。但是架构太简单,片上外设少,不适合本次使用。

方案二:STM32单片机。STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。STM32单片机程序都是模块化的,接口相对简单些,有一定的不足,比如串口中断标志位缺陷。

方案三:IAP15W4K58S4单片机(图2-5)。IAP15W4K58S4系列基于专为要求高性能、高速A/D转换、低成本、低功耗、片内有高达4KB的RAM数据存储空间、采用了增强型8051内核,比传统的8051速度快5~12倍。IAP15W4K58S4单片机程序都是模块化的,几乎包含了数据采集和控制中所需的所有单元模块,适合本次设计所需。

总结:综合比较上述几种方案,发现IAP15W4K58S4的性能最符合我们的题目控制要求,并且我们对IAP15W4K58S4单片机使用的经验,故决定采用方案三。

图2-5 IAP15W4K58S4单片机

  •    系统软件设计


3.1 软件总体设计


本次设计从大的角度观看分为两种模式:①判决模式、②训练模式;在电路接通后初始化成功,开始模式选择,对模式进行判决,假如选择一模式,进行判决模式,随机进入判决模式下的子模式:划拳和猜拳模式,在猜拳模式下判决“石头”、“剪刀”、“布”三种情况判决,在划拳模式下进行“1”、“2”、“3”、“4”、“5”五种情况判决,以上是选择模式一的环节;接下来选择模式二对系统进行训练,在训练模式下对其进行猜拳训练和划拳训练,对于猜拳训练不超过三次训练后进入判决模式下的猜拳验证,同理在划拳训练下对其进行不超过三次的训练,后回到模式一的划拳判别。以上就是本次手势识别装置总流程,具体流程图如图3-1

图3-1 流程图

3.2 电容检测模块软件设计

利用 FDC2214 的工作原理可实现手势接近和识别的功能,当人手接近该导体传感平面时,传感端的电容发生了变化,这就会导致 LC电路振荡频率的变化,从而反映出手势接近,以及手势的判定。如图3-2FDC2214核心程序


         

图3-2  FDC2214模块核心程序

3.3 单片机模块软件设计

IAP15W4K58S4单片机包含中央处理器、程序存储器、数据存储器、定时器I/O口、高速A/D转换、看门狗、超高速通信口1、2,1组高速同步串行口片内高精度R/C时钟和高可靠复位,拥有数据采集和控制中所需模块,在本次设计中运用此单片机再好不过。            

第四章:测试方案与测试结果

4.1测试方案

本次设计共实现四种功能猜拳判决、划拳判决、猜拳训练、划拳训练,在训练模式下对其进行不大于三次的手势训练,后跳入判决模式,进行对训练结果的检测。

对模式输出结果的判决,我们运用了 FDC2214 芯片四个通道,根据每种手势面积大小的不同,在 OLED 显示屏上将显示出面积换算后的值,进行多次实验测试(取不同大小的手掌和握拳方式)后取最大值、最小值的平均值,然后对每个通道取得的数值进行汇总,此时所得到一定的区间范围,这个范围代表一个手势的数值,测试时运用这个范围值对照测试员在 FDC2214 芯片四通道下输出的结果值来判断手势,由此可以准确测出测试人所展现的手势。

4.2 测试结果

4.2.1 题目一的系统测试结果

装置选择模式一工作在判决模式下,能对实验人员进行猜拳判决,给出不同的手势“石头”、“剪刀”和“布”检测出相应的频率值,计算出对应的电容范围对其进行准确的判别,对此每一次判决时间不超过 1 秒。测试结果如表4-1

表4-1 测试结果表

判决模式

猜拳游戏



测试项目

数据

时间(s)


通道1

通道2

通道3

通道4


石头

0~1

0~1

8~12

0~1

< 1

剪刀

1~3

1~3

8~12

0~1

< 1

4~6

4~6

9~13

1~3

< 1


4.2.2 题目二的系统测试结果

在题目一的测试结束后,需要将电路复位,重新选择装置模式一工作在判决模式下,对实验人员进行划拳判决,划拳包括“1”、“2”、“3”、“4”和“5”五种手势,每一次判决时间不超过1秒。测试结果如表4-2

表4-2 测试结果表

判决模式

划拳模式




测试项目

电容值

时间(s)


通道1

通道2

通道3

通道4


1

1~2

0~1

8~12

0~1

< 1

2

3~5

0~1

7~12

0~1

< 1

3

3~5

2~4

8~12

0~1

< 1

4

3~5

5~6

7~10

0~1

< 1

5

4~6

4~6

8~12

0~1

< 1






4.2.3 题目三的系统测试结果

经过模式一的测试,接下来装置选择模式二对其进行训练模式,在训练模式下首先选择猜拳训练,对任意测试者进行猜拳的手势训练,每种动作训练次数不大于 3 次,总的训练时间不大于 1 分钟;然后切换工作模式到模式一判决模式的猜拳游戏,对被训练的人员进行猜拳判决,要求每一次判决的时间不大于 1 秒。测试结果如表4-3

表4-3 测试结果表


训练项目

猜拳训练( <= 3次 )




测试项目

电容值

时间(s)

测试次数

石头

8~12

< 1

2

剪刀

3~12

< 1

2

9~13

< 1

2


4.2.4 题目四的系统测试结果


装置继续工作在模式二训练模式下,对任意测试者进行划拳的手势训练,每种动作训练次数同样不大于 3 次,总的训练时间不大于 2分钟;然后切换工作模式到模式一判决模式的划拳游戏,对被训练的人员进行划拳判决,要求每一次判决的时间不大于 1 秒。测试结果如表4-4

表4-4 测试结果表

训练项目

划拳游戏( <= 3次 )



测试项目

电容值

时间(s)

测试次数


1

2~12

< 1

3


2

7~12

< 1

3


3

4~12

< 1

3


4

3~10

< 1

3


5

9~13

< 1

3


4.2.5 输赢模式

在实现赛方指定要求功能后,我们外扩了一个输赢模式,在系统随机生成的一种手势与测试者的手势进行比较,比较结果有平局、赢、输三种结果。如表4-5


表4-5测试结果表

随机手势

测试者手势

石头

剪刀

石头

平局

剪刀

平局

平局




第五章:设计总结

在学校里我们学习到的知识和简单的动手实践,要转化成为社会的生产力还需要一个平台。全国大学生电子设计竞赛给我们提供了一个培养创新、协作和钻研精神的平台,是大学生展现自己、积累经验的舞台。            

培训到竞赛是一个漫长的过程,期间心态很重要,会遇到很多问题,比如:做训练时不懂的知识,硬件、软件调不出来,队员之间的矛盾,外界压力等,都需要我们去克服。队员多交流!交流不仅能促进队员们的学习,还能及时发现问题处理问题,利用一切可以提高自己能力的资源。
  对我们而言,知识上的收获重要,精神上的丰收更加可喜。挫折是一份财富,经历是一份拥有。这次电子设计大赛必将成为人生旅途上一个非常美好的回忆!

手势识别FDC2214的单片机源程序:

#ifndef __stc15f2k60s2_H__

#define __stc15f2k60s2_H__

#endif

#ifndef uint8

#define uint8    unsigned char

#endif

#ifndef uint16

#define uint16   unsigned int

#endif

#include

#include

#include             

#include

#include

sbit SCL=P1^3;                           

sbit SDA=P1^4;                           

float xdata temp1,temp2,temp3,temp4,aemp1,aemp2,aemp3,aemp4;

              unsigned char xdata buf1[2]="00";

              unsigned char xdata buf2[2]="00";

              unsigned char xdata buf3[2]="00";

              unsigned char xdata  buf4[2]="00";

uint8 dis[6];            

void Delay5us(void)

{

              _nop_();_nop_();_nop_();_nop_();

              _nop_();_nop_();_nop_();_nop_();

              _nop_();_nop_();_nop_();_nop_();

              _nop_();_nop_();_nop_();_nop_();

              _nop_();_nop_();_nop_();_nop_();

              _nop_();_nop_();_nop_();_nop_();

}

void delay_ms(unsigned int ms)

{                        

              unsigned int a;

              while(ms)

              {

                            a=1800;

                            while(a--);

                            ms--;

              }

              return;

}

void lcd_printf(uint8 *s,int temp_data)

{

              if(temp_data<0)

              {

                            temp_data=-temp_data;

                            *s='-';

              }

              else *s=' ';

              *++s =temp_data/10+0x30;

              temp_data=temp_data%10;     

              *++s =temp_data+0x30;              

}

void I2C_Start()

{

    SDA = 1;                  

    SCL = 1;                  

    Delay5us();              

    SDA = 0;                  

    Delay5us();               

    SCL = 0;                  

}

void I2C_Stop()

{

    SDA = 0;              

              SCL = 0;

              Delay5us();

    SCL = 1;                  

    Delay5us();               

    SDA = 1;                  

    //Delay5us();               

}

void I2C_SendACK(bit ack)

{

    SDA = ack;                 

    SCL = 1;                 

    Delay5us();               

    SCL = 0;                  

    Delay5us();              

}

bit I2C_RecvACK()

{

    SCL = 1;                  

    Delay5us();               

    CY = SDA;                  

    SCL = 0;                 

    Delay5us();               

    return CY;

}

void I2C_SendByte(uint8 dat)

{

    uint8 i;

推荐阅读

史海拾趣

AMS公司的发展小趣事

AMS(Austria Microsystems)公司是一家总部位于奥地利的半导体制造商,专注于开发和生产高性能的模拟半导体解决方案。以下是 AMS 公司发展的五个相关故事:

  1. 创立与早期阶段:AMS 公司成立于1981年,最初是一家从事晶圆制造的小型企业。公司创始人团队以其对半导体技术的深刻理解和创新能力,在短时间内取得了一定的成就。早期产品主要包括模拟集成电路(IC)和传感器,为医疗、汽车、工业等领域提供解决方案。

  2. 技术创新与产品扩展:随着市场需求的不断变化和技术的进步,AMS 公司不断进行技术创新,并扩展了产品线。公司致力于开发具有高性能、低功耗和小尺寸的模拟半导体产品,以满足智能手机、消费电子、工业自动化等领域的需求。公司的产品涵盖了光学传感器、环境传感器、声学传感器等多个领域。

  3. 全球化发展与市场拓展:AMS 公司通过不断拓展全球市场,加强与客户和合作伙伴的合作关系,实现了快速的业务增长。公司在欧洲、亚洲和美洲设立了多个销售办事处和生产基地,建立了完善的全球供应链和销售网络。公司的产品销售网络覆盖了全球范围,得到了国内外客户的广泛认可。

  4. 收购与合并:随着公司规模的扩大和市场竞争的加剧,AMS 公司通过收购和合并等方式不断强化自身实力。公司先后收购了一些技术领先的公司,扩大了产品线和市场份额。此举进一步提升了公司在模拟半导体领域的竞争优势,加速了公司的业务增长。

  5. 持续创新与未来展望:AMS 公司将继续致力于技术创新和产品研发,不断提升产品性能和品质水平。公司将关注新兴技术和市场趋势,积极布局未来的发展方向,包括人工智能、物联网、汽车电子等领域。同时,公司还将加强与客户和合作伙伴的合作,共同推动行业的发展和进步。

Anixter Inc公司的发展小趣事

Anixter Inc 是一家全球性的供应链解决方案提供商,以下是该公司发展的相关故事:

  1. 公司成立与初期发展:Anixter Inc 成立于 1957 年,总部位于美国伊利诺伊州格伦维尔回。最初,公司主要从事电线电缆的销售和分销。随着时间的推移,Anixter 不断扩大业务范围,逐步涉足网络设备、安全解决方案、电子元器件等领域。

  2. 业务拓展与国际化:随着市场需求的变化和全球化的趋势,Anixter 不断拓展业务,并加速国际化进程。公司在全球范围内建立了广泛的分销网络和供应链体系,在北美、欧洲、亚洲和拉丁美洲等地区设立了办事处、仓库和物流中心,以更好地满足客户的需求。

  3. 技术创新与解决方案提供:Anixter 不断注重技术创新和解决方案提供,与各种供应商合作,推出了多种先进的产品和服务。公司致力于为客户提供全方位的供应链解决方案,包括设计、采购、仓储、配送和技术支持等,帮助客户提高效率、降低成本并增强竞争力。

  4. 收购与合并:为了加速业务发展和扩大市场份额,Anixter 进行了一系列收购和合并活动。通过收购具有特定技术或地区优势的公司,Anixter 不仅增强了自身的竞争实力,还拓展了业务领域和市场覆盖范围。

  5. 可持续发展与未来展望:Anixter 积极响应可持续发展的呼声,致力于推动环保和社会责任的实践。公司在供应链管理、能源管理和环境保护等方面持续改进,致力于减少碳排放、资源浪费和环境污染。未来,Anixter 将继续秉承技术创新和客户导向的理念,不断适应市场变化和挑战,保持行业领先地位,并为客户和股东创造持续增长的价值。

Control Sciences Inc公司的发展小趣事

Control Sciences Inc深知人才是企业发展的核心。因此,公司一直注重人才培养和引进。公司不仅设立了专门的研发机构,吸引了大批优秀的科研人才,还定期组织员工培训和交流活动,提高团队的整体素质。这些措施使得Control Sciences Inc的团队越来越强大,为公司的发展提供了有力的人才保障。

DELTA公司的发展小趣事

随着人们生活水平的提高和环保意识的增强,Delta公司提出了“智能绿生活”战略,致力于为个人、家庭和企业带来更环保健康的生活型态。在这一战略指导下,Delta推出了一系列视讯显像系统、网络通信系统、LED照明、智能语音系统及云计算等产品。这些产品不仅具有高效、节能的特点,还为用户提供了更加便捷、智能的生活体验。

BERNSTEIN公司的发展小趣事

在BERNSTEIN公司的发展过程中,家族传承和企业管理一直是一个重要的主题。Hans-Joachim Bernstein作为Hans Bernstein的长子,在塑造公司的成功故事中发挥了重要作用。在他的管理下,“SpezialFabrik für Schaltkontakte”公司发展成为当今在国际上活跃的技术集团。这家家族企业现已进入第三代,Nicole和Achim Bernstein作为新一代领导人,继续传承着家族的优良传统和企业文化,推动着公司的持续发展。

Component General Inc公司的发展小趣事

Component General Inc公司的创立,标志着电子行业中一颗新星的升起。自XXXX年成立以来,公司始终致力于射频/微波设计领域的研发与生产。起初,公司只有几名创始人和一些基础的研发设备,但他们凭借着对技术的热情和执着,成功地开发出了首款高功率电阻器,这为公司后续的发展奠定了坚实的基础。

问答坊 | AI 解惑

请教在路测量电阻

我在电路板上焊了个15K的贴片电阻,电路运行一段时间后,在短电测量该电阻时,发现该电阻值变为3.6K了,不知道是怎么回事,有些电阻值是对的,可有些出现了很大的偏差,不知道是不是在路测量不准确啊…

查看全部问答>

一个电子工程师的经验之谈!

这是“工控论坛”中的一个精彩帖子,是版主“totopper ”的帖子,推荐给“单片机”论坛的朋友们看一看! 一个电子工程师的经验之谈 “工程师是科学家;工程师是艺术家;工程师也是思想家。”一位伟大的工程师曾经提出过这样的一段感言。不错,工 ...…

查看全部问答>

ARM嵌入式系统设计基础教程课件

ARM嵌入式系统设计基础教程课件…

查看全部问答>

使用CCS进行DSP编程.rar

使用CCS进行DSP编程.rar 三个pdf文件,主要是讲CCS的…

查看全部问答>

用vs2005的.net compact framework2.0开发Wince程序的问题,急!

我用vs2005开发的wince项目,在pc机上可以运行,但放到开发板上之后运行程序则出现Not Supported Exception,我使用了泛型类List,这个类在mscorlib.dll库中,但设备的windows目录下没有这个库,不知道是为什么,裁剪系统时已经加入了.net 2.0的支 ...…

查看全部问答>

请教关于evc中sizeof()函数的问题

大哥大姐们好!小弟这儿有礼了!一定给分!   我在写一个读取串口的程序,但是在其中的sizeof()函数中遇到了问题。当要向串口写数据时,我使用了函数   fWriteStat = WriteFile(hCom, lpBuf, sizeof(lpBuf),&dwHaveNumWritten,NULL);    ...…

查看全部问答>

基于SEED-DIM3517的平板电脑

基于SEED-DIM3517的平板电脑…

查看全部问答>

STM8S关于Vcap问题

STM8S关于Vcap问题: 如果我用的是3,3V系统,那我在Vcap上可以悬空或者把Vcap脚直接接到电源上吗?…

查看全部问答>

有什么办法能判断USART正在发送一个字节?

我说的“正在发送”是指TXD引脚上正在向外移位数据。 状态寄存器里好像没有哪个位能代表这种状态。…

查看全部问答>

问局部变量的地址分配问题

我用IAR3。2,F149的芯片,编程时在定时中断中定义了一个局部变量,硬件仿真时在WATCH窗口中观察此变量有一个初值102(我定义时没复初值),变量地址(LOCATION)被分配为0X9,有时又被分配为0XB,请问高手这个0X9或0XB是指哪的地址,我在MEMORY窗口中 ...…

查看全部问答>