DIY Arduino 雪花灯:30 LED 自由布线立体装饰灯 (附软 PWM 动画代码)
项目亮点
- **自由布线艺术 (Freeform Circuit)**:0.8mm 黄铜杆焊接成雪花骨架,兼作导线与结构支撑
- **30 颗 LED 分 17 组独立控制**:6 组尖端、6 组中间枝、4-6 组核心 (共用引脚)
- **软件 PWM 突破引脚限制**:
SoftPWM库让 17 个数字口均具备 PWM 调光能力 - **电容触控交互**:单根黄铜杆做触摸传感器,切换动画/开关/闪烁反馈
- **Arduino Nano 核心**,极简 BOM,适合桌面摆件/圣诞装饰/电子工艺练习
元器件清单
| 元器件 | 规格/数量 | 备注 |
|---|---|---|
| Arduino Nano R3 | 1 | 主控,A6/A7 仅输入,可用 17 个输出口 |
| SMD LED 0805/1206 | 30 颗 | 白/暖白/蓝/多色可选,正向压降 ~3V |
| 220Ω 电阻 (0805 贴片) | 17 | 每组限流,单组 ~8mA,总电流 ~240mA |
| 黄铜杆 | 0.8mm × 2m | 结构+导线一体,锡焊连接 |
| 薄膜电容触摸引脚 | 1 根黄铜杆 | 接 A0,配合 ADCTouch 库 |
| LiPo 电池/USB 供电 | 1 | 5V 直供 Nano VIN 或 USB |
制作工艺详解
1. 设计图纸与定位
选取六折对称雪花晶体矢量图,缩放至六边形内接圆直径 ≈ Nano 宽度 (18mm)。打印 1:1 纸版做焊接模板。
2. 骨架焊接 (Ground 网络)
- 单根黄铜杆弯折焊接成正六边形核心 (边长 ~18mm)
- 六个顶点各延伸一根杆作为“主枝”地线
- 所有 LED **阴极** 焊接至最近的地线骨架,形成公共阴极网络

3. LED 贴装与分组
**分组策略 (共 17 组,对应 17 个 PWM 引脚):**
- Edge (尖端) 6 组:每组 1 颗 LED,接 D13, A4, A5, D2, D8, D12
- Middle (中枝) 6 组:每组 2 颗串联,接 D10, D6, D3, D5, D9, D11 (均为硬件 PWM 引脚)
- Inner (核心) 5 组:每组 2 颗串联,接 A2, A3, A1, D4, D7
- **剩余 2 颗核心 LED** 并入现有组 (共 4 颗共用 1 引脚)
**焊接技巧**:纸板+双面胶做 SMD 定位治具,镊子夹取 LED,细尖烙铁头快速点焊,避免过热脱焊。
4. 三层立体布线 (阳极引线)
Nano 置于六边形核心下方,预留 3 层布线空间:
- 第 1 层:Inner 组阳极线
- 第 2 层:Middle 组阳极线
- 第 3 层:Edge 组阳极线 + 触摸感应线
每根阳极线串联一颗 220Ω 电阻 (贴片焊在黄铜杆上) 再接 Nano 对应引脚。**极度考验耐心与空间想象力**,建议先用漆包线练手。
5. 电容触摸感应杆
额外延伸一根黄铜杆至外缘,接 Nano A0。使用 ADCTouch 库 (无需外部电阻/电容) 实现高灵敏度触摸检测。触摸切换动画模式,长按关灯。
软件架构与动画引擎
核心库
- SoftPWM (Paul Stoffregen) —— 任意数字口软件 PWM,周期 1ms,8-bit 分辨率
ADCTouchSensor(同作者) —— 单引脚电容触摸
动画状态机
animation 变量 (0-5) 循环切换 6 种内置特效:
| ID | 效果名 | 描述 |
|---|---|---|
| 0 | _fill(100) | 全亮低亮度待机 |
| 1 | shinyAnimation | 边缘 LED 随机闪烁,核心呼吸 |
| 2 | circleAnimation | 三层同心圆波纹扩散/收缩 |
| 3 | loopAnimation | 单点顺序流动,全亮/全灭交替 |
| 4 | fireworkAnimation | 核心→中枝→尖端逐级炸裂烟花 |
| 5 | smileAnimation | 固定图案“笑脸”眨眼 |
关键算法片段
// 环形缓冲索引循环
byte _nextIndex(byte index, byte step) {
index += step;
while (index > 5) index -= 6;
return index;
}
// 呼吸/波动通用模板
if (state[i] >= 100) dir[i] = -1;
else if (state[i] <= 10) dir[i] = 1;
state[i] += dir[i];
SoftPWMSet(pin[i], state[i]);
电气验证与安全
- **总电流测算**:17 组 × 8mA = 136mA (平均) / 峰值 240mA < ATmega328P 总源/灌电流限制 (200mA) **临界**
- **建议改进**:改用 470Ω 电阻降至 4mA/组,或外接 ULN2803/TPIC6B595 驱动,或改用 WS2812B 单线控制
- **焊前测试**:每颗 LED 必测正反向压降,防反接/坏灯
- **绝缘处理**:完成后刷涂三防漆/热缩管包裹关键节点,防氧化短路
扩展创意
- 改用 WS2812B-2020 (2mm×2mm) 实现真彩全彩动画,仅占 1 引脚
- 加装光敏电阻,环境暗时自动亮起
- 接入 ESP8266/ESP32,手机 App 控制动画/颜色/定时
- 设计 PCB 版本:保留自由布线美感的同时量产化
- 结合 3D 打印底座内置电池充电管理 (TP4056),成品化礼物
制造工艺
- 擀面杖:从伊特鲁里亚起源到现代工艺的演变
- 现代保龄球瓶的演变与工艺
- 从古老纤维到现代制造:安全别针全解析
- 自制树莓派 I/O 扩展排线与插针适配板:分步图文教程
- 动态 LED 三角艺术:用 Arduino UNO 驱动 45 盏 APA106 RGB 灯珠
- DHT11 温湿度传感器项目:LED 指示与压电蜂鸣器报警
- 将 MIDI 键盘变身智能钢琴导师:Arduino + LED 灯带 + MuseScore
- 球栅阵列(BGA)详解:原理、优势与应用趋势
- 销钉如何保障项目精度:家具、搁架、机械中的应用
- 销钉材料解析:木质、金属与塑料的特点与应用
- 选择合适销钉的 5 个关键因素
- TinyML:工程师联合推动超低功耗系统AI标准化