万花筒无限镜
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要的工具和机器
| ||||
| ||||
| ||||
|
应用和在线服务
|
关于这个项目
万花筒和无限镜之间的交叉!当您改变镜子的旋转时,灯光也会随之改变。该项目由现成的镜子和相框以及其他一些组件构建而成。 Arduino 101开发板内置了位置感应,我们可以用它来感应角度,控制灯光显示。
注意:该项目使用与相同的电子装置 假日皮影戏, 基本上只是一个 Arduino101、一个 LED 灯条和一个电池组。我使用 4 美元的电压调节器,这样同一个电池组就可以为 LED 和 Arduino 101 供电。或者,您可以使用 9v 电池为 Arduino 供电并跳过调节器。
第一部分:建造镜子
第 1 步:
使用锋利的开箱刀或爱好刀,切割 12” x 12” 的 Foamcore 正方形并用铅笔标记中心。您可以使用相框中的背面纸板作为参考。
第 2 步:
使用圆形绘图工具或绳子和铅笔,以 12 x 12 为中心绘制一个半径为 5.25 英寸的正圆。您可以使用尺子在距离 12x12 边缘 0.75 英寸处做一个标记,并将其用作起始参考点。
第 3 步:
使用带有新刀片的开箱刀或爱好刀,小心地切出圆圈。 在最终产品中可以看到这种切割,所以尽可能干净地切割。
第 4 步:
孔切好后,选择外观最好的一面,将其正面朝下放在干净的工作台面上。
第 5 步:
切割一条单独的 ½ 英寸的 Foamcore 条,大约 36" 长。如果需要,可以将其从较短的部分用胶带拼凑在一起。使用尺子并尽可能保持尺寸接近统一的 0.5"。
第 6 步:
将完成的条带水平放置在桌子上,沿着总长度每 2 英寸在最上面的纸上切割均匀的垂直划线。
第 7 步:
将条带翻转过来,并使用热胶,沿着 Foamcore 条带的长度连接 LED 灯串。
第 8 步:
使用您在 Foamcore 背面切割的分数作为弯曲点,将完成的条带弯曲成一个粗略的圆圈。
第 9 步:
将 LED 灯条放在 12x12" 泡沫芯正方形的孔上的环中。完整的 LED 灯条会太长。将 LED 圆的大小设置为刚好比孔大,并切断多余的 LED(大约 6 个 LED)。您以后仍可以将这些备用 LED 用于其他项目。
第 10 步:
将 LED 灯条放在 12x12" 正方形顶面(坏面)的环中,并在圆孔边缘用热胶固定。确保 LED 环的背面至少有 0.25" in从 12 x 12” 正方形的边缘开始。(否则,框架上的黑色塑料垫片将无法围绕它。
第 11 步:
如果使用半反光膜,请取出投影盒框架的玻璃,然后按照制造商的说明将膜贴在玻璃上。我发现这是最繁琐的一步。确保先清洁玻璃并使用水(或肥皂溶液)使气泡更容易去除。使用镜膜会产生更强烈的错觉并隐藏 LED,但这不是 100% 必要的(如果需要,您可以稍后添加它!)进入框架。
第 12 步:
在框架朝下且玻璃清洁的情况下,将泡沫放在玻璃顶部,好的一面朝下,LED 环朝上。添加框架中的两个垫片,然后将 12x12” 镜子面朝下添加。 LED 线应该从镜框的背面穿过镜子。如果镜面配合对于电线来说太紧,您可能需要使用盒式切割机或小刀小心地在镜框边缘为电线雕刻一个凹口。
如果有空间,请添加纸板框架背衬,或者如果不只是用框架的标签将镜子固定到位。大功告成!现在来看看电子产品的魔力。
第二部分:设置电子设备
第一步
找到您之前切断末端的额外 6-LED。从末端收集线束,从灯处切割约 1 厘米。剥去电线末端。
图>第 2 步
拆开稳压器随附的弯曲插头引脚,并将其中两个焊接到绿色和黄色电线的末端。这将使您可以轻松地将它们插入 Arduino 101 的引脚。
第 3 步
接下来将红线焊接到稳压器上的 VIN 端子,并将两个直头焊接到 GND 和 VOUT 引脚,如图所示。
第 4 步
现在连接桶形插孔适配器。首先剥去来自电池盒的电线末端,然后将它们安装在公桶插孔的端子中并用螺丝刀拧紧。红色到 (+) 端,黑色到 (-) 端。
接下来将母桶插孔适配器连接到 LED 灯条开头(来自镜子背面)的松散电线上。在这个灯条上,黄色连接到 (-) 端子,红色连接到 (+ ).
步骤 5
现在将线束连接到 Arduino 101。绿色线连接到 PIN 6,黄色线连接到 #13 附近的 GND 引脚。
使用稳压器上的两个插头引脚,GND 连接到 GND,VOUT 连接到 Arduino 101 上的“Vin”引脚。不要误会!向后插入会导致异味和灼伤。这个我知道。
第 6 步: 将 Arduino 101 上的线束和 LED 灯条连接在一起,然后将电池组桶形插孔连接到 LED 灯带的桶形插孔,您就全部接线完毕!
第 7 步:
现在您的电子设备已完成,将 Arduino 101 放置在镜子的背面,使其方向平行于镜子的任何一侧。用魔术贴、双面胶带或热胶将其固定。将电池组安装在附近,并用胶带或胶水固定所有松动的电线。
使用计算机、USB 电缆和 Arduino IDE 上传示例代码。
或者,您可以使用基于 Arduino 的 IDE 访问、编辑和上传示例代码。
试试吧!
示例代码根据从英特尔 Cure 计算模块上的加速度计读取的镜子角度更改 LED 的颜色。目前,一个位置关闭所有灯,一个角度使用最后使用的颜色创建追逐光效果。随意深入代码并制作一些疯狂的灯光效果!优秀的 Adafruit NeoPixel Uberguide 是一个很好的起点。
重要! 如果你想永久安装这个镜子,你可以使用插入式电源代替电池组,但要确保它输出3.5v - 5v!任何更高的电压(例如 9v 方形电池)都可能使 LED 灯条过载。
代码
- Arduino 101 Infinity Mirror Sketch
Arduino 101 Infinity Mirror SketchArduino
简单草图,从内部加速度计读取 Arduino 101 的角度,并使用该角度控制 NeoPixel LED 灯条的颜色。/* 版权所有 (c) 2016 英特尔公司。版权所有。请参阅文件末尾的许可通知。 Arduino 101“无限镜”。 Arduino 101 的旋转角度会改变 Neopixel 条带中的灯光。此代码使用 Adafruit Neopixel 库。此处的库安装说明:https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation 如果使用桌面版 Arduino IDE,请确保安装了最新的 Intel Curie Core。有关更多信息,请访问 https://www.arduino.cc/en/Guide/Arduino101*/#include "CurieIMU.h"#include#define PIN 6 //// NeoPixels 连接的是什么引脚to?Adafruit_NeoPixel strip =Adafruit_NeoPixel(54, PIN, NEO_GRB + NEO_KHZ800); /// 条带长 15 像素。您可以根据自己的 strip.int tr =0; 中的像素数更改此设置。 //一些变量来保存“颜色目标”和“颜色当前”以进行平滑...int tg =0;int tb =0;int r =0;int g =0;int b =0;int rawX =0; ///// 保存居里加速度计的值int rawY =0;//int rawZ =0;float angle =0.0;void setup() { // 把你的设置代码放在这里,运行一次://Serial.begin (9600); //用于调试。 CurieIMU.begin(); CurieIMU.setAccelerometerRange(2); // 将加速度计范围设置为 2g。 strip.begin(); // 初始化新像素条 strip.show(); // 将所有像素初始化为“关闭”}void loop() { // 将主要代码放在这里,重复运行: // 读取加速度计:int rawX =CurieIMU.readAccelerometer(X_AXIS); int rawY =CurieIMU.readAccelerometer(Y_AXIS); int rawZ =CurieIMU.readAccelerometer(Z_AXIS);角度 =atan2(rawX, rawY); // 函数 atan2() 将 x 和 y 力转换为以弧度为单位的角度。凉爽的!输出是 -3.14 到 3.14 if (abs(angle)> 2.5) { // 数字引脚向下 /// 在这个位置关灯 tr =0; tg =0; tb =0;运行灯(); } if ((angle> 1.5) &&(angle <2.5)) { //使这个位置的灯变白(等于r、g和b。)颜色值可以达到255,但我发现它在100时就足够亮了。 tr =100; tg =100; tb =100;运行灯(); } else if ((angle <1.5) &&(angle> 0.5)) { //使这个位置的灯变红 tr =100; tg =0; tb =0;运行灯(); } else if ((angle <0.5) &&(angle> -0.5)) { //使这个位置的灯变绿 tr =0; tg =100; tb =0;运行灯(); } else if ((angle <-1.5) &&(angle> -2.5)) { //使这个位置的灯变成蓝色 tr =0; tg =0; tb =100;运行灯(); } else if ((angle <-0.5) &&(angle> -1.5)) { //// 为有趣的事情选择一个角!theaterChase(); /// 这些函数写在草图的底部。 //彩虹周期(2); } else { //// 如果出现意外角度,请关闭灯。 tr =0; tg =0; tb =0;运行灯(); }}void runlights() { /// 颜色平滑。当前颜色向目标颜色移动...如果目标大于当前颜色,则向上移动,如果低于当前颜色,则向下移动。如果 (tr> r + 1) { r++; } if (tg> g + 1) { g++; } if (tb> b + 1) { b++; } if (tr
制造工艺