FDC2214手勢識別裝置 摘要
隨著時代的發(fā)展與科學(xué)技術(shù)的廣泛應(yīng)用,現(xiàn)代化科技化生活理念也越來越越多的被人們所接受,高科技為人們帶來了很多方便,利用科技手段解決生活生產(chǎn)中的實際問題也就成了當(dāng)今科技開發(fā)者們的共同話題。
本次設(shè)計實現(xiàn)手勢識別裝置,通過人手接近傳感端引起電容的變化來判決手勢代表含義。該項目基于FDC2214芯片以及KEIL5開發(fā)平臺,利用18μH電感、22PF電容構(gòu)成LC諧振電路,設(shè)計開發(fā)一套手勢識別裝置,該手勢識別裝置可實現(xiàn)的模式有:訓(xùn)練和判決。判決模式分別對劃拳游戲、猜拳游戲的準(zhǔn)確判決;訓(xùn)練模式下根據(jù)檢測員在有限次的訓(xùn)練后能有效的在判決模式下指出相應(yīng)手勢。該項目靈活的運用電容檢測傳感器和 LC 諧振電路對頻率的控制,為智能化的識別系統(tǒng)提供了全新的設(shè)計理念。
目錄
第一章 系統(tǒng)方案3
11 系統(tǒng)總體構(gòu)成3
12 系統(tǒng)總體實現(xiàn)方案3
13 方案理論分析與計算4
第二章 系統(tǒng)硬件設(shè)計5
21 系統(tǒng)總體硬件結(jié)構(gòu)5
22 系統(tǒng)總體硬件設(shè)計5
23 電容檢測模塊硬件設(shè)計6
24 單片機模塊硬件設(shè)計7
第三章 系統(tǒng)軟件設(shè)計8
31 系統(tǒng)總體軟件設(shè)計8
32 電容檢測模塊軟件設(shè)計9
33 單片機模塊軟件設(shè)計9
第四章 測試方案與測試結(jié)果10
41 測試方案10
42 測試結(jié)果10
421 題目一的系統(tǒng)測試結(jié)果10
422 題目二的系統(tǒng)測試結(jié)果11
423 題目三的系統(tǒng)測試結(jié)果12
424 題目四的系統(tǒng)測試結(jié)果12
425 新增輸贏模式測試結(jié)果13
第五章 總結(jié)14參考文獻15
附錄 手勢識別主程序16
第一章:系統(tǒng)方案
1.1 系統(tǒng)總體構(gòu)成 本次手勢識別裝置設(shè)計主要由IAP15W4K58S4最小系統(tǒng)板、FDC2214模塊、OLED顯示屏、測試所需極板組成系統(tǒng)總體構(gòu)成實物圖如圖1-1
圖1-1 系統(tǒng)總體構(gòu)成實物圖 1.2 系統(tǒng)總體實現(xiàn)方案 手勢識別裝置可實現(xiàn)兩種模式:判決模式和訓(xùn)練模式。判決模式下分為劃拳游戲和猜拳游戲極,劃拳游戲根據(jù)極板檢測到不同的手勢,然后由電容檢測傳感器和LC諧振電路產(chǎn)生相應(yīng)的頻率值,根據(jù)頻率值計算出各個手勢對應(yīng)的電容值,最后在OLED顯示屏上顯示相應(yīng)的比劃“1”,“2”,“3”,“4”,“5”,同理在猜拳游戲下,根據(jù)不同的電容幅值判定出“石頭”,“剪刀”,“布”三種結(jié)果。訓(xùn)練模式同樣分為劃拳訓(xùn)練和猜拳訓(xùn)練兩種測試,在任意一種模式下進行不大于三次的訓(xùn)練后,切換到判決模式對剛才訓(xùn)練的結(jié)果進行判定,此上為本次設(shè)計總體設(shè)計方案。 1.3 方案理論分析與計算
根據(jù)電容和頻率的有著密切的曲線關(guān)系,在LC諧振電路中當(dāng)在諧振點之前 電容回隨著頻率的增加而減少,在諧振點之后電容回隨著頻率的增加而增加,根 Z=(ESR+jwL-j/wC) (1-1) 據(jù)公式(1-1)計算各個手勢所對應(yīng)的容抗,相應(yīng)的一些干擾是不能避免的由電容計算公式 C=εS/4πkd 得出電容不只是受外界磁場的干擾,而且受極板的面積、直徑、極板間的電阻、電感同時受引線中的電阻等等一系列不可避免的干擾,在此我們忽略這些干擾利用公式(1-2),因為利用FDC2214四個通道同時進行測值,可以減少誤差達到目標(biāo)預(yù)期效果,進行的計算實現(xiàn)判決、訓(xùn)練和輸贏模式。 F=1/C (1-2) 第二章:系統(tǒng)硬件設(shè)計 2.1 總體硬件框圖 設(shè)計硬件主要由測試者在測試版上測試不同手勢,經(jīng)FDC2214模塊檢測傳送給主控芯片IAP15W4K58S4單片機,最后通信給OLED顯示結(jié)果,以此重復(fù)測試,框圖如2-1 圖2-1 總體框圖 2.2 硬件設(shè)計 手勢識別系統(tǒng)主要采用 IAP15W4K58S4 單片機為主控芯片,其原理圖如圖2-2、PCB圖如圖2-3
圖2-2 原理圖
圖2-3 PCB圖 2.3 電容檢測模塊硬件設(shè)計 FDC2214 是基于 LC諧振電路原理的一個電容檢測傳感器。其基本原理如圖2-4 所示,在芯片每個檢測通道的輸入端連接一個電感和電容,組成 LC電路, 被測電容傳感端與 LC 電路相連接,將產(chǎn)生一個振蕩頻率,根據(jù)該頻率值可計算出被測電容值。
圖2-4 FDC2214模塊電路圖 2.4 單片機模塊硬件設(shè)計 方案一:AT89S52單片機。AT89S52 是一種低功耗、高性能CMOS8位微控制器,具有8K 在系統(tǒng)可編程Flash存儲器。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。但是架構(gòu)太簡單,片上外設(shè)少,不適合本次使用。 方案二:STM32單片機。STM32系列基于專為要求高性能、低成本、低功耗的嵌入式應(yīng)用專門設(shè)計的ARM Cortex-M3內(nèi)核。STM32單片機程序都是模塊化的,接口相對簡單些,有一定的不足,比如串口中斷標(biāo)志位缺陷。 方案三:IAP15W4K58S4單片機(圖2-5)。IAP15W4K58S4系列基于專為要求高性能、高速A/D轉(zhuǎn)換、低成本、低功耗、片內(nèi)有高達4KB的RAM數(shù)據(jù)存儲空間、采用了增強型8051內(nèi)核,比傳統(tǒng)的8051速度快5~12倍。IAP15W4K58S4單片機程序都是模塊化的,幾乎包含了數(shù)據(jù)采集和控制中所需的所有單元模塊,適合本次設(shè)計所需。 總結(jié):綜合比較上述幾種方案,發(fā)現(xiàn)IAP15W4K58S4的性能最符合我們的題目控制要求,并且我們對IAP15W4K58S4單片機使用的經(jīng)驗,故決定采用方案三。 圖2-5 IAP15W4K58S4單片機
3.1 軟件總體設(shè)計
本次設(shè)計從大的角度觀看分為兩種模式:①判決模式、②訓(xùn)練模式;在電路接通后初始化成功,開始模式選擇,對模式進行判決,假如選擇一模式,進行判決模式,隨機進入判決模式下的子模式:劃拳和猜拳模式,在猜拳模式下判決“石頭”、“剪刀”、“布”三種情況判決,在劃拳模式下進行“1”、“2”、“3”、“4”、“5”五種情況判決,以上是選擇模式一的環(huán)節(jié);接下來選擇模式二對系統(tǒng)進行訓(xùn)練,在訓(xùn)練模式下對其進行猜拳訓(xùn)練和劃拳訓(xùn)練,對于猜拳訓(xùn)練不超過三次訓(xùn)練后進入判決模式下的猜拳驗證,同理在劃拳訓(xùn)練下對其進行不超過三次的訓(xùn)練,后回到模式一的劃拳判別。以上就是本次手勢識別裝置總流程,具體流程圖如圖3-1 圖3-1 流程圖 3.2 電容檢測模塊軟件設(shè)計 利用 FDC2214 的工作原理可實現(xiàn)手勢接近和識別的功能,當(dāng)人手接近該導(dǎo)體傳感平面時,傳感端的電容發(fā)生了變化,這就會導(dǎo)致 LC電路振蕩頻率的變化,從而反映出手勢接近,以及手勢的判定。如圖3-2FDC2214核心程序
圖3-2 FDC2214模塊核心程序 3.3 單片機模塊軟件設(shè)計 IAP15W4K58S4單片機包含中央處理器、程序存儲器、數(shù)據(jù)存儲器、定時器I/O口、高速A/D轉(zhuǎn)換、看門狗、超高速通信口1、2,1組高速同步串行口片內(nèi)高精度R/C時鐘和高可靠復(fù)位,擁有數(shù)據(jù)采集和控制中所需模塊,在本次設(shè)計中運用此單片機再好不過。 第四章:測試方案與測試結(jié)果 4.1測試方案 本次設(shè)計共實現(xiàn)四種功能猜拳判決、劃拳判決、猜拳訓(xùn)練、劃拳訓(xùn)練,在訓(xùn)練模式下對其進行不大于三次的手勢訓(xùn)練,后跳入判決模式,進行對訓(xùn)練結(jié)果的檢測。 對模式輸出結(jié)果的判決,我們運用了 FDC2214 芯片四個通道,根據(jù)每種手勢面積大小的不同,在 OLED 顯示屏上將顯示出面積換算后的值,進行多次實驗測試(取不同大小的手掌和握拳方式)后取最大值、最小值的平均值,然后對每個通道取得的數(shù)值進行匯總,此時所得到一定的區(qū)間范圍,這個范圍代表一個手勢的數(shù)值,測試時運用這個范圍值對照測試員在 FDC2214 芯片四通道下輸出的結(jié)果值來判斷手勢,由此可以準(zhǔn)確測出測試人所展現(xiàn)的手勢。 4.2 測試結(jié)果 4.2.1 題目一的系統(tǒng)測試結(jié)果 裝置選擇模式一工作在判決模式下,能對實驗人員進行猜拳判決,給出不同的手勢“石頭”、“剪刀”和“布”檢測出相應(yīng)的頻率值,計算出對應(yīng)的電容范圍對其進行準(zhǔn)確的判別,對此每一次判決時間不超過 1 秒。測試結(jié)果如表4-1 表4-1 測試結(jié)果表
4.2.2 題目二的系統(tǒng)測試結(jié)果 在題目一的測試結(jié)束后,需要將電路復(fù)位,重新選擇裝置模式一工作在判決模式下,對實驗人員進行劃拳判決,劃拳包括“1”、“2”、“3”、“4”和“5”五種手勢,每一次判決時間不超過1秒。測試結(jié)果如表4-2 表4-2 測試結(jié)果表
4.2.3 題目三的系統(tǒng)測試結(jié)果 經(jīng)過模式一的測試,接下來裝置選擇模式二對其進行訓(xùn)練模式,在訓(xùn)練模式下首先選擇猜拳訓(xùn)練,對任意測試者進行猜拳的手勢訓(xùn)練,每種動作訓(xùn)練次數(shù)不大于 3 次,總的訓(xùn)練時間不大于 1 分鐘;然后切換工作模式到模式一判決模式的猜拳游戲,對被訓(xùn)練的人員進行猜拳判決,要求每一次判決的時間不大于 1 秒。測試結(jié)果如表4-3 表4-3 測試結(jié)果表
4.2.4 題目四的系統(tǒng)測試結(jié)果
裝置繼續(xù)工作在模式二訓(xùn)練模式下,對任意測試者進行劃拳的手勢訓(xùn)練,每種動作訓(xùn)練次數(shù)同樣不大于 3 次,總的訓(xùn)練時間不大于 2分鐘;然后切換工作模式到模式一判決模式的劃拳游戲,對被訓(xùn)練的人員進行劃拳判決,要求每一次判決的時間不大于 1 秒。測試結(jié)果如表4-4 表4-4 測試結(jié)果表 4.2.5 輸贏模式 在實現(xiàn)賽方指定要求功能后,我們外擴了一個輸贏模式,在系統(tǒng)隨機生成的一種手勢與測試者的手勢進行比較,比較結(jié)果有平局、贏、輸三種結(jié)果。如表4-5
表4-5測試結(jié)果表 隨機手勢
測試者手勢 | | | | | | | | | | | | | | | |
第五章:設(shè)計總結(jié) 在學(xué)校里我們學(xué)習(xí)到的知識和簡單的動手實踐,要轉(zhuǎn)化成為社會的生產(chǎn)力還需要一個平臺。全國大學(xué)生電子設(shè)計競賽給我們提供了一個培養(yǎng)創(chuàng)新、協(xié)作和鉆研精神的平臺,是大學(xué)生展現(xiàn)自己、積累經(jīng)驗的舞臺。 培訓(xùn)到競賽是一個漫長的過程,期間心態(tài)很重要,會遇到很多問題,比如:做訓(xùn)練時不懂的知識,硬件、軟件調(diào)不出來,隊員之間的矛盾,外界壓力等,都需要我們?nèi)タ朔j爢T多交流!交流不僅能促進隊員們的學(xué)習(xí),還能及時發(fā)現(xiàn)問題處理問題,利用一切可以提高自己能力的資源。
對我們而言,知識上的收獲重要,精神上的豐收更加可喜。挫折是一份財富,經(jīng)歷是一份擁有。這次電子設(shè)計大賽必將成為人生旅途上一個非常美好的回憶!
手勢識別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);
- }
復(fù)制代碼
完整的Word格式完整論文51黑下載地址(里面有51單片機和stm32 2個實現(xiàn)方案):
http://www.raoushi.com/bbs/dpj-130703-1.html
|