0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用Flex传感器和电位计构建愤怒小鸟的游戏控制器

科技观察员 来源:circuitdigest 作者:阿斯文斯·拉吉 2023-01-25 16:02 次阅读

这一切都始于黑暗时代的一款名为“马里奥”的小游戏,从一个小家伙跳上鸭子拯救我的公主到成为一个阳刚英俊的王子在波斯漫游(波斯王子)与黑暗作斗争以拯救我的世界,我一直是玩电子游戏的忠实粉丝,我从小玩它们。但他们有时确实会感到无聊,我觉得参与其中的程度较低。今天,先进的游戏机支持虚拟游戏,并帮助我们比键盘或鼠标更好地感受游戏。

作为一名Arduino爱好者,我厌倦了使用键盘和鼠标玩名为 “愤怒的小鸟” 的著名游戏,并决定 使用Flex传感器和电位计构建自己的游戏控制器 。当柔性传感器被拉动时,弹射器上的鸟也会被拉动,您可以使用电位计设置它的发射方向。然后,当您释放柔性传感器时,鸟将被发射。我非常喜欢这样做,所以如果你打算构建非常相似的东西,那么本教程将很有帮助。本教程还将有助于 使用电位计控制鼠标光标

软件和硬件要求:

软件:

  1. Arduino IDE
  2. 处理集成开发环境
  3. 愤怒的小鸟游戏在电脑

硬件:

  1. Arduino (任何版本)
  2. 电位计
  3. 柔性传感器
  4. 47K 欧姆电阻器
  5. 连接线
  6. 面包板

背后的概念:

Arduino 板从电位计和 Flex Senor 读取值 ,并通过正常的 Serial.write() 函数通过 USB COM 端口将它们传输到笔记本电脑/PC。然后,我们使用 Processing 读取此信息,并使用 Java 中的 Robot 类控制鼠标光标,该类受 Process IDE 支持。我们对处理 IDE 进行了编程,当拉动 Flex 传感器时,将单击鼠标,并且根据拉动的程度,鼠标指针将沿 X 方向移动。然后根据电位计的值,我们将在 Y 方向上移动鼠标光标,这样我们就可以设置应该发射鸟的方向。

使用柔性传感器和电位计玩愤怒的小鸟游戏

电路图:

使用柔性传感器和电位计播放愤怒的小鸟的电路很简单。

我们已经简单地将电位计和柔性传感器连接到Arduino的模拟输入(A0,A1)。Flex 传感器的输出也使用 47K 下拉电阻下拉。

您可以直接将其连接到面包板上或将它们焊接到 Perf 板上,然后将其组装在手套或其他东西上以使其更具创意。我只是使用面包板进行连接,如下所示:

基于Arduino的愤怒的小鸟游戏控制器使用柔性传感器电路图

Arduino 计划:

完整的Arduino代码在本教程结束时给出。下面解释几个重要的行。

我们初始化程序以使用 9600 波特率,并开始从 Flex 传感器和电位计读取值。众所周知*,serial.write()* 函数一次只能发送一个字节的数据。由于一个字节是 8 位,2^8 = 256。我们将能够发送从 0 到 256 的值。因此,我们必须将 Flex 传感器输出和电位计输出的值压缩为 0 到 256。

为此,我们使用 Arduino 中的 map() 函数。来自柔性传感器的所有值都从 5 转换为 100,因此当我们弯曲传感器时,它将从 5 递增,释放时它将回到 5。提及鼠标单击,使用值 1 和 0。发送 1 时按下鼠标,发送 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 转换为 200,通过 map( ) 函数,并发送到笔记本电脑 COM 端口,通过 Serial.write() 函数,如下所示。

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 端口值,并根据通过 COM 端口接收的值控制鼠标指针。这个愤怒的小鸟游戏控制器的完整处理代码可以从以下链接下载

Arduino程序可以在本教程的末尾找到。处理代码已根据 yoggy 在他的 GitHub 页面上给出的代码进行了修改以适应我们的目的。

来自COM端口的数据应以与从Arduino发送的数据相同的波特率读取。此外,使用设备管理器检查Arduino连接的COM端口。我的Arduino连接到COM3,它是0^千^我电脑中的端口和Arduino中的波特率为9600,因此代码如下

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

一旦我们开始阅读这些值,我们就可以通过根据它从 Arduino 发送的值来识别它来区分它。这些值再次从 0 映射到 100,以便我们能够根据该值控制鼠标。

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

对数据进行分类后,我们就可以在处理中使用机器人 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 还将显示一个小对话框,您可以在其中找到“拉动”、“转动”的值和“鼠标单击”的状态,如下所示

愤怒的小鸟游戏控制器鼠标位置

加工:

要使用提供的代码使这个愤怒的小鸟项目工作,请根据电路图组装您的硬件并上传给定的 Arduino 代码。然后记下您的Arduino连接到哪个COM端口,并在处理代码中进行必要的更改并启动处理草图。

现在,只需启动愤怒的小鸟游戏并将光标放在弹射器附近,然后拉动柔性传感器以拉动鸟并使用电位计设置方向。设置方向后,松开柔性传感器

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   

}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Arduino
    +关注

    关注

    188

    文章

    6468

    浏览量

    186901
  • 电位计
    +关注

    关注

    0

    文章

    253

    浏览量

    16956
  • 游戏控制器
    +关注

    关注

    0

    文章

    15

    浏览量

    3009
收藏 人收藏

    评论

    相关推荐

    愤怒小鸟:太空版》PC版本全球首发

    3月22日,备受期待的人气游戏愤怒小鸟:太空版》震撼发布,360安全桌面独家获得中国地区PC版首发权,也于当日全球同步上线。新场景、新玩法、新造型、新关卡……《愤怒
    发表于 03-23 11:47 1082次阅读

    如何使用8051微控制器构建一个简单的数字温度

    有时,由于波动,人们发现很难从模拟温度读取温度。因此,在这里我们将使用8051微控制器构建一个简单的数字温度,其中LM35传感器用于测量
    的头像 发表于 11-21 16:38 3266次阅读
    如何使用8051微<b class='flag-5'>控制器</b><b class='flag-5'>构建</b>一个简单的数字温度<b class='flag-5'>计</b>

    电位原理传感器# 电位# 传感器

    电位
    hbhxcg7865
    发布于 :2024年10月08日 09:58:04

    愤怒小鸟 汉化版 1.5.3

    这款游戏的故事相当有趣,为了报复偷走鸟蛋的肥猪们,鸟儿以自己的身体为武器,仿佛炮弹一样去攻击肥猪们的堡垒。游戏是十分卡通的2D画面,看着愤怒的红色小鸟,奋不顾身的往绿色的肥猪的堡垒砸去
    发表于 08-03 10:10

    软件名称:愤怒小鸟夏日版 中文破解安卓版

      1、【安卓游戏愤怒小鸟夏日版 中文破解安卓版  软件名称:愤怒小鸟夏日版 中文破解安卓版   软件大小: 16.4M  软件分
    发表于 04-16 18:12

    labview设计愤怒小鸟

    点击学习>>《龙哥手把手教你学LabVIEW视觉设计》视频教程用labview编写的愤怒小鸟,模拟的程序,供大家学习。。
    发表于 05-04 20:43

    音量控制器和对数电位

    作者: TI专家Bruce Trump翻译: TI信号链工程师 Rickey Xiong (熊尧) 你曾用过线性电位作为音量控制器吗?如果你使用过,你可能会发现,音量跳变得非常快。如果想将音量调整
    发表于 09-20 16:30

    惯性传感器在未来游戏控制器的应用

    惯性传感将决定未来游戏控制器的工作方式
    发表于 04-28 08:50

    构建DS1803/DS1805数字电位器的按键控制器

    构建DS1803/DS1805数字电位器的按键控制器 摘要:本应用笔记介绍了一种通过几个按键和一个微控制器控制数字
    发表于 08-19 12:23 3020次阅读
    <b class='flag-5'>构建</b>DS1803/DS1805数字<b class='flag-5'>电位器</b>的按键<b class='flag-5'>控制器</b>

    电位式压力传感器双线传输电路

    电位式压力传感器双线传输电路
    发表于 04-19 11:54 502次阅读
    <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电位传感器电路图
    发表于 06-27 16:56 1037次阅读
    工作电压15%Vcc≤VXDH≤85%Vcc<b class='flag-5'>电位</b><b class='flag-5'>计</b><b class='flag-5'>传感器</b>电路

    电位式位移传感器原理与应用简介

    电位式位移传感器原理与应用简介  电位器是人们常用到的一种电子元件,它作为传感器可以将机械位移或其他能转换为位移的
    发表于 11-25 09:13 7649次阅读

    愤怒小鸟VR:猪岛》将进军全球VR线下市场

    游戏开发商Resolution Games在一年前推出了VR游戏愤怒小鸟VR:猪岛》,将公司旗下这款经典游戏引入了VR。
    发表于 03-10 09:35 656次阅读

    Unity 3D引擎制作的愤怒小鸟游戏

    Unity 3D引擎制作的愤怒小鸟游戏
    发表于 05-12 09:37 2次下载

    由编码控制电位

    由编码控制电位
    的头像 发表于 12-14 11:35 572次阅读
    由编码<b class='flag-5'>器</b><b class='flag-5'>控制</b>的<b class='flag-5'>电位</b><b class='flag-5'>计</b>