DIY LED 心形相框 - Arduino 项目
在这个 Arduino 项目中,我将向您展示如何使用 Arduino 制作出色的 LED 心形相框。您可以观看以下视频或阅读下面的书面文章了解更多详情。
乍一看,它是一个普通的相框,但点击背面的开关,它就变成了非凡的相框。构建这个 Arduino 项目非常有趣,它可以成为送给亲人的完美情人节、生日或周年纪念礼物。那么让我们开始构建吧
首先,我们需要一个简单的 18 x 13 厘米相框和一块切割成相框大小的纤维板,在上面制作用于插入 LED 的孔。然后我们需要绘制并打印一个带有 32 个 LED 的心形,用作图案。我们将使用钻头为 LED 打孔。
一旦我们完成钻孔,我们将开始插入 LED。我们需要将所有 LED 插入同一侧,阳极或较长的引线指向外面,以便我们可以弯曲它们,然后将所有 LED 的阳极焊接在一起。
焊接完所有 LED 后,我们应该检查它们是否都工作正常。为此,我们需要通过一个 220 欧姆电阻将正极 5 伏 VCC 引脚连接到 LED 的阳极,并使用接地引脚检查每个 LED 是否会亮起。
这是该项目的电路原理图,您可以在下方找到该项目所需组件的完整列表。所以我们将使用 Arduino Nano 和两个 TLC5940 IC 来控制 LED。 TLC5940 是一款提供 PWM 输出的 16 通道 LED 驱动器。您可以在我的特定 Arduino 和 TLC5940 教程中找到有关如何将此 IC 与 Arduino 连接和使用的更多详细信息。
您可以从以下任何网站获取组件:
在这里,首先我们将 IC 插座和排针插入到位并将它们焊接到原型 PCB 上,以便我们可以将 IC 和 Arduino Nano 连接到它们。我们还需要两个额外的带有几个电源插槽的排针,或 5 伏 VCC 和接地引脚,以及两个用于去耦的电容器。
在连接组件时我们需要非常小心,因为如果我们连接错误,它可能会因为太多的电线而变得非常混乱。此时我们需要上传 Arduino 代码以确保我们已正确连接所有内容。
让我们看一下我为这个项目编写的 Arduino 代码。所以我们将使用 Alex Leone 制作的 TLC5940 库。下载并安装此库后,我们需要修改 tlc_config.h 文件并将变量 NUM_TLCS 的值更改为串联连接的 TLC5940 IC 的数量,在我们的例子中该值为 2
完成后,现在我们可以轻松地寻址从 0 到 31 的所有 LED。在开始时,我们还需要定义程序所需的一些变量。在设置部分,我们需要启动 TLC,并在循环部分制作程序。我使用 switch 语句将程序组织成 9 个不同的阶段或 LED 灯光秀。
例如,让我们看一下第一阶段。我们生成从 0 到 31 的随机 INT 值,并将它们用作 LED 的地址。函数 Tlc.set() 用于设置我们点亮哪个 LED。第一个参数是 LED 的地址,第二个参数是 LED 的亮度值或 PWM 值,范围是 0 到 4095。不过,这不会马上点亮 LED,它只是设置了哪个执行 Tlc.update() 函数时,LED 将亮起。使用这个“if”语句,我们在点亮 8 个随机 LED 后激活第二阶段。现在让我们再看一个例子,假设是第 3 阶段。使用这个“for”循环,我们将所有 32 个 LED 设置为在 Tlc.update() 函数执行时点亮。使用 Tlc.clear() 函数延迟半秒后,我们清除并关闭所有 LED。类似的,你可以自己修改代码,添加更多的灯光秀。
一旦我们完成编程并知道一切正常,我们需要将 LED 固定到纤维板上,我使用胶枪做到了。然后我们需要使用胶枪和另外 4 块切割成尺寸的纤维板来制作电子设备的盖盒。
现在剩下的就是连接来自开关的电源线和插入相框纤维板的电源插孔,添加照片,将整个盒子固定在相框上,我们就完成了!
在这里您可以观看LED心形相框的完整演示视频。
欢迎在下方评论区提出任何问题!相框准备
电路原理图
此 Arduino 项目所需的组件
组装
Arduino 代码
/* LED Heart Photo Frame - Arduino Project
* Program made by Dejan Nedelkovski,
* www.HowToMechatronics.com
*/
/* TLC5940 Library by Alex Leone, https://code.google.com/archive/p/tlc5940arduino/
* You need to modify tlc_config.h located in the TLC5940 library
* and change the value of the variable NUM_TLCS to the numbers of TLC5940 ICs connected
*/
#include "Tlc5940.h"
int stage = 0;
int randomNumber;
int count = 0;
int brightness = 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);
delay(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;
}
}
Code language: Arduino (arduino)最终触摸
制造工艺