FDC2214手勢識別裝置 摘要
隨著時代的發展與科學技術的廣泛應用,現代化科技化生活理念也越來越越多的被人們所接受,高科技為人們帶來了很多方便,利用科技手段解決生活生產中的實際問題也就成了當今科技開發者們的共同話題。
本次設計實現手勢識別裝置,通過人手接近傳感端引起電容的變化來判決手勢代表含義。該項目基于FDC2214芯片以及KEIL5開發平臺,利用18μH電感、22PF電容構成LC諧振電路,設計開發一套手勢識別裝置,該手勢識別裝置可實現的模式有:訓練和判決。判決模式分別對劃拳游戲、猜拳游戲的準確判決;訓練模式下根據檢測員在有限次的訓練后能有效的在判決模式下指出相應手勢。該項目靈活的運用電容檢測傳感器和 LC 諧振電路對頻率的控制,為智能化的識別系統提供了全新的設計理念。
目錄
第一章 系統方案3
11 系統總體構成3
12 系統總體實現方案3
13 方案理論分析與計算4
第二章 系統硬件設計5
21 系統總體硬件結構5
22 系統總體硬件設計5
23 電容檢測模塊硬件設計6
24 單片機模塊硬件設計7
第三章 系統軟件設計8
31 系統總體軟件設計8
32 電容檢測模塊軟件設計9
33 單片機模塊軟件設計9
第四章 測試方案與測試結果10
41 測試方案10
42 測試結果10
421 題目一的系統測試結果10
422 題目二的系統測試結果11
423 題目三的系統測試結果12
424 題目四的系統測試結果12
425 新增輸贏模式測試結果13
第五章 總結14參考文獻15
附錄 手勢識別主程序16
第一章:系統方案
1.1 系統總體構成 本次手勢識別裝置設計主要由IAP15W4K58S4最小系統板、FDC2214模塊、OLED顯示屏、測試所需極板組成系統總體構成實物圖如圖1-1
0.png (200 KB, 下載次數: 53)
下載附件
2018-8-2 16:20 上傳
圖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 測試結果表
4.2.2 題目二的系統測試結果 在題目一的測試結束后,需要將電路復位,重新選擇裝置模式一工作在判決模式下,對實驗人員進行劃拳判決,劃拳包括“1”、“2”、“3”、“4”和“5”五種手勢,每一次判決時間不超過1秒。測試結果如表4-2 表4-2 測試結果表
4.2.3 題目三的系統測試結果 經過模式一的測試,接下來裝置選擇模式二對其進行訓練模式,在訓練模式下首先選擇猜拳訓練,對任意測試者進行猜拳的手勢訓練,每種動作訓練次數不大于 3 次,總的訓練時間不大于 1 分鐘;然后切換工作模式到模式一判決模式的猜拳游戲,對被訓練的人員進行猜拳判決,要求每一次判決的時間不大于 1 秒。測試結果如表4-3 表4-3 測試結果表
4.2.4 題目四的系統測試結果
裝置繼續工作在模式二訓練模式下,對任意測試者進行劃拳的手勢訓練,每種動作訓練次數同樣不大于 3 次,總的訓練時間不大于 2分鐘;然后切換工作模式到模式一判決模式的劃拳游戲,對被訓練的人員進行劃拳判決,要求每一次判決的時間不大于 1 秒。測試結果如表4-4 表4-4 測試結果表 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 <stc15f2k60s2.h>
- #include <string.h>
- #include <intrins.h>
- #include <math.h>
- #include <stdio.h>
- 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;
- for (i=0; i<8; i++)
- {
- dat <<= 1;
- SDA = CY;
- SCL = 1;
- Delay5us();
- SCL = 0;
- Delay5us();
- }
- I2C_RecvACK();
- }
- uint8 I2C_RecvByte()
- {
- uint8 i;
- uint8 dat = 0;
- SDA = 1;
- for (i=0; i<8; i++)
- {
- dat <<= 1;
- SCL = 1;
- Delay5us();
- dat |= SDA;
- SCL = 0;
- Delay5us();
- }
- return dat;
- }
- void WriteRegfdc2214(unsigned char add,unsigned int value)
- {
- I2C_Start();
- I2C_SendByte(0X54);
- I2C_SendByte(add);
- I2C_SendByte(value>>8);
- I2C_SendByte(value&0xff);
- I2C_Stop();
- delay_ms(10);
- }
- unsigned int ReadRegfdc2214(unsigned char add)
- {
- unsigned int status;
- unsigned int a,b;
- I2C_Start();
- I2C_SendByte(0X54);
- I2C_SendByte(add);
- I2C_Start();
- I2C_SendByte(0X55);
-
- a=I2C_RecvByte();
- I2C_SendACK(0);
- b=I2C_RecvByte();
- I2C_SendACK(1);
- status=(a<<8)+b;
- I2C_Stop();
-
- return (status);
- }
- void InitSinglefdc2214(void)
- {
- WriteRegfdc2214(0x08,0x0000);
-
- WriteRegfdc2214(0x10,0x0064);
-
-
- WriteRegfdc2214(0x14,0x2001);
- // LDC_Write_Reg(0x0C,0x0F00);
- WriteRegfdc2214(0x19,0x0000);
-
- WriteRegfdc2214(0x1B,0x020D);
- WriteRegfdc2214(0x1E,0xF800);
- WriteRegfdc2214(0x1A,0x1C81);
- }
- void InitMultifdc2214(void)
- {
- WriteRegfdc2214(0x08,0x34FB);
- WriteRegfdc2214(0x09,0x34FB);
- WriteRegfdc2214(0x0A,0x34ff);
- WriteRegfdc2214(0x0B,0x34ff);
-
- WriteRegfdc2214(0x10,0x001B);
- WriteRegfdc2214(0x11,0x001B);
- WriteRegfdc2214(0x12,0x001B);
- WriteRegfdc2214(0x13,0x001B);
-
- WriteRegfdc2214(0x14,0x2002);
- WriteRegfdc2214(0x15,0x2002);
- WriteRegfdc2214(0x16,0x2002);
- WriteRegfdc2214(0x17,0x2002);
-
- WriteRegfdc2214(0x1E,0x7800);
- WriteRegfdc2214(0x1F,0x7800);
- WriteRegfdc2214(0x20,0x7800);
- WriteRegfdc2214(0x21,0x7800);
-
- WriteRegfdc2214(0x0C,0x0000);
- WriteRegfdc2214(0x0D,0x0000);
- WriteRegfdc2214(0x0E,0x0000);
- WriteRegfdc2214(0x0F,0x0000);
-
-
- WriteRegfdc2214(0x19,0x0000);
- WriteRegfdc2214(0x1B,0xC20D);
-
- // LDC_Write_Reg(0x1A,0x1401);
- WriteRegfdc2214(0x1A,0x1401);
- }
復制代碼
完整的Word格式完整論文51黑下載地址(里面有51單片機和stm32 2個實現方案):
http://www.zg4o1577.cn/bbs/dpj-130703-1.html
|