Show HN: 机械计算机套件 (Roons)
roons — show hn
 二进制加法器计算 14+7=21 (01110+00111=10101)
二进制加法器计算 14+7=21 (01110+00111=10101)
欢迎,来自橙色网站的疲惫的旅行者! 让我来告诉你关于 roons 的故事——一个用于构建机械计算机的套件。
几年前,当我狂看了一堆机械逻辑门相关的 YouTube 视频时,我受到了启发。有一些令人难以置信的巧妙实现——Steve Mould 的water computer尤其给了我灵感。
尽管如此,这些机械逻辑门通常最终变得太大,无法制造任何实用的设备。我想,将它们小型化成一个可用的套件有多难?
伏笔
非常! 事实证明答案是_非常难_。
loom automaton
分析机像提花织布机编织花朵和叶子一样编织代数模式。 Ada Lovelace
在摆弄了太多原型之后,我最终确定了我称之为loom automaton(织布机自动机)的东西。我们将瓷砖(“roons”)放置在上下移动的交替杆的织布机上。这些瓷砖上的轮廓引导着 marbles  和 holes
 和 holes  以离散的步长移动,代表着 bitstreams(比特流)。
 以离散的步长移动,代表着 bitstreams(比特流)。
 异或门,由一个 turn + switch + distributor 组成
异或门,由一个 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 接收到其输入时,一个
 roon 接收到其输入时,一个  (
(
 或
 或 
 )可以落入中央通道,而
)可以落入中央通道,而 
 将相互阻塞。 因此,xor
 将相互阻塞。 因此,xor  实现了 XOR。
 实现了 XOR。
其他 roons 实现其他逻辑门。canute  执行检查,然后将
 执行检查,然后将  踢回一步,这使我们能够在 marble bitstream 上实现类似进位的功能。 还有像trap
 踢回一步,这使我们能够在 marble bitstream 上实现类似进位的功能。 还有像trap  这样的 roons,可以永久存储一段状态。
 这样的 roons,可以永久存储一段状态。
虽然实际上,你不需要任何有状态的 roons 来存储状态——你只需要循环一个 






 的循环,砰,你就得到了一个 register(寄存器):
 的循环,砰,你就得到了一个 register(寄存器):
 7 位静态 register
7 位静态 register  7 位读/写 register
7 位读/写 register
我们使用switch  从这个 register 中读取,以转移无限的
 从这个 register 中读取,以转移无限的 



 流的路径。 同时,register 不断地从两个数据源之一读取:它本身或输入流,这取决于第三个信号通道。 当这个通道是
 流的路径。 同时,register 不断地从两个数据源之一读取:它本身或输入流,这取决于第三个信号通道。 当这个通道是  时,数据循环;当它是
 时,数据循环;当它是  时,它会被外部输入覆盖,让我们执行写入操作。
 时,它会被外部输入覆盖,让我们执行写入操作。
但我离题了。 简单来说,XOR 门是图灵完备的;我的工作完成了,这是一台计算机,我们可以回家了。 谢谢。
convenience
“但是等等! 仅仅图灵完备还不足以不糟糕!”
这是一个好点。 要真正制作一个_好的_机械计算机套件,我们还需要其他几件事:
- Compactness(紧凑性)——在小面积内,用非常少的零件构建有趣的设备——没有仓库大小的处理器!
- Promptness(及时性)——合理的处理速度; 在计算完成之前不必等待 BB 10步
- Fast editing(快速编辑)——更改模式并运行它的摩擦最小。“Hot reloading”(热重载),以便在运行时编辑模式。
- Saving and loading(保存和加载)——可以将你的工作保存到紧凑的存储中,然后在以后将其带回
- Minimal(最小化)——从少量核心部件构建许多复杂的系统
基本上,我想要一个实际且有趣的用于构建电路的套件。
你做了吗?
… 是的!
这是一个由long turn  、canute
、canute  和 distributor
 和 distributor  制成的二进制加法器——它们加起来并不比一张邮票大多少。(挥动手臂,把磁盘驱动器本身、I/O 管道等占用的空间都摊销掉)
 制成的二进制加法器——它们加起来并不比一张邮票大多少。(挥动手臂,把磁盘驱动器本身、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
double  grid
grid  large mode
large mode  s n e k
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%+ 的可靠性才能构建任何有趣的东西。 这不会威胁到底层的图灵完备性,但确实会降低套件的便利性。 这样的较新的 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 做什么”