Step1: 材料准备

1. Basys3入门级FPGA开发板(抓娃娃机的中枢大脑)

2. PmodCON3伺服机连接模块(用以控制伺服电机)

3. PmodSTEP步进电机驱动模块(用以控制步进电机)

4. PmodJSTK二轴操纵杆(用以控制抓娃娃机的夹手)

5. 3D打印的抓娃娃机操控台与整体机身

6. Xilinx Vivado软件

7. USB A to B micro接线

Step2: 项目编程代码

对于“抓娃娃机”这一项目的编程代码而言,最主要的部分就是状态机。状态机简而言之是一种硬件语言结构,能够让你在同一个模块下对一系列事件进行编程。很多时候,你知道你想要做什么,但你却不知道自己如何编写代码去实现它。通过状态机,你就能够以一种标准的编程结构将自己的想法有效地组织起来。


上图1就是该项目的状态机。“抓娃娃机”初始启动/复位在 wait_state(等候状态),当抓娃娃机的物理启动按钮被按下后,则进入start_state(启动状态)。从这里开始,操纵杆的数据会以不同方向的形式进入到四种不同的direction_states(方向状态)的其中之一。此时,相应的电机将被激活。在启动状态下,如果“抓娃娃机”的物理启动按钮被再次按下,则会进入一个循环,此时抓娃娃机的物理抓手会落下并抓取娃娃,无论是否抓到,都会最终回到wait_state(等候状态)。


状态机只是编程代码中的一部分,它能够帮助我们弄清楚不同电机的操作方向,以及“抓手”基于操纵杆的输入在什么时候应该打开或合拢。而与弄清楚状态机同样重要的是,我们需要知道如何实现所有组成部分之间的连接。包括:将信号从一个方向转换为可以驱动4个步进电机所需信号的步进电机接口;将“抓手”的打开/合拢信号转变为伺服电机所需要的PWM输出的伺服控制器;获取操纵杆的数据并将其转化为一个方向的操纵杆控制器;以及从限位开关和按钮获取信号,确保稳定的信号能够被传送到状态机的去抖动模块等。你可以从上图2的框图中了解所有这些组件是如何实现连接的。


在这里,我们以两种形式为有兴趣的童鞋提供了该项目的代码(点击左侧“下载代码”按钮),不使用Vivado的同学可以参见项目源代码,使用Vivado的同学则可以直接下载Vivado项目代码。代码下载完毕后,生成bit文件,然后将代码烧到Basys3开发板中。当代码烧到板上之后,你就能够在抓娃娃机的状态机代码中看到当前的状态代码,其与Basys3板上的前3个LED指示灯一一对应。

Step3: 整体机身的制作

3.1 所需用到的材料与工具

在整体机身制作部分,需要用到的材料包括:

- 大小为7.25" x 36" x 24"的亚克力板

- 1包长度为3/4"的平头螺丝

- 1包长度为1"的平头螺丝

- 1包宽度为1/4"的四角螺帽

- 1块Basys 3(或Nexys4 DDR)开发板

- 1个游戏街机按钮

- 1个PmodJSTK二轴操纵杆

- 1个PmodJSTK二轴操纵杆支架(3D打印文件见3.3)

- 1个3D打印的操纵杆手柄(可选,3D打印文件见3.3)

- 1个3D打印的放在娃娃获取盒中的缓冲器(可选,3D打印文件见3.3)


需要用到的工具包括:

- 激光切割器

- 3D打印机

- 螺丝刀


3.2 亚克力板的切割

此处第一步是需要将亚克力板切成不同的大小,以能够组装出一台抓娃娃机。这里我们需要用到一台足以切割2英尺x3英尺大小板材的激光切割机。你可以点击这里,下载一共7块板子所需切割大小的dxf文件,或者可以参考如上的PNG图。


3.3 需要3D打印的组件

3D打印操纵杆。此外如果你觉得有需要的话,可选择性打印一个更大的操纵杆,倾斜面,4组支架,以及操纵杆支架。

3D打印所需用到的STL文件请点击这里。你也可以点击Repables,浏览整个抓娃娃机所需用到的3D打印文档。

注意:Repables链接上的3D打印文件包含了整个抓娃娃机的所需部分。对于涉及亚克力板的部分而言,在3.3这一步,你只需用到第一个链接中的4个STL文件。Repables上的其它文件会在步骤3.4中用到。


3.4 用螺丝组装亚克力板

所有的亚力克板都是用同一种方式组装在一起。如下图所示,板上有专门为3/4"长的螺丝以及四角螺帽所设置好的孔,以便于组装。

第一步,将四角螺帽放入与亚克力板边缘水平的孔中;接着,将螺丝插入圆孔;最后,将两块亚克力板按榫头固定在一起,然后将螺丝拧入螺帽中。

注意:所有的亚克力板用到的都是3/4"长的螺丝。

1.jpg

2.jpg

3.jpg

4.jpg


3.5 组装抓娃娃机的按钮与摇杆

FMRLTIPIMRYDLBY.LARGE.jpg

参考步骤3.2所提供的文档中的“claw machine sheet 1”,将切割好的这块亚克力板如上图所示摆放。用1"长的螺丝与螺帽将其与Basys3(或Nexys4 DDR)固定住。同时用1"长的螺丝与螺帽将PmodJSTK与二轴操纵杆与手柄相连。将街机按钮放入如图所示的圆孔中。


3.6 组装抓娃娃机的控制箱

F0YRHBKIMRYDLEO.LARGE.jpg

FBWTYA9IMRYDLF5.LARGE.jpg

参照步骤3.2所提供的文档中的“claw machine sheet 2”,"claw machine sheet 7"以及"claw machine sheet 3",切割出3块亚克力板。

与步骤3.4相同,用螺丝与螺帽将这三块亚力克板与步骤3.5中的亚克力板组装在一起形成一个控制箱(如上图所示)。

参考步骤3.2所提供的文档中的"Claw Machine Sheet 7"(长方形),将这块切割出的亚力克板作为前面板,用螺丝及螺帽与上述的控制箱相连。

最终完成的控制箱应如下图所示:

FG5VBV5IMRYDL8T.LARGE.jpg

3.7 打造“娃娃放置箱”

现在我们需要来组装更大的“娃娃放置箱”了。参照步骤3.2所提供的文档中的“claw machine sheet 2”,将其中剩余两块较小的亚克力板切割出。将两块板如下图所示按榫头相连形成一个切面,并用螺丝螺帽将其固定。

FZSSFYKIMRYDKFP.LARGE.jpg

3.8 将缓冲器固定在娃娃获取盒中

参照步骤3.2所提供的文档中的“claw machine sheet 2”,切割出其中最大的一块亚克力板。为了让所钓到的娃娃不会在最后重重的被抓手摔倒获取盒中导致损坏,我们需要在其中增加一个3D打印的软斜面(如图中绿色部分所示)。这里,我们可以将两者如下图所示用螺丝固定。

F6D5A89IMRYDKLY.LARGE.jpg


3.9 将“娃娃获取盒”与整体机箱底部面板固定

将在步骤3.7中所打造的切面与整体机箱的底部相接,使之成为整体机箱的一部分,并用螺丝做固定处理。如下图所示。

FXOBMKLIMRYDKUR.LARGE.jpg


3.10 制作娃娃放置箱的底部支架平台

FMVF5K9IMRYDKUV.LARGE.jpg

参考“claw machine sheet 4”,将切割出的亚克力板如上图所示与4个3D打印的圆筒柱相连。


3.11 将机箱整体的左右面板与抓手的滑轨相连

F8ZF0Y7IMRYDKY9.LARGE.jpg

参照步骤3.2所提供的文档中的“claw machine sheet 5”,"claw machine sheet 6"以及"claw machine sheet 7",切割出整体机箱的左右亚力克面板与顶部的滑轨面板。连同底部面板,将四块亚克力板如上图所示连接,并用螺丝螺帽将之固定。


3.12 附上机箱整体的前后面板

FB643IYIMRYDL4B.LARGE.jpg

参照步骤3.2所提供的文档中的“claw machine sheet 3”,"claw machine sheet 1",切割出整体机箱的前后亚力克面板。用螺丝螺帽将前后面板如上图所示与步骤3.11的机箱所固定。记得有大洞的那一面是前面板,用来伸手获取钓到的娃娃。


3.13 将控制箱与娃娃放置箱相连完成最后的整体机箱

F93OJ9NIMRYDLFH.LARGE.jpg

如上图所示,将步骤3.6中所制作好的控制箱,挂在娃娃放置箱(整体机箱)的前面板凹槽处。使两个箱子相连。恭喜你!到这一步抓娃娃机的整体机箱就搭建完毕了。最后的机箱图应为以下效果。

F9I3250IMRYDU42.LARGE.jpg

Step4: Basys 3控制步进电机

这一项目中很重要的一步是实现FPGA开发板(Basys3)与步进电机的交互。由于Basys3的输出引脚无法为步进电机提供所需的足够电流,在这一过程中我们需要借助PmodSTEP,通过它来实现功率放大以对步进电机进行控制。


关于这部分,我们为你准备了详细指导教程,希望能为你带来帮助!

Step5: Basys 3控制PmodJSTK二轴操纵杆

在这一步中,我们需要了解如何用FPGA开发板(Basys 3)来控制PmodJSTK二轴操纵杆,并最终实现用同一块FPGA开发板来同时控制步进电机(PmodSTEP)与PmodJSTK。


详细的步骤可以参见这里

Step6: Basys 3连二轴操纵杆来控制步进电机

到了这一步,我们需要实现将两个PmodSTEP步进电机驱动器,两个步进电机,以及PmodJSTK二轴操纵杆连接至Basys 3 FPGA开发板,并利用PmodJSTK来控制伺服。


项目中的代码来自于【如何使用FPGA控制步进电机(借助PmodSTEP)】与【如何使用FPGA控制二轴操纵杆(PmodJSTK)】两个前期分享的项目教程的拼接,拼接过程中用到了一个解码器以将来自PmodJSTK的数据转换成方向信号。


具体的实现方式可参考细分动手指南:如何使用FPGA连接二轴操纵杆来控制步进电机

Step7: 用Basys 3控制伺服机

项目中最关键的一步是对抓娃娃机抓手的控制。这里我们使用伺服来控制娃娃机抓手的打开和关闭动作。点击这里,了解具体步骤的详细分解。

评论