Xbox360控制器陀螺仪转向模块的制作

电子说

1.3w人已加入

描述

步骤1:您将需要:

工具:

烙铁

焊料

焊料吸盘/编织物

剥线钳

一把螺丝起子,也许是梅花刀取决于控制器中的螺钉(我的是十字头)

胶水(最好不是超强胶水,以便以后可以拆开)

USB到串行适配器以对Arduino进行编程

材料:

Xbox 360控制器(duh!)

Arduino Pro Mini(或克隆)(最好为3.3V)。如果使用5V版本,则可能需要一个升压转换器)

MPU-6050陀螺仪/加速度计

MCP4725 DAC(如果要控制两个轴,则为两个) )

一些细导线

一个面包板,因此您可以在焊接前进行所有测试(可选,但建议使用)

第2步:分开控制器

您必须卸下七颗螺钉。其中有六个很明显,但第七个在标签后面。我认为删除它会使您的保修失效,因此,后果自负。许多指南说您需要Torx螺丝刀,但是我的却是十字头,因此请检查您的控制器。

然后,小心地撬开后盖。如果撬开前面板,则按钮会溢出,可能会散布到整个房间。从底部将其提起。然后拔下两个振动电机。 (重量较小的一个应该在左侧,重量较大的一个应该在右侧)将PCB取出,并取下模拟摇杆上的橡胶盖。他们只是简单地拉开了。

下一步是移除左侧的模拟摇杆,以免干扰我们的输入,但是左侧的触发机制妨碍了这种操作。为了将其卸下,您必须从板子的前部拆下电位计的三个引脚,然后从PCB上拆下该机构的盖。

接下来,请拆下固定左模拟杆的14个引脚。然后拉开摇杆。

步骤3:将组件固定到位

您将请注意,PCB背面和外壳之间有很大的间隙。

我稍后才意识到,但是这是取消在Arduino上重置按钮的好时机。如果不这样做,则在重新组装时如果拧紧其中一个螺钉,它将压在盒体的背面并使项目停止工作。

我用胶水粘了一块薄卡粘贴到每个PCB的背面以使其绝缘,然后将其粘贴到控制器的PCB上。我不愿使用胶水,但想不出更好的方法。

图像中的位置是我能找到的最佳组合。 Arduino位于左侧,带有复位按钮的边缘与右侧触发机构的塑料片齐平,另一侧位于电线下方,并且拐角尽可能靠近白色连接器。外壳略微隆起,但找不到更好的放置位置。

加速度计在电线的右侧。它应该尽可能平坦和笔直,否则您可能需要稍后编写一些代码来补偿偏移量。请注意,在盒子的背面有一些突出的塑料块,请务必避免。我发现您可以在突出的塑料片上放一些像口红这样的粘性和彩色的东西,然后将后盖放在上面,看看它留下的痕迹。

DAC进入左下角。如果要控制两个轴,这里有足够的空间来堆叠两个DAC,一个堆叠在另一个之上。您无需将它们粘下来。他们将仅通过焊接连接就可以呆在原处。如果要在它们之间粘贴卡,请确保切开卡,以使SCL,SDA,VCC和GND可以访问,因为您将从两侧访问它们。

如果使用两个DAC,请不要忘记切换地址跳线并禁用其中之一的上拉电阻,如下所述:https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog-converter-hookup-指南

步骤4:焊接导线

陀螺仪

现在您已经拥有连接一切。来自所有2/3设备的VCC,GND,SDA和SCL应分别连接到Arduino上的VCC,GND,A4和A5。 DAC是最棘手的部分。如果您有两个,则必须将它们连接在一起,而在某个地方可以将电源和线路连接到加速度计,同时保持OUT线分开。

DAC的OUT引脚应连接到控制器PCB上的引脚,该引脚曾经是模拟摇杆的中间水平电位器引脚。也就是说,在模拟摇杆所在的位置,顶部有三排针。将其连接到中间一个。如果您有另一个DAC,则以相同的方式将其连接到垂直电位计引脚(左侧的行)。更换扳机后,您将无法从背面触到引脚,因此必须将电线连接至电路板的正面。模拟摇杆区域周围有一个圆形的塑料“墙”,但是幸运的是其中有一个方便的间隙,您可以将电线穿过。确保电线不会挡住机箱前部的螺丝柱。

我最初的计划是通过连接到RAW引脚的USB电缆用5V电压为Arduino供电,但是当我尝试时,它没有用。 Arduino没有运行任何东西,几秒钟后Arduino和控制器都关闭了。但是,我发现板子正面靠近黑色外围设备插座的两个引脚有一个稳定的3.3V输出,大概是为外围设备供电。它适用于VCC和RAW,但我选择VCC是因为它已经是正确的电压,并且因为它允许我将其焊接到板底部附近的DAC的VCC线上并节省导线。

请注意,必须从外壳上伸出很多塑料零件,但是如果将电线粘在适当的位置,则只需担心一次。

所有其中很难用文字来描述,所以我提供了图片和粗略的图表。

第5步:对Arduino进行编程

现在您有了对Arduino进行编程。这需要移动控制器上的USB电缆,以便您可以访问Arduino上的串行引脚。我已经包含了我使用的代码。它需要Adafruit MCP4725库,可以在这里找到:https://github.com/adafruit/Adafruit_MCP4725

按原样,该代码使您可以遍历模拟摇杆的整个运动范围通过将控制器向左90度均匀移动,向右90度均匀移动,并通过将其保持平坦状态将其保持在中间。

它通过计算X的反切线来获得控制器的角度轴g力除以Z轴g力。这意味着它可以在控制器垂直,平坦或两者之间有任何角度时使用。 (更多信息,请访问:https://www.digikey.com/en/articles/techzone/2011/may/using-an-accelerometer-for-inclination-sensing)

在我的控制器上有效,但是其他控制器可能需要不同的电压,使其无法对齐。我认为找到电压范围的最佳方法是反复试验。许多游戏都会为您显示模拟摇杆运动的滑块,但是我发现确定运动的最准确方法是在Linux上使用jstest。 (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API)它为您提供-32,767到32,767之间的数字,而不是图形,因此您可以确切地知道操纵杆的位置。将控制器和Arduino USB插入串行适配器,加载jstest并尝试不同的DAC值,直到达到范围的顶部和底部,并记下每个范围。对我来说,它是1,593-382。

第36行是特别令人感兴趣的地方:

dacvalue = (controllerangle + 2.5617859169446084418) / 0.0025942135867793503208 + 0.5;

目前尚不清楚它的作用。简单来说,它获取控制器的角度(以弧度为单位,在〜1.57和〜-1.57之间测量),并将其转换为DAC的1593至382之间的值。如果您有不同的DAC范围,则需要更改该行。

该行可以写为:

dacvalue = (controllerangle + ) / + 0.5;

使用和是您需要更改的数字。 等于控制器角度(pi)的范围除以DAC值的总范围。 (范围的顶部减去范围的底部)这可以使您尽可能地改变电压,尽管结果将超出所需的范围。这就是为什么您需要的原因。 等于乘以范围的底部再加上控制器运动范围的一半。 (pi/2)将运动范围的一半相加,以确保它不是负数,然后将乘以范围的底部,以确保其与所需的范围同步。

转换时小数点为整数,C ++不舍入。取而代之的是,它会舍去小数,因此9.9变成9。最后加0.5可以确保一半以上的内容都可以到达下一个整数,因此可以四舍五入。

一旦您上传了程序,make

第6步:重新组装控制器

将控制器拆回的方式与您拆开控制器的方式相同(减去左侧)模拟棒。现在应该可以工作了。我发现没有明显的延迟,而且比使用模拟摇杆要好得多。因为它使用加速度计,所以会受到突然运动的影响,但是您必须格外注意它。

步骤7:可能的改进

可以进行一些改进。其中包括:

使用较少的电磁线

将所有内容蚀刻到一个旨在适合控制器外壳的PCB上

重新连接左侧的模拟杆并将支脚连接到Arduino上的模拟输入,以便它们可以用于调整Arduino

获取无线控制器的后壳并将项目放入电池仓(这需要将电池USB电缆孔)
        责任编辑:wv

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分