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

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

3天内不再提示

怎样使用游戏控制器和Arduino控制机器人

454398 来源:网络整理 作者:网络整理 2019-12-03 16:39 次阅读

Arduino和类似的兼容板是世界各地DIY修补匠的首选设备之一。无论您是刚开始使用Arduino的初学者,还是已经开始使用它们的人,他们都为无数很棒的项目提供了平台。

今天,我们将探索一种创新的方式使用处理和Xbox360控制器来控制伺服器。如果您已经很精通游戏开发,那么您可能会对我们的使用Unity的Custom Game Controller教程感兴趣。

如果这是您第一次尝试Arduino摆弄,则本教程将假设您具有一点先验知识,您可能会在这里找到我们的Arduino指南。同样,如果您是第一次使用Java,可能会有些混乱。虽然Processing使用该平台的简化版本,但这些Java概念和提示仍可能会有所帮助。

您需要的内容

1个Arduino。我们今天使用的是UNO。

1个业余伺服器。一切适用于Arduino引脚的东西。

1个有线Xbox360控制器。尽管从技术上讲,这几乎可以与任何控制器一起使用。

多条连接线。

除了这些内容之外,您还需要下载Processing和Arduino IDE

准备Arduino

首先,我们需要附加伺服器。接线颜色在这里可能会有所不同,但一般来说,红色引脚会连接到 5v 引脚,并且棕色或黑色连接到 GND 引脚。数据线通常为黄色或橙色,连接到 pin 10 。

检查接线并连接Arduino到计算机。打开Arduino IDE。

打开位于文件》示例》 Firmata》 StandardFirmata 的StandardFirmata草图。此草图设置了用于通过串行端口进行外部控制的电路板,与我们在使用Python控制Arduino的文章中使用的草图相同。将草图上传到板上。

如果上传失败,请在工具菜单中检查您是否选择了正确的板和端口详细信息

我们的Arduino准备就绪!

设置处理程序

打开处理程序,您将得到一个空白的草图。在这里做任何事情之前,我们将需要安装一些库。转到素描菜单,然后选择导入库》添加库。这将打开 Contribution Manager ,对于那里的所有Arduino用户而言,它们看起来都很熟悉。

我们需要安装三个库来完成这项工作。首先是 Game Control Plus 库。这就是允许我们将游戏控制器与处理一起使用的原因。使用搜索窗口找到它,然后单击右下角的安装。 Game Control Plus需要为其配置工具安装另一个库,所以现在就开始获取它。搜索 G4P 库并安装它。

最后,我们需要 Arduino(firmata)库。您猜对了,进行搜索,然后单击安装。安装完这些东西之后,我们就可以开始测试一切正常。我们今天正在使用Windows 10,但是可用于大多数平台(包括Raspberry Pi)进行处理。想象一下可能性!

测试Arduino

在我们开始创建自定义草图之前,我们先来测试Arduino和Servo和Processing。打开文件》示例,然后从 Contributed Libraries/Arduino(firmata)文件夹中选择 ArduinoServo 。我们将使用它来测试我们的伺服器,但首先我们可能需要更改几件事。

向下滚动草图并找到以下行:

println(Arduino.list());

如果已将其注释掉,请在 println(Arduino.list()); 之前删除两个斜杠,然后保存草图。通过单击播放图标运行它,并注意底部的控制台。这将列出连接到您的 COM 端口的所有内容。

就我而言,我的Arduino在COM 8上这里列出的第三个端口。这很重要,因为下面一行中的代码有一个 Array ,其值确定要使用哪个COM端口。

需要更改它以反映我们的COM端口。对我来说,它是第三个位置,或索引编号2:

arduino = new Arduino(this, Arduino.list()[2], 57600);

我们需要对此代码进行其他一些小的更改才能对其进行测试。向下滚动到设置Arduino引脚的位置,并在此处注释掉其中一行。将另一个更改为 Pin 10 。

//arduino.pinMode(4, Arduino.SERVO);

arduino.pinMode(10, Arduino.SERVO);

我们需要在 Draw()中执行相同的操作方法:

arduino.servoWrite(10, constrain(mouseX / 2, 0, 180));

// arduino.servoWrite(4, constrain(180 - mouseX / 2, 0, 180));

保存草图并运行。您应该能够通过在程序生成的窗口上来回移动鼠标来移动伺服器。

如果它不适用于您,检查伺服接线,并检查COM端口的阵列位置是否正确。一旦您知道Arduino与Processing的配合很好,就该继续了。

配置控制器

我们正在使用的Game Control Plus库也具有强大的配置。确保已插入控制器,打开 Configurator 示例项目,然后运行它。您将获得如下菜单:

单击您的控制器名称,将弹出一个更大的配置窗口。

这看起来似乎很艰巨,但是它的设计尽可能简单。在左侧填写第一个键,其中包含您要用作变量的名称。此变量将控制伺服器的位置,因此我将其称为 servoPos 。

在其旁边的框中,您可以对其功能进行简要说明。现在,拿起控制器并移动您希望与伺服器一起使用的操纵杆。进行一些实验后,发现右指尖与“ X旋转”框相对应。在 servoPos 变量和此框之间拖动一条线。

现在,我们需要将配置保存为数据文件。在窗口的右上方,填写设备角色字段和文件名字段。

文件名很重要,因为您会在您的代码中使用它。我将其命名为 xbs 来保持简单。点击验证,然后点击保存。这将为我们的控制器编写一个包含说明的文件,以后可以使用。

准备自定义草图文件夹

让我们进行设置我们的工作文件夹。打开一个空白的处理草图,并以您喜欢的任何名称保存。这样会在保存位置为其创建一个目录。

现在导航至 Documents/Processing/libraries/GameControlPlus/examples/Configurator ,然后复制标有 data 。此文件夹包含我们刚刚创建的配置文件。导航到新保存的空白草图的目录,然后粘贴数据文件夹。

创建自定义草图

现在所有内容到位,我们可以使用我们的两个库开始制作草图。我们将逐步进行此操作,但如果您想继续前进,可以下载完整的草图和数据文件夹。请注意,您可能仍需要修改代码以反映您的Arduino COM端口。

首先导入我们需要的所有库:

import processing.serial.*;

import net.java.games.input.*;

import org.gamecontrolplus.*;

import org.gamecontrolplus.gui.*;

import cc.arduino.*;

import org.firmata.*;

我们还需要声明 ControlDevice , I/O 和 Arduino 以及 float 来保存值从我们的指尖开始:

ControlDevice cont;

ControlIO control;

Arduino arduino;

float thumb;

我们的 setup()方法会创建一个小窗口(控制器的实例),并将设备与我们的配置进行匹配文件。在此重要的是正确获取配置数据文件的文件名:

void setup() {

size(360, 200);

control = ControlIO.getInstance(this);

cont = control.getMatchedDevice(“xbs”);

if (cont == null) {

println(“not today chump”); // write better exit statements than me

System.exit(-1);

}

// println(Arduino.list());

arduino = new Arduino(this, Arduino.list()[2], 57600);

arduino.pinMode(10, Arduino.SERVO);

}

我们还在此阶段检查是否没有适用的控制器,然后退出该程序是否需要。虽然不需要使用 size()创建的窗口,但稍后会向我们提供一些有关是否从控制器中获取有用值的反馈。我们也像测试时一样初始化Arduino并将其固定在此处。

现在,我们创建一个小方法来从控制器中获取输入值,并将其映射到我们的伺服器将能够使用的值:

public void getUserInput() {

thumb = map(cont.getSlider(“servoPos”).getValue(), -1, 1, 0, 180);

}

这一行代码使用我们的数据文件来获取命名控件 servoPos ,该控件链接到控制器的右指尖,并从中读取值。然后它将值映射,并将值存储在我们的 thumb float变量中。

现在此代码从未调用过,我们现在将对其进行修复。

void draw() {

getUserInput();

background(thumb,100,255);

arduino.servoWrite(10, (int)thumb);

}

draw()与Arduino IDE中的 loop()方法相似。每帧,它调用 getUserInput()方法并更新拇指值。它使用此值来更改 background()的红色值,从而使我们可以直观地看到值的变化。然后使用 arduino.servoWrite()函数将此值写入伺服器。请注意,我们必须将 thumb 强制转换为整数值,因为ServeWrite函数将两个整数(引脚号和角度)作为参数

检查代码是否存在错误,保存并单击运行。在稍稍延迟了Arduino的初始化之后,它看起来应该像这样:

使用游戏控制器和Arduino进行控制:已完成!

尽管经验丰富的代码库可以为我们提供帮助,但该项目在很多方面对于经验不足的编码人员来说都是相当深入的。它代表着一种思考控制机器人以及您所构建的任何其他设备的新方式。

该项目将与我们有关构建激光炮塔的指南完美配合,使您可以完全控制它。您可以像我们的Simple Arduino Alarm教程中那样设置压电式蜂鸣器,并使用控制器来更改蜂鸣器的音高或灯光的颜色。

或者,您可以构建一个大型机器人并采用在地球上。只要您的USB线足够长!
责任编辑:wv

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

    关注

    112

    文章

    15526

    浏览量

    173453
  • 机器人
    +关注

    关注

    208

    文章

    27401

    浏览量

    202398
  • Arduino
    +关注

    关注

    186

    文章

    6439

    浏览量

    185427
收藏 人收藏

    评论

    相关推荐

    基于FPGA EtherCAT的六自由度机器人视觉伺服控制设计

    和增强系统处理图像的实时性,本文提出了一种伊瑟特的六自由度机器人视觉伺服控制系统,将摄像头集成到基于 Zynq的伊瑟特主站上,提高了视觉伺服的实时性.经测试,该平台能够对视觉检测目标的变化做出及时的反应
    发表于 05-29 16:17

    基于飞凌嵌入式RK3568J核心板的工业机器人控制器应用方案

    控制系统当中。那么今天,我们就通过多轴工业机器人来聊聊机器人控制系统以及控制器的实现。 1 机器人
    发表于 05-11 09:40

    基于OpenVINO™的诺达佳机器人控制器实战

    诺达佳机器人控制器,搭载英特尔处理器,以其强大的性能和稳定性,为AI机器人长期无故障运行提供了坚实的基础。
    的头像 发表于 04-20 10:34 584次阅读
    基于OpenVINO™的诺达佳<b class='flag-5'>机器人</b><b class='flag-5'>控制器</b>实战

    开源项目!教你如何复刻自平衡赛车机器人、智能家居中控、竞技机器人先进模糊控制器

    ;gt;>点此查看全文 3.全志XR806基于FreeRTOS下部署竞技机器人先进模糊控制器 前言 很荣幸参与到由全志在线举办的XR806开发板试用活动。本人热衷于各种的开发板的开发,同时
    发表于 12-26 09:17

    LabVIEW的六轴工业机器人运动控制系统

    LabVIEW开发六轴工业机器人运动控制系统 本项目开发了一个高效的工业机器人控制系统,重点关注于运动学算法和轨迹规划算法的实现和测试。LabVIEW作为一个关键技术,在项目中扮演了核
    发表于 12-21 20:03

    利用Arduino机器人学会识别标识并作出行为

    教你用Arduino机器人学会识别标识并作出行为。你的人工智能小车从此有了眼睛!材料单:跟踪机器人底盘视觉传感Arduino Uno电动
    发表于 09-27 07:36

    Arduino教学机器人的使用教程

    本文档的主要内容详细介绍的是Arduino教学机器人的使用教程
    发表于 09-27 06:53

    使用Arduino和PAJ7620手势传感制作手势控制机器人

    使用Arduino和PAJ7620手势传感制作手势控制机器人,简单程序即可实现。小小的传感可以识别各种手势。它采用内置的空间传感
    发表于 09-27 06:17

    教你做个PID控制巡线机器人

    在本项目中,我们将学习如何使用带PID控制器的线跟随机器人使用Arduino Nano来解决迷宫。
    发表于 09-25 06:54

    【IoT毕设】机智云平台+STM32+树莓派的草莓采摘机器人控制系统

    采摘耗时长成本大的问题,提出了一种全向移动的草莓采摘机器人系统方案。 系统的硬件电路主要包括以STM32F407ZGT6为核心的主控制器、电源电路、WIFI模块、激光测距单元、电机驱动模块。系统
    发表于 08-16 17:35

    DIY机器人控制器

    电子发烧友网站提供《DIY机器人控制器.zip》资料免费下载
    发表于 07-10 15:22 1次下载
    DIY<b class='flag-5'>机器人</b><b class='flag-5'>控制器</b>

    PLC与机器人控制器的关系

    机器人控制器机器人系统的核心部件,负责接收来自PLC或其他传感器的指令,并根据这些指令控制机器人的运动和操作。
    发表于 07-10 11:07 2453次阅读

    由Alexa Echo控制Arduino机器人

    电子发烧友网站提供《由Alexa Echo控制Arduino机器人.zip》资料免费下载
    发表于 07-10 09:09 0次下载
    由Alexa Echo<b class='flag-5'>控制</b>的<b class='flag-5'>Arduino</b><b class='flag-5'>机器人</b>

    制作Arduino控制机器人

    电子发烧友网站提供《制作Arduino控制机器人.zip》资料免费下载
    发表于 07-06 14:21 0次下载
    制作<b class='flag-5'>Arduino</b><b class='flag-5'>控制</b>的<b class='flag-5'>机器人</b>

    Arduino控制的Delta机器人

    电子发烧友网站提供《Arduino控制的Delta机器人.zip》资料免费下载
    发表于 07-05 11:01 4次下载
    <b class='flag-5'>Arduino</b><b class='flag-5'>控制</b>的Delta<b class='flag-5'>机器人</b>