嘿!您似乎在 United States,您想使用我们的 English 网站吗?
Switch to English site
Skip to main content

使用 Neopixel Matrix 和 FadeCandy 控制器添加有趣的灯光效果

enclosure_with_lights_959e1d9e61eaddc28bd08923c31350d952bf09ec.jpg

使用 Neopixel Matrix 和 FadeCandy 控制器为 Red Tin 添加灯光效果。

我注意到本届 Designspark 设计挑战赛的参赛主题是神奇灯光,这让我突发灵感:如果在 Red Tin 上添加一些好玩的灯光效果,肯定会更棒,然后我就做了一些功课,研究了几种可用方案。

在最近举行的电子音乐节上,我帮助 RS 展台制作了 Leak Killer 挑战演示器,当时就见过 Adafruit 的 Dotstar LED 灯。所以,我立马就想到了这些灯。随后,我又发现了相关的 NeoPixels。通过将 Dotstar 和 Neopixel 对比,我认为后者具有多种有趣的形状,应该是最佳选择。

neopixel-matrix_acb2094f433449d0a1d56d77b8a58348d1558a8a.jpg

此后,我又发现了 FadeCandy 控制器,这个器件可真让我着迷。它是专门为“火人节”的灯光项目开发的,一下子就吸引到了我。查看入门教程后,我发现安装该器件就我的能力而言绰绰有余,同时,如果我感兴趣,还可以进行深入探讨。

安装所需软件

processing_2a1c78b29120b0b9b7f17ec95e91e3540e50e935.png

我入手了 FadeCandy (905-4624) 和 Neopixel NeoMatrix (124-5498) ,并开始按照 Adafruit 网站上的 FadeCandy 教程着手研究。首先是安装 Processing 程序,这是控制 FadeCandy 时常用的一种编程语言。FadeCandy 的代码也可以使用 Python、HTML 和 JavaScript/Node.js 编写,所以,您可以随自己喜好,选择其中任意一种语言。

这个教程概述了该程序在 Windows 和 OS X 系统中的安装和设置流程,不过,Processing 网站还提供 Linux 系统适用的下载文件和使用说明。

我还需要 FadeCandy 软件。我从 Fadecandy Releases GitHub 下载了“Source code .zip”。

fadecandy_server_72ae493823ed7e6e4933aa8a4803cca5b2723a62.png

首先,要运行 FadeCandy 服务器。同样的,这个教程只针对 Windows 和 OS X 操作系统进行详细说明,所以,我只好登录 FadeCandy Github 查找 Linux 相关的说明资料。我在这里找到了这些说明资料。

使用 sudo ./fcserver config.json 运行服务器,并使用默认配置文件将其启动。如果不是作为根文件运行,就会生成一条错误消息“Error opening FadeCandy: Access denied (insufficient permissions)”(无法打开 FadeCandy:访问被拒绝(权限不足)。

在服务器运行时,我打开了网页浏览器并导航至 http://localhost:7890,我可以看到服务器运行正常,但未连接 FadeCandy。

连接 FadeCandy 和 Neopixel Matrix

neopixel-pins_e12b612143ac6d5d934164a875ffaedbe1e6af90.jpg

现在要做些焊接工作。NeoPixel Matrix 有两组引脚,每组 3 个;其中第一组的 3 个引脚分别标有 DOUT、5V 和 GND;第二组的 3 个引脚分别标有 DIN、5V 和 DND。在第一组引脚中,我分别在 5V 和 GND 引脚上焊接了一根接线。

neopixel-power_db788a19b25ef0cc31863732e75dc5e96c83799f.jpg

 

最初我打算使用台式电源,所以接线的另一头保持原样,后来我可以在引脚上焊接一个合适的插口,用来连接 5V 电源。

FadeCandy 需要连接至 GND 和 DIN 引脚,所以我在这两个引脚上分别焊接一根接线,引线的另一头要连接至控制器的其中一个通道上(共 8 个)。这些接线均沿 FadeCandy 的一边布置,并标上了 + 和 - 标签。看起来我应该把 NeoPixels 连接至通道 0。

neopixel-power-fadecandy_6a1bd976c87d9cd792dd8746de0715d722641ff1.jpg
制作出漂亮的图案

 

将 FadeCandy 插入计算机的 USB 插口,NeoPixels 连接至 5V 电源,并在计算机上打开 Fadecandy 服务器,现在,我可以尝试运行一些程序了。我之前下载的“Sourcecode.zip”中包含了一些示例。

我最初运行示例程序时遇到一个问题,系统生成了一条错误消息。但利用下图所示方式,简单地编辑有问题的代码行,我成功解决了这个问题,将

 

parent.registerDraw(this);


替代为:

parent.registerMethod("draw", this);

 

我试了一下示例程序,这些程序可以随着鼠标移动发生变化,非常有趣;不过,我真正想要的效果是让画面伴随音乐显示。在现场演出时,我经常会遇到一些老式的液晶光轮投影设备,因此我想找点什么东西完善一下。我最终想到声音与灯光相互交互的理想效果,不过,我得一步一步来,会跑之前得先学会走。

有一个示例能在使用 Processing 的 noise() 函数时出现一些随机生成的云形图案,这好像和我的想法贴合。这里我引用一下 Processing 网站上的介绍:

“Perlin noise 是一种随机序列生成器,它能够产生比标准随机 () 函数更自然、更和谐的连续数字。该生成器由 Ken Perlin 于 20 世纪 80 年代开发,已在图形应用程序中用于生成过程纹理、形状、地形和其他看似有机的形状。”

做些简单调整

// A simple example of using Processing's noise() function to draw LED clouds
OPC opc;
PImage clouds;
void setup()
{
size(500, 500);
colorMode(HSB, 100);
noiseDetail(5, 0.4);
loadPixels();



// Render the noise to a smaller image, it's faster than updating the entire window.
clouds = createImage(128, 128, RGB);
opc = new OPC(this, "127.0.0.1", 7890);
opc.ledGrid8x8(0, width/2, height/2, height / 8.0, 0, false);
}
void draw()
{
float hue = (noise(millis() * 0.0001) * 200) % 100;
float z = millis() * 0.0001;
float dx = millis() * 0.0001;
for (int x=0; x < clouds.width; x++) {
for (int y=0; y < clouds.height; y++) {
float n = 500 * (noise(dx + x * 0.01, y * 0.01, z) - 0.4);
color c = color(hue, 80 - n, n);
clouds.pixels[x + clouds.width*y] = c;
}
}
clouds.updatePixels();
image(clouds, 0, 0, width, height);
}

 

我很快发现,只需编辑浮点数 z 和浮点数 dz 的代码行,就可以改变云形图案的移动速度。

我还发现,如果我将 colorMode 从 HSB(色调、饱和度、亮度)改为 RGB(红、绿、蓝),就会得到截然不同的效果。

在尝试使用不同设置的过程中,我发现程序中存在 LED 亮度过高的问题,这些 LED 肯定需要某种扩散罩。我试了几种磨砂亚克力边料以找出自己喜欢的类型,还调整了扩散罩与灯之间的距离,以改变散光量。

这些物理的改变加上程序的改变,可让一种非常简单的设置产生缤纷多样的效果。

enclosure-3_79e91c9ac5703b883d582528643a3d2e5853f381.jpg

我为 NeoPixel Matrix 和 FadeCandy 做了一个简单的机壳,这样就能轻松改变扩散罩的颜色。

这就是它看来的效果

结论

我非常喜欢这个项目,也成功制作出一些不错的灯光效果。不过,最令人兴奋的是我感觉自己只是接触了一点皮毛,利用这些器件,我还可以做出更多好玩的设计。也许我可以利用声音或视频输入让灯光具有互动性;此外,NeoPixels 阵列可以链接在一起,单个 FadeCandy 可控制多达 8 个阵列,所以我还可以扩展显示装置。

I have a background in the arts, environmental conservation and IT support. In my spare time I do a bit of DJing and I like making things.
DesignSpark Electrical Logolinkedin