基于FDC2214的手势识别

1、本次题目来源于2018年全国电子设计大赛D题,要求实现对石头、剪刀、布以及数字12345的识别;同时在上述基础上实现对手势的学习。

2、硬件实现:

硬件主要采用STM32F103以及TI公司的FDC2214芯片,同时FDC2214芯片按照官方文档进行接线,其接线原理图如下:

其中CLKIN引脚为接地引脚;ADDR引脚需要外接上拉电阻;SD引脚需要外接下拉电阻;右侧为芯片外接测量数据输入端口。

同时SCL、SDA、VDD以及GND进行了接线处理,其具体接线如下:

实现对接线的VDD和GND之间的处理,实现和STM32f103之间的连接,实现对FDC2214芯片的供电和接地处理以及I2C通信的接口。

另外,对数据输入端子进行数据读入,加入LC稳定滤波,其接线原理如下:

3、软件实现,不多说,先贴上FDC2214配置代码:

#include "fdc2214.h"

#include "delay.h"

#include "led.h"

void FDC_IIC_Delay(void)

{

delay_us(2);

}

void FDC_GPIO_Init(void)

{

}

void FDC_IIC_Init(void)

{

GPIO_InitTypeDef  GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOC, &GPIO_InitStructure);

GPIO_SetBits(GPIOC,GPIO_Pin_4|GPIO_Pin_5);

}

void FDC_IIC_Start(void)

{

FDC_SDA_OUT();

FDC_IIC_SDA=1;

FDC_IIC_SCL=1;

FDC_IIC_Delay();

FDC_IIC_SDA=0;

FDC_IIC_Delay();

FDC_IIC_SCL=0;

}

void FDC_IIC_Stop(void)

{

FDC_SDA_OUT();

FDC_IIC_SCL=0;

FDC_IIC_SDA=0;

FDC_IIC_Delay();

FDC_IIC_SCL=1;

FDC_IIC_SDA=1;

FDC_IIC_Delay();

}

u8 FDC_IIC_Wait_Ack(void)

{

u8 ucErrTime=0;

FDC_SDA_IN();

FDC_IIC_SDA=1;FDC_IIC_Delay();

FDC_IIC_SCL=1;FDC_IIC_Delay();

while(FDC_READ_SDA)

{

ucErrTime++;

if(ucErrTime>250)

{

FDC_IIC_Stop();

return 1;

}

}

FDC_IIC_SCL=0;

return 0;

}

void FDC_IIC_Ack(void)

{

FDC_IIC_SCL=0;

FDC_SDA_OUT();

FDC_IIC_SDA=0;

FDC_IIC_Delay();

FDC_IIC_SCL=1;

FDC_IIC_Delay();

FDC_IIC_SCL=0;

}

void FDC_IIC_NAck(void)

{

FDC_IIC_SCL=0;

FDC_SDA_OUT();

FDC_IIC_SDA=1;

FDC_IIC_Delay();

FDC_IIC_SCL=1;

FDC_IIC_Delay();

FDC_IIC_SCL=0;

}

void FDC_IIC_Send_Byte(u8 txd)

{

u8 t;

FDC_SDA_OUT();

FDC_IIC_SCL=0;

for(t=0;t<8;t++)

{

FDC_IIC_SDA=(txd&0x80)>>7;

txd<<=1;

FDC_IIC_SCL=1;

FDC_IIC_Delay();

FDC_IIC_SCL=0;

FDC_IIC_Delay();

}

}

u8 FDC_IIC_Read_Byte(unsigned char ack)

{

unsigned char i,receive=0;

FDC_SDA_IN();

for(i=0;i<8;i++ )

{

FDC_IIC_SCL=0;

FDC_IIC_Delay();

FDC_IIC_SCL=1;

receive<<=1;

if(FDC_READ_SDA)receive++;

FDC_IIC_Delay();

}

if (!ack)

FDC_IIC_NAck();//·¢ËÍnACK

else

FDC_IIC_Ack(); //·¢ËÍACK

return receive;

}

u8 Set_FDC2214(u8 reg,u8 MSB,u8 LSB)

{

FDC_IIC_Start();

FDC_IIC_Send_Byte((FDC2214_ADDR<<1)|0);

if(FDC_IIC_Wait_Ack())

{

FDC_IIC_Stop();

return 1;

}

FDC_IIC_Send_Byte(reg);

FDC_IIC_Wait_Ack();

FDC_IIC_Send_Byte(MSB);

if(FDC_IIC_Wait_Ack())

{

FDC_IIC_Stop();

return 1;

}

FDC_IIC_Send_Byte(LSB);

if(FDC_IIC_Wait_Ack())

{

FDC_IIC_Stop();

return 1;

}

FDC_IIC_Stop();

return 0;

}

u16 FDC_Read(u8 reg)

{

u16 res;

FDC_IIC_Start();

FDC_IIC_Send_Byte((FDC2214_ADDR<<1)|0);

FDC_IIC_Wait_Ack();

FDC_IIC_Send_Byte(reg);

FDC_IIC_Wait_Ack();

FDC_IIC_Start();

FDC_IIC_Send_Byte((FDC2214_ADDR<<1)|1);

FDC_IIC_Wait_Ack();

res=FDC_IIC_Read_Byte(1)<<8;

res|=FDC_IIC_Read_Byte(0);

FDC_IIC_Stop();

return res;

}

u32 FCD2214_ReadCH(u8 index)

{

u32 result;

switch(index)

{

case 0:

result = FDC_Read(DATA_CH0)&0x0FFF;

result = (result<<16)|(FDC_Read(DATA_LSB_CH0));

break;

case 1:

result = FDC_Read(DATA_CH1)&0x0FFF;

result = (result<<16)|(FDC_Read(DATA_LSB_CH1));

break;

case 2:

result = FDC_Read(DATA_CH2)&0x0FFF;

result = (result<<16)|(FDC_Read(DATA_LSB_CH2));

break;

case 3:

result = FDC_Read(DATA_CH3)&0x0FFF;

result = (result<<16)|(FDC_Read(DATA_LSB_CH3));

break;

default:break;

}

result =result&0x0FFFFFFF;

return result;

}

u8 FDC2214_Init(void)

{

u16 res;

FDC_GPIO_Init();

FDC_IIC_Init();

res=FDC_Read(MANUFACTURER_ID);

if(res==0x5449)

{

Set_FDC2214(RCOUNT_CH0,0x34,0xFB);                  Set_FDC2214(RCOUNT_CH1,0x34,0xFB);

Set_FDC2214(RCOUNT_CH2,0x34,0xFB);

Set_FDC2214(RCOUNT_CH3,0x34,0xFB);

Set_FDC2214(SETTLECOUNT_CH0,0x00,0x1B);                               Set_FDC2214(SETTLECOUNT_CH1,0x00,0x1B);

Set_FDC2214(SETTLECOUNT_CH2,0x00,0x1B);

Set_FDC2214(SETTLECOUNT_CH3,0x00,0x1B);

Set_FDC2214(CLOCK_DIVIDERS_C_CH0,0x10,0x01);        Set_FDC2214(CLOCK_DIVIDERS_C_CH1,0x10,0x01);        Set_FDC2214(CLOCK_DIVIDERS_C_CH2,0x10,0x01);        Set_FDC2214(CLOCK_DIVIDERS_C_CH3,0x10,0x01);

Set_FDC2214(DRIVE_CURRENT_CH0,0x78,0x00);                            Set_FDC2214(DRIVE_CURRENT_CH1,0x78,0x00);

Set_FDC2214(DRIVE_CURRENT_CH2,0x78,0x00);

Set_FDC2214(DRIVE_CURRENT_CH3,0x78,0x00);

Set_FDC2214(ERROR_CONFIG,0x00,0x00);

Set_FDC2214(MUX_CONFIG,0xC2,0x0D);

Set_FDC2214(CONFIG,0x14,0x01);

}

else return 1;

return 0;

}

float Cap_Calculate(u8 index)

{

u32 Data_FDC;

Data_FDC = FCD2214_ReadCH(index);

return (Data_FDC);

}

上述为本次设计中较为核心的FDC2214传感器芯片用到的配置代码,其中包括对I2C通信的代码引脚配置、时序配置、数据读入读出、读取FDC2214对应通道数值的程序编写。

4、其中,自学习功能,本人使用每三次采集数据均值周边的正负20作为数据参考基准,,实现对手势的学习,增强自学习性的可以自己编写相关算法程序。

if(page_fl==22&&posi==6)

{

if( (data>n1_data[0]-20)&&(data<n1_data[0]+20) )

{

POINT_COLOR=BLACK;

LCD_ShowNum(190,400,1,1,24);

}

if( (data>n2_data[0]-20)&&(data<n2_data[0]+20) )

{

POINT_COLOR=BLACK;

LCD_ShowNum(190,400,2,1,24);

}

if( (data>n3_data[0]-20)&&(data<n3_data[0]+20) )

{

POINT_COLOR=BLACK;

LCD_ShowNum(190,400,3,1,24);

}

if( (data>n4_data[0]-20)&&(data<n4_data[0]+20) )

{

POINT_COLOR=BLACK;

LCD_ShowNum(190,400,4,1,24);

}

if( (data>n5_data[0]-20)&&(data<n5_data[0]+20) )

{

POINT_COLOR=BLACK;

LCD_ShowNum(190,400,5,1,24);

}

}

5、综上,为本次D题,此外还做了2018年E题方案和程序,有兴趣后续可了解学习,诸多不足,诸位见谅

­

转载于:https://www.cnblogs.com/zhuhongzhous/p/9364732.html

基于FDC2214的手势识别相关推荐

  1. TI杯基于FDC2214的手势识别设计(黑龙江省赛)

    省赛题目: 使用指定IC,完成对手势1,2,3,4,5,石头,剪刀,布的识别,详细的文本文件大家可以在网上搜一下. 多说一句,这个题目没什么难度,最锻炼人的就是当时读技术手册 前言及大概完成思路: 电 ...

  2. 基于FDC2214的手势检测系统

    项目要求   基于FDC2214电容检测模块的手势识别装置,装置具有两种模式,在判决模式下能对指定人员进行猜拳游戏和划拳游戏的判决.在训练模式下,对任意人员进行有限次训练之后,能正确进行上一模式中的手 ...

  3. 基于opencv的手势识别(HSV)控制鼠标

    基于opencv的手势识别和鼠标控制 opencv3.4.5和vs2015 新建工程->空项目->新建项 摄像头使用 VideoCapture capture;capture.open(0 ...

  4. 东南大学计算机视觉博士招生,基于计算机视觉的手势识别及人机交互技术的应用研究...

    基于计算机视觉的手势识别及人机交互技术的应用研究 [摘要]:手势交互具有自然.直观等优点,已成为人机交互领域中的重要部分与研究热点.手势交互技术可按输入设备分为多种类型,例如数据手套.加速传感器.触摸 ...

  5. 基于无线信号的手势识别研究现状调查

    摘要:进入21世纪以来,人机交互技术持续发展,手势识别是代表之一.2013年,华盛顿大学的研究人员提出了使用无线信号进行手势识别的方法,给传统的手势识别技术带来的一定的挑战,但是这一技术并不是很成熟, ...

  6. 基于YOLOv5的手势识别系统(含手势识别数据集+训练代码)

    基于YOLOv5的手势识别系统(含手势识别数据集+训练代码) 目录 基于YOLOv5的手势识别系统(含手势识别数据集+训练代码) 1. 前言 2. 手势识别的方法 (1)基于多目标检测的手势识别方法 ...

  7. 【毕业设计项目】基于单片机的手势识别设计与实现 - 物联网 嵌入式 stm32 c51

    文章目录 1 简介 2 实现效果 3 使用场景 4 参数说明 5 注意事项 6 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍一个学长做的单片机项目 基于单片机得手势识别系统 大家可用于 ...

  8. 基于OPENCV的手势识别技术

    基于OPENCV的手势识别技术 前言:   本篇博客主要介绍基于OPENCV的手势识别程序,代码为C++,OPENCV版本为OPENCV4会有较为详细的实现流程和源码,并且做到源码尽量简单,注释也自认 ...

  9. 基于STM32F1的手势识别PJ7602和测温报警MLX90614

    基于STM32F1的手势识别和测温报警 器件:我使用的是正点原子的STM32f103MiNi和手势识别模块PJ7602还有红外测温模块MLX90614 温度模块MLX9061 ![在这里插入图片描述] ...

最新文章

  1. c#版在pc端发起微信扫码支付
  2. 科幻电影里的超能力?那不就是并发嘛!
  3. linux的swap增加的二个办法
  4. 基线_电离层、对流层改正模型对基线解算的影响
  5. C++语言基础 —— STL —— 容器与迭代器 —— set 与 multiset
  6. 草稿pyqt控件简单了解
  7. Git 常用命令总结,掌握这些,轻松驾驭版本管理
  8. debian uefi legacy 区别_电脑硬盘格式有Legacy与UEFI,选择哪一个好?千万别选错了!...
  9. AcWing 1015. 摘花生 (DP)
  10. linux 大量文件 ls卡死,Linux下文件过多导致 ls 命令出现 arguments too long 的问题
  11. HAOI2018 反色游戏
  12. 全球及中国家具市场消费规模与运营能力状况分析报告2022版
  13. Python 数据科学手册
  14. word文档中标题跳到表格的下方-解决方法
  15. 二、C++反作弊对抗实战 (进阶篇 —— 4.遍历进程模块(暴力扫描整个内存找出被断链的))
  16. QGraphicsItem图元拖动绘制(二)
  17. 无货源淘宝开网店可靠吗?优势在哪里?前景怎样
  18. 输入框只允许输入数字字母下划线
  19. 最大公约数(Java)
  20. 高新技术企业认定申请通过后补贴

热门文章

  1. dubbo源码分析25 -- 序列化与反序列化
  2. 基于微信小程序的二手交易论文和答辩ppt
  3. 【错误处理】Azkaban安装失败 installation Failed.Error chunking
  4. 你知道什么是 短路与 和 短路非吗 ???
  5. Windows下com及word
  6. emplace 和 emplace_back
  7. 详解vue路由传参的三种方式
  8. 测试:bug的生命周期、bug的等级、如何描述一个bug
  9. 2023年软件测试职业发展趋势【附晋升路线】
  10. 微信公众号调起扫码功能