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 接收到其输入时,一个 marblemarbleholeholemarble)可以落入中央通道,而 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 turncanute canutedistributor 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 做什么”