Show HN: 机械计算机套件 (Roons)
roons — show hn
二进制加法器计算 14+7=21 (01110+00111=10101)
欢迎,来自橙色网站的疲惫的旅行者! 让我来告诉你关于 roons 的故事——一个用于构建机械计算机的套件。
几年前,当我狂看了一堆机械逻辑门相关的 YouTube 视频时,我受到了启发。有一些令人难以置信的巧妙实现——Steve Mould 的water computer尤其给了我灵感。
尽管如此,这些机械逻辑门通常最终变得太大,无法制造任何实用的设备。我想,将它们小型化成一个可用的套件有多难?
伏笔
非常! 事实证明答案是_非常难_。
loom automaton
分析机像提花织布机编织花朵和叶子一样编织代数模式。 Ada Lovelace
在摆弄了太多原型之后,我最终确定了我称之为loom automaton(织布机自动机)的东西。我们将瓷砖(“roons”)放置在上下移动的交替杆的织布机上。这些瓷砖上的轮廓引导着 marbles 和 holes
以离散的步长移动,代表着 bitstreams(比特流)。
异或门,由一个 turn + switch + distributor 组成
一个字面意义上的物理织布机竟然是 Lovelace 比喻性织布机的绝佳基底,这难道不是_非常巧妙_吗?
无论如何——你可以将此织布机视为 cellular automaton(元胞自动机),其中每个单元格:
- 被占据
或为空
- 升高或降低
- 由一组有限的 roons 控制
如果你知道有关此类系统的先前工作,请联系我! 我不声称 loom automaton 是原创的; 我只是在其他地方没有见过它。
为什么 loom 好
最初,我为每个计算机组件制造了 ad-hoc 设备——一个用于数字比较的小工具,它的工作方式_像这样_;一个用于加法的小工具,它的工作方式_像那样_;等等。
loom 是一个转折点。_所有东西_都在 loom 上实现,而不是将松散的不同小工具集合插在一起。(除了外围设备,我们稍后会讲到。)这为我们提供了一个common interface(通用接口),用于拼接我们需要的任何设备——内存、指令集等等。它使以同步的离散步长向每个组件提供电力变得微不足道。
我尝试了 loom 的几种变体:使用交替的针脚移动 marbles;使用波浪中起伏的滑块连续引导 marbles;用磁势代替重力;等等。 你可以在 hardware/prototypes deep dive 中阅读更多关于这些失败尝试的信息。
Turing completeness
如果离散的 marble 运动是图灵完备的,这很明显,你可以跳过本节,但那样你会错过漂亮的交互式模拟器:
1/16
show hn xor
我为此学习了 JavaScript。
当上面的xor roon 接收到其输入时,一个
(
或
)可以落入中央通道,而
将相互阻塞。 因此,xor
实现了 XOR。
其他 roons 实现其他逻辑门。canute 执行检查,然后将
踢回一步,这使我们能够在 marble bitstream 上实现类似进位的功能。 还有像trap
这样的 roons,可以永久存储一段状态。
虽然实际上,你不需要任何有状态的 roons 来存储状态——你只需要循环一个 的循环,砰,你就得到了一个 register(寄存器):
7 位静态 register
7 位读/写 register
我们使用switch 从这个 register 中读取,以转移无限的
流的路径。 同时,register 不断地从两个数据源之一读取:它本身或输入流,这取决于第三个信号通道。 当这个通道是
时,数据循环;当它是
时,它会被外部输入覆盖,让我们执行写入操作。
但我离题了。 简单来说,XOR 门是图灵完备的;我的工作完成了,这是一台计算机,我们可以回家了。 谢谢。
convenience
“但是等等! 仅仅图灵完备还不足以不糟糕!”
这是一个好点。 要真正制作一个_好的_机械计算机套件,我们还需要其他几件事:
- Compactness(紧凑性)——在小面积内,用非常少的零件构建有趣的设备——没有仓库大小的处理器!
- Promptness(及时性)——合理的处理速度; 在计算完成之前不必等待
BB 10
步 - Fast editing(快速编辑)——更改模式并运行它的摩擦最小。“Hot reloading”(热重载),以便在运行时编辑模式。
- Saving and loading(保存和加载)——可以将你的工作保存到紧凑的存储中,然后在以后将其带回
- Minimal(最小化)——从少量核心部件构建许多复杂的系统
基本上,我想要一个实际且有趣的用于构建电路的套件。
你做了吗?
… 是的!
这是一个由long turn 、canute
和 distributor
制成的二进制加法器——它们加起来并不比一张邮票大多少。(挥动手臂,把磁盘驱动器本身、I/O 管道等占用的空间都摊销掉)
由于空间如此宝贵,我们没有错开多个 XOR 和 AND,而是将它们捆绑到一个单元中——它很小但很慢。
我们还可以做内存、锁存器、处理器、计数器、计时器、计数器等。 请按照tutorial 序列了解更多信息。
modularity
我希望存储和运行许多不同的模式很容易。 每个磁盘驱动器都具有合理的口袋大小,但仍有很多空间专用于内部齿轮机构。
所以这是可移动磁盘系统:
这非常简单,但花了很长时间才做好! 挑战包括:
- 弄清楚我可以将多少机制分流到磁盘驱动器中,以及必须在磁盘中保留多少
- 优化磁铁强度和位置——需要平稳地工作 save/load,同时防止底座在操作中弹回
我们还可以移动磁盘之间的单个条,或重新排列磁盘内的顺序。 如果我们以错误的位置启动了某个模式,这使调整该模式变得容易。
extendability
如果我们需要更大的工作区,我们只需将驱动器彼此相邻放置即可。 这在 X 和 Y 轴上都有效,因此你可以构建 2D 网格。
伏笔
我完全意识到这里还有另一个维度可用——正在努力!
binding
驱动器的每个面在其末端都有一对南北磁铁。 这让它可以与 180 度旋转的副本配对。
每个面的中心还有一个小的凸起,旁边有一个相应的口袋。 这将驱动器锁定在精确的位置。
power
我们还需要通过系统传输电力。 最初我使用了带有隐藏磁性耦合器的水平轴,这看起来很酷,但存在太多设计问题。
相反,每个驱动器都有一个 2 x 2 齿轮网格,其中每个齿轮都有一个集成的 barrel cam,用于上下移动条。 当两个驱动器彼此相邻放置时,齿轮会结合在一起。
由于在我们的 N x N
齿轮网格中 N
是偶数,因此所有驱动器都以相同的方式旋转。 这很重要,因为某些外围设备期望特定的旋转方向。
phase
我们希望所有条都同相移动。 正确连接驱动器很麻烦——很容易意外地将连接偏移一两个齿。
为了防止这种情况,齿轮有一层 phase baffles(我不知道技术术语)。 这些物理上阻止齿轮连接,直到它们完全同步。
将所有这些原则结合在一起,我们在如何设置工作区方面具有很大的自由度:
double
grid
large mode
s n e k
这些大网格有多实用? 更多详细信息请参见 hardware deep dive。
storage
我想让 roons 易于存储。 我已经有了用于将瓷砖绑定到条的 stud 系统,所以我只是扩展了它。 驱动器的底座接受 studs,因此你可以将它们堆叠起来。
我还寻找了存储较小部件的便捷位置。 例如,encabulator 有一个用于 marbles 的空心核心,roons 可以倒置存储在旅行盖中。
peripherals?
多么奇怪的问题,但是——是的! 是的,roons 有 peripherals(外围设备)。 这些使用与磁盘驱动器相同的 2×2 齿轮接口,因此它们插入网格并同步。
有两个无聊的功能齐全的外围设备:
- encabulator 让用户向系统提供旋转,为每个设备供电。
- bucket(水桶)是一个水桶。
可以掉进去。 这一项特别具有挑战性,花费了数十亿的研究时间。
WIP peripherals 才是事情变得有趣的地方:
- 7-segment display(七段显示器)(WIP)按周期接收 4 位数字,将它们转换为相应的十进制数字(加上 6 个特殊字符)
七段显示器外围设备的模型——原型即将推出
- numpad(数字键盘)(WIP)将数字 0-9 的按键转换为 4 位 marble bitstreams。
- alphanumeric display(字母数字显示器)(WIP)是 7-segment display 的 6 位扩展,能够显示字母表中的所有字母、数字和你最喜欢的标点符号。
- hard drive(硬盘)(WIP)是节省空间的 marble 数据存储,可以用作其他模式的输入/输出。
- turbo encabulator(涡轮 encabulator)(NES,Not Even Started)是一种用于为更大的网格供电的电动 encabulator。
预计很快会有一些重大更新——这些 peripherals 使 roons 看起来像真正的魔法。 例如,将显示器插入加法器:
1/28
带显示器的加法器
或者将多个显示器链接在一起以获得滚动文本(bitstream 通过):
1/125
链式显示器
但我只是一個人,並且物理實施這些設計需要我_很長_時間。 因此,現在還沒有機械文本顯示器給你。
materials and manufacturing
大多数组件都在 3D 打印的 PLA 中进行原型设计。 计划转换为 injection-moulded ABS 进行批量生产,尽管我根据需求提出了一些更复杂的计划。
我使用三台 Bambu Labs A1 Minis 打印这些东西。 顺便说一句,这些_真的真的很好_。
许多这些部件最好用树脂之类的东西进行原型设计,但事实证明 FDM 足够好; 这就是我所熟悉的并且可以访问的。
magnets
每个 roon 都需要紧贴织布机的条。 因此,我已经手动用超强胶粘合了大约 6,000 个微小的 neodymium 磁铁,并且不再有指纹。
bars
磁盘的条需要具有磁性(或至少具有磁性感受性)。 但是插入单个磁铁会太昂贵和乏味。
因此,我用一对螺栓切割器手动修剪 Copper-Coated Mild Steel (CCMS) 钎焊棒,然后将它们嵌入到条中。 你不会相信找到这个解决方案需要多少失败的方法——可以单独写一篇帖子。
website
我在建立 whomtech 网站时冒了经过计算的风险,并使用了两项未经证实的技术:
- WordPress 是一个鲜为人知的网站构建器。 我们希望像 whomtech 这样的行业巨头的认可可以给这块未充分利用的技术带来一些曝光。
- JavaScript 是一种最小化你的 serotonin 的全新方法。 它结合了 Java 的优雅性和在你喉咙里打一拳的类型安全性。
你可以在 software deep dive 中阅读更多 JS 诽谤。
disappointments
那么 roons 是一个完全成功的项目吗?
不! 别担心,有很多缓解措施:
- Peripherals behind schedule(外围设备滞后)——真正酷的外围设备原型离生产准备还差得很远。 挑战在于将它们与 marble bitstream 概念集成,同时最大限度地减少零件数量并最大限度地提高可靠性。 我希望现在能完成这件事——这绝对有可能,但我很慢。
- Piece reliability(零件可靠性)——像crossing
这样的较新的 roons 还没有达到我想要的可靠性水平。 “大部分时间都在工作”是不够的——我们需要 99.9%+ 的可靠性才能构建任何有趣的东西。 这不会威胁到底层的图灵完备性,但确实会降低套件的便利性。
- Piece interoperability(零件互操作性)——这是真正的诅咒。 让每个 roon 与每个其他 roon 可靠地互操作都呈指数级(二次方?)困难。 我对基本交互感到满意,但是在某些深奥的情况下,交互“应该”有效但无效。
- Ease of use(易用性)——roons 可能很小而且很麻烦。 我现在已经习惯了它们,但是为了使新手更容易上手,还有很多工作要做。
- Simulator(模拟器)——我使用我构建的一个摇摇欲坠的模拟器工具来设计教程。 我想在公开发布之前对其进行润色,但我们现在就在这里。
- Site and tutorials(站点和教程)——仍然有大量的教程内容需要编写,并且站点的某些部分需要注意。
- Additional roons(其他 roons)——还有很多很多特定的 roons 我还没有时间开发:例如,增强的横向移动、更多状态、一般便利设施、3D 移动等
more technical stuff
在过去的几年里,大量的研究和实验都投入到了这个项目中。 其中一些非常有趣! 你可以在这里阅读令人麻木的细节:
software hardware roonsware encabulator whomlab prototypes
other
- 查看交互式tutorials
- 玩一下simulator(非常不稳定的 alpha 版本!)
- 欢迎在
support@whomtech.tech
或任何其他都转到我的收件箱的 Potemkin 电子邮件别名中收到反馈
can I get a roons kit?
也许吧!
我有一个 Kickstarter campaign 将于 5 月 21 日启动。 我还在发送有限数量的review kits。
kickstarter request a review kit
whomtech
“不要问 whom 可以为 who 做什么,而是问 who 可以为 whom 做什么”