拿了省賽2等獎
2018年大學生電子實驗競賽
手勢識別裝置(D題)
手勢識別裝置 摘 要
隨著時代的發展與科學技術的廣泛應用,現代化科技化的生活理念也越來越多的被人們所接受,高科技為人們帶來了很多方便,利用科技手段解決生活生產中的實際問題也就成了當今科技開發者們的共同話題。 本項目利用傳感芯片 FDC2214 設計制作一個手勢識別裝置, 實現對猜拳游 戲和劃拳游戲的判決, 裝置具有訓練和判決兩種工作模式。在判決模式下實驗裝置能對指定人員進行猜拳游戲和劃拳游戲的判決,主要是對手勢比劃“石頭”、 “剪刀”和“布”的判定,劃拳游戲的判定是指手勢比劃“1”、“2”、“3”、“4”和“5”的判定;而在訓練模式下能對任意人員進行猜拳游戲和劃拳游戲的手勢訓練,經過有限次訓練后,能進行正確的猜拳游戲和劃拳游戲的手勢判決。 目 錄 - 系統方案.....................................................3
1.1 系統總體構成...................................................3 1.2 系統總體實現方案...............................................3 1.3具體實現方案...................................................3 - 電路與程序設計...............................................5
2.1 硬件實現原理...................................................5 2.1.1 整體原理.....................................................5 2.1.2 2214芯片.....................................................6 2.1.3 15單片機.....................................................7 2.2 軟件設計流程圖.................................................8 - 測試方法及結果...............................................8
3.1 題目一的系統測試...............................................8 3.2 題目二的系統測試...............................................8 附錄 文章組成程序................................,.................9 參考文獻..........................................................17
第一章 系統方案 1.1 系統總體構成 本實驗主要由傳感芯片 FDC2214,最小系統版,降壓模塊,OLED,銅板組成。系統總體構成如圖1-1所示。 

圖1-1 系統總體構成圖 1.2 系統總體實現方案 以銅板作為導體材質,由于DC2214 是基于 LC 諧振電路原理的一個電容檢測傳感器,所以利用 FDC2214 的工作原理可實現手勢接近和識別的功能。當人手接近該導體傳感平面時,傳感端的電容發生了變化,這就會導致 LC 電路振蕩頻率的變化,從而反映出手勢接近,以及手勢的判定。 1.3具體實現方案 針對于主控芯片:可以實現數據檢測的單片機有多種,比如STM32,TI公司的MSP5229以及STC公司系列。結合數據處理情況以及芯片使用難度,我們選擇STC15F2K60S2芯片,其性能符合要求且編程簡單。 從手勢識別方面講:關于手勢動作捕捉主要是通過光學和傳感器兩種方式來實現。手勢識別推測的算法,包括模板匹配技術(二維手勢識別技術使用的)、通過統計樣本特征以及深度學習神經網絡。而常見的紅外識別解析度低,易受干擾,成本高,維護困難,而2214可以在任意環境下實現接近度感測,成本低,在波動的條件下,可以穩定的顯示預期效果。故而我們選擇使用2214芯片。 從數據通信方面來講:芯片間的通信只能使用I2C協議,可以采用有限傳輸和無線傳輸兩種方式?紤]到FDC2214芯片靈敏度極高,無線協議會產生較大干擾使結果不準確,因此采用有線傳輸的I2C協議傳輸。 最后,通過修改試驗程序進一步對實驗數據進行調試,從而達到完美的數據范圍結果,完成訓練部分。再通過最初將手的大致輪廓畫在銅板上,再將寫好的程序下載到指定位置,通過比出的手勢在對數據進一步精準化,進而完成實驗。
第二章電路與程序設計 2.1 硬件實現原理 2.1.1 整體原理 手勢識別裝置采用15單片機做為主控制器,其整體原理圖如圖2-1所示。PCB圖如圖如圖2-2 。 
圖2-1 整體原理圖 
圖2-2 PCB圖 2.1.2 2214芯片 FDC2214 是基于 LC 諧振電路原理的一個電容檢測傳感器。在芯片每個檢測通道的輸入端連接一個電感和電容,組成LC電路,被測電容傳感端與 LC 電路相連接,將產生一個振蕩頻率,根據該頻率值可計算出被測電容值。 
圖2-3 2.1.3 15單片機 主控采用STC15系列單片機最小系統,原理圖如3-1所示.

圖 3-1 2.2軟件設計流程圖

第三章 系統測試 裝置工作在判決模式下,能對參賽者指定人員進行猜拳判決,給出手勢“石頭”、“剪刀”和“布”的準確判決,要求每一次判決的時間不大于 1 秒。測試結果見表3-1。 | | | | | | | | | | [11-14] [1-2] [1-2] [5-8] | |
表3-1 測試結果表 3.2 題目二的系統測試 裝置工作在判決模式下,能對參賽者指定人員進行劃拳判決,給出手勢“1”、“2”、“3”、“4”和“5”的準確判決,要求每一次判決的時間不大于 1秒。測試結果見表3-2。 | | | | [10-11] [0-1] [0-1] [1-2] | | | [7-9] [-1-1] [-1-1] [2-3] | | | | | | | | | [11-14] [1-2] [1-2] [6-8] | |
表3-2 測試結果表 附錄 該實驗所涉及的主要程序 - #include<FDC2214.C>
- #include<oled7.c>
- unsigned char str1[1];
- unsigned char q[9]="0 ",k=0,w=0,l=0;
- float te0,te1;
- float xdata shitou1,shitou2,shitou3,shitou4,shitou5,shitou6,shitou7,shitou8;
- float xdata jian1,jian2,jian3,jian4,jian5,jian6,jian7,jian8;
- float xdata bu1,bu2,bu3,bu4,bu5,bu6,bu7,bu8;
- float xdata one1,one2,one3,one4,one5,one6,one7,one8,one9,one10,one11,one12;
- float xdata tw1,tw2,tw3,tw4,tw5,tw6,tw7,tw8,tw9,tw10,tw11,tw12;
- float xdata th1,th2,th3,th4,th5,th6,th7,th8,th9,th10,th11,th12;
- float xdata fo1,fo2,fo3,fo4,fo5,fo6,fo7,fo8,fo9,fo10,fo11,fo12;
- float xdata fi1,fi2,fi3,fi4,fi5,fi6,fi7,fi8,fi9,fi10,fi11,fi12;
- void dushu()
- {
- temp1 = ReadRegfdc2214(0x00);
- temp2 = ReadRegfdc2214(0x02);
- temp3 = ReadRegfdc2214(0x04);
- temp4 = ReadRegfdc2214(0x06);
- DelayMS(100);
- temp1= (aemp1-temp1);
- temp2= (aemp2-temp2);
- temp3= (aemp3-temp3);
- temp4= (aemp4-temp4);
- }
- void keyscan()
- {
- if(P20==0)
- {
- DelayMS(2);
- if(P20==0)
- {
- k+=1;
- if(k>=3)
- {k=0;}
- while(P20==0);
- }
- }
- if(k==3)
- {
- if(P24==0)
- {
- DelayMS(2);
- if(P24==0)
- {
- w+=1;
- if(w>=4)
- {w=0;}
- while(P24==0);
- }
- }
- }
- if(P26==0)
- { DelayMS(2);
- if(P26==0)
- {l=1;}
- }
- }
- void main()
- {
- P4M0=0X00;
- P4M1=0X00;
- P1M0=0X00;
- P1M1=0X00;
- P5M0=0X00;
- P5M1=0X00;
- P2M0=0X00;
- P2M1=0X00;
- LCD_CS= 0;
- LCD_Init();
- LCD_Fill(0xff);
- DelayMS(100);
- LCD_Fill(0x00);
- DelayMS(100);
- LCD_CLS();
- delay_ms(500);
- InitMultifdc2214();
- delay_ms(150);
- aemp1= ReadRegfdc2214(0x00);
- aemp2= ReadRegfdc2214(0x02);
- aemp3= ReadRegfdc2214(0x04);
- aemp4= ReadRegfdc2214(0x06);
- while(1)
- {
- dushu();
- lcd_printf(buf1, (int)temp1);
- lcd_printf(buf2, (int)temp2);
- lcd_printf(buf3, (int)temp3);
- lcd_printf(buf4, (int)temp4);
- /* LCD_P6x8Str(6,1,"CH1:");
- LCD_P6x8Str(40,1,buf1);
- LCD_P6x8Str(6,2,"CH2:");
- LCD_P6x8Str(40,2,buf2);
- LCD_P6x8Str(6,3,"CH3:");
- LCD_P6x8Str(40,3,buf3);
- LCD_P6x8Str(6,4,"CH4:");
- LCD_P6x8Str(40,4,buf4);*/
- delay_ms(100);
- q[0]=k+0x30;//q[2]=w+0x30;
- keyscan();
- if(l==1)
- {LCD_Fill(0x00);
- DelayMS(100);
- l=0;}
- if(k==0)
- {LCD_P6x8Str(6,0,"Please start!");
- LCD_P6x8Str(6,1,"CH1:");
- LCD_P6x8Str(40,1,buf1);
- LCD_P6x8Str(6,2,"CH2:");
- LCD_P6x8Str(40,2,buf2);
- LCD_P6x8Str(6,3,"CH3:");
- LCD_P6x8Str(40,3,buf3);
- LCD_P6x8Str(6,4,"CH4:");
- LCD_P6x8Str(40,4,buf4);}
- //else
- /* {LCD_P6x8Str(6,1," ");
- LCD_P6x8Str(40,1," " );
- LCD_P6x8Str(6,2," ");
- LCD_P6x8Str(40,2," ");
- LCD_P6x8Str(6,3," ");
- LCD_P6x8Str(40,3," ");
- LCD_P6x8Str(6,4," ");
- LCD_P6x8Str(40,4," ");
- LCD_P6x8Str(6,0,"Type: ");//6,4
- LCD_P6x8Str(40,0,q);//40,4
- }*/
- keyscan();
- if(l==1)
- {LCD_Fill(0x00);
- DelayMS(100);
- l=0;}
- if(k==1)
- {
- LCD_P14x16Ch(0,0,6);
- LCD_P14x16Ch(18,0,7);
- if((temp1)>=10&&(temp1)<=14&&(temp2)>=1&&(temp2)<=2&&(temp3)>=1&&(temp3)<=2&&(temp4)>=5&&(temp4)<=8)
- {
- //LCD_P8x16Str(6,5,"bu ");
- LCD_P14x16Ch(6,5,0);
- LCD_P14x16Ch(24,5,5);
- LCD_P14x16Ch(24,12,5);
- }
- if((temp1)>=9&&(temp1)<=12&&(temp2)>=0&&(temp2)<=1&&(temp3)>=0&&(temp3)<=1&&(temp4)>=0&&(temp4)<=1)
- {
- //LCD_P8x16Str(6,5,"shitou ");
- LCD_P14x16Ch(6,5,1);
- LCD_P14x16Ch(25,5,2);
- }
- if((temp1)>=7&&(temp1)<=11&&(temp2)>=0&&(temp2)<=1&&(temp3)>=0&&(temp3)<=2&&(temp4)>=2&&(temp4)<=3)
- {
- //LCD_P8x16Str(6,5,"jiandao");
- LCD_P14x16Ch(6,5,3);
- LCD_P14x16Ch(25,5,4);
- }
- if((temp1)>=-1&&(temp1)<=1&&(temp2)>=-1&&(temp2)<=1&&(temp3)>=-1&&(temp3)<=1&&(temp4)>=-1&&(temp4)<=1)
- {
- LCD_P8x16Str(6,5," ");
- }
- }
- //********************************************************
- keyscan();
- if(l==1)
- {LCD_Fill(0x00);
- DelayMS(100);
- l=0;}
- if(k==2)
- {
- LCD_P14x16Ch(0,0,8);
- LCD_P14x16Ch(18,0,7);
- if((temp1)>=11&&(temp1)<=14&&(temp2)>=1&&(temp2)<=2&&(temp3)>=1&&(temp3)<=2&&(temp4)>=6&&(temp4)<=8)
- {
- LCD_P8x16Str(13,6,"5");
- }
- if((temp1)>=9&&(temp1)<=11&&(temp2)>=0&&(temp2)<=1&&(temp3)>=1&&(temp3)<=2&&(temp4)>=5&&(temp4)<=6)
- {
- LCD_P8x16Str(13,6,"4");
- }
- if((temp1)>=8&&(temp1)<=9&&(temp2)>=0&&(temp2)<=1&&(temp3)>=1&&(temp3)<=2&&(temp4)>=3&&(temp4)<=4)
- {
- LCD_P8x16Str(13,6,"3");
- }
- if((temp1)>=7&&(temp1)<=9&&(temp2)>=-1&&(temp2)<=1&&(temp3)>=-1&&(temp3)<=1&&(temp4)>=2&&(temp4)<=3)
- {
- LCD_P8x16Str(13,6,"2");
- }
- if((temp1)>=10&&(temp1)<=11&&(temp2)>=0&&(temp2)<=1&&(temp3)>=0&&(temp3)<=1&&(temp4)>=1&&(temp4)<=2)
- {
- LCD_P8x16Str(13,6,"1");
- }
- if((temp1)>=-1&&(temp1)<=1&&(temp2)>=-1&&(temp2)<=1&&(temp3)>=-1&&(temp3)<=1&&(temp4)>=-1&&(temp4)<=1)
- {
- LCD_P8x16Str(6,5," ");
- }
- }
- }
- }
復制代碼
參考文獻 [1]黃智偉,全國大學生電子設計競賽訓練教程【M】,北京:電子工業出版社,2010。 [2]王成智,鄒旭東,許赟,等.采用改進重復控制的大功率電力電子負載.中國電機工程學報,2009,29(12):1~9
[3]Madawala U K,Thrimawithana D J,Nihal K.An ICPT-supercapacitor Eletronics,2007,54(6):3287~3297
[4]戴忠達.自動控制理論基礎[M].北京:清華大學出版社,2001
[5]劉豹.現代控制理論[M].北京:機械工業出版社,1992
[6]李建林,王立喬,李彩霞,等.基于現場可編程門陣列的多路PWM波形發生器.中國電機工程學報,2005,25(10):55~59
[7]馬彧.數字電路與系統實驗教程[M].北京:北京郵電大學出版社,2008 [8]楊光祥,梁華,朱軍. STM32單片機原理與工程實踐[M].武漢:武漢理工大學出版社,2013
完整的Word格式文檔51黑下載地址:
CIDUT--09.doc
(14.79 MB, 下載次數: 213)
2018-8-2 11:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
CIDUT--05.doc
(3.29 MB, 下載次數: 122)
2018-8-2 11:55 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|