在这个Arduino项目中,我将向您展示如何使用Arduino制作一个令人敬畏的LED心形相框。你可以观看下面的视频或阅读下面的书面文章以获得更多细节。
乍一看,它只是一个普通的相框,但点击后面的开关,它就变成了一个与众不同的相框。构建这个Arduino项目是非常有趣的,它可以是一个完美的情人节,生日或周年纪念礼物给你的爱。所以让我们开始构建它。
相框准备
首先,我们需要一个简单的18 × 13厘米的相框和一个剪成相框大小的纤维板,在上面开洞插入led。然后我们需要绘制和打印一个心形与32个led将被用作一个模式。我们将为led钻洞。
一旦我们钻完洞,我们将开始插入led。我们需要将所有led插入到同一侧,阳极或较长的引线指向外面,这样我们就可以将它们弯曲,然后将所有led的阳极焊接在一起。
一旦我们焊接了所有的led,我们应该检查所有的led是否工作正常。为此,我们需要连接正5伏VCC引脚到LED的阳极通过220欧姆电阻和使用地引脚检查每个LED是否会发光。
电路示意图
这是这个项目的电路原理图,你可以在下面找到这个项目所需的组件的完整列表。因此,我们将使用Arduino Nano和两个TLC5940 ICs来控制led。TLC5940是一个16通道的LED驱动器,提供PWM输出。您可以找到更多细节,如何连接和使用这个IC与Arduino我的特别Arduino和TLC5940教程。
这个Arduino项目需要的组件
你可以从下面的任何网站获得组件:
- Arduino纳米 .............................亚马逊/Banggood/阿里巴巴全球速卖通
- 超亮红色led ...............亚马逊/Banggood/阿里巴巴全球速卖通
- 开关 .........................................亚马逊/Banggood/阿里巴巴全球速卖通
- 权力杰克 .................................亚马逊/Banggood/阿里巴巴全球速卖通
- DC 5V >1A适配器....................亚马逊/Banggood/阿里巴巴全球速卖通
- 2 x TLC5940 LED驱动..........亚马逊/阿里巴巴全球速卖通
- 2 × 2K电阻..........................亚马逊/Banggood/阿里巴巴全球速卖通
- 1uF & 0.1uF电容...............亚马逊/Banggood/阿里巴巴全球速卖通
必威外围提钱披露:这些是附属链接。作为一名亚马逊助理,我的收入来自符合条件的购买。
组装
在这里,首先我们将插入IC插座和针头,并将它们焊接到原型PCB上,这样我们就可以将IC和Arduino Nano连接到它们上。我们还需要两个额外的引脚头与插槽的电源,或5伏VCC和接地引脚,以及两个电容解耦。
在连接组件时,我们需要非常小心,因为如果连接错误的话,那么多的电线会把事情弄得很乱。此时,我们需要上传Arduino代码,以确保我们已经正确地连接了所有东西。
Arduino代码
这样做之后,现在我们可以很容易地处理0到31的所有led。在开始时,我们还需要定义程序所需的一些变量。在setup小节中,我们需要初始化TLCs,在loop小节中创建程序。我用switch语句将程序组织成9个不同的阶段或led的光显示。
例如,让我们看一下第一阶段。我们生成从0到31的随机INT值,并使用它们作为led的地址。Tlc.set()函数用于设置我们点亮的LED。第一个参数是LED的地址,第二个参数是LED的亮度值或者PWM值,从0到4095。然而,这不会立即点亮LED,它只是设置当Tlc.update()函数将被执行时,下一个LED将被点亮。使用这个“if”语句,我们在点亮8个随机led后激活第二阶段。现在让我们再看一个例子,假设是第三阶段。使用这个“for”循环,我们设置所有32个led在Tlc.update()函数执行时点亮。在半秒的延迟后,使用Tlc.clear()函数清除并关闭所有led。您可以用类似的方式修改代码,并自己添加更多的灯光显示。
/ *领导心相框,Arduino项目*程序由德扬Nedelkovski www.HowToMechatronics.com * * / / * TLC5940图书馆的亚历克bet188官方网站斯·里昂https://code.google.com/archive/p/tlc5940arduino/ *您需要修改tlc_config.h位于TLC5940图书馆*和改变变量的值NUM_TLCS TLC5940 ICs的数字* / #包括“TLC5940相连。h" int stage = 0;int randomNumber;int count = 0;int亮度= 3500;int brightUp = 50;int dir = 1;void setup() {Tlc.init();} void loop() {switch(stage) {//----- stage 1 case 0: randomNumber = (int)random(0,31);Tlc.set (randomNumber, 4095);延迟(1500); Tlc.update(); if(count >= 8) { stage = 1; count = 0; } else { ++count; } break; //-----Stage 2 case 1: delay(75); for(int i=31;i>=0;i--) { Tlc.set(i,4095); delay(100); Tlc.update(); } delay(500); Tlc.clear(); Tlc.update(); stage = 2; delay(500); break; //-----Stage 3 case 2: for(int i=0;i<=31;i++) { Tlc.set(i,4095); } Tlc.update(); delay(500); Tlc.clear(); Tlc.update(); delay(350); if(count > 6) { stage = 3; count = 0; } else { ++count; } break; //-----Stage 4 case 3: for (int i=0;i<=15;i++) { Tlc.set(i,4095); Tlc.set(31-i,4095); Tlc.update(); delay(70); } delay(50); for (int i=15;i>=0;i--) { Tlc.set(i,0); Tlc.set(31-i,0); Tlc.update(); delay(70); } for (int i=15;i>=0;i--) { Tlc.set(i,4095); Tlc.set(31-i,4095); Tlc.update(); delay(70); } for (int i=0;i<=15;i++) { Tlc.set(i,0); Tlc.set(31-i,0); Tlc.update(); delay(70); } delay(50); Tlc.clear(); Tlc.update(); delay(100); if(count > 1) { stage = 4; count = 0; } else { ++count; } break; //-----Stage 5 case 4: for (int i=15;i>=count;i--) { Tlc.set(32-i,4095); Tlc.update(); delay(5); Tlc.set(32-i-1,0); Tlc.update(); delay(5); Tlc.set(i,4095); Tlc.update(); delay(5); Tlc.set(i+1,0); Tlc.update(); delay(50); } if(count > 15) { Tlc.set(16,4095); Tlc.update(); delay(2000); stage = 5; count = 0; } else { ++count; } break; //-----Stage 6 case 5: for (int i=0;i<=31;i++) { Tlc.set(i,brightness); Tlc.update(); } Tlc.update(); brightness = brightness + brightUp; if (brightness>=3500) { brightUp=-50; ++count; } if (brightness<=150) { brightUp=50; } if(count > 6) { stage = 6; count = 0; brightness = 3500; Tlc.clear(); Tlc.update(); } delay(40); break; //-----Stage 7 case 6: for (int i=0;i<=30;i+=2) { Tlc.set(i,4095); Tlc.set(i+1,0); } Tlc.update(); delay(500); for (int i=0;i<=30;i+=2) { Tlc.set(i,0); Tlc.set(i+1,4095); } Tlc.update(); delay(500); if(count > 20) { stage = 7; count = 0; } else { ++count; } break; //-----Stage 8 case 7: for(int i=31;i>=16;i--) { Tlc.clear(); Tlc.update(); delay(2); Tlc.set(i,4095); Tlc.set(i+1,2000); Tlc.set(i+2,1000); Tlc.set(i+3,500); Tlc.set(i+4,300); Tlc.set(i+5,200); Tlc.set(i+6,100); Tlc.set(i+7,50); Tlc.set(i+8,0); Tlc.set(i-16,4095); Tlc.set(i-15,2000); Tlc.set(i-14,1000); Tlc.set(i-13,500); Tlc.set(i-12,300); Tlc.set(i-11,200); Tlc.set(i-10,100); Tlc.set(i+-9,50); Tlc.set(i-8,0); Tlc.update(); delay(50); } if(count > 8) { for(int i=31;i>=0;i--) { Tlc.set(i,4095); Tlc.update(); delay(50); } stage = 8; count = 0; } else { ++count; } break; //-----Stage 9 case 8: for(int i=31;i>=0;i--) { Tlc.set(i+8,4095); Tlc.set(i+7,2000); Tlc.set(i+6,1000); Tlc.set(i+5,500); Tlc.set(i+4,300); Tlc.set(i+3,200); Tlc.set(i+2,100); Tlc.set(i+1,50); Tlc.set(i,0); Tlc.update(); delay(50); } for(int i=31;i>=0;i--) { Tlc.set(i,4095); } Tlc.update(); delay(10); if(count > 8) { delay(8000); Tlc.clear(); Tlc.update(); stage = 0; count = 0; } else { ++count; } break; } }
最后的联系
一旦我们完成了编程,并知道一切都运行良好,我们需要将led固定在纤维板上,我用胶枪做到了这一点。然后我们需要用胶枪和4块切割成合适尺寸的纤维板做一个电子盖盒。必威lol
现在剩下的就是连接来自开关的电源线和插在相框纤维板上的电源插孔,添加照片,将整个盒子固定到相框上,这样就完成了!
在这里你可以看到完整的演示视频LED心形相框。
请在下面的评论部分提出任何问题!
好的项目和精彩网站!我为我的女朋友做了心脏,她喜欢它很多。
很高兴听到这个,谢谢!
你好,我心中发生故障,需要一个暗示在哪里找到理由
心脏的一侧工作正常,这一侧有16-31个针。是的,我已经更改了变量:#define NUM_TLCS 2
我还发现TLC5940负责不起作用的心脏变得非常热
您可能连接了一些错误的东西,或者只是TLC5940失败了。
伟大的项目,谢谢。它就像魔法一样有效。我女儿很喜欢这个画框。她开着灯睡觉!
我只做了一点小小的改变,用我的3D打印机代替了纤维板做了封面盒。
一旦你完成,建议焊接电线到led更好的接触。
很高兴听你这么说,谢谢!