DIY LEDCUBE 自制立方灯
偶然在国外网站上看到老外做的LED光立方,看了视频后,觉得特别炫,于是准备自己也做一个,于是参照它的方案做出了下面大家看到的这个光立方,做工不是很精细,希望大家批评指教。今天发贴于此,与大家共同学习,共同进步。费话不多说,下面正式介绍我的这个LEDCUBE。
1,准备材料
●512*LEDs(多买几个,以防止有的是坏的,最好是雾面的,如果买来的不是雾面LED,可以住LED上轻微喷些白漆以达到效果)
●细铁丝(用来焊接LED,如果买的LED引脚够长可以不用)
●64*电阻(510R左右的) 8*电阻(220R,三极管基极) 8*电阻(2.2K,三极管上拉)
●8*74HC574(锁存器,多路复用,也可采用595移位寄存器,本方案用574,595不再讨论)
●1*74ACT138(译码器,给574产生时钟信号)
●8*s8050三极管(用作开关管)
●电解电容(主要为电源电路部份用)
●USB母头
●开关
●DC接头
●一块MCU最小系统板(本方案采用飞思卡尔的XS128,有点奢侈,其实用51单片机就可以,比如12C5A就ok)
●两块20cm*20cm的铺铜板(本方案板子全部自己用Altium Designed画出来,然后用感光绿油曝光和腐蚀,也可用洞洞板自己搭,不过比较麻烦,工产打样同样也是忒贵,还是腐蚀板最为经济)
(如果采用腐蚀板,还需要准备以下东西)
●紫外灯(日光灯也可,不过爆光时间需要自己实验得出)
●显影剂
●感光绿油
●环保型腐蚀剂(或者三氯化铁)
●脱膜剂
2,什么是立方灯呢?
立方灯就像是一个LED屏幕,但是它特殊在有第三维,使得它能够有3D效果。可以把它认为是透明且低分率的显示器。正常显示器是尽最大程度堆栈象素来使得显示出来的东西更加真实漂亮,但是在立方灯必须能看得到里面,同时在象素间需要更多空间。
立方灯不需要遵循什么标准,它可做成7*8*9,甚至更加古怪的形状。
3,立方灯如何工作 这个立方体有512个LED。很明显,每个LED有一个专用的IO端口是非常不切实际的。你需要一个有512IO端口的微控制器,通过该多维数据集运行512线。LED立方体依赖一个光学现象叫做持续幻象(POV)。如果你led闪烁的非常快, 在led关掉前,图像将留在你的视网膜一小会儿。通过闪烁每一层多维数据集的一个接一个的反应非常快,它给人一种3 d图像的感觉,事实上你看到是一系列的二维图像堆积成的。有了这个这些,我们只需要64(为阳极)+ 8(每一层)IO端口控制LED多维数据集。
4,剖析立方灯 下面我们看一下LEDCUBE的立体结构。 一个LED有两个引脚,一个阳极和一个阴极,为了点亮LED,我们要使得阳极为高电平,而阴极为低电平。 LED立方灯由64列和8层组成,每一列也就是连线垂直地面的8个LED,这8个LED的阳极是连接在一起的;每一层是由平行地面的64个LED组成的,这64个LED的阴极是连在一起的。 在控制的时候,每次让其中一个面的选中(也就是让其中一个面的阴极为低电平,其它面仍然保持高电平),然后从锁存器读出这一层的数据输出到64列,这样就完成了一次层扫描,按照这样的方式依次扫描其它7层就可以完成一次LED扫描。 下面图说明了LED立方的结构。
5,驱动电路 我们的LED立方灯为8*8*8的,这样需要有至少64+8个IO口进行控制,如果用超过64个引脚的单片来控制,这会大大增加我们的成本,一般的51单片机又没这么多的引脚,为了解决这个问题,我们采用74HC574锁存器多路利用。 74HC574: ●8个输入●8个输出●1个时钟信号●1个输出使端 锁存器最终要完成的工作就像一个简单的缓存,锁存器能保持8位数据,当输出使能有效时,数据将送到输出引脚。当时钟发生上升沿的时候,锁存器数据被刷新一次。为了能够刷新到8个锁存器,我们将8个锁存器的8个个输入分别接在一起,构成8bit数据总线,然后能过8个使能端的控制分别刷新8个锁存器。 下面的代码实现刷新锁存器的功能。
// PORT A = data bus
// PORT B = address bus (74HC138)
// char buffer[8] holds 64 bits of data for the latch array
PORTB = 0x00; // This pulls CP on latch 1 low.
for (i=0; i < 8; i++)
{PORTA= buffer;
PORTB = i+1;}
6,主板电路 我们采用的主板上面主要是由主控核心板组成,还有一个三管开关电路组成,没有什么多的东西,不再细说。下图为主板控制电路。
7,负性感光板制作
8,制作过程图集
********PCB制作图集********
***************************
********LED搭建图集********
**************************
********整体效果********
***********************
10,视频地址
http://v.youku.com/v_show/id_XNDQ0Njg1NTUy.html
1.9 MB, 下载次数: 2910
电路图资料.rar
2012-8-31 11:41 上传
点击文件名下载附件
46.7 KB, 下载次数: 1244
代码.rar
2012-8-31 11:43 上传
点击文件名下载附件
107.35 KB, 下载次数: 1302
下面再补充一点关于程序的问题,其实整个程序的结构框架很简单,无非就是在中断里不断的扫描,然后在main()函数里不断向锁存器buffer里面写数据。在调中断的时候需要注意的一个问题是,要不断调试多长时间进行一次中断,当调至扫描的时候灯最亮为佳。下图附件为程序流程图。
/*****************************************************************************/
程序中各文件说明:
main.c //这个地球人都知道,就不多说了
main.h //对接口及状态量进行宏定义,方便使用
cube.h //同样进行宏定义
Draw.c //效果函数的底层,定义基本函数为实现各种动态效果做铺垫
//函数举例:
//setvoxel(int x, int y, int z)为点亮坐标(x,y,z)处的led
//line(int x1, int y1, int z1, int x2, int y2, int z2)为点亮(x1,y1,z1)和(x2,y2,z2)之间的led
//shift (char axis, int direction);将led所有象素沿着axis轴的direction方向平移
font.c //字库,显示字母用得到
effect.c //调用Draw.c中的基本函数实现动态效果
Launch_effect.h //其实里面只是一个switch函数,就是切换效果的作用,这样在main里就不用大段的调用效果函数
/*****************************************************************************/
从上面分析知道,要移值这个程序也是相当简单的,只要把你采用的单片机的中断调好,很实现基本的扫描,那么基本成功了,最后要做的就是把效果函数移植进去。不错,之前我也见过
这不是网上的吗?
参考老外的方案自己做的
不错,很给力啊。特别板子做的很牛叉啊,立方也做的相当漂亮。学习了,有空也做一个
顶起,兄弟们!给女朋友做一个撒
你们都牛X的厉害
光立方其实硬件就是8个595 一个uln2803 就行了。
主要难度就是要自己能写出精彩花样多的程序小编牛!
原理图用什么软件画的啊?
嗯,不错,这至少是我第一次看到
呵呵 那些兔子真可爱
用的Altium Designer
大手笔啊!
真的不错
顶顶
灌水顶
板子是自己画的,印刷出来的吗
手艺太好了,pcb的感光片是普通喷墨打印机打的么?