金磊 贾浩楠 发自 凹非寺
量子位 报道 | 公众号 QbitAI

20年前,电脑还是大背头的,「休闲小游戏」是属于Windows的。

纸牌、扫雷、空当接龙……满满的一波回忆杀。

最近,来自美国肯尼索州立大学(KSU)的4位小哥,就亲自动手用开源电子原型平台Arduino,从零开始复现了另一款Windows经典小游戏——三维弹球 (3D Pinball)。

从3D建模,到代码编写,再到最后的动手施工,他们用最专业的手段向童年致敬。

正如其中一位小哥说的:

建造这样一个项目,是我的童年梦想。

不仅如此,他们还把整个过程做了个教程——只要9步,你也可以打造一台属于自己的三维弹球。

把「三维弹球」搬到现实中

我们先来回忆一波这款经典的Windows小游戏。

开局,球会从右下角的管道被弹出,然后就会在桌面自由滚动,碰到不同的障碍物会拿到不同的分数。

只要保证它不从底部中间的缝隙掉出去就可以。

(满满的童年回忆啊……)

那么,KSU几位小哥打造的「三维弹球」,长啥样?

模型是这样的:

实物长这样:

桌面布局可以说是完美复现了小游戏中的场景——从管道的位置,到障碍物的布局,各种细节“惟妙惟肖”。

嗯,有内味道了。

实际上手玩耍又是种什么体验?

再来看下近距离视角。

简直一摸一样有木有!

然而这台机器还有更厉害的地方——全自动多球

看完是不是也想拥有一台呢?

别着急,KSU的4位小哥写了份超详细教程,手把手教你如何打造现实版「三维弹球」。

9步,手把手教你打造现实版「三维弹球」

弹球机的主要功能模块包括追踪得分系统,多球弹珠机,还有自主启动开关。上方有一个USB摄像头,在自动运行模式下会持续地监测弹球的位置,并根据球的位置指挥击打器。

用到的工具和材料清单:

数控机床或激光切割机
Dremel和砂纸
烙铁
3D打印机
Linux计算机
USB摄像头

大量的22/24 AWG线
大量的热缩线
3/4英寸的胶合板(波罗的海桦木)
一个电源
降压转换器
弹球组件(网上购买)

左右翻转器组件
2个翻转式击打器
2个翻转按钮
2个叶子开关
保险杠总成
2个弹弓组件
至少6个星柱的弹弓
至少2个2英寸的橡皮筋

发射器机制
44号刺刀式灯
场地中的障碍
掷球器
翻转开关

Step 1:纸面设计和低成本试错

设计中最可能出现的问题可能就是游戏机本身的尺寸限制和内部结构的安排,一些预想的弹球击打方式实验时才发现无法实现,所以需要先画出设计草图,然后在此基础上不断改进。

团队在确定最终的游戏场地设计之前,经历了多次设计的修改和优化,每一次改进,都在便宜的胶合板上做一个模型来测试,一步步靠近最终的设计。

一些经验教训:

进行模块化设计,不同功能组件要能随意放置和取消。
不要自己设计滑轮,借鉴成熟的弹球游戏的场地设计,这样能少走很多弯路。

Step 2:在SolidWorks上进行设计建模

弹球机的设计由两个主要的子部分组成,运动场和支架。球场是标准尺寸——20.25 x42英寸2,由3/4英寸厚度的波罗的海桦木胶合板制成。

游戏场地包括一个由直径为2英寸的亚克力管和3D打印的适配器组合而成的第二层。第二层有两个主要功能。首先,第二层作为介质,将球从上层球场直接输送到左翻板内侧。球下落位置的可预测性,使得第二层成为一个的通道,此通道便于多球运动,这是其第二大功能。

当坡道和左内线上的翻转开关背对背地触发时,舵机会释放出两个球,这些球会下滚到第二层上方的两个管子中的一个,与坡道射出的球发生碰撞。因此,在多球模式下,这些管子将球会送入第二层,进入入左边的内管。

3/4英寸胶合板厚度的选择是为了给工程提供足够的刚性,并允许在承重接头处有更大的紧固件啮合。选用波罗的海桦木作材料,因为它的质量高,杂质少,属于硬木,不易损坏,易于使用激光雕刻,一般来说,对于较重的木制结构是首选。

支架是游戏场地的安装装置,并容纳了定制的电子装置。电子装置直接固定在底板上,延伸的延伸到游戏面板底部。通过观察窗可以看到电子装置在支架的两侧。

此外,该支架还可以通过侧面的可拆卸的插销对球场进行间距调节。游戏台倾斜角度范围为0-8度,每两度设置一个调节档位。更高的球道坡度可以使游戏节奏更快,难度更高。

Step 3:用数控机床或激光雕刻制作主体

尽管你可以手工切削出游戏台的整体结构,但这样误差交大,后续安装连接多有不便,浪费材料。

这几个美国小哥用一台大型5轴数控机床进行铣削,最后再用木楔进行细节调整。

Step 4:电子器件和电源选择

大多数弹球机的 “高压 “在35V-48V的范围,这取决于你买的电磁铁的品牌,同时你要选择一个能支持这种磁铁线圈的电源。

其次,你需要考虑到 “低电压 “的电源,用于给灯或其他较小的电器元件等东西供电。我们选择的低电压是6.3v的电压,但这不一定是一成不变的。这要看你买的是什么LED,以及你是否用这个电源给其他的电器东西供电。一般6.3V应该就可以满足需要。

如果没有低压电源,那还需要一个降压转换器将高电压(如48V)降到小元件的额定电压。

此外,使用的元件的电阻大小,决定了电流大小。所以,电源总功率要视情况而定。

如果你的组件没有达到正确的功耗额定值,这些元件在很短的时间内产生很大的电流。

在这种情况下,单个击打器内部线圈可能会产生3-4安电流,两个加起来8安培左右,会导致元件烧毁。

你应当计算出 “最坏的情况下 “的电流大小,然后给出一个合理的安全范围,挑出一个对应的电源。

Step 5:建立I/O接口电路

开关输入部分:

开关输入板负责将所有的值从游戏场地中读入到Arduino。这个单独的电路非常简单,但需要对很多输入进行放大处理。

因为Arduino有一个内部的上拉电阻,所以你可以如上图那样接线。

这里最大的问题是要确保每个开关都有连接器,以防有一个开关因为某种原因单独取出调试。

这个项目中使用了标准针脚连接,可以很容易地将所有的东西同时插入到Arduino中。

灯光控制部分:

电路由一个BJT晶体管(2n222222)、几个电阻和LED组成。

晶体管作为一个数字 “开关”,可以打开或关闭,把它这个连接到前面提到的6.3v电源上,就得到了一个光源和单独可寻址的LED。

不能直接将LED直接连接到Arduino上的原因是,Arduino无法提供多个LED要求的额定电流。

正确的办法是把Arduino作为一个数字开关,控制BJT。这样就可以将LED的数量扩大到我们需要的数量。

电磁控制部分:

总体思路与LED板相同:从Arduino发送一个信号,能够打开/关闭任何一个电磁铁(翻板、弹弓、弹出式保险杠)。因为这些元件比LED功率更大,所以需要一些更大的晶体管:MOSFET。

电路元件清单:

1k电阻
10k电阻
330电阻
IRF44V MOSFET
1N4004 二极管
47微法电容

电磁铁需要连接到48V的电压才会启动。

因为电感不能瞬间改变电流,这就带来了一个问题。工作时,线圈会通过很高电流,而关闭时,如果没有一个地方分散电流,可能会破坏元件,非常危险。

这里使RC缓冲器电路和二极管来解决这个问题。要使它们覆盖尽量多的电磁控制并联支路。

击打器和其他线圈的电路略有不同。这是因为,在弹球游戏中,玩家有时会按住按钮,以保持击打器长时间启动。如果要用同样的功率线圈,很快就会烧毁。

在此电路中的第二个线圈可以实现快速第一次翻转。一旦翻转完成,一个机械机构会打开EOS开关,迫使电流通过两个线圈。

Step 6:组装所有元件

根据你游戏场地的大小,焊接时间或长或短。这个项目花了大约两天的时间焊接,并把所有器件安装到位。

最终有5种连接器插到板子上:

高功率的螺线管电源
与电磁铁专用开关的连接
与LED的连接
与开关的连接
一些辅助电源(5V、48V等)。

所有这些都插到了一个3D打印的连接板上,里面封装了所有电路设备。当需要开盖检测故障的时候,只需要拔掉5个大的连接器,然后把整个装置举起来。

Step 7:安装Arduino软件驱动

在这台机器上,需要在与Arduino相连的计算机上安装以下依赖项:

ROS
rosserial_arduino ROS package
OpenCV (c++)
Tkinter
Apscheduler

整个软件系统依靠ROS架构作为后端来回传递消息。

四个主要节点在弹珠机运行在自主模式下时,进行异步通信,以控制弹珠机的流程。

这些节点分别是Input_Output.ino、track_metal.cpp、run_low_level.py和GUI.py。

当不在自主模式下运行时,可以省略track_metal.cpp节点。

源代码和详细解释在本项目的Github主页放出。

Step 8:更改Pin、将代码上传到Arduino、更新USB摄像头

如果你自己动手制作弹球机,并使用了本项目的源码,要注意的是,你的Arduino的Pin需要更新两处:Arduino/Input_Ouptut/Input_Ouptut.io,以及src/Classes/playfield.py。

此外还需要调整脚本,删除对开关和LED的调用。

playfield.py会记录有多少个项目,需要手动设置每个项目的Pin。

之后就可以将代码上传到Arduino中。此步骤必须安装上一步中提到的rosserial_arduino,并正确设置Arduino IDE与ROS绑定。

最后,要做的是更新代码中你自己使用的摄像头名称。只需在 src/Track/track_metal.cpp 中找到 “std::::string camera_metal.cpp “这一行:

“std::::string camera_string = “/dev/v4l/by-id/usb-046d_Logitech_Webcam_C930e_6D6BFE5E-video-index0”;”

将字符串更新为摄像机的名称,可能是”/dev/v4l/by-id/“

所有步骤完成后,重新编译才可以工作。

Step 9:玩起来吧!

如果一切正常,那么找到到 “启动 “目录,然后输入 “roslaunch automatic_pinball_c.report

这行代码启动所有与弹球机相关的节点,包括GUI节点和跟踪球的位置的节点。

此外,你可以使用’roslaunch manual_pinball.report’不运行任何自主部分,只体验手动模式。

来自KSU毕业班的四位“造梦者”

那么,将童年回忆搬到现实的四位“造梦者”,都是何许人也?

Kevin Kamperman,今年毕业于KSU,目前正在佐治亚理工学院研究所实习,从事无人机相关的研究。

春季毕业的时候,Kevin Kamperman还被KSU评为今年的“荣誉毕业生”。

Cody Meier,同样也是今年毕业于KSU,主修的专业是机械电子、机器人和自动化工程。

Omar Salazar和上一位小哥是同专业,也是主修机械电子、机器人和自动化工程。

他在采访视频中表示,这个项目加强了他在团队合作方面的能力。

最后一位叫Tyler Gragg的小哥,可谓是“机器人制造”的狂热爱好者,在个人介绍文字中,还特意写道“Let’s Make Robots”,参与不少机器人项目。

Tyler也荣登了学校“光荣榜”。

嗯,是四位非常优秀的“造梦者”了。

那些年,经典的Windows小游戏

纸牌、扫雷、空当接龙…….这些Windows经典游戏至今仍然拥有众多粉丝。

它们现在都何去何从了呢?

微软如今把这些经典游戏放在了WindowsStore中,然而「三维弹球」的就没有那么幸运了。

其实,从Win7开始,微软团队将原先的软件全部移植到64位系统中。

然而,「三维弹球」却出现了严重bug,为了节省时间,微软直接放弃了这个游戏。

但四位小哥的这个项目,却赋予了这款经典之作新的生命。

这个星球有趣的人可真多啊。

传送门

现实版「三维弹球」项目地址:
https://www.instructables.com/id/Arduino-Pinball-Machine-That-Plays-Itself/

Github源代码地址:
https://github.com/Tdoe4321/AutoPinball

通用弹球游戏设计制作教程:
https://howtobuildapinballmachine.wordpress.com

作者系网易新闻·网易号“各有态度”签约作者

深入解析OceanBase数据库 | 免费报名

在阿里体系内,OceanBase数据库支撑了支付宝、网商银行等重要业务,已成为世界领先的数据库产品。那么其背后有哪些核心技术?

7月2号第三期直播,蚂蚁集团OceanBase数据库资深专家--韩富晟(颜然)将介绍数据库发展演进历史,并深入解析OceanBase实现数据库的机制。

扫码报名,可加入直播交流群,还可获取系列课程直播回放、分享PPT:

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

喜欢就点「在看」吧 !

微软放弃的游戏被他们复活了:Windows经典「三维弹球」现实版,CAD建模、Arduino编程、数控机床打造,硬核致敬童年...相关推荐

  1. 从游戏智能到疾病诊断,腾讯「绝悟」AI 从虚拟走向现实

    感谢阅读腾讯 AI Lab 微信号第 160 篇文章.本文介绍腾讯 AI Lab 决策智能AI「绝悟」从虚拟走向现实,首次验证了强化学习用于超大尺寸全片扫描病理图像诊断的可能性. 近年,游戏 AI 大 ...

  2. 继Facebook之后,微软正式宣布:全面进军「元宇宙」

    今日话题: 在一年一度的Ignite大会上,微软正式宣布进军「元宇宙」,并将旗下混合现实会议平台Mesh融入到Teams中.CEO纳德拉表示Xbox游戏平台将来也要加入「元宇宙」.现在,微软市值突破2 ...

  3. 微软放弃继续开发 Visual Basic !

    作者 | 屠敏 出品 | CSDN(ID:CSDNnews) 近日,微软宣布将在即将推出的 .NET 5 中支持 Visual Basic,并扩大该编程语言支持的应用程序类型,以此帮助 VB 开发者迁 ...

  4. 每日新闻:6G概念研究今年启动;德国SAP斥80亿美元收购美国Qualtrics;华为发布人工智能平台;微软收购两家游戏工作室...

    关注中国软件网 最新鲜的企业级干货聚集地 趋势洞察 工信部透露:6G概念研究也在今年启动 预计2030年投入商用 伴随着5G技术脚步的到来,工信部IMT-2020(5G)无线技术工作组组长粟欣透露,6 ...

  5. 微软xcloud服务器,微软公布云游戏服务Project xCloud详情 2019年公测

    微软正式公布了旗下串流云游戏服务 "Project xCloud" 的详情,该服务最早在 E3 2018 中被提及. Project xCloud 利用微软在 54 个地区 ( 包 ...

  6. 微软 游戏服务器,微软正式公布游戏串流服务「Project xCloud」

    微软官方在刚刚正式公布了名为「Project xCloud」的计划,这是一个以玩家为中心的云串流游戏平台,通过微软在全球的数十个 Azure 数据中心部署专用硬件,让所有设备都可以游玩 Xbox 游戏 ...

  7. 微软云游戏服务器,微软:云游戏服务Project xCloud将扩展游戏服务的数量和地区...

    微软:云游戏服务Project xCloud将扩展游戏服务的数量和地区 2019年05月25日 18:02作者:陈莹编辑:杨晓文章出处:泡泡网原创 分享 微软发布消息称,预计将在E3 2019展会期间 ...

  8. 微软开源 纸牌游戏代码_5个适用于Linux的开源纸牌和棋盘游戏

    微软开源 纸牌游戏代码 传统上,游戏是Linux的弱点之一. 近年来,由于Steam,GOG和其他将商业游戏引入多种操作系统的努力,这种情况有所改变,但是其中许多游戏不是开源的. 当然,可以在开源操作 ...

  9. 解决微软商店的游戏服务应用更新失败问题

    问题背景 Win11微软商店更新"游戏服务"时提示"我们这边出了错" 解决方法 删除 C:\Program Files\WindowsApps 下面所有关于 G ...

最新文章

  1. TM1810-3, TM1810-2 LED恒流驱动IC
  2. C#的同步和异步调用方法
  3. sql server服务器位置,SQL语句实现查询SQL Server服务器名称和IP地址
  4. Swift中文教程(五)控制流
  5. php error_log记录日志的使用方法和配置 (日志目录一定要手动创建)
  6. Java Web J2EE下的两大框架SSH和SSM对比
  7. 华为ebgp_华为路由器BGP邻居详解
  8. 【好书推荐】写Web必须知道的安全知识 | 《白帽子讲Web安全》
  9. 【IoT】产品设计:关于专利申请,这篇文章就够了
  10. 计算机桌面显示保护眼睛设置,教你把电脑屏幕设置成可以保护眼睛的颜色
  11. 2021-04-27
  12. ttl转rs232发送十六进制_电脑USB转TTL串口RS232串口模块
  13. OpenShift — 部署 OKD 4.5
  14. excel中right函数怎么用
  15. ElementUI 文件上传传递额外参数
  16. 假期读书计划表怎么写?能够随时查看读书计划的手机便签
  17. SOJ 4583 动态规划之分组背包
  18. XStream的分析
  19. 设置session有效时间
  20. ap计算机科学a 巴郎 翻译,AP计算机科学a词汇整理 不知道怎么用暑假预习的你快看过来...

热门文章

  1. WIN32 API串口通信编程
  2. moment 秒级时间戳转格式
  3. 百度竞价推广账户常见问题及调整方法
  4. Mysql基础篇(1)—— 基础概念、DML基本语法和表连接
  5. 王牌特工:黄金圈 经典例句
  6. 安装ubuntu系统16.04版本
  7. 防火墙(NGFW)与UTM本质上的区别
  8. 基于Python的课程管理系统【100010023】
  9. 小游戏正在毁灭微信群聊(文中有福利)
  10. 软考真题答案-2021年11月系统集成项目管理工程师上午题(二)