在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用Arduino通過手勢控制計算機

科技觀察員 ? 來源:circuitdigest ? 作者:阿斯文斯·拉吉 ? 2022-11-30 16:55 ? 次閱讀

最近手勢控制的筆記本電腦或計算機變得非常有名。這種技術稱為Leap運動,它使我們能夠通過簡單地在計算機/筆記本電腦前揮手來控制計算機/筆記本電腦上的某些功能。這樣做非常酷和有趣,但這些筆記本電腦的價格確實很高。因此,在這個項目中,讓我們嘗試通過結合ArduinoPython的強大功能來構建我們自己的手勢控制筆記本電腦/計算機。

我們將使用兩個超聲波傳感器來確定我們手的位置并根據位置控制媒體播放器 (VLC)。我已經使用它進行演示,但是一旦您了解了該項目,您只需更改幾行代碼并以您喜歡的方式控制您最喜歡的應用程序,您就可以做任何事情。

項目背后的概念:

該項目背后的概念非常簡單。我們將在顯示器頂部放置兩個超聲波(US)傳感器,并使用Arduino讀取顯示器和手之間的距離,根據此距離值,我們將執行某些操作。為了在我們的計算機上執行操作,我們使用Pythonpyautogui庫。來自Arduino的命令通過串行端口USB)發送到計算機。然后,該數據將由計算機上運行的python讀取,并根據讀取的數據執行操作。

電路圖:

pYYBAGOHGo6ALG4LAACK3opti8Y248.png

要使用手勢控制PC,只需將兩個超聲波傳感器與Arduino連接即可。我們知道美國傳感器使用 5V 工作,因此它們由 Arduino 的板載穩壓器供電。Arduino可以連接到PC /筆記本電腦,為模塊供電,也可以進行串行通信。連接完成后,將它們放在顯示器上,如下所示。我用雙面膠帶把它貼在我的顯示器上,但你可以發揮自己的創造力。將其固定在一個地方后,我們可以繼續進行編程

poYBAGOHGo-Abq7VAACJjdIfV2k056.jpg

pYYBAGOHGpGAT0jdAAB0Bb5wGoM347.jpg

對 Arduino 進行編程:

Arduino應該被編程為讀取手與美國傳感器的距離。本頁末尾給出了完整的程序;就在下面,我已經給出了該程序的解釋。如果您不熟悉超聲波傳感器,只需通過Arduino和超聲波傳感器基于距離測量。

通過讀取距離的值,我們可以到達某些要用手勢控制的動作,例如,在這個程序中,我已經編程了5 個動作作為演示。

操作 1:當兩只手都放在傳感器前的特定遠距離時,VLC播放器中的視頻應播放/暫停。

行動2:當右手放在傳感器前的特定遠距離時,視頻應快進一步。

行動3:當左手放在傳感器前的特定遠距離時,視頻應倒帶一步。

行動4:當右手放在傳感器前的特定近距離,然后如果向傳感器移動,視頻應快進,如果移開,視頻應倒帶。

行動5:當左手以特定的近距離放在傳感器之前,然后如果朝向傳感器移動,視頻的音量應該增加,如果移開,音量應該減小。

讓我們看看如何編寫程序來執行上述操作。因此,像所有程序一樣,我們從定義I / O引腳開始,如下所示。兩個美國傳感器連接到數字引腳2、3、4和5,由+5V引腳供電。觸發引腳是輸出引腳,回顯引腳是輸入引腳。

Arduino和python之間的串行通信以9600的波特率進行。

const int trigger1 = 2; //Trigger pin of 1st Sesnor
const int echo1 = 3; //Echo pin of 1st Sesnor
const int trigger2 = 4; //Trigger pin of 2nd Sesnor
const int echo2 = 5;//Echo pin of 2nd Sesnor
void setup() {
Serial.begin(9600);

pinMode(trigger1, OUTPUT);
pinMode(echo1, INPUT);
pinMode(trigger2, OUTPUT);
pinMode(echo2, INPUT);
}
在結束任何動作之前,我們需要每次計算傳感器和手之間的距離。所以我們必須做很多次,這意味著這段代碼應該作為一個函數使用。我們編寫了一個名為 calculate_distance() 的函數,它將返回傳感器和手之間的距離。

/*###Function to calculate distance###*/
void calculate_distance(int trigger, int echo)
{
digitalWrite(trigger, LOW);
delayMicroseconds(2);
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
digitalWrite(trigger, LOW);

time_taken = pulseIn(echo, HIGH);
dist= time_taken*0.034/2;
if (dist>50)
dist = 50;
}

在我們的主循環中,我們檢查距離的值并執行上述操作。在此之前,我們使用兩個變量 distL 和 distR,它們使用當前距離值進行更新。

calculate_distance(trigger1,echo1);
distL =dist; //get distance of left sensor

calculate_distance(trigger2,echo2);
distR =dist; //get distance of right sensor
由于我們知道兩個傳感器之間的距離,因此我們現在可以將其與預定義的值進行比較并得出某些操作。例如,如果兩只手都放在 40 mc 的距離,那么我們播放/暫停視頻。這里“播放/暫停”一詞將通過串口發送出去

if ((distL >40 && distR>40) && (distL <50 && distR<50)) //Detect both hands
{Serial.println("Play/Pause"); delay (500);}
如果將右手單獨放在模塊之前,那么我們將視頻快進一步,如果是左手,我們將倒帶一步。根據動作,這里“倒帶”或“轉發”一詞將通過串口發送出去

if ((distL >40 && distL<50) && (distR ==50)) //Detect Left Hand
{Serial.println("Rewind"); delay (500);}

if ((distR >40 && distR<50) && (distL ==50)) //Detect Right Hand
{Serial.println("Forward"); delay (500);}
敵人對音量和軌道的詳細控制我們使用不同的方法來防止錯誤觸發。為了控制音量,我們必須將左手放在大約。在距離 15 厘米 ,然后您可以將其移向傳感器以減少體積,將其移離傳感器以增加體積。相同的代碼如下所示。根據動作,這里“Vup”或“Vdown”一詞將通過串口發送出去

//Lock Left - Control Mode
if (distL>=13 && distL<=17)
{
delay(100); //Hand Hold Time
calculate_distance(trigger1,echo1);
distL =dist;
if (distL>=13 && distL<=17)
{
Serial.println("Left Locked");
while(distL<=40)
{
calculate_distance(trigger1,echo1);
distL =dist;
if (distL<10) //Hand pushed in?
{Serial.println ("Vup"); delay (300);}
if (distL>20) //Hand pulled out
{Serial.println ("Vdown"); delay (300);}
}
}
}

我們也可以對右側傳感器使用相同的方法來控制視頻的軌跡。也就是說,如果我們將右手移向傳感器,它將快進電影,如果您將其移離傳感器,它將倒帶電影。根據動作,這里“倒帶”或“轉發”一詞將通過串口發送出去

您現在可以閱讀頁面末尾給出的此手勢控制PC的完整代碼,并嘗試將其作為一個整體進行輕描淡寫,然后將其復制到Arduino IDE。

對你的 Python 進行編程:

這個項目的python程序非常簡單。我們只需要通過正確的波特率與Arduino建立串行通信,然后執行一些基本的鍵盤操作。python的第一步是安裝pyautogui模塊。確保遵循此步驟,因為如果沒有pyautogui模塊,該程序將無法運行。

為 Windows 安裝 pyautogui 模塊:

請按照以下步驟安裝 pyautogui for Windows。如果您使用的是其他平臺,則步驟也或多或少相似。確保您的計算機/筆記本電腦已連接到互聯網,然后繼續執行以下步驟

第 1 步:打開Windows命令提示符,并將目錄更改為已安裝python的文件夾。默認情況下,該命令應為

cd C:Python27

第 2 步:在你的 python 目錄中使用命令 python –m pip install –upgrade pip 來升級你的 pip。Pip 是 python 中的一個工具,可以幫助我們輕松安裝 python 模塊。升級此模塊后(如下圖所示),繼續下一步。

python –m pip install –upgrade pip

第 3 步:使用命令“python –m pip install pyautogui”來安裝 pyautogui 模塊。該過程成功后,您應該會看到類似于下面的屏幕。

python –m pip install –upgrade pip

poYBAGOHGpOAIqMwAABPc_62rmY856.png

現在 pyautogui 模塊和 pyserial 模塊(安裝在前面的教程中)已成功與 python 一起安裝,我們可以繼續使用 python 程序了。完整的 python 代碼在本教程末尾給出,但解釋如下。

讓我們導入此項目所需的所有三個模塊。它們是pyautogui,serial python和time。

import serial #Serial imported for Serial communication
import time #Required to use delay functions
import pyautogui
接下來,我們通過COM端口與Arduino建立連接。在我的電腦中,Arduino連接到COM 18。使用設備管理器查找Arduino連接到的COM端口,并相應地更正以下行。

ArduinoSerial = serial.Serial('com18',9600) #Create Serial port object called arduinoSerialData
time.sleep(2) #wait for 2 seconds for the communication to get established
在無限的while循環中,我們反復收聽COM端口,并將關鍵字與任何預先確定的作品進行比較,并相應地按下鍵盤。

while 1:
incoming = str (ArduinoSerial.readline()) #read the serial data and print it as line
print incoming

if 'Play/Pause' in incoming:
pyautogui.typewrite(['space'], 0.2)

if 'Rewind' in incoming:
pyautogui.hotkey('ctrl', 'left')

if 'Forward' in incoming:
pyautogui.hotkey('ctrl', 'right')

if 'Vup' in incoming:
pyautogui.hotkey('ctrl', 'down')

if 'Vdown' in incoming:
pyautogui.hotkey('ctrl', 'up')

如您所見,要按下一個鍵,我們只需要使用命令“pyautogui.typewrite(['space'], 0.2)”,它將按下鍵空格 0.2 秒。如果您需要像ctrl + S這樣的熱鍵,那么您可以使用熱鍵命令“pyautogui.hotkey('ctrl', 's')”。

我使用這些組合是因為它們適用于 VLC 媒體播放器,您可以按照您喜歡的任何方式調整它們,以創建自己的應用程序以通過手勢控制計算機中的任何內容。

動作中的手勢控制計算機:

按照上面定義建立連接,并將Arduino代碼上傳到Arduino板上。然后使用下面的python腳本并在筆記本電腦/計算機上啟動該程序。

現在,您可以使用VLC媒體播放器在計算機上播放任何電影,并用手控制電影,如下面的視頻所示。

poYBAGOHGpaAIcLxAADVwlMIQRI690.jpg

Arduino Code:


/*

* Program for gesture control VLC Player

* Controlled uisng Python

* Code by B.Aswinth Raj

* Dated: 11-10-2017

*/



const int trigger1 = 2; //Trigger pin of 1st Sesnor

const int echo1 = 3; //Echo pin of 1st Sesnor

const int trigger2 = 4; //Trigger pin of 2nd Sesnor

const int echo2 = 5;//Echo pin of 2nd Sesnor


long time_taken;

int dist,distL,distR;





void setup() {

Serial.begin(9600);



pinMode(trigger1, OUTPUT);

pinMode(echo1, INPUT);

pinMode(trigger2, OUTPUT);

pinMode(echo2, INPUT);

}


/*###Function to calculate distance###*/

void calculate_distance(int trigger, int echo)

{

digitalWrite(trigger, LOW);

delayMicroseconds(2);

digitalWrite(trigger, HIGH);

delayMicroseconds(10);

digitalWrite(trigger, LOW);


time_taken = pulseIn(echo, HIGH);

dist= time_taken*0.034/2;

if (dist>50)

dist = 50;

}


void loop() { //infinite loopy

calculate_distance(trigger1,echo1);

distL =dist; //get distance of left sensor


calculate_distance(trigger2,echo2);

distR =dist; //get distance of right sensor


//Uncomment for debudding

/*Serial.print("L=");

Serial.println(distL);

Serial.print("R=");

Serial.println(distR);

*/


//Pause Modes -Hold

if ((distL >40 && distR>40) && (distL <50 && distR<50)) //Detect both hands

{Serial.println("Play/Pause"); delay (500);}


calculate_distance(trigger1,echo1);

distL =dist;


calculate_distance(trigger2,echo2);

distR =dist;





//Control Modes

//Lock Left - Control Mode

if (distL>=13 && distL<=17)

{

delay(100); //Hand Hold Time

calculate_distance(trigger1,echo1);

distL =dist;

if (distL>=13 && distL<=17)

{

Serial.println("Left Locked");

while(distL<=40)

{

calculate_distance(trigger1,echo1);

distL =dist;

if (distL<10) //Hand pushed in?

{Serial.println ("Vup"); delay (300);}

if (distL>20) //Hand pulled out

{Serial.println ("Vdown"); delay (300);}

}

}

}


//Lock Right - Control Mode

if (distR>=13 && distR<=17)

{

delay(100); //Hand Hold Time

calculate_distance(trigger2,echo2);

distR =dist;

if (distR>=13 && distR<=17)

{

Serial.println("Right Locked");

while(distR<=40)

{

calculate_distance(trigger2,echo2);

distR =dist;

if (distR<10) //Right hand pushed in

{Serial.println ("Rewind"); delay (300);}

if (distR>20) //Right hand pulled out

{Serial.println ("Forward"); delay (300);}

}

}

}



delay(200);

}





Python Code:



import serial #Serial imported for Serial communication

import time #Required to use delay functions

import pyautogui


ArduinoSerial = serial.Serial('com18',9600) #Create Serial port object called arduinoSerialData

time.sleep(2) #wait for 2 seconds for the communication to get established



while 1:

incoming = str (ArduinoSerial.readline()) #read the serial data and print it as line

print incoming



if 'Play/Pause' in incoming:

pyautogui.typewrite(['space'], 0.2)



if 'Rewind' in incoming:

pyautogui.hotkey('ctrl', 'left')



if 'Forward' in incoming:

pyautogui.hotkey('ctrl', 'right')



if 'Vup' in incoming:

pyautogui.hotkey('ctrl', 'down')




if 'Vdown' in incoming:

pyautogui.hotkey('ctrl', 'up')



incoming = "";



聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 計算機
    +關注

    關注

    19

    文章

    7513

    瀏覽量

    88160
  • 超聲波傳感器

    關注

    18

    文章

    583

    瀏覽量

    35944
  • python
    +關注

    關注

    56

    文章

    4797

    瀏覽量

    84787
  • Arduino
    +關注

    關注

    188

    文章

    6471

    瀏覽量

    187288
  • 手勢控制
    +關注

    關注

    4

    文章

    44

    瀏覽量

    21754
收藏 人收藏

    評論

    相關推薦

    計算機控制設備改造

    計算機控制他,不用手動,主要是通過計算機設置哪個檔位,把測試到的壓敏電阻參數傳到計算機上顯示出來。請問應該如何實現。以下是該設備的操作和顯示面:謝謝!`
    發表于 08-20 10:27

    計算機控制技術簡介

    Hefei University課程綜述課程題目:計算機控制技術姓 名:胡年軍學 號: 0805070111專 業: 自動化(1)班授課老師:丁健一、計算機控制技術簡介計算機控制技術是一門以電子技術
    發表于 09-01 08:09

    計算機控制技術簡介

    個人收集整理僅供參考學習個人收集整理僅供參考學習PAGE / NUMPAGES個人收集整理僅供參考學習Hefei課程綜述課程題目:計算機控制技術姓 名:胡年軍學 號: 0805070111專 業
    發表于 09-01 08:02

    淺析計算機接口與控制技術

    計算機接口與控制技術》 教學大綱課程名稱:計算機接口與控制技術(Computer Interface and Control Technique )課程編號:S031030課程學時:
    發表于 09-10 06:45

    計算機模糊控制的相關知識

    計算機接口與控制技術課程總結.doc 中國石油大學機電工程學院計算機接口與控制技術課程總結計算機接口與
    發表于 09-10 06:08

    怎樣通過手勢隔空控制電腦?

    怎樣通過手勢隔空控制電腦?
    發表于 02-11 06:14

    基于Arduino創建一個手勢控制

    到 PCB,如圖所示。現在,我們需要將組件一個一個地安裝到 PCB 上。在以下模式中:安裝完組件后,我們需要上傳本文附件中給出的代碼。注意:在上傳代碼之前,請確保將 Arduino Nano 與您的計算機
    發表于 06-22 06:55

    如何將文件內容從Arduino無線發送到計算機

    Arduino UNO 正在將帶有格式化文本行的約 8 MB 文件記錄到 SD 卡中。我已經將 ESP8266-01 插入到 Arduino 的軟件串行端口中。局域網內的計算機最終會請求一個日志文件
    發表于 05-04 06:47

    使用帶有計算機視覺的手勢控制伺服電機

    電子發燒友網站提供《使用帶有計算機視覺的手勢控制伺服電機.zip》資料免費下載
    發表于 11-02 11:10 ?0次下載
    使用帶有<b class='flag-5'>計算機</b>視覺的<b class='flag-5'>手勢</b><b class='flag-5'>控制</b>伺服電機

    使用手勢通過Arduino控制YouTube播放

    電子發燒友網站提供《使用手勢通過Arduino控制YouTube播放.zip》資料免費下載
    發表于 12-21 16:55 ?3次下載
    使用<b class='flag-5'>手勢</b><b class='flag-5'>通過</b><b class='flag-5'>Arduino</b><b class='flag-5'>控制</b>YouTube播放

    手勢識別數據集:讓計算機了解你的表情與手勢

    在當今數字化時代,我們離不開計算機、手機和其他電子設備。與此同時,手勢識別技術也越來越受關注。手勢是我們與生俱來的一種表達方式,通過它們可以傳達思想和情感。因此,
    的頭像 發表于 04-13 16:36 ?1393次閱讀

    手勢識別:讓你的手成為計算機的新界面

    勢識別是一種新興的人機交互技術,它通過識別人類手部的動作和姿態,來控制計算機或其他設備,從而實現更加自然和直觀的人機交互。手勢識別技術不僅可以用于操作
    的頭像 發表于 04-25 17:51 ?1023次閱讀

    將量子計算機連接到Arduino

    電子發燒友網站提供《將量子計算機連接到Arduino.zip》資料免費下載
    發表于 06-25 15:09 ?1次下載
    將量子<b class='flag-5'>計算機</b>連接到<b class='flag-5'>Arduino</b>

    使用APDS9960和NodeMCU通過手勢控制Chromecast

    電子發燒友網站提供《使用APDS9960和NodeMCU通過手勢控制Chromecast.zip》資料免費下載
    發表于 06-26 09:51 ?1次下載
    使用APDS9960和NodeMCU<b class='flag-5'>通過手勢</b><b class='flag-5'>控制</b>Chromecast

    數控加工計算機輔助編程步驟

    數控加工程序可通過手工編程或計算機自動編程來獲得。目前計算機自動編程采用圖形交互式自動編程,即計算機輔助編程。
    發表于 10-18 09:39 ?683次閱讀
    主站蜘蛛池模板: 天堂中文字幕| 欧美午夜影视| 中文字幕88页| 亚洲国内精品| 四虎影院新网址| 日本黄色小视频网站| 欧美日韩啪啪| 国产一级做a爱免费视频| 国产精品9999久久久久仙踪林| 成年人网站在线| 天天骑夜夜操| 黄乱色伦| 中文字幕一区二区三| 浮荡视频在线观看免费| 性色网站| 欧美日韩亚洲国产| 国产精品7m凸凹视频分类大全 | 一本到卡二卡三卡福利| 欧美日韩一卡2卡三卡4卡新区 | 久久久香蕉视频| 男人天堂黄色| 最色网站| 日韩欧美高清一区| 黄色毛片网| 天天在线天天看成人免费视频 | 夜夜操夜夜操| 国产综合视频| 亚洲视频一区二区| 性久久久久久久久久| 免费视频色| 亚洲午夜久久久久久91| 国产午夜免费一区二区三区| 亚洲一区二区在线视频| 亚洲va久久久久综合| 看真人一级毛多毛片| 午夜韩国理论片在线播放| 97人人做人人添人人爱| 最新黄色大片| 美女国产视频| 日日舔夜夜操| 视频一二三区|