一个不是很成功的光立方

最近做了一个8x8x8的光立方,其实做一个光立方这个想法好多年前就有了,但当时考虑到买512个发光二极管价格也挺不菲的,还要焊起来,所以一直没有动手。前段时间偶尔发现有个淘宝店,1000个蓝光的3mm LED只需要18.88包邮。那还等什么呢,直接下单安排上了。

开始做的时候,因为考虑到家里空间比较小,做个太大的也摆不下,那就做小一点的,以发光管的管脚长度为限,稍微重叠一点,直接焊起来,还不需要去找额外的铁丝之类的。做的时候在一个小的纸板盒子上钻了8个洞做简单的定位,每次焊一排8个,然后再把一排焊成一面,最后再竖着把每一平面连接起来。因为空间很小,整个焊接过程还是很痛苦的,而且对的也不是很齐,每一面有些高低不平。但这些都不是最严重的,更严重的是,焊完之后发现LED之间间距太小,发光点太密集,导致内部的发光点无法看清,并且下排亮灯会严重影响上排,看起来像两三排一起亮似的。然后这个时候要再改已经来不及了,也只能接续了。

接下去是焊控制板,我打算采用STC89C52单片机来做主控,一片ULN2803作为共阴极,控制每层,8片74HC573作为输出的控制,每一片控制一行,片选控制列,大致的电路图如下
电路图

正好家里还有多年前余下的几块洞洞板,所以就决定用洞洞板来做这个事情,选了块大小合适的,就开干了。最开始焊IC的时候其实还是挺顺利的,后来要把8片573的输入都连接到一起时,问题就来了,洞洞板留空太小,只能通过飞线解决。这可是要飞64根线呀!但这个时候也只能硬着头皮干了。

最后如何连接控制板和光立方也成了一个问题,同样是因为间距太小,从光立方引出64根线非常困难,想了个办法是四周用接插件来接一下,最后发现接插件的高度导致最低的两排LED被挡住,又影响了效果。最后硬着头皮焊完了。所有接口用杜邦线接好试机,只出了几个小的虚焊的问题,总体亮灯还算顺利。

到写代码的时候,也遇到了一些麻烦。本来的想法是动画的每一帧定义一个8x8的数组,然后一次播放就行了。但STC89C52RC只带有512字节的内存,定义2个8x8数组就把内存用完了。所以没法将需要展示的图像都作为变量事先写在程序中。最后通过用程序动态对一个固定的8x8数组进行赋值解决了这个问题。另外一种可能的做法是将图像存到Flash中,然后运行时动态读取。这种做法可能会比较麻烦,而且运行时读取应该也会有速度的影响,但没有尝试过,不知道效果到底怎么样。

最后完成的结果可以看这里:

这个视频也意外地获得了我在B站上的最多的播放数和点赞数。

做光立方的整个过程真的非常考验耐性,好多次都想放弃了,但还是说服自己坚持了下来,虽然结果不是很理想,但还是想给自己点个赞。