超具创意单片机控制LED彩虹瀑布时钟(图文)

控制/MCU

1823人已加入

描述

     摘要:这个制作基于一块Arduino上的ATmega328芯片,稍微修改了一下PCB把输出由负极性变为正极性,还添加了一块ULN2003用作缓冲输出。时钟的主体部分同其他的钟相比没有太大变化。我用了一些小技巧来提高光线的均匀度,同时避免眩光。基于Doug的设计,还能够自动调节白天/夜晚的发光亮度。在最后还附有源代码。

  如何让苍白单调的时间变成彩色的?这个虹彩瀑布时钟项目就是答案!

  单片机

  一段时间的全力投入之后,我终于完成了这个彩虹瀑布时钟:-)

  这个时钟受到了 这个DIY项目 的启发:

  在看到Doug的制作的时候,我想到了RGB LED,于是就计划做点不一样的创意出来。这就是思考后的成果(在被我女朋友一脚踢飞之前),我也很乐意和大家一起分享制作的过程。

  这个制作基于一块Arduino上的ATmega328芯片,稍微修改了一下PCB把输出由负极性变为正极性,还添加了一块ULN2003用作缓冲输出。

  1 设计

  单片机

  单片机

  我在本地的一家小公司丝网印刷时钟的面板,一块是标准的300mm x 300mm尺寸,另一块的尺寸是自定义的185mm x 205mm。

  小一点的面板可以用来安装到书架上的橱柜里,现在它已经在上面快活地呆了几个月,每天以通知我已经迟到这种残酷事情为乐。

  这块面板同时也用来做修改后PCB的初次测试,这个设计一直表现的很完美。

  2 制作钟体

  时钟的主体部分同其他的钟相比没有太大变化。

  我用了一些小技巧来提高光线的均匀度,同时避免眩光。

  和普通的设计相比,一些特殊的技巧如下:

  单片机

  单片机

  单片机

  我找了了一些塑料条并将它们裁成两种尺寸,大一点的用在外框,小一点的用在内部的百叶窗网格上。

  单片机

  单片机

  单片机

  单片机

  网格做好了以后,在上面贴了一层高反射率的铝箔胶带,在黑色的塑料基底上面是银色的反光层。


  单片机

  单片机

  将LED灯条安放在单元的顶部和底部,这样它们发出的光线就不会落到错误的字上。

  这些LED灯条来自易趣,5M牌子。但是注意,有些不好用的灯条是用三个不同的LED拼装起来的,和三个芯片处于共同封装里的灯条相比效果就是渣渣。

  单片机

  单片机

  3 电气连接

  单片机

  单片机

  在彩虹版本上,我需要把LED的输出极性变化一下。开始我想用一个HEF4049来反相缓冲输出,接着我换成了ULN2003和UDN2981,它们不仅能够完成同样的功能,还能节省PCB板上的空间,最后用一个ULN2003来驱动3路PWM输出,制造随机的颜色变化。

  单片机

  单片机

  单片机


  同最初的线路布局相比引脚的位置有些变化,但和Doug的设计本质上没有什么区别。
 

  单片机

  单片机

  单片机

  每一段LED灯条需要连出4根引线,共阳极引线,蓝色阴极,红色阴极和绿色阴极。

  我把所有的红色LED引脚接到一个连接器上,这样方便连接带状电缆。绿色和蓝色的LED引脚也照此办理。所有的线直接焊到连接器上,然后包上一层热熔胶。

  把带状电缆从连接器连接到12V电源上,保证所有的LED都能工作,标记好哪一条电线对应哪一个单元。

  4 彩虹时间

  所有的电线接好以后可以坐下并观察颜色的变化。

  你可以通过下面的代码调整RGB LED的颜色。

  redNew = random(255);

  blueNew = random(255);

  greenNew = random(255);

  and

  redNow = random(255);

  blueNow = random(255);

  greenNow = random(255);

  如果你把redNew和redNow的值都降低,那么理论上红色光的变化会减弱,而蓝绿色光的变化会更加明显。

  最好还是自己做一次,然后亲眼看结果。

  享受它吧!照片没有实际看起来那么好,有点可惜。

  5 源代码

  单片机

  单片机

  单片机

  单片机

  单片机

  单片机

  这里是彩虹钟的 源代码 ,基于Doug的设计,还能够自动调节白天/夜晚的发光亮度。

  想要变更灯光变幻的速度,只需要在代码的最后改变延迟函数的值。

  fade(redNow,redNew)

  fade(blueNow,blueNew)

  fade(greenNow,greenNew)

  analogWrite(blue, blueNow);

  analogWrite(red, redNow);

  analogWrite(green, greenNow);

  delay(150);

  可以把150改成任何一个你想要的值。

  这个代码唯一的缺点是当通过按钮调整时间的时候稍有延迟,但这不是致命的问题,因为每年只需要调节两次!

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
大哥叫我来巡山 2014-05-14
0 回复 举报
dada 收起回复
柒天 2012-07-19
0 回复 举报
人才啊!!!!! 收起回复
全部评论

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分