自制一个带3D磁传感器的RGB无限镜子

▌ 本项目需要的东西
硬件名称
英飞凌3D磁传感器2Go
x1
Arduino MKR1000
x1
达林顿大功率晶体管
x3
RGB LED灯带
x1
跳线(通用)
x1
软件应用程序和在线服务
Arduino IDE
手动工具和装配工具
烙铁(通用)
▌ 介绍
当我第一次看到无限镜子的效果时,我就对它印象深刻。
我想建立我自己的版本。因此,我决定使用英飞凌的3D磁传感器套件和旋钮通过一条RGB LED灯条来控制的无限镜子上的颜色。
在进行实际制作之前,请务必查看最终成品的演示视频:

注意:无限效果不是那么明显。由于相机的原因,我还需要试验摆放镜子的位置,使其显得更加明显。
这些是制作它所需的部件(仅电子部分):

▌细节
我对这个项目的灵感来自于techydiy的无限镜子(这里)。看一下它吧,以便明白无限镜子的理念。
由于3D磁传感器2Go套件没有足够的PWM引脚,我使用了Arduino MKR1000板来扩展它,因此我可以轻松地向无限镜子添加任何其他东西。
除此之外,颜色变化算法通过将RGB值(从0到255)转换为HSV(色调饱和度值)来工作,其中将色调值从0改变为360将改变LED的颜色。
注意:我没有编写从HSV转换到RGB的代码。在网上搜索后,我从这个网站(这里)找到了代码。因此,我使用了修改后适配了3D Magnetic 2Go套件的算法。
这是我转换的代码片段:
void setLedColorHSV(int h, double s, double v) {
//this is the algorithm to convert from RGB to HSV
double r=0;
double g=0;
double b=0;
double hf=h/60.0;
int i=(int)floor(h/60.0);
double f = h/60.0 - i;
double pv = v * (1 - s);
double qv = v * (1 - s*f);
double tv = v * (1 - s * (1 - f));
switch (i)
{
case 0: //rojo dominante
r = v;
g = tv;
b = pv;
break;
case 1: //verde
r = qv;
g = v;
b = pv;
break;
case 2:
r = pv;
g = v;
b = tv;
break;
case 3: //azul
r = pv;
g = qv;
b = v;
break;
case 4:
r = tv;
g = pv;
b = v;
break;
case 5: //rojo
r = v;
g = pv;
b = qv;
break;
}
//set each component to a integer value between 0 and 255
int red=constrain((int)255*r,0,255);
int green=constrain((int)255*g,0,255);
int blue=constrain((int)255*b,0,255);
setLedColor(red,green,blue);
}
以下是整个项目如何运作的概要:
3D Magnetic 2Go通过其硬件串口发送旋钮的当前位置(范围从0到360度)。
MKR1000连接到3D Magnetic 2Go的UART引脚,它会解析之前发送的角度。
这个角度在上面的代码片段中用于代替色调(正如我之前所说的那样,范围从0到360)。
此功能根据该角度生成三个值(红色,绿色和蓝色),范围从0到255。
用analogWrite函数将这些值写入到连接到MKR1000的RGB LED灯条(当然使用像TIP120这样的晶体管!)。只需旋转旋钮,就可以将光变换为色环上最亮的颜色,从而得到一个漂亮的效果。

话虽如此,让我们继续讨论这个项目本身。
▌配置3D Magnetic 2Go套件
这是连接到套件的旋钮:


这是套件的引脚:

注意:我将使用Arduino IDE对套件进行编程(版本1.1.2)。
假设您了解了基础知识,比如如何上传代码以及已经设置好套件并从Arduino IDE获得程序模板,这一步将非常简单。
只需下载XMC1100的附加代码即可。
选择正确的板子和COM端口,并将“串行输出选择”设置为“PC”。完成后,上传代码并打开串行监视器。 你应该看到一个从0到360这样的数字,通过旋钮来改变:

如果和上图一样,则意味着一切正常,再次上传相同的代码,但这一次,将“串行输出选择”设置为“在板上”,并确保正确地上传。

现在你不会在串行监视器中看到任何输出,这是完全正常的,只需继续下一步。
▌配置MKR1000
这是MKR1000:

这是MKR1000的引脚,供您参考:

下载Arduino MKR1000附上的代码,然后将其简单地上传到Arduino MKR1000。这很容易,不是吗?
▌连接一切和测试
现在,只需将一块板的Tx引脚连接到另一块板的Rx引脚,将一块板的Rx引脚连接到另一块板的Tx,然后将MKR1000的3.3v电源连接到XMC2Go的3.3v引脚(如果你想的话!),并确保地线也连接。
注意:我已将3.3v从MKR1000连接到XMC2Go; 这将直接从MKR1000启动XMC2Go。引自XMC2Go引脚图:
如果电路板通过3.3v引脚供电,则不建议通过USB供电,反之亦然
这是它们应该看起来的样子:

注意:我会建议您首先搭起所有电子部件,当它运行得完美时,然后继续搭建无限镜子。
如果要测试MKR1000和3D磁传感器套件之间的连接是否正常,请将MKR1000连接到计算机的USB端口,以9600波特打开串行监视器。你应该看到这样:

正在发生的事情是3D磁传感器套件正在发送旋钮的角度(从0到360度),MKR1000分析该角度并将其转换为RGB颜色编码(每个从0到255),循环处理所有颜色。旋转旋钮,查看值的变化。
现在是时候将晶体管连接到MKR1000了。根据此连接图:

注意:我使用的是共阳极型RGB LED灯条,Adafruit上的这篇文章对它的设置很有帮助。
我将晶体管连接在一个单独的小面包板上:

连接完所有东西之后:

插入LED灯条的12伏电源,以及MKR1000的电源(我假设您已经从MKR1000上的3.3v为XMC2Go供电),LED灯条应该如下那样点亮:

旋转旋钮,看到颜色变化:



一个用旋钮LED灯条变色的视频,循环显示所有颜色:

▌制作无限镜子
现在您已经完成了电子部分并且能够改变RGB LED灯条的颜色,我们继续制作无限镜子本身。
我不会更详细地介绍这个,因为我不是专家; 这是我第一次做这样的事情,但最终的结果还不是那么糟糕。 我再次在YouTube上看到了这个视频,它确实帮助我搭建了它。
这些是我如何搭建它的一些图片,只是为了让你明白个大概。
我已经有了这个木制框架,我在制作PCB时用它作为边框,它作为无限镜子时看起来更好用。


框架也有这个透明玻璃,可以删除:

但要使无限镜子错觉起作用,需要对玻璃进行着色。要做到这一点,首先需要清洁玻璃:

我用这个车窗色调(我从一家汽车店买到的)用肥皂水和一张用于压出气泡的卡片。

并将线焊接到带子上并通过镜子中的一个孔将它们取出,以使后镜(稍后将安装)与框架平放。


将LED灯条安装到框架上后(后面没有镜子)测试LED灯条。

现在换另一个完全反光的镜子,它放在镜架的后面,但因为我现在还没有这个,我只是将镜架(配有RGB LED条带)放在梳妆台镜子前面测试。 最后使用3D磁传感器旋钮更改无限镜子的颜色。

▌最后的总结
所以现在您可以使用旋钮柄和Arduino MKR1000更改RGB LED灯条的颜色。您可以轻松更改XMC2Go中的代码以更改另一种RGB LED的颜色,但是当按下开关时,您还可以添加更多效果。您甚至可以使用相同的旋钮来调暗或照亮另一个LED,只需更改代码即可。
我找不到一个有多色LED的RGB LED灯条; 我找到的那个有红色,绿色和蓝色LED。使用带有多色LED的RGB灯条会产生更明显的颜色变化,因此如果您找到它们,它们看起来会更好看。
任何人都可以想出另一种用处,而不是无限镜子,你可以在任何你能想到的东西中使用它。 它可以为您的汽车后备箱,自行车或踏板车照明,或为您的桌子照明,如:



下一篇:无线传感器特性