这一切都始于一个黑暗时代的小游戏“ Mario”,从一个小家伙跳鸭救我的公主开始,到在波斯(波斯王子)漫游的男性化英俊的王子,与黑暗作斗争。为了保护自己的世界,我一直是玩电子游戏的忠实粉丝,我从小就玩电子游戏。但是有时候他们确实很无聊,我觉得参与其中的次数减少了。如今,先进的游戏机可实现虚拟游戏,并帮助我们感觉比键盘或鼠标更好的游戏体验。
作为一名Arduino爱好者,我很累使用键盘和鼠标玩着名叫“ Angry Birds”的游戏,并决定使用Flex传感器和电位计来构建自己的游戏控制器。当拉动挠曲传感器时,弹射器上的小鸟也会被拉动,您可以使用电位计来设置其发射方向。然后,当您松开挠曲传感器时,鸟便会被发射。我非常喜欢这样做,因此,如果您打算构建非常相似的内容,那么本教程将对您有所帮助。本教程还将对使用电位计控制鼠标光标有所帮助。
软件和硬件要求:
软件:
- Arduino IDE
- 处理IDE
- 计算机上的愤怒的小鸟游戏
硬件:
- Arduino(任何版本)
- 电位器
- 柔性传感器
- 47K欧姆电阻
- 连接线
- 面包板
背后的概念:
在Arduino板读取来自电位器和Flex阅兵式值经由正常的USB COM口,并将它们传送到笔记本电脑/ PC Serial.write() 函数。然后,我们使用处理来读取此信息,并使用Java的Robot类来处理鼠标光标,该类受处理IDE的支持。我们已经对处理IDE进行了编程,以便在拉动Flex传感器时单击鼠标,然后根据鼠标被拉动的程度将鼠标指针沿X方向移动。然后,根据电位计的值,我们将鼠标光标沿Y方向移动,这样我们就可以设置应该发射鸟的方向。
电路原理图:
使用柔性传感器和电位计播放愤怒的小鸟的电路很简单。
我们已经简单地将电位计和柔性传感器连接到Arduino的模拟输入(A0,A1)。Flex传感器的输出也使用47K下拉电阻下拉。
您可以将其直接连接到面包板上,也可以将其焊接到Perf板上,然后用手套或类似物组装起来,使其更具创造力。我仅使用面包板进行连接,如下所示:
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时释放鼠标。
如果(FlexValue> = 65 && FlexValue <= 120)//我的柔性传感器在65到120之间变化,则可能会有所不同{FlexValue = map(FlexValue,120,65,0,100); //如果(FlexValue> = 5)// 1和0用于鼠标单击,则基于弯曲将转换为0到100,因此从5开始{Mclick = true; Serial.write(1); // 1发送以使鼠标左键单击Serial.write(FlexValue); // Flex值是在X方向上移动鼠标的距离} else {Mclick = false; Serial.write(0);}}
类似地,使用 map() 函数将电位器的值从101转换为200,然后使用 Serial.write() 函数将其发送到Laptops COM端口,如下所示。
如果(potValue <= 200){potValue = map(potValue,0,200,101,201); //依次将其转换为101到201 Serial.write(potValue); // Pot值是鼠标在Y方向上移动的距离}
程序的其余部分使用注释进行解释。
处理代码:
处理是一个开源开发应用程序,可以轻松下载并用于使用Arduino或其他微控制器开发有趣的项目。我们已经使用“处理”完成了一些项目,您可以通过单击以下链接来检出它们。
- DIY FM广播使用处理
- 使用Arduino的虚拟现实/手势控制
- 使用Arduino的私人聊天室。
- 使用处理APP和超声波传感器的Arduino雷达系统
- 使用Arduino进行实时人脸检测和跟踪
- 使用Arduino和处理的DIY车速表
- 使用Arduino加速度计进行乒乓游戏
- 使用Arduino的Biped机器人
- DIY Arduino热成像相机
在此项目中,我们使用了处理IDE来读取COM端口值,并根据通过COM端口接收的值来控制鼠标指针。可以从下面的链接下载此愤怒的小鸟游戏控制器的完整处理代码:
- 此愤怒的小鸟游戏控制器的处理代码 (右键单击并单击“另存为”)
Arduino程序可以在本教程的结尾找到。yoggy在其GitHub页面上提供的代码已修改了Processing代码以适合我们的目的。
来自COM端口的数据应以与Arduino发送数据相同的波特率进行读取。另外,使用设备管理器检查Arduino连接了哪个COM端口。我的Arduino已连接到COM3,它是计算机中的第0个端口,而Arduino中的波特率是9600,因此代码如下
port =新的Serial(this,Serial.list(),9600);
一旦我们开始读取值,就可以根据其从Arduino发送来的值来识别它,从而对其进行区分。这些值再次从0映射到100,以便我们能够基于该值控制鼠标。
如果(port.available()> 0){data = port.read(); println(data); //从COM端口读取数据并将其保存在数据中} if(data> = 101 && data <= 201)//如果值从101到201,则必须来自电位计{Turn = int(map(data ,101,201,0,100)); //使用该值将catapullt}设为if(data> = 5 && data <= 100)//如果该值从5到100,则该值必须来自Flex Sensor {Pull = int(map(data,5,100, 0,100));} //如果(data == 1)click = true;,请使用该值拉动弹射器; //如果(data == 0)click = false,则使用该值按下鼠标按钮; //使用该值释放鼠标按钮
对数据进行分类后,便可以使用“处理中的Robot Java类”来控制鼠标。命令 robot.mouseMove(crntX-Pull,crntY + Turn); 可用于将鼠标移动到任何所需位置,并且行 robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); 和 robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); 可分别用于按下或释放鼠标按钮。
if(click == false)//未拉出Flex Sesnor {crntX =(int)p.getX(); crntY =(int)p.getY(); 如果(Pull> 50)robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); //如果// click == true,则释放鼠标按钮} //拖动Flex Sesnor时{robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); //按下鼠标按钮robot.mouseMove(crntX-Pull,crntY + Turn); //根据Flex和POT值移动鼠标}}
启动处理IDE时,还将显示一个小对话框,您可以在其中找到“拉”,“转”和“鼠标单击”状态的值,如下所示:
此详细信息可用于调试程序或更正所需的任何数据。
加工:
为了使《愤怒的小鸟计划》使用提供的代码工作,请根据电路图组装硬件并上传给定的Arduino代码。然后注意您的Arduino连接到哪个COM端口,并在处理代码中进行必要的更改,然后启动处理草图。
现在,只需启动愤怒的小鸟游戏,然后将光标放在弹射器附近,然后拉动弯曲传感器拉动小鸟并使用电位计设置方向。设置方向后,松开柔性传感器
EEEEWWWWWEEEEEEEEEE !!!!!!!!!!…………………………
您的鸟儿将被抛向空中,然后呜呜!在猪场上。可以在下面的视频中找到完整的工作。
希望您喜欢这个项目并且能够构建类似的东西。如果您有任何疑问,可以在评论部分与我联系,或在论坛上发布有关技术问题的问题。
现在,是时候撞到那些存钱罐里,拿回我们的鸟蛋了!!!