MENU

【开发小记】文少鹿岛灯的制作小结【附呼吸灯原理解析】

January 7, 2016 • 瞎折腾,Lofter部分文章归档

前些日子鹿岛灯好像很火的样子,于是我就各种买东西要自己做一个,图案嘛,当然是本命咯~~~
先放图~

pic1

摆在床头很好看对不对!关键的是还可以变色!呼吸灯哦~
不信看图~

pic2

pic3

好啦,炫耀炫耀就完啦,下面听我讲讲这个鹿岛灯的前世今生吧~

最开始看到这东西是在贴吧,看到贴吧上有人做了之后自己也想做一个,于是就做了。其实这东西最核心的就是在亚克力板子上刻画,刻好了是神作,手一抖没刻好同样是神作,不过这俩神作可是不一样呢。对我来说在板子上刻线很简单,我用的是刻线笔,感觉比贴吧上推荐的什么木雕刻刀石雕刻刀好多了~大概是因人而异吧~

用到的东西也不多:亚克力板、钩刀、热熔胶、热熔胶枪、锉刀(金工锉)、灯条、刻刀、刻线笔

恩,这是前期用到的。我买到的亚克力板是30cm x 30cm的所以我把它切成两块15cm x20cm的板子用来刻线,剩下的10cm x30cm刚好做成底座。光源我为了方便直接买的灯条,像我这种比较败家的,15元一米的灯条,一共4种,三种不同的白色(正白、白、暖白)和一种RGB共阳极三色5055贴片LED的灯条,每种都买了3米,各位读者的话可以根据自己的需要购买呢~也可以找我定做~详情见文章结尾~

其实刻线还是比较简单的(怎么说我也是业余爱好画画呢),比较让我头疼的是呼吸灯的问题,之前用单片机实现过,都是网上找到的程序,有许多不满意的地方奈何我看不懂不敢改。于是这此我就想着自己写一个,最开始是想用树莓派和Pi4j这个东西来实现,毕竟我现在主要还是写java,不过呢,因为在树莓派上写代码没有IDE而且非常麻烦,我放弃了,再次回到了单片机这条路。

之前用的是STC15F104E单片机,因为它只有8DIP,用右侧的四个P3刚好可以接上灯条,但是因为他的内部时钟不是很准确(也可能是因为批次的问题)导致最终实现后灯条闪烁的非常明显,于是我改用了STC12C4052AD外加12MHz晶振。用这款单片机的另一个原因是他有PWM功能,但是后来我查阅了数据手册后发现它只有两路PWM,对于我们的三色LED灯来说少一路。果然还是要自己写代码啊。

之前有人用代码手动实现了三路PWM,但是我的想法和pwm完全没有关系。在计算机中如果把一个颜色的颜色代码拆成RGB三个值,以我最喜欢的粉蓝色为例(看到此处如果有看着眼熟的读者的话,我很荣幸的告诉你,我的贴吧ID就是1hu2rui),它的颜色代码是R=B0,G=E0,B=E6,换成10进制就是R=176,G=224,B=230。我们都知道白色的颜色代码是所有颜色代码里最大的——FFFFFF,也就是RGB都是255。我的想法是以255次为周期,RGB三种颜色亮不同的时长,因为人眼的视觉暂留效应,当速度达到足够快时它就可以实现显示不同的颜色了。而经过我的计算(并不准确),每两次之间的时间间隔应小于160μs,这对于单片机来说还是很好实现的嘛~

核心代码的话就是下面这个样子(C51)

if(r<=0){
    Red = 1;
}else{
    Red = 0;
    r--;
}
if(g<=0){
    Green = 1;
}else{
    Green = 0;
    g--;
}
if(b<=0){
    Blue = 1;
}else{
    Blue = 0;
    b--;
}

r、g、b是颜色的值,Red、Green、Blue是对控制三个颜色的管脚的定义(sbit)

这样的话每执行完一次上面的代码,就记一次数,记到255时就重新装载r、g、b三个值(就是重新赋值)。

这一段程序是放在定时器的中断里的,这样无论主程序执行到那里,都可以保证灯的刷新频率,这样就保证的颜色的准确性。

显示的部分说完了,接下来说一下生成渐变颜色值的事。其实这个渐变很简单,无非就是某个值从0加到255,在减回来,以红色为例,Re是红色的值。下面是加到255的代码

while(Re != 255){
    Re++;
    delayms(ds);
}

delayms这个函数是延时用的,因为生成数值和显示颜色是两套独立的模块,所以要给他们一定的响应时间,我通过全局变量ds来控制。下面是减到0的代码:

while(Re !=0 ){
    Re--;
    delayms(ds);
}

所以程序方面,把算法想明白就很好实现了。写这个程序我翻了无数次数据手册,事实证明数据手册是个好东西,一定要好好用啊~

最后嘛,就是构建最小系统然后封装了~我把控制的部分单独拿出来了,图片上看到的就是光源和板子,控制部分我是在面包板上搭建的,小块的面包板刚好可以贴在电池盒上,如下图~

picn

黑色的就是电池盒啦,用的4节7号电池,上面的一组排线就是接灯条的~

恩,大概就是这样啦~其实这种事情并不在于结果做出了怎样伟大怎样牛逼的作品,我觉得更重要的是如何把一个需求变成现实存在的东西,这也是我敬佩那些技术宅、程序员和大触们的原因——他们能够通过自己的双手,把凭空的、不存在的需求转变成实实在在东西。

最后,感谢各位读者的阅读,喜欢请点赞~

谢谢~


知识共享许可协议
【开发小记】文少鹿岛灯的制作小结【附呼吸灯原理解析】天空 Blond 采用 知识共享 署名 - 非商业性使用 - 相同方式共享 4.0 国际 许可协议进行许可。
本许可协议授权之外的使用权限可以从 https://skyblond.info/about.html 处获得。

Last Modified: February 19, 2018
Archives QR Code
QR Code for this page
Tipping QR Code
Leave a Comment

2 Comments
  1. 好看!ヾ(≧∇≦*)ゝ如果落了灰尘或者划伤会有影响吗?

    1. @野兔落灰倒是没问题,但是划伤的话,划伤的地方也会被点亮,所以可能会有失美观吧。