DIY 热熔胶棒 LED 矩阵灯 — 打造多彩显示屏
组件与物料
| 组件 | 数量 | 备注 |
|---|---|---|
| WS2812B 可编程 LED 灯带 (IP60, 60 LED/m, 共 128 颗) | 128 | |
| Arduino Nano R3 | 1 | |
| 3A 迷你 DC-DC 降压稳压模块 | 1 | |
| 10 kΩ 电阻 | 1 | |
| 330 Ω 电阻 | 1 | |
| 470 µF 电解电容 (10V 低矮型) | 1 | |
| 10K 线性滑动电位器 (45mm, 行程 30mm) | 1 | |
| 小型按钮开关 | 1 | |
| 小型拨动开关 | 1 | |
| DC 电源插座 (面板安装) | 1 | |
| 7mm × 100mm 热熔胶棒 | 64 |
所需工具和机器
- 3D 打印机 (通用)
应用与在线服务
- Arduino IDE
项目介绍
本项目参考 jbumstead 的“光纤”LED 矩阵灯,使用 OpenSCAD 重新设计,将原版 12mm 散射 RGB LED 替换为低成本 WS2812B 灯带,并尽量压薄外壳以便使用便宜的 7mm 热熔胶棒作为导光柱。

打印外壳
仅 “Hot Glue Matrix - Bottom.stl” 需要支撑。建议 0.2mm 层高、15% 填充。打印后用 19/64″ 钻头扩大孔径,方便胶棒插入。
组装灯体 — 顶部
- 将 WS2812B 灯带剪成 16 段,每段 8 颗 LED。
- 在平面上按间距 15mm 粘贴 8 段,相邻段方向相反,确保 DIN 在左上角。
- 按蛇形顺序焊接 DIN/DOUT、GND、+5V,引出三根多股线连接底部。
- 将灯带倒扣放入 “Hot Glue Matrix - Holder Top” 导轨,用蓝色美纹纸胶带固定。


组装灯体 — 底部
同样方式焊接底部 8 段灯带 (DOUT 在右上角),引出三根长线连接 PCB。暂不连接顶部引线,待胶棒安装完毕后再焊接。

安装热熔胶棒
需 64 根长度一致的 7mm 胶棒。建议先筛选,再用 19/64″ 钻头扩孔。用透明吸管保护顶底连接线。逐行插入胶棒,测量四角高度确保一致,最后用少量瞬间胶固定四角胶棒 (避免胶水沾到 LED)。

连接顶底灯带
小心掀起底部灯带,修剪并焊接三根连接线:+5V 对 +5V、顶部 DIN 接底部 DOUT、GND 对 GND。
制作 PCB
提供 Eagle 文件,可自行送板或用热转印法制作。安装前务必将 DC-DC 模块输出调至 5V。板上 4 个安装孔需钻 2.5mm 并攻 M3 螺纹,用 6mm M3 螺丝固定。

最终接线
按原理图连接滑动电位器、按钮、拨动开关、DC 电源座,并将灯带引线接到 PCB。

软件
程序内置多种测试动画,按钮切换模式,电位器调节速度。
代码
GlueMatrixTest.ino (主程序)
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#include "Button.h"
#define PIN_LED 2
#define PIN_SWITCH 3
#define PIN_POT A0
#define LEDS 128
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDS, PIN_LED, NEO_GRB + NEO_KHZ800);
Button mode = Button(PIN_SWITCH);
bool modePressed = false;
// LED 物理映射数组 (省略,见原文)
const uint8_t botLED[] PROGMEM = { ... };
const uint8_t topLED[] PROGMEM = { ... };
int red = 128, green = 128, blue = 128;
int pattern = 1;
void setup() {
Serial.begin(115200);
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_SWITCH, INPUT);
pinMode(PIN_POT, INPUT);
strip.begin();
strip.show();
Button::PinChangeSetup(PIN_SWITCH);
}
void loop() {
if (modePressed) {
pattern = (pattern % 8) + 1;
strip.clear();
}
modePressed = false;
switch (pattern) {
case 1: colorWipe(strip.Color(255,0,0)); break;
case 2: colorWipe(strip.Color(0,255,0)); break;
case 3: colorWipe(strip.Color(0,0,255)); break;
case 4: theaterChase(strip.Color(127,127,127)); break;
case 5: rainbow(); break;
case 6: rainbowDifference(); break;
case 7: rainbowCycle(); break;
case 8: rainbowCycleDifference(); break;
case 9: theaterChaseRainbow(); break;
}
if (!modePressed) modePressed = mode.Pressed();
}
// 中断服务程序、颜色擦除、彩虹、剧场追逐等函数省略,见原文
Button.h / Button.cpp (按钮库)
提供防抖、长按重复功能的按钮类,支持引脚变更中断。
3D 打印文件
STL 文件打包下载:stl_files_vSNeOCJWDn.zip
原理图与 PCB


Eagle 源文件:eagle_files_D8oAM5ngf5.zip
制造工艺