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

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

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

如何使用Flex傳感器和電位計構(gòu)建憤怒小鳥的游戲控制器

科技觀察員 ? 來源:circuitdigest ? 作者:阿斯文斯·拉吉 ? 2023-01-25 16:02 ? 次閱讀

這一切都始于黑暗時代的一款名為“馬里奧”的小游戲,從一個小家伙跳上鴨子拯救我的公主到成為一個陽剛英俊的王子在波斯漫游(波斯王子)與黑暗作斗爭以拯救我的世界,我一直是玩電子游戲的忠實粉絲,我從小玩它們。但他們有時確實會感到無聊,我覺得參與其中的程度較低。今天,先進的游戲機支持虛擬游戲,并幫助我們比鍵盤或鼠標更好地感受游戲。

作為一名Arduino愛好者,我厭倦了使用鍵盤和鼠標玩名為 “憤怒的小鳥” 的著名游戲,并決定 使用Flex傳感器和電位計構(gòu)建自己的游戲控制器 。當柔性傳感器被拉動時,彈射器上的鳥也會被拉動,您可以使用電位計設置它的發(fā)射方向。然后,當您釋放柔性傳感器時,鳥將被發(fā)射。我非常喜歡這樣做,所以如果你打算構(gòu)建非常相似的東西,那么本教程將很有幫助。本教程還將有助于 使用電位計控制鼠標光標 。

軟件和硬件要求:

軟件:

  1. Arduino IDE
  2. 處理集成開發(fā)環(huán)境
  3. 憤怒的小鳥游戲在電腦

硬件:

  1. Arduino (任何版本)
  2. 電位計
  3. 柔性傳感器
  4. 47K 歐姆電阻器
  5. 連接線
  6. 面包板

背后的概念:

Arduino 板從電位計和 Flex Senor 讀取值 ,并通過正常的 Serial.write() 函數(shù)通過 USB COM 端口將它們傳輸?shù)焦P記本電腦/PC。然后,我們使用 Processing 讀取此信息,并使用 Java 中的 Robot 類控制鼠標光標,該類受 Process IDE 支持。我們對處理 IDE 進行了編程,當拉動 Flex 傳感器時,將單擊鼠標,并且根據(jù)拉動的程度,鼠標指針將沿 X 方向移動。然后根據(jù)電位計的值,我們將在 Y 方向上移動鼠標光標,這樣我們就可以設置應該發(fā)射鳥的方向。

使用柔性傳感器和電位計玩憤怒的小鳥游戲

電路圖:

使用柔性傳感器和電位計播放憤怒的小鳥的電路很簡單。

我們已經(jīng)簡單地將電位計和柔性傳感器連接到Arduino的模擬輸入(A0,A1)。Flex 傳感器的輸出也使用 47K 下拉電阻下拉。

您可以直接將其連接到面包板上或?qū)⑺鼈兒附拥?Perf 板上,然后將其組裝在手套或其他東西上以使其更具創(chuàng)意。我只是使用面包板進行連接,如下所示:

基于Arduino的憤怒的小鳥游戲控制器使用柔性傳感器電路圖

Arduino 計劃:

完整的Arduino代碼在本教程結(jié)束時給出。下面解釋幾個重要的行。

我們初始化程序以使用 9600 波特率,并開始從 Flex 傳感器和電位計讀取值。眾所周知*,serial.write()* 函數(shù)一次只能發(fā)送一個字節(jié)的數(shù)據(jù)。由于一個字節(jié)是 8 位,2^8 = 256。我們將能夠發(fā)送從 0 到 256 的值。因此,我們必須將 Flex 傳感器輸出和電位計輸出的值壓縮為 0 到 256。

為此,我們使用 Arduino 中的 map() 函數(shù)。來自柔性傳感器的所有值都從 5 轉(zhuǎn)換為 100,因此當我們彎曲傳感器時,它將從 5 遞增,釋放時它將回到 5。提及鼠標單擊,使用值 1 和 0。發(fā)送 1 時按下鼠標,發(fā)送 0 時釋放鼠標。

if (FlexValue>=65 && FlexValue<=120) //my flex sensor varies from 65 to 120, your might be different
  {
  FlexValue = map (FlexValue,120,65,0,100);  //based on bending convert to 0 to 100

  if (FlexValue>=5) // 1 and 0 is used for mouse click so start from 5
   {
   Mclick=true;
   Serial.write(1);  //1 is sent to make mouse left click
   Serial.write(FlexValue); //Flex value is the distance to move mouse in X direction
   }

  else
  {
  Mclick=false;
  Serial.write(0);}
  }

類似地,電位計中的值從 101 轉(zhuǎn)換為 200,通過 map( ) 函數(shù),并發(fā)送到筆記本電腦 COM 端口,通過 Serial.write() 函數(shù),如下所示。

if (potValue<=200)
 {
  potValue = map(potValue,0,200,101,201); //Based in turn convert to 101 to 201
  Serial.write(potValue); //Pot value is the distance to move mouse in Y direction
 }

程序的其余部分使用注釋進行解釋。

在此項目中,我們使用處理 IDE 來讀取 COM 端口值,并根據(jù)通過 COM 端口接收的值控制鼠標指針。這個憤怒的小鳥游戲控制器的完整處理代碼可以從以下鏈接下載

Arduino程序可以在本教程的末尾找到。處理代碼已根據(jù) yoggy 在他的 GitHub 頁面上給出的代碼進行了修改以適應我們的目的。

來自COM端口的數(shù)據(jù)應以與從Arduino發(fā)送的數(shù)據(jù)相同的波特率讀取。此外,使用設備管理器檢查Arduino連接的COM端口。我的Arduino連接到COM3,它是0^千^我電腦中的端口和Arduino中的波特率為9600,因此代碼如下

port = new Serial(this,Serial.list()[0],9600);

一旦我們開始閱讀這些值,我們就可以通過根據(jù)它從 Arduino 發(fā)送的值來識別它來區(qū)分它。這些值再次從 0 映射到 100,以便我們能夠根據(jù)該值控制鼠標。

if (port.available()>0)
  {
    data=port.read();
    println(data); //Read the data from COM port and save it in data
  }

  if (data>=101 && data<=201) //If the value if from 101 to 201 then it must be from Potentiometer
  {
    Turn = int (map (data,101,201,0,100)); //Use that value to turn the catapullt
  }

  if (data>=5 && data <=100)  //If the value if from 5 to 100 then it must be from Flex Sensor
  { Pull = int (map(data,5,100,0,100));} //Use that value to pull the catapult

  if (data == 1)
  click = true; //Use that value to press the mouse button

  if (data == 0)
  click = false; //Use that value to release the mouse button

對數(shù)據(jù)進行分類后,我們就可以在處理中使用機器人 Java 類控制鼠標。命令robot.mouseMove(crntX-Pull, crntY+Turn); 可用于將鼠標移動到任何所需InputEvent.BUTTON1_DOWN_MASK InputEvent.BUTTON1_DOWN_MASK位置,并分別用于按下或釋放鼠標按鈕。

if (click == false) //when Flex Sesnor is not pulled
  {
  crntX = (int)p.getX() ; crntY = (int)p.getY() ;
  if (Pull>50)
  robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); //Release the mouse button
  }


  if (click == true) //when Flex Sesnor is pulled
  {
   robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); //Press the mouse Button
   robot.mouseMove(crntX-Pull, crntY+Turn); //Move the mouse based on the Flex and POT value
  }
}

啟動時,處理 IDE 還將顯示一個小對話框,您可以在其中找到“拉動”、“轉(zhuǎn)動”的值和“鼠標單擊”的狀態(tài),如下所示

憤怒的小鳥游戲控制器鼠標位置

加工:

要使用提供的代碼使這個憤怒的小鳥項目工作,請根據(jù)電路圖組裝您的硬件并上傳給定的 Arduino 代碼。然后記下您的Arduino連接到哪個COM端口,并在處理代碼中進行必要的更改并啟動處理草圖。

現(xiàn)在,只需啟動憤怒的小鳥游戲并將光標放在彈射器附近,然后拉動柔性傳感器以拉動鳥并使用電位計設置方向。設置方向后,松開柔性傳感器

EEEEWWWWWEEEEEEEEEE!!!!!!!!!!...............

你的鳥會被直接拋到空中,轟??!在小豬身上。完整的工作可以在下面給出的視頻中找到。

基于Arduino的憤怒的小鳥游戲控制器,使用柔性傳感器

/*

 * Angry Bird Game Controller Program

 * Code by : B.Aswinth Raj

 * Dated : 3-8-2017

 * More details : www.circuitdigest.com

 */



void setup() {

  Serial.begin(9600); //Transmit at 9600 Baud Rate

}


boolean Mclick = false;


void loop() {

  int potValue = analogRead(A0); //variable to store potValue

  int FlexValue = analogRead(A1); //variable to store Flex Value

 // Serial.println(FlexValue);

 // Serial.print("POT: ");

 // Serial.println(potValue);

 // Serial.print("Flex: ");


  if (FlexValue>=65 && FlexValue<=115) //my flex sensor varies from 65 to 120, your might be different

  {

  FlexValue = map (FlexValue,120,65,0,100);  //based on bending convert to 0 to 100

  

  if (FlexValue>=5) // 1 and 0 is used for mouse click so start from 5

   { 

   Mclick=true; 

   Serial.write(1);  //1 is sent to make mouse left click 

   Serial.write(FlexValue); //Flex value is the distance to move mouse in X direction

   }

  else

  { 

  Mclick=false; 

  Serial.write(0);}

  }


  else

   { 

  Mclick=false; 

  Serial.write(0);}

  

 if (potValue<=200)

 {

  potValue = map(potValue,0,200,101,201); //Based in turn convert to 101 to 201

  Serial.write(potValue); //Pot value is the distance to move mouse in Y direction

 }


  delay(500);     //stability delay   

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

    關(guān)注

    187

    文章

    6453

    瀏覽量

    185916
  • 電位計
    +關(guān)注

    關(guān)注

    0

    文章

    253

    瀏覽量

    16905
  • 游戲控制器
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    2992
收藏 人收藏

    評論

    相關(guān)推薦

    憤怒小鳥:太空版》PC版本全球首發(fā)

    3月22日,備受期待的人氣游戲憤怒小鳥:太空版》震撼發(fā)布,360安全桌面獨家獲得中國地區(qū)PC版首發(fā)權(quán),也于當日全球同步上線。新場景、新玩法、新造型、新關(guān)卡……《憤怒
    發(fā)表于 03-23 11:47 ?1045次閱讀

    如何使用8051微控制器構(gòu)建一個簡單的數(shù)字溫度

    有時,由于波動,人們發(fā)現(xiàn)很難從模擬溫度讀取溫度。因此,在這里我們將使用8051微控制器構(gòu)建一個簡單的數(shù)字溫度,其中LM35傳感器用于測量
    的頭像 發(fā)表于 11-21 16:38 ?3027次閱讀
    如何使用8051微<b class='flag-5'>控制器</b><b class='flag-5'>構(gòu)建</b>一個簡單的數(shù)字溫度<b class='flag-5'>計</b>

    憤怒小鳥 漢化版 1.5.3

    這款游戲的故事相當有趣,為了報復偷走鳥蛋的肥豬們,鳥兒以自己的身體為武器,仿佛炮彈一樣去攻擊肥豬們的堡壘。游戲是十分卡通的2D畫面,看著憤怒的紅色小鳥,奮不顧身的往綠色的肥豬的堡壘砸去
    發(fā)表于 08-03 10:10

    軟件名稱:憤怒小鳥夏日版 中文破解安卓版

      1、【安卓游戲憤怒小鳥夏日版 中文破解安卓版  軟件名稱:憤怒小鳥夏日版 中文破解安卓版   軟件大小: 16.4M  軟件分
    發(fā)表于 04-16 18:12

    labview設計憤怒小鳥

    點擊學習>>《龍哥手把手教你學LabVIEW視覺設計》視頻教程用labview編寫的憤怒小鳥,模擬的程序,供大家學習。。
    發(fā)表于 05-04 20:43

    音量控制器和對數(shù)電位

    作者: TI專家Bruce Trump翻譯: TI信號鏈工程師 Rickey Xiong (熊堯) 你曾用過線性電位作為音量控制器嗎?如果你使用過,你可能會發(fā)現(xiàn),音量跳變得非??臁H绻雽⒁袅空{(diào)整
    發(fā)表于 09-20 16:30

    慣性傳感器在未來游戲控制器的應用

    慣性傳感將決定未來游戲控制器的工作方式
    發(fā)表于 04-28 08:50

    構(gòu)建DS1803/DS1805數(shù)字電位器的按鍵控制器

    構(gòu)建DS1803/DS1805數(shù)字電位器的按鍵控制器 摘要:本應用筆記介紹了一種通過幾個按鍵和一個微控制器控制數(shù)字
    發(fā)表于 08-19 12:23 ?2936次閱讀
    <b class='flag-5'>構(gòu)建</b>DS1803/DS1805數(shù)字<b class='flag-5'>電位器</b>的按鍵<b class='flag-5'>控制器</b>

    電位式壓力傳感器雙線傳輸電路

    電位式壓力傳感器雙線傳輸電路
    發(fā)表于 04-19 11:54 ?489次閱讀
    <b class='flag-5'>電位</b><b class='flag-5'>計</b>式壓力<b class='flag-5'>傳感器</b>雙線傳輸電路

    工作電壓15%Vcc≤VXDH≤85%Vcc電位傳感器電路

    工作電壓15%Vcc≤VXDH≤85%Vcc電位傳感器電路圖
    發(fā)表于 06-27 16:56 ?1014次閱讀
    工作電壓15%Vcc≤VXDH≤85%Vcc<b class='flag-5'>電位</b><b class='flag-5'>計</b><b class='flag-5'>傳感器</b>電路

    電位式位移傳感器原理與應用簡介

    電位式位移傳感器原理與應用簡介  電位器是人們常用到的一種電子元件,它作為傳感器可以將機械位移或其他能轉(zhuǎn)換為位移的
    發(fā)表于 11-25 09:13 ?7467次閱讀

    傳感器和PIC微控制器構(gòu)成相對濕度

    用一個具有容性響應的傳感器和一只PIC微控制器(MCU)就可以構(gòu)成一個相對濕度。
    發(fā)表于 06-15 14:19 ?1373次閱讀
    用<b class='flag-5'>傳感器</b>和PIC微<b class='flag-5'>控制器</b>構(gòu)成相對濕度<b class='flag-5'>計</b>

    憤怒小鳥VR:豬島》將進軍全球VR線下市場

    游戲開發(fā)商Resolution Games在一年前推出了VR游戲憤怒小鳥VR:豬島》,將公司旗下這款經(jīng)典游戲引入了VR。
    發(fā)表于 03-10 09:35 ?621次閱讀

    Unity 3D引擎制作的憤怒小鳥游戲

    Unity 3D引擎制作的憤怒小鳥游戲
    發(fā)表于 05-12 09:37 ?2次下載

    由編碼控制電位

    由編碼控制電位
    的頭像 發(fā)表于 12-14 11:35 ?456次閱讀
    由編碼<b class='flag-5'>器</b><b class='flag-5'>控制</b>的<b class='flag-5'>電位</b><b class='flag-5'>計</b>