基于Arduino Nano R3实现蜡烛灯的设计方案

描述

前段时间我正在筹备一个项目,大体是如何巧妙地照亮我们的中庭房间。在秋冬季节房间变得有点太阴暗了,我想要比 LED 灯更自然的东西,最好是闪烁蜡烛的现场外观。

创造一个逼真的人造火焰并不是一件容易的事,所以我的想法是:把灯光放在看不到“火焰”的地方,然后我们只能看到所产生的光,接着借此在墙上跳舞。

由于房间主要由玻璃墙制成,显而易见的选择是让光线投射在支撑窗户的白色光束上。我决定将灯放在水平光束的底部,将光向下投射到垂直光束上。

Arduino

准备和计划

由于我希望能够单独控制每个“蜡烛”,因此 LED 灯的选择很容易;它显然应该是一组基于 WS2812 的 LED 模块,所以我订购了 100 个单独的 LED。

Arduino

正如您在上图中所见,每个 LED 有六个连接 - 并且背面标有箭头方向。

其中两个连接标记为5V ,两个是GND ,然后是Din (数据输入)和Dout (数据输出)。两个5V相连,两个GND也相连。所以实际上有四个连接;5V 、GND 、Din和Dout 。

在对每个“蜡烛”不同数量的 LED 进行了一些试验后,我想出了四个。这个数字使我能够对每根光束进行足够有趣的灯光操作,从而在不需要太多 LED 的情况下制作出逼真的蜡烛外观。

注:如果我必须再做一次,我会订购一组 2×2 LED 模块,以简化组装。

Arduino

控制器不需要非常先进,我的假设是Arduino Nano就足够了。

Arduino 的位置并不明显。最后,我选择将它放在水平梁本身上,在上面第一张照片中可见的粗柱后面(最左边)。柱子放置在两个玻璃墙相交的房间的角落(照片中显示了“右”墙)。通过这种方式,我可以将 LED 安装在两条平行的灯串上——每堵墙一个——以最小化每个灯串的物理长度。现在,每根弦的总长度约为 4 米(13 英尺),而不是原来的两倍。

Arduino

隐藏电缆

这一步依据我自身的情况,并没有那么难。因为 LED 被放置在水平光束的底部,LED 模块本身只需用强力双面胶带放置即可。

创建 LED 模块

由于我不想将整个东西焊接在一根全长的串上(我想象我在尝试将东西安装在梁的底部时会遇到电缆堵塞)我决定用连接器构建 LED 模块。

LED 模块将放置在垂直光束旁边,以便尽可能多地反射光线。我还想让电缆靠近光束。这导致我有两个版本的模块;一个设置放在从 Arduino向右的绳子上,一个向左。

Arduino

这两个模块版本需要两种独特的焊接布局,主要区别在于保持数据流从正确的 LED 流向下一个。

Arduino

由于 LED 非常小,直径约为 9 毫米(3/8 英寸),因此焊接它们并不容易;鉴于我缺乏焊接经验,结果并不是那么好和漂亮。但它确实有效。

焊接

在焊接之前,我从 2×5 的原始部分切下一个 2×2 LED 模块。然后我将一端涂成红色,另一端涂成黑色,以标记靠近 5V 和 GND 的两侧。

第一步首先做一个焊接练习,在每个 LED 的微小金属岛上滴一滴焊料。

Arduino

下一步是连接简单的直线,靠近的连接。

Arduino

然后跟随电缆需要保持绝缘,因为它们相互交叉。

Arduino

总而言之,每个方向都有五根光束——加上角梁——总共有十一根光束。由于每个 LED 模块有四个 LED,因此单个 LED 的数量为 44 个。

在几个模块之后,我掌握了窍门,最后我可以在大约 30 分钟内焊接一个完整的模块。

“短电缆技巧”

许多细小的电缆都需要绝缘层,但是当电缆的总长度不到一厘米时,很难在每一端切割出足够的绝缘层以暴露内芯。

然后我想出了这个(明显的)技巧:

1.焊接电缆的一端,然后将其弯曲并切割成所需的长度。

Arduino

2.将绝缘层向下滑动一点。

Arduino

3.从释放的绝缘层上剪下所需的长度。

Arduino

4.向后滑动绝缘层,露出自由端的芯线。

这样就可以创建裸露电缆芯的确切长度,结果非常好:

Arduino

完成 LED 模块

最后,LED 模块应倒置在梁上,因此必须准备好焊接的、填充电缆的背面以固定胶带。

我开始使用一些随机的扁平塑料,我只是简单地切成正方形。这些只是用热胶粘在 LED 模块上。

Arduino

这是所有完整的模块:

Arduino

完整的模块很容易用强力胶带粘在它们现在平坦的背面。

制作电缆

幸运的是,我周围有一卷旧电话延长线。这条电缆有四根独立的电线,这绰绰有余,因为我需要三根电线(5V、GND 和数据)。

在没有特殊压接工具的情况下安装母插座并不容易,但完全可行。

Arduino

电缆通道很容易安装;只需将其切成合适的长度并使用预先粘贴的胶带将其连接到水平梁上。

Arduino

这是最终安装的模块的样子:

Arduino

自动激活和停用

由于我不想在天黑时手动打开灯并在之后将其关闭,因此我放入了一个光敏电阻。

同时我不想要简单的开/关,而是在黄昏时分逐渐改变光强度。出于这个原因,我需要知道我的光敏电阻在晚上决定“白天”变成“暮光”和“暮光”变成“黑暗”的时间点的模拟值。

在下面的图表中,红色曲线代表光敏电阻在一天中变化时的模拟读数(不是下面的实际读数,只是我的手绘图)。两条微弱的水平线标志着两个层次;顶部是“daylight”变成“twilight”的极限,而底部是“twilight”变成“darkness”的极限。所以,当红色曲线高于顶部水平线时,我认为它是白天,当它低于底部水平线时,它是夜晚。

绿色的直线是“干净的”日光测量值,即夜间的最小值 (0.0) 和白天的最大值 (1.0),以及黄昏时的线性斜率。

Arduino

为了知道实际的模拟读数,我将四个光敏电阻连接到一个 Arduino 和一个 LCD 屏幕,以显示四个电阻的电流、最小值和最大值。我使用了四个,因为我不知道我是否有一个坏的,所以如果他们中的大多数人的读数大致相同,我知道他们会工作。显然,我将设备放置在我打算让 Arduino 最终驱动 LED 的同一位置。这是它的样子:

Arduino

由于 LCD 非常有限,我当时显示了一个光敏电阻的读数大约五秒钟。然后在白天我不时过去,在一张纸上写下数字。(显然,我本可以将它连接到我的笔记本电脑并通过串行连接发送数字,但我白天需要笔记本电脑,不想整天坐在中庭)。

最后我决定它在“630”以下是暗的,在“800”以上是亮的。但是这些数字显然正好适合我的光敏电阻和我串联使用的 10 kΩ 电阻,所以这不是绝对的事实。

Arduino 源代码

我希望能够拥有不同类型的灯光效果,而不仅仅是烛光。出于这个原因,我构建了源代码模块化,试图将不同的机制隔离在不同的文件中,以便于概览。

主.ino文件非常小。我基本上只是启动了整个事情并调用Update()了几个助手类(这反过来又起到了作用)。

目前源代码支持两种不同的效果:“烛光”效果和“圣诞节”效果。目前效果的选择是硬编码的,这意味着如果我想进行切换,我需要重新编译代码。到这一步,所有需要的步骤就做完了,所以接下来让我们拭目以待。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

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

×
20
完善资料,
赚取积分