roons — show hn

binary adder computing 14+7=21二进制加法器计算 14+7=21 (01110+00111=10101)

欢迎,来自橙色网站的疲惫的旅行者! 让我来告诉你关于 roons 的故事——一个用于构建机械计算机的套件。

几年前,当我狂看了一堆机械逻辑门相关的 YouTube 视频时,我受到了启发。有一些令人难以置信的巧妙实现——Steve Mould 的water computer尤其给了我灵感。

尽管如此,这些机械逻辑门通常最终变得太大,无法制造任何实用的设备。我想,将它们小型化成一个可用的套件有多难?

伏笔

非常! 事实证明答案是_非常难_。

loom automaton

分析机像提花织布机编织花朵和叶子一样编织代数模式。 Ada Lovelace

在摆弄了太多原型之后,我最终确定了我称之为loom automaton(织布机自动机)的东西。我们将瓷砖(“roons”)放置在上下移动的交替杆的织布机上。这些瓷砖上的轮廓引导着 marbles marble 和 holes hole 以离散的步长移动,代表着 bitstreams(比特流)。

xor gate, composed of a turn + switch + distributor异或门,由一个 turn + switch + distributor 组成

一个字面意义上的物理织布机竟然是 Lovelace 比喻性织布机的绝佳基底,这难道不是_非常巧妙_吗?

无论如何——你可以将此织布机视为 cellular automaton(元胞自动机),其中每个单元格:

如果你知道有关此类系统的先前工作,请联系我! 我不声称 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 xor roon 接收到其输入时,一个 marble(marblehole 或 holemarble)可以落入中央通道,而 marblemarble 将相互阻塞。 因此,xor xor 实现了 XOR。

其他 roons 实现其他逻辑门。canute canute 执行检查,然后将 marble 踢回一步,这使我们能够在 marble bitstream 上实现类似进位的功能。 还有像trap trap 这样的 roons,可以永久存储一段状态。

虽然实际上,你不需要任何有状态的 roons 来存储状态——你只需要循环一个 marblemarbleholemarbleholemarbleholehole 的循环,砰,你就得到了一个 register(寄存器):

7-bit static register7 位静态 register 7-bit read/write register7 位读/写 register

我们使用switch switch 从这个 register 中读取,以转移无限的 marblemarblemarblemarblemarble 流的路径。 同时,register 不断地从两个数据源之一读取:它本身或输入流,这取决于第三个信号通道。 当这个通道是 hole 时,数据循环;当它是 marble 时,它会被外部输入覆盖,让我们执行写入操作。

但我离题了。 简单来说,XOR 门是图灵完备的;我的工作完成了,这是一台计算机,我们可以回家了。 谢谢。

convenience

“但是等等! 仅仅图灵完备还不足以不糟糕!”

这是一个好点。 要真正制作一个_好的_机械计算机套件,我们还需要其他几件事:

基本上,我想要一个实际且有趣的用于构建电路的套件。

你做了吗?

… 是的!

这是一个由long turn long turn、canute canute 和 distributor distributor 制成的二进制加法器——它们加起来并不比一张邮票大多少。(挥动手臂,把磁盘驱动器本身、I/O 管道等占用的空间都摊销掉)

由于空间如此宝贵,我们没有错开多个 XOR 和 AND,而是将它们捆绑到一个单元中——它很小但很慢。

我们还可以做内存、锁存器、处理器、计数器、计时器、计数器等。 请按照tutorial 序列了解更多信息。

modularity

我希望存储和运行许多不同的模式很容易。 每个磁盘驱动器都具有合理的口袋大小,但仍有很多空间专用于内部齿轮机构。

所以这是可移动磁盘系统:

loading a disk onto a drive removing a disk from a drive

这非常简单,但花了很长时间才做好! 挑战包括:

我们还可以移动磁盘之间的单个条,或重新排列磁盘内的顺序。 如果我们以错误的位置启动了某个模式,这使调整该模式变得容易。

extendability

connecting two drives together

如果我们需要更大的工作区,我们只需将驱动器彼此相邻放置即可。 这在 X 和 Y 轴上都有效,因此你可以构建 2D 网格。

伏笔

我完全意识到这里还有另一个维度可用——正在努力!

binding

驱动器的每个面在其末端都有一对南北磁铁。 这让它可以与 180 度旋转的副本配对。

每个面的中心还有一个小的凸起,旁边有一个相应的口袋。 这将驱动器锁定在精确的位置。

power

我们还需要通过系统传输电力。 最初我使用了带有隐藏磁性耦合器的水平轴,这看起来很酷,但存在太多设计问题。

相反,每个驱动器都有一个 2 x 2 齿轮网格,其中每个齿轮都有一个集成的 barrel cam,用于上下移动条。 当两个驱动器彼此相邻放置时,齿轮会结合在一起。

由于在我们的 N x N 齿轮网格中 N 是偶数,因此所有驱动器都以相同的方式旋转。 这很重要,因为某些外围设备期望特定的旋转方向。

phase

我们希望所有条都同相移动。 正确连接驱动器很麻烦——很容易意外地将连接偏移一两个齿。

为了防止这种情况,齿轮有一层 phase baffles(我不知道技术术语)。 这些物理上阻止齿轮连接,直到它们完全同步。

phase baffles of adjacent drives

将所有这些原则结合在一起,我们在如何设置工作区方面具有很大的自由度:

double grid large mode s n e k

这些大网格有多实用? 更多详细信息请参见 hardware deep dive。

storage

我想让 roons 易于存储。 我已经有了用于将瓷砖绑定到条的 stud 系统,所以我只是扩展了它。 驱动器的底座接受 studs,因此你可以将它们堆叠起来。

我还寻找了存储较小部件的便捷位置。 例如,encabulator 有一个用于 marbles 的空心核心,roons 可以倒置存储在旅行盖中。

stacking a drive, encabulator, and lid storing marbles in the encabulator stack of several drives

peripherals?

多么奇怪的问题,但是——是的! 是的,roons 有 peripherals(外围设备)。 这些使用与磁盘驱动器相同的 2×2 齿轮接口,因此它们插入网格并同步。

有两个无聊的功能齐全的外围设备:

WIP peripherals 才是事情变得有趣的地方:

mockup of a 7-segment display peripheral七段显示器外围设备的模型——原型即将推出

预计很快会有一些重大更新——这些 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 网站时冒了经过计算的风险,并使用了两项未经证实的技术:

你可以在 software deep dive 中阅读更多 JS 诽谤。

disappointments

那么 roons 是一个完全成功的项目吗?

不! 别担心,有很多缓解措施:

more technical stuff

在过去的几年里,大量的研究和实验都投入到了这个项目中。 其中一些非常有趣! 你可以在这里阅读令人麻木的细节:

software hardware roonsware encabulator whomlab prototypes

other

tutorials simulator contact

can I get a roons kit?

也许吧!

我有一个 Kickstarter campaign 将于 5 月 21 日启动。 我还在发送有限数量的review kits。

kickstarter request a review kit

whomtech

“不要问 whom 可以为 who 做什么,而是问 who 可以为 whom 做什么”