一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用手勢(shì)控制PPT

454398 ? 來(lái)源:工程師wv ? 2019-08-27 11:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

步驟1:所需部件

如何用手勢(shì)控制PPT

Arduino Mega

0.96英寸I2C OLED顯示屏

MPU -6050加速度計(jì)陀螺儀組合

HC-05藍(lán)牙模塊

FTDI編程

Perfboard

推送按鈕* 2

電池

以及其他一些常見(jiàn)的電子元件和工具,如烙鐵,USB電纜等。..。..

《請(qǐng)使用上述會(huì)員鏈接購(gòu)買上述任何組件,這將有助于項(xiàng)目的未來(lái)存在。

步驟2:配置HC-05藍(lán)牙模塊為HID(人機(jī)接口設(shè)備)設(shè)備

是項(xiàng)目,我們需要向PC發(fā)送命令來(lái)更改幻燈片,因?yàn)槲覀儾幌M魏?a target="_blank">接收器插入PC的USB端口,我們可以進(jìn)一步使用藍(lán)牙。

默認(rèn)情況下,最常見(jiàn)的藍(lán)牙模塊HC-05中的固件只能作為從屬設(shè)備使用。

我們需要兼容藍(lán)牙的HID(人機(jī)接口設(shè)備)模塊配置為無(wú)線藍(lán)牙鍵盤,用于向PC發(fā)送命令以更改幻燈片。

我們有兩個(gè)HID設(shè)備選項(xiàng),一個(gè)是直接購(gòu)買這樣的兼容HID的藍(lán)牙模塊RN-42,其費(fèi)用是普通藍(lán)牙模塊的10倍或者將RN-42的固件刷到HC- 05,兩個(gè)模塊都基于類似的硬件。

我已經(jīng)學(xué)會(huì)了從Brian Lough和Evan Kale那里更改HC-05的固件,他們?cè)诮忉屓绾胃鼡Q固件方面做得非常出色,再次在這里復(fù)制它是沒(méi)有意義的,所以我想留下他們的視頻鏈接,并給你我的固件文件。

步驟3:構(gòu)建硬件

既然你有一個(gè)兼容HID的藍(lán)牙模塊,你可以開(kāi)始構(gòu)建硬件。

從這里下載Fritzing電路原理圖文件。

我建議在一塊穿孔板上構(gòu)建所有硬件并將其作為Arduino mega的屏蔽。

步驟4:構(gòu)建軟件

這是項(xiàng)目中最重要的部分,即代碼。

在實(shí)際打開(kāi)我的代碼之前,我想推薦一下如果您使用的是Arduino IDE,則轉(zhuǎn)到首選項(xiàng)并啟用“代碼折疊”,現(xiàn)在您可以折疊代碼的各個(gè)部分以清楚地了解代碼。

您可以從以下位置找到最新的代碼我的Github頁(yè)面。

代碼中有很多部分,讓我單獨(dú)解釋每個(gè)部分。

如果您有任何疑問(wèn),請(qǐng)將其評(píng)論下來(lái),我將很樂(lè)意為您提供幫助。

步驟5:記錄手勢(shì)

識(shí)別手勢(shì)過(guò)程的第一步是記錄手勢(shì),并記錄手勢(shì),我們正在使用加速度計(jì)讀數(shù)來(lái)自MPU-6050。

我為錄制手勢(shì)創(chuàng)建的函數(shù)是take_reading(),在代碼中引用它。

為了清楚手勢(shì),樣本大小需要很大,并且為了加快處理速度,手勢(shì)大小需要很小,我發(fā)現(xiàn)50適合這兩種情況。現(xiàn)在,如果我們想要記錄更長(zhǎng)的手勢(shì),我們可以平均每2或3個(gè)元素來(lái)獲得50個(gè)元素的手勢(shì)。

#define DOF 3 //3-degrees of freedom acc_x, acc-y, acc_z

#define avg_lenght 2 //average out every 2 elements of reading

#define sample_size 50

int reading[DOF][avg_lenght*sample_size]; //creating a 2-D array to store readings

//taking readings

for(i=0; i{

MPU6050.update();

reading[0][i] = mpu6050.getAccX(); //taking readings of acceleration in g‘s, 1g, 1.2g

reading[0][i] = reading[0][i]*50 + 50; //ofsetting the value to 50

if(reading[0][i]《0) //limiting its value from 0 to 100

reading[0][i]=0;

else if(reading[0][i]》100)

reading[0][i]=100;

//repeating the same for remaining 2 degrees of freedom, acc_y, acc_z

}

我們已經(jīng)讀取了讀數(shù),但這些不是sample_size元素,這些是sample_size * avg_lenght元素,我們需要sample_size元素,所以我們需要將它平均化。

if(avg_lenght》1) //if we need to average

{

for(i=0; i {

for(j=0; j {

for(k=0; k {

sum=sum+reading[i][avg_lenght*j+k]; //add every avg_lenght elemens

}

temp_values[i][j]=sum/avg_lenhgt; //save avg of avg_lenght elements here

sum=0;

}

}

}

else if(avg-lenght==1) //no need to average

{

for(i=0; i {

for(j=0; j temp_values[i][j]=reading[i][j]; //simply copying values to temp_values

}

}

現(xiàn)在讀取所有DOF的讀數(shù)并保存到temp_values數(shù)組。

步驟6:將記錄的手勢(shì)保存為主手勢(shì)

既然我們知道如何記錄手勢(shì),我們需要一種方法將其保存為主手勢(shì)所以我們可以稍后比較一個(gè)手勢(shì)。

我創(chuàng)建的用于將手勢(shì)復(fù)制到主手勢(shì)數(shù)組的函數(shù)是copy_reading(from,to master,master _select),請(qǐng)參閱代碼。

for(i=0; i{

for(j=0; j {

master[master_select][i][j] = temp_values[i][j];

}

}

現(xiàn)在,我們可以錄制手勢(shì),將其保存為主手勢(shì)。

步驟7:將手勢(shì)保存到EEPROM

我們已經(jīng)保存了主手勢(shì),但是一旦斷電,所有保存到現(xiàn)在的手勢(shì)都將丟失。我們需要一些方法來(lái)保存它們,以便我們可以在設(shè)備再次通電后再次檢索它們。

我們可以使用外部I2C EEPROM并將它們連接到Arduino,但這會(huì)增加成本,我們不會(huì)不想要。

我們確實(shí)可以使用Arduino的內(nèi)部EEPROM來(lái)保存手勢(shì)。為此,我們需要包含EEPROM.h庫(kù),我們準(zhǔn)備好了。

將主手勢(shì)保存到EEPROM的功能是EEPROM_write()。

int master_select; //to select which master to select to EEPROM

//save 0-49 for master-0-x, 50-99 for master-0-y, 100-149 for master-0-z 。..。.

for(i=0; i{

for(j=0; j {

addr=(master_select*sample_size)+(i*DOF)+j;

EEPROM.write(addr, master[master_select][i][j]); //write value of master to specific address

delay(5); //time to write to EEPROM

}

}

從EEPROM檢索主手勢(shì)的功能是EEPROM_read()。

int master_select

for(i=0; i{

for(j=0; j {

addr=(master_select*sample_size)+(i*DOF)+j;

master[master_select][i][j]=EEPROM.read(addr); //save value from EEPROM to master gesture

delay(5);

}

}

步驟8:動(dòng)態(tài)時(shí)間扭曲算法

11月我們可以記錄手勢(shì)和主手勢(shì),我們需要比較兩者,這是DTW算法發(fā)揮作用的地方。..。..

代碼中DTW的功能是calc_DTW_score(),函數(shù)abs_sum()和Min()將用于DTW計(jì)算。

什么是動(dòng)態(tài)時(shí)間扭曲(DTW)算法?

這是一個(gè)算法,可以找到任何兩個(gè)相似的算法時(shí)變系列。它最初是為語(yǔ)音識(shí)別目的而開(kāi)發(fā)的。有關(guān)詳細(xì)信息,請(qǐng)?jiān)L問(wèn)維基百科。

DTW_score越高,兩個(gè)時(shí)間序列匹配的越少。為了檢測(cè)匹配一對(duì)系列,我們可以將它與多個(gè)系列進(jìn)行比較,無(wú)論哪個(gè)系列的DTW得分最小,它都是匹配系列。

如何實(shí)現(xiàn)它?

我沒(méi)有找到任何簡(jiǎn)單的庫(kù)(適合在Arduino的16 Mhz處理器上運(yùn)行)或?yàn)锳rduino編寫的代碼,所以我需要建立它。我編寫的整個(gè)算法最簡(jiǎn)單,我可以得到它,它基于這個(gè)視頻。

你只能找到我在這里實(shí)現(xiàn)的DTW算法。

上圖是DTW計(jì)算的矩陣,第一行和第一列的突出顯示元素是我們要比較的元素。其余的元素是計(jì)算DTW分?jǐn)?shù)所必需的。

cell = difference of corresponding elements of arrays comparing + minimum of previously computed 3 values

由于我們將使用差異和最小元素,我創(chuàng)建了兩個(gè)單獨(dú)的函數(shù)“abs_sub”和“Min”進(jìn)一步使用。

元素(1,1),(2,1)和& (1,2)只是數(shù)組相應(yīng)元素的差異,所以代碼如下所示。

a[1][1]=abs_sub(a[1][0], a[0][1]); //first element

a[2][1]=abs_sub(a[2][0], a[0][1]);

a[1][2]=abs_sub(a[1][0], a[0][2]);

第二行和第二列的其余元素是差值+分鐘先前計(jì)算的3個(gè)值,即前一個(gè)元素。

x=1 //first row remaining elements

for(y=2; y a[x][y] = abs_sum(a[x][0], a[0][y]) + a[x][y-1];

y=1 //first coulum remaining elements

for(x=2; x a[x][y] = abs_sub(a[x][0], a[0][y]) + a[x-1][y]

現(xiàn)在,可以計(jì)算其余元素

for(x=2; x{

for(y=2; y {

a[x][y] = abs_sub(a[x][0], a[0][y]) + Min(a[x][y-1], a[x-1][y], a[x-1][y-1])

}

}

現(xiàn)在我們已經(jīng)計(jì)算了在整個(gè)DTW矩陣中,我們現(xiàn)在可以通過(guò)將從右下角到左上角的下3個(gè)元素的最小值相加來(lái)計(jì)算DTW分?jǐn)?shù),請(qǐng)參閱上面的圖像以獲得更清晰。

x = sample_size; //moving to bottom right

y = sample_size;

DTW_score = a[x][y]; //sarting adding from there

while(x!=0 && y!=0) //till top left is reached

{

if(a[x-1][y-1]《=a[x][y-1] && a[x-1][y-1]《=a[x-1][y]) //if diagonal is minimum

{

DTW_score = DTW_score + a[x-1][y-1]; //add it

x--; //go to its position

y--;

}

else if() //if top is minimum

{

DTW_score = DTW_score + a[x][y-1];

y--;

}

else //add its side

{

DTW_score = DTW_score + a[x-1][y];

x--;

}

//repeat until top left is reached

}

return DTW_score; //done calculating DTW score

到達(dá)左上角時(shí)完成DTW_score的計(jì)算?,F(xiàn)在這個(gè)分?jǐn)?shù)可以用來(lái)比較任何兩個(gè)系列的相似程度。

步驟9:添加動(dòng)作如果手勢(shì)匹配

我們現(xiàn)在有DTW算法將手勢(shì)與幾個(gè)主手勢(shì)進(jìn)行比較,我們需要設(shè)置動(dòng)作來(lái)做手勢(shì)與主手勢(shì)匹配。

代碼中的函數(shù)是do_action(int a)。

你可以用鍵盤做所有事情,可能會(huì)增加視頻播放的音量或通過(guò)多次按鍵操作(ctrl + shift + esc)來(lái)打開(kāi)任務(wù)管理器,也可以使用Autohotkey等啟動(dòng)應(yīng)用程序。

您可以輸入所有內(nèi)容使用此USB HID表的命令。

要輸入數(shù)字,字符或短語(yǔ),您可以使用Bluetooth_HID.write/print(“某些字符或短語(yǔ)”);并且要從USB HID表輸入密鑰,您需要使用Bluetooth_HID.print(“something”,HEX);

PowerPoint演示文稿中的一些命令

n - 轉(zhuǎn)到下一張幻燈片

p - 轉(zhuǎn)到上一張幻燈片

w - 顯示白色屏幕

b - 顯示黑屏

if(a==0) //do action corresponding to master 0 gesture

{

bluetooth_HID.write(“n”); //send keystroke n from HID Bluetooth module as sent from wireless keyboard

}

//actions for remainging masters

步驟10:創(chuàng)建用戶界面

我們擁有識(shí)別手勢(shì)和其他所需的所有功能,現(xiàn)在我們需要一個(gè)用戶界面來(lái)訪問(wèn)所有功能。

如果你不想創(chuàng)建用戶界面,你可以去使用我創(chuàng)建的最簡(jiǎn)單的代碼并根據(jù)需要對(duì)其進(jìn)行修改。

這里我在void循環(huán)中創(chuàng)建了用戶界面。..

第一步是初始化通過(guò)清潔并設(shè)置文本大小和文本位置來(lái)顯示

#define display_init display.clearDisplay();display.setTextSize(1);display.setTextColor(WHITE);display.setCursor(0,0)

之后,我們可以在顯示屏上顯示所需的文字

while(1)

{

display_init; //initialize display

display.println(“What?”);

display.println(“ a. test gesture”);

display.println(“ b. record master”);

display.println(“ c. update EEPROM”);

display_set_cursor(line); //function we have created to display a cursor on selected line

display.display(); //update the screen

//press down_button to move cursor down

if(down_buton_pressed)

{

delay(10); //to remove button bouncing

line++ //go to next line

if(line》2) //if reached to last line

line=0; //go to first line

}

//press select_button to select option where cursor is present

if(select_button_pressed)

{

delay(10); //to remove button bouncing

break; //go to next lines by crossing while(1)

}

}

if(line==0) //if option on line 0 is selected, to test gesture

{

display_init; //initialize display

display.println(“recording gesture”);

display.display();

digitalWrite(13, HIGH);

take_reading();

digitalWrite(13, LOW);

display_init;

display.println(“done recording gesture”);

display.display();

for(i=0; i DTW_score[i]=calc_DTW_score(temp_values, master, i);

min_score=DTW_score[0]; //finding minimum of all DTW_scores

for(i=1; i {

if(DTW_score[i] min_score=DTW_score[i];

}

for(i=0; i {

if(min_score==DTW_score[i])

break; //exit from for loop

}

display_init;

display.println(“master is: ”);

display.println(i); //display master on screen

display.display();

do_action(i); //do corresponding action to master gesture

delay(2000); //display on screen for 2 seconds

}

else if(line==1) //similarly for line 1 and line 2

{

}

else if(line==2)

{

}

完成!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Arduino
    +關(guān)注

    關(guān)注

    190

    文章

    6498

    瀏覽量

    192145
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    CAN入門應(yīng)用手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《CAN入門應(yīng)用手冊(cè) .pdf》資料免費(fèi)下載
    發(fā)表于 07-14 14:45 ?0次下載

    M1A AI迷你電腦加持,5分鐘搞定PPT制作

    在學(xué)習(xí)和工作中,PPT已成為展示內(nèi)容的重要工具。然而,如何高效地制作出一份既清晰又富有吸引力的PPT,常常讓人感到困擾。今天,小編將用創(chuàng)盈芯M1A AI迷你電腦結(jié)合當(dāng)前大熱的AI技術(shù),與大家探討如何高效打造一份令人滿意的PPT
    的頭像 發(fā)表于 06-18 14:12 ?247次閱讀

    超有用的IT人員實(shí)用指南:如何用AI工具(deepseek)高效制作PPT

    小編雖然處于業(yè)務(wù)一線,但在平時(shí)的工作里,也經(jīng)常與技術(shù)部門的同事打交道。我常常見(jiàn)到這樣的一幕:在跨部門協(xié)作的會(huì)議上,業(yè)務(wù)部門老大看著滿屏專業(yè)術(shù)語(yǔ)的PPT欲言又止,領(lǐng)導(dǎo)們對(duì)著技術(shù)同事做的PPT反復(fù)吐槽
    的頭像 發(fā)表于 04-28 10:04 ?522次閱讀
    超有用的IT人員實(shí)用指南:如<b class='flag-5'>何用</b>AI工具(deepseek)高效制作<b class='flag-5'>PPT</b>

    何用FOC電機(jī)控制MATLAB仿真!

    [導(dǎo)讀]本文將介紹如何用FOC電機(jī)控制MATLAB仿真,首先從整體結(jié)構(gòu)及功能介紹,用MATLAB2013以上版本打開(kāi)文件,看到如圖1所示界面,可以看到仿真最外層由四個(gè)模塊組成:電源模塊(紅色方框
    發(fā)表于 03-28 14:51

    用對(duì)軟件,DeepSeek + Kimi,PPT一鍵生成秘籍!

    作者:算力魔方創(chuàng)始人/英特爾創(chuàng)新大使劉力 在快節(jié)奏的工作和學(xué)習(xí)中,制作一份高質(zhì)量的PPT常常讓人感到頭疼。不過(guò),有了DeepSeek和Kimi這兩個(gè)強(qiáng)大的工具,制作PPT變得輕松又高效。今天,就來(lái)
    的頭像 發(fā)表于 02-19 16:13 ?1761次閱讀
    用對(duì)軟件,DeepSeek + Kimi,<b class='flag-5'>PPT</b>一鍵生成秘籍!

    AN-737: 如何用ADIsimADC完成ADC建模

    電子發(fā)燒友網(wǎng)站提供《AN-737: 如何用ADIsimADC完成ADC建模.pdf》資料免費(fèi)下載
    發(fā)表于 01-13 14:54 ?0次下載
    AN-737: 如<b class='flag-5'>何用</b>ADIsimADC完成ADC建模

    何用OpenCV進(jìn)行手勢(shì)識(shí)別--基于米爾全志T527開(kāi)發(fā)板

    本文將介紹基于米爾電子MYD-LT527開(kāi)發(fā)板(米爾基于全志T527開(kāi)發(fā)板)的OpenCV手勢(shì)識(shí)別方案測(cè)試。摘自優(yōu)秀創(chuàng)作者-小火苗米爾基于全志T527開(kāi)發(fā)板一、軟件環(huán)境安裝1.安裝OpenCVsudoapt-getinstalllibopencv-devpython3-opencv2.安裝pipsudoapt-ge
    的頭像 發(fā)表于 12-13 08:04 ?1346次閱讀
    如<b class='flag-5'>何用</b>OpenCV進(jìn)行<b class='flag-5'>手勢(shì)</b>識(shí)別--基于米爾全志T527開(kāi)發(fā)板

    金線鍵合工藝技術(shù)詳解(69頁(yè)PPT

    金線鍵合工藝技術(shù)詳解(69頁(yè)PPT
    的頭像 發(fā)表于 11-01 11:08 ?2725次閱讀
    金線鍵合工藝技術(shù)詳解(69頁(yè)<b class='flag-5'>PPT</b>)

    有沒(méi)有免費(fèi)下載的照片素材呀,科技芯片類,用來(lái)寫ppt

    有沒(méi)有免費(fèi)下載的照片素材呀,科技芯片類,用來(lái)寫ppt
    發(fā)表于 10-23 10:54

    Cortex-A55國(guó)產(chǎn)處理器_教學(xué)實(shí)驗(yàn)箱_操作案例分享:5-21 手勢(shì)識(shí)別實(shí)驗(yàn)

    的設(shè)計(jì)實(shí)現(xiàn):LCD顯示界面以及與用戶的交互; (3)編輯控制代碼; (4)編譯程序; (5)運(yùn)行程序。 根據(jù)原理圖,可知使用的手勢(shì)識(shí)別模塊是基于 PAJ7620U2 傳感器
    發(fā)表于 10-15 16:18

    何用Jacinto內(nèi)部的GPtimer輸出PWM信號(hào)控制屏幕背光

    電子發(fā)燒友網(wǎng)站提供《如何用Jacinto內(nèi)部的GPtimer輸出PWM信號(hào)控制屏幕背光.pdf》資料免費(fèi)下載
    發(fā)表于 09-29 10:25 ?0次下載
    如<b class='flag-5'>何用</b>Jacinto內(nèi)部的GPtimer輸出PWM信號(hào)<b class='flag-5'>控制</b>屏幕背光

    何用PMBus解碼UCD90xxx故障日志

    電子發(fā)燒友網(wǎng)站提供《如何用PMBus解碼UCD90xxx故障日志.pdf》資料免費(fèi)下載
    發(fā)表于 09-25 10:04 ?0次下載
    如<b class='flag-5'>何用</b>PMBus解碼UCD90xxx故障日志

    電容式觸摸手勢(shì)軟件和調(diào)整應(yīng)用說(shuō)明

    電子發(fā)燒友網(wǎng)站提供《電容式觸摸手勢(shì)軟件和調(diào)整應(yīng)用說(shuō)明.pdf》資料免費(fèi)下載
    發(fā)表于 09-14 10:34 ?0次下載
    電容式觸摸<b class='flag-5'>手勢(shì)</b>軟件和調(diào)整應(yīng)用說(shuō)明

    何用 S7-200 實(shí)現(xiàn) Modbus 通信?

    電子發(fā)燒友網(wǎng)站提供《如何用 S7-200 實(shí)現(xiàn) Modbus 通信?.pdf》資料免費(fèi)下載
    發(fā)表于 09-14 10:22 ?2次下載

    黑盤缺陷分析-Black-Pad-Defect PPT

    黑盤缺陷分析-Black-Pad-Defect PPT
    的頭像 發(fā)表于 08-22 16:24 ?657次閱讀
    黑盤缺陷分析-Black-Pad-Defect <b class='flag-5'>PPT</b>