这是一款十分炫酷的熔岩特效灯,本项目将分三个部分来介绍,本篇为第一部分。我会将制作这款交互式 LED 熔岩灯显示器过程中遇到的问题和解决方案做详细的解释。
先看一段炫酷的视频吧(温馨提醒:视频中某些光线的变化模式或者闪光灯的方式,可能会引起极少数人出现癫痫症状。如有不适请立即停止观看)。
https://v.qq.com/x/page/s0843i9k11a.html
在这一部分,我会比较碎碎念,从项目构思到每个材料的选择,我都会为你一一道来!
Fadecandy 开发板 × 1
1米LED灯带 × 2
电源开关 × 1
透明花瓶 × 1
木板 × 1
亚克力板 × 若干
一次偶然的机会,我在朋友的办公桌上看到了一款 ION 音乐心情探测灯,我也想要一个。因为买不到,于是我萌发了自己动手做一款类似这样的灯的想法。
在过去的25年里,我一直用熔岩灯,我非常喜欢。于是我想在熔岩灯上试一试,这个项目刚好可以让我能够深入研究可寻址的 LED 灯的应用 。
在开始制作前,我做了大量的笔记,去探索如何构建项目,如何挑选硬件以及能够达到怎样的功能等。同时我也咨询了许多朋友,他们提出很多不同模式和讨论他们认为可能很酷的方案等。最初的离子灯能够提供一些非常绚丽的颜色,和一些很酷的交互模式。
这个效果只是单个的 LED 本身发出来的光。而我想去提高灯的分辨率以及提供更多的模式应用,比如声音反馈、与 API 连接并获取喜欢的服务、IFTTT集成、语音识别,以及许多其他功能。
我在想如何运用自己现有的编程能力去控制 LED 。于是我采用了Micah Elizabeth Scott 的Fadecandy 开发板来。她一直在从事艺术和互动实验的灯光特效工作。正如她在网站上展示的那样,大多数普通的 LED 控制器在混合色调或显示正确的色彩时效果很差。于是,她制作了Fadecandy开发板来解决这些问题。
她与 Adafruit 合作,将 Fadecandy 开发板变成了一块形状小巧,价格合理的硬件,它可以控制一块公制的 LED ,显示效果真的不要太好。
更好的是,它可以通过 USB 连接到大小型计算机,还可以嵌入到计算机(像树莓派一样)进行控制。也可以直接与 Processing 进行接口,我已经尝试过。 Processing 是一个很好的平台,可以编程生成各种艺术形式,包括音乐,声音,传感器和其他东西在内的输入。它被用于各种互动艺术装置、现场音乐、大型投影、小型嵌入式作品等。 Processing 也可以在树莓派上使用,完全可以满足我这种小规模的需求。
我购买了两个1米长的带60个LED 的防水灯带,一个5V,10 amp 的电源开关(处理 240v 的主电源)和一个 Fadecandy 开发板。
我决定沿着圆柱体四周缠绕8条垂直的灯带,每条灯带上带15个灯,这样的高度和 LED 密度,可以改善离子灯的分辨率。我还必须弄清楚漫反射的实现方式,让每个 LED 成为一个整体。稍后会详细介绍。
首先将 Fadecandy 开发上电并连接到计算机,测试我的 LED 灯条,确保没有坏的 LED 。
请点击这里,欣赏一下其他 maker 的项目,并获得一些入门知识。
Micah 提供了许多 Processing 的 sketch 实例,这些实例都可以直接连接并在 Fadecandy 上运行,同时启用并连接 Fadecandy 服务器。下图为测试鼠标驱动的交互实例。
另一个 sketch 实例能够通过采样点转换位图。采样点发送到 Fadecandy 开发板,然后再发送到 LED。请看下图。
效果很明显。颜色非常好,有时亮度也很高。这是一种控制光源阵列的很棒的方法,这意味着就算你不必是专业程序员,只需通过在 Photoshop 中制作的内容就做到很酷的效果。
上图,你可以看采样点的风骚位图。
通过这些简单的示例,创造性也得到完美的展示,是时候形成完整的阵列,最后我将圆柱体缠绕在我的灯上。
正如 Adafruit NeoPixel Curtain 示例中所叙述的那样,我花了一些时间来映射和设计阵列的功率要求与其数据输入之间的分离。每个 Fadecandy 开发板提供8个数据输出,每个输出可驱动64个 LED 。我计划将120个 LED 分成两个条带。Fadecandy 能够轻松的驱动每个条带的通道。这确实让我们很快获得一些很棒的 OPC 映射。
下一步就是焊接了。
这是我手绘电源和数据连接的阵列布局。你可以看到指示串行数据方向的箭头,它清楚的标明每个LED要显示的颜色。我必须在末端将所有的焊接部件焊接完并完成流程:
我会根据灯带展开的最终形式,决定灯带的长度。我想模仿离子灯的造型,选用圆柱形玻璃花瓶,完成这项任务。这是一个花瓶的照片,倒置在一个木板上,中间核心是 PVC 管。
我将阵列平放完成接线,然后将其转移到 PVC 管,其最后就是布线问题待定了。接下来要考虑解决漫反射的问题。
经过几个小时的焊接和绝缘处理后,我将灯带连接好并准备测试。最后,我的阵列成功点亮。
到目前为止,我都无法抗拒去测试一些更复杂的阵列图形和模式的诱惑。
接下来,我遇到了一些问题。比如如何布局阵列以及 Fadecandy 开发板以及 Processing 如何工作的问题。
许多 Fadecandy 热爱者(可点击Fadecandy 谷歌页面查看)都喜欢以不同且有时具有挑战性的方式来布置他们的 LED 阵列。
我在接线时就开始设计,我的水平布局可以简单地在 Processing sketch 或 OPC 层中旋转,垂直缠绕在圆柱体上。下面是一个锯齿形排列的实例(此示例采用8x8网格,但结其果类似于15x8网格,只是一侧更长而已)。
你可以看到排列的数据输入在左上角的0索引进入,沿着顶部到右端继续,在那里它将移动到下一行,再以相反的顺序向左移动,就是这样以锯齿形的方式再次进入下一行,然后再以正确的顺序继续,以此类推直到布局结束。
最重要的是 Fadecandy 了解这种布局的意图,它知道如何在处理 sketch 中获取采样点,当它传送串行数据到引脚并连接到灯带时,将像素颜色信息转换为正确的空间信息。
我的问题是,我需要一个如下图的布局,作为 VFX(视觉效果) 设计师,我可以简单地指定90度旋转来实现想要的效果。
我需要这样去布局,以便我的所有输入功率和数据布线都接近布局的底部,并且最长的尺寸都是垂直的,一旦阵列缠绕在 PVC 圆筒上,其高度将和我熔岩灯的物理水平相匹配。
虽然我已经成功地在阵列上运行 sketch ,但是我是水平布线的。如果我只是将 LED 旋转90度,则意味着在矩阵上,从左上角到右上角的 Processing sketch 中运行的图形元素将从左下方运行到左上方。我用了测量工具,许多东西都基于物理原理,就像使用重力方向来模仿现实世界的 sketch 一样。
我在 Processing sketch 中没有明确的位置来旋转输出,这一点,我暂时还没有弄清楚。
它很美丽,但它的方向是水平的。这还远远不够。
随后,我在Fadecandy Google group上发现一个新的布局方式,这种布局类似基于旋转的重映射操作。使用以弧度指定的旋转值来获得正确的方向以及一些其他值的交换。
如果你要自己构建一个 Fadecandy 项目,那么你将遇到调用几个 OPC 库将 Processing sketch 映射到你的数组的问题。我决定使用两个 opc.ledGrid 调用,其语法如下:opc.ledGrid(index,stripLength,numStrips,x,y,ledSpacing,stripSpacing,angle,zigzag,flip)
经过一段时间的摸索,我使用以下命令成功地通过两个 Fadecandy 通道将我的 sketch 布局重新映射到我的阵列中。
opc.ledGrid( 0, 15, 4, width*0.25, height/2, height/15, width/8, 4.712, true )
opc.ledGrid( 64, 15, 4, width*0.75, height/2, height/15, width/8, 4.712, true )
这很有效!它已经在 Processing 上有 sketch 输出,该输出正确的定位在圆柱形上。
成功!现在我可以开始物理装置,按照重力方向朝下。
解决了这个问题后,就可以进入下一个阶段了——物理外形,以及考虑一些其他问题。比如,如何在灯的前面添加一个按钮并修改 sketch?什么类型的小型计算可以运行?
在我考虑这些事情的同时,我还花了一些时间在 Processing 中制作 sketch 在阵列上运行并尝试使用https://www.openprocessing.org 中的设计,我在那里发现了很多 sketch ,它们可以在 Processing 上运行的很好。它们还需要调整或者优化以才能在熔岩灯阵列上运行,但这非常有趣。