亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置

零部件与材料

Arduino 101 ×1
1米 可寻址非防水 LED 灯带 (60灯/米) ×1 SparkFun 版本接线便利,也可用 Adafruit NeoPixel 等同类产品
单芯导线或跳线针脚 ×1 用于将绞合线转为 Arduino 兼容引脚
热缩管 ×1 可选,追求精致可用
DC 母座接线端子 ×1
DC 公座接线端子 ×1
3节 AA 电池盒(带开关) ×1
Pololu 升压稳压器 ×1 这款 $4 稳压器让整个项目仅用一组 3节 AA 电池供电。也可跳过该模块,用 9V 电池供电 Arduino 101,但仍需 3节 AA 电池盒给灯带供电。详见 Adafruit NeoPixel 供电指南
AA 电池 ×1
12英寸方形“影子盒”相框 ×1 深度和尺寸完美适配
12英寸方形镜子 ×1 安装在相框背部
11英寸相框画架 ×1 用于展示成品
镜面隐私贴膜 ×1 可选,大幅增强效果但非必需
KT板 (FoamCore) ×1 标准 3/16" 或 1/4"。白色或黑色均可。需制作一块 12"x12" 底板,加一条 1米长、0.5" 宽的条带

所需工具

软件与在线服务

项目详解

万花筒与无限镜的完美融合!随镜子旋转角度变化,灯光随之响应。项目采用现成镜子和相框,搭配少量电子元件。Arduino 101 内置姿态传感器,可检测倾斜角度并控制灯光变化。

注意: 本项目电子部分与“节日影子剧院”相同,核心仅为 Arduino 101、LED 灯带、电池盒。使用 $4 升压稳压器让同一电池盒同时给两者供电;也可用 9V 电池单独给 Arduino 供电,省去稳压器。

第一部分:制作镜面组件

步骤 1: 用锋利美工刀裁剪 12"x12" KT板,铅笔标记中心。可用相框背板作参考。

DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置

步骤 2: 用圆规或绳笔法,在 12x12 板中心画半径 5.25" 的圆。从边缘量 0.75" 作起始参考点。

步骤 3: 换新刀片,沿线裁剪圆孔。此切口将直接呈现在成品中,务必切割整洁。

DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置

步骤 4: 孔切好后,挑选最平整一面朝下置于干净工作面。

步骤 5: 再裁一条 0.5" 宽、约 36" 长的 KT 板条,可拼接短段再用胶带固定。用尺子保证宽度均匀。

DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置

步骤 6: 条带平铺,每 2" 在表层纸上划一道竖向刻痕,贯穿全长。

DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置

步骤 7: 翻面,用热熔胶将 LED 灯带沿条带长度粘贴固定。

DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置

步骤 8: 利用背面刻痕作为折弯点,将条带弯成圆环。

DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置

步骤 9: 将 LED 环置于底板圆孔上方。灯带过长,调整环直径略大于圆孔,剪去多余约 6 颗 LED(可留作他用)。

DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置

步骤 10: 将 LED 环置于底板正面(粗糙面),环背边距离底板边缘至少 0.25"(否则相框黑色间隔柱无法安装),热熔胶固定在圆孔边缘。

DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置
DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置
DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置

步骤 11: 若使用半透镜膜,取出相框玻璃按说明书贴膜。此步最繁琐。先清洁玻璃,用水或肥皂水便于排除气泡。贴膜能显著增强幻觉效果并隐藏 LED,但非强制(后期可补贴)。贴好后玻璃膜面朝上/朝内放回相框。

步骤 12: 相框朝下,玻璃洁净。底板好面朝下、灯环朝上置于玻璃上。加入两个相框自带间隔柱,再放入 12x12" 镜子反面朝下。LED 引线从相框背部穿出。若镜子过紧夹住导线,需用美工刀在相框边缘小心开槽。

DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置
DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置

若有空隙可加背板纸板,或直接用相框卡扣固定镜子。镜面组件完成,接下来是电子部分。

第二部分:电子系统搭建

步骤 1: 取出之前剪下的 6 颗 LED 尾部线束,距灯珠约 1cm 剪断,剥线。

DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置
DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置

步骤 2: 拆解升压模块附带的弯针排针,焊接两根到绿、黄线末端,方便插入 Arduino 101 引脚。

DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置

步骤 3: 红线焊接升压模块 VIN,GND 和 VOUT 焊两根直针排针。

DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置

步骤 4: 连接 DC 接线端子。先剥电池盒导线,接入公头端子并拧紧:红接 +,黑接 -。

DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置

母头端子接入镜面背部引出的灯带导线:黄接 -,红接 +。

步骤 5: 排线连接 Arduino 101:绿线接 Pin 6,黄线接 13 号引脚旁 GND。升压模块两根排针:GND 接 GND,VOUT 接 Arduino 101 Vin 引脚。切勿接反!接反会冒烟损坏,我曾吃过亏。

DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置
DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置

步骤 6: 连接 Arduino 与灯带的排线,再将电池盒公头插入灯带母头,接线完毕!

步骤 7: 将 Arduino 101 固定在镜子背面,方向平行于镜子任意一边。用魔术贴、双面胶或热熔胶固定。电池盒就近固定,松散导线用胶带或胶水整理。通过电脑、USB 线和 Arduino IDE 上传示例代码,或用 Arduino Web Editor 在线编辑上传。

立即体验!

DIY 万花筒无限镜 — 打造震撼的 LED 灯光艺术装置

示例代码根据 Intel Curie 模块加速度计读取的角度改变 LED 颜色。特定角度全灭,特定角度以最后颜色跑马灯效果。请深入代码创造更炫酷的灯效!Adafruit NeoPixel 完全指南 是绝佳入门资料。

重要提醒! 若永久安装请用插电电源替代电池盒,但输出电压必须 3.5V-5V!更高电压(如 9V 方块电池)可能烧毁灯带。

源代码

Arduino 101 无限镜草图

/* Copyright (c) 2016 Intel Corporation. All rights reserved. See license notice at end of file.
Arduino 101 "Infinity Mirror." Arduino 101 旋转角度控制 Neopixel 灯带颜色。
使用 Adafruit Neopixel 库。库安装:https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation
桌面版 Arduino IDE 需最新 Intel Curie 核心:https://www.arduino.cc/en/Guide/Arduino101 */

#include "CurieIMU.h"
#include <Adafruit_NeoPixel.h>
#define PIN 6  // NeoPixel 数据引脚
Adafruit_NeoPixel strip = Adafruit_NeoPixel(54, PIN, NEO_GRB + NEO_KHZ800); // 灯珠数可按实际修改

int tr = 0, tg = 0, tb = 0; // 目标颜色
int r = 0, g = 0, b = 0;    // 当前颜色
int rawX = 0, rawY = 0;     // 加速度计原始值
float angle = 0.0;

void setup() {
  CurieIMU.begin();
  CurieIMU.setAccelerometerRange(2); // 量程 2g
  strip.begin();
  strip.show(); // 全灭初始化
}

void loop() {
  rawX = CurieIMU.readAccelerometer(X_AXIS);
  rawY = CurieIMU.readAccelerometer(Y_AXIS);
  int rawZ = CurieIMU.readAccelerometer(Z_AXIS);
  angle = atan2(rawX, rawY); // 将 X/Y 轴加速度转为弧度角 (-3.14 到 3.14)

  if (abs(angle) > 2.5) { // 引脚朝下:全灭
    tr = tg = tb = 0; runlights();
  }
  else if (angle > 1.5 && angle < 2.5) { // 白光
    tr = tg = tb = 100; runlights();
  }
  else if (angle < 1.5 && angle > 0.5) { // 红光
    tr = 100; tg = tb = 0; runlights();
  }
  else if (angle < 0.5 && angle > -0.5) { // 绿光
    tg = 100; tr = tb = 0; runlights();
  }
  else if (angle < -1.5 && angle > -2.5) { // 蓝光
    tb = 100; tr = tg = 0; runlights();
  }
  else if (angle < -0.5 && angle > -1.5) { // 戏剧追逐效果
    theaterChase();
  }
  else { // 意外角度:全灭
    tr = tg = tb = 0; runlights();
  }
}

void runlights() {
  // 颜色平滑过渡
  if (tr > r + 1) r++; if (tg > g + 1) g++; if (tb > b + 1) b++;
  if (tr < r) r--; if (tg < g) g--; if (tb < b) b--;
  for (int i = 0; i < strip.numPixels(); i++) strip.setPixelColor(i, r, g, b);
  strip.show();
  delay(10);
}

// 彩虹循环(阻塞式,期间不响应新角度)
void rainbowCycle(uint8_t wait) {
  for (uint16_t j = 0; j < 256 * 5; j++) {
    for (uint16_t i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// 戏剧追逐效果
void theaterChase() {
  for (int j = 0; j < 3; j++) {
    for (int q = 0; q < 3; q++) {
      for (uint16_t i = 0; i < strip.numPixels(); i += 3) strip.setPixelColor(i + q, r, g, b);
      strip.show(); delay(50);
      for (uint16_t i = 0; i < strip.numPixels(); i += 3) strip.setPixelColor(i + q, 0);
    }
  }
}

// 色轮函数
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if (WheelPos < 85) return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  if (WheelPos < 170) { WheelPos -= 85; return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); }
  WheelPos -= 170; return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

/* GNU LGPL 许可声明... */

制造工艺

  1. 万花筒:从布鲁斯特科学发明到现代设计艺术
  2. 现代镜子的科学与工艺
  3. 无限齿轮:41级齿轮箱实现346垓年一圈的旋转
  4. DIY 蓝牙控制 Arduino 间谍小车
  5. FlickMote:基于手势的智能家居红外遥控器
  6. DIY Arduino TV-B-Gone:万能关机遥控器
  7. DIY Arduino 冷镜露点仪:高精度温湿度监测
  8. 自制大尺寸LED主时钟带闹钟功能 — 12米外清晰可见
  9. Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
  10. Arduino 项目优化供电方案:从按键开关到电池监测与数据记录
  11. Arduino 井字棋游戏:MAX7219 点阵屏 + 纸板外壳 DIY
  12. 无限镜面时钟:极致优雅与精准计时的融合