本文翻译自:https://lapinozz.github.io/learning/2016/11/19/calculator-with-caordboard-and-marbles
LOGIC是一个全部由纸板、弹珠和胶水制作而成的全功能4位计算器,它可以对从0到15的数字进行加法计算,最大的可计算数字为30,我和我的妹妹为了一向科学活动而一起从零开始制作了这个设备。在这之前,我们还没见过任何用乐高或木头之类东西制作的这类计算器,所以这次我们制作的是一个以前从未有过的全新的模型。
主要是因为好玩!我一直想要制作一个加法器,但是我一直都没想好要如何制作它,我之前有想过用水或者只用纸板来制作。正好我的妹妹有一个科学活动,活动需要提交一个科学项目,我就帮助她选择了一个科学项目。我无意中看到了一个视频:用多米诺骨牌制成的计算器,因此我就想我也许可以用弹珠来制作一个计算器?
通过这个项目,我的妹妹已经学会了二进制计数、二进制加法、二进制十进制的互相转换、逻辑门、基本的逻辑电路等等的知识。
我也学到了使用身边常见的材料来制作一个逻辑电路是多么的简单,在我的项目中我使用的都是身边最常见的东西。
将数字用二进制的方式放在输入端,有弹珠的就是1,没有弹珠的就是0。右边的位是最低有效位,在每次计算前我们需要把计算器的部分组件进行重置。之后我们移除一些纸板,这样弹珠就会沿着设定的路径滑动而不会直接掉下来。修改弹珠的滑动路径,弹珠最终会到达底部并且以二进制的方式给出我们计算结果。
例如你想要计算 7 + 5
当想要构建逻辑门时,我们首先需要了解一些基础的通用门。我们第一个需要了解的就是与门
什么是与门?简单来说:
如果没有弹珠输入:没有弹珠输出。
如果有一个弹珠输入:没有弹珠输出。
如果有两个弹珠输入:有一个弹珠输出。
所以我们需要设计一个系统,这个系统只会在有两个弹珠的时候才会让一个弹珠通过,否则就不会有任何弹珠输出。
这是我们想出来的:
一个弹珠:不输出
两个弹珠:一个输出
异或门稍微有点复杂,因为输入必须要在同一时间进行。
那我们如何构建异或门模型呢?其实很简单!
如果你有一个弹珠,那么就会通过
如果你有两个弹珠,那么就应该取消通过
这其实很简单,我们只需要做一个只能通过一个弹珠的路径,当两个弹珠一起到达的时候它们就会发生碰撞然后掉下来。问题在于这两个弹珠需要非常的同步才行,而让两个弹珠非常同步是很难的。
尽管这个异或门仍然是非常不可靠的,我们还是决定继续制作,因为这个异或门我们只会用来当做原型,后面我们可能会不需真正的用到要它。
一般来说我们需要16个与门、16个异或门和4个或门,不过这会导致设备太大了,所以我们也不需要把这些门都真正的制作出来。
在这里我们把门用更通用的方式来组织以方便描述,对于一个半加器而言:
如果只有一个弹珠:使其落在第一个输出中
如果有两个弹珠:让它们之中的一个落在第二个输出中
这个做起来其实并不难。第一个弹珠翻转一小块纸板,此时第二个弹珠会掉入一个洞里面,这第二个弹珠会落在一个翻转架上,这个翻转架阻挡了第一个弹珠的继续下落。
当是一个弹珠的时候它会落入路径1
当是两个弹珠的时候它会落入路径2
第一个是开始求和,第二个是开始进位。
一个全加器一般是用两个半加器和一个或门构成的。但是我们也可以很惊讶地看到,其实只要对半加器稍加修改就可以制造一个全加器。全加器和半加器基本上一致,区别在于如果有了第三个弹珠,它应该掉落到路径1中。
如果有一个弹珠:让它掉落到第一个输出
如果有两个弹珠:让其中一个掉落到第二个输出
如果有三个弹珠:让其中一个掉落到第一个输出,另一个掉落到第二个输出
将第三种情况添加到我们的半加器中其实是非常简单的,只需要添加一小块纸板。我们的全加器看起来有些特别的原因在于我们对它做了一些修改,这样第一个弹珠和第二个弹珠就有了更多的时间来运动,因此弹珠间的同步需求就降低了。
因此对于一个弹珠,它落在路径1中
对于两个弹珠,其中一个弹珠落在路径2中
对于三个弹珠,其中一个落入路径1,另一个落入路径2
现在可以制作全加器来完成我们的计算器了,我们只需要把它们连接起来,这样上一个的输出就会是下一个的输入。
即使我们制作的半加器和全加器都工作的非常好,但是只要组件黏在了一起,这个计算器就没正常工作了。弹珠可能会运动的过快或过慢,或者发生弹出来等等情况。这并不是说它不能正常运行,计算器是可以正常运行的,只是在正常运行之前可能需要进行多次的调整和测试。逻辑本身是没有问题的,只是纸板有的时候需要进行多次的调整才能正常的工作,我们有的时候没有那么多的时间来进行多次的调整工作。
我们制作了另外两个全加器,剩下的只需要保证弹珠可以运动到正确的输入和输出的路径即可。
在完成了该项目之后,我在互联网上面搜索来看看是否还有人也做出了类似的构造,结果令人惊讶,这个项目其实是充满了多样性和创造性的。我注意到一件事情,大部分的装置中都需要通过翻转来设置相应的数字,而且要用很多的球来进行操作。在我们的模型中,你只需要直接使用弹珠的位置来设置数字并进行计算,这已经十分接近于计算机的工作方式了,并且看起来把这个部件合并到一个更大的工程中也是十分简单的,我现在已经在考虑如何构建一个极简的弹珠计算机或图灵机了。
感谢阅读,希望你喜欢这篇文章。