“简单”无限立方体

54,553

411.

37

简介:“轻松”无限立方体

关于:我有点沉迷于LED的东西

Infinity Cubes和Icosahedrons是一直引起我的注意的东西。然而,由于相对复杂的框架,它们似乎总是很难制造。然而,这种Infinity立方体具有在一件中印刷的框架。使构建更强大,比其他大多数项目更容易。选择立方体的大小,因此整个立方体需要只需要1M的LED条带,保持低成本。我很满意这个项目如何结果,希望你喜欢它!

第1步:材料/工具

材料:

  • 1米ws2812b 144LED/m IP30$8.69
  • 微控制器(Arduino)$2.58
  • 6个有机玻璃正方形(91*91*3mm)
  • 反光膜2.19美元(产品质量不好,我不建议在阿里订购)
  • 电线(连接LED带件)1.61美元
  • 3D打印框
  • 肥皂水(这是材料吗?)
  • 5V电源$4.86(如果您希望所有LED都为白色,则为10A,但在大多数情况下,5A应该可以)

工具:

  • 烙铁
  • 第二胶水
  • 热胶(可选)
  • 电线剥线
  • 小钳子(有助于在狭窄的角落焊接)
  • 3d打印机(或有人愿意帮你打印相框)

第二步:框架

这是这个项目最重要的部分。零件被印刷在它的一个角上,所以层线的差别较小,因为“理论上”在这个方向印刷时不需要支撑。然而,在这个打印失败后,我决定无论如何添加支持。支持实际上是在模型中绘制的,因为切片器无法为这样的模型高效地生成它们(“v3 v11.stl”有支持,v3 v12.stl”没有支持)。

由于方向不同,需要180*160*180的空间来打印114*114*114立方体。我花了10个小时来打印,模型大约需要65克的灯丝。

第三步:LED接线

重要的是要了解电线如何在实际焊接之前焊接,因为没有很多空间来与之合作。上面的绘图(代表立方体)应该让您了解一切焊接。

5条电线通过孔进入立方体。两对5V和GND,一个电动LED条带的开头(在底层)和一个电源端部(在顶层)。这不仅仅是在两端为条带向动力,这实际上是为了消除更复杂的焊点的需要。进入的其他电线是数据线,这是向所有LED发送数据的行,以指定它们的颜色。

如果沿着绿线走,您可以看到12个LED的条带部分相互连接的顺序(它们在图像上按顺序编号)。在绿线靠近一块LED带的部分,这意味着它在带的下面(框架有空间放这些线)。

在草图中,您可以看到有三个部分,中心广场,外部方形,中间4件在两个方块之间。中间4件从外面的广场和中央广场的GND获得5V。

请注意,为外部正方形供电的导线位于底层,并穿过框架(LED条的一部分后面)到达顶层。

第4步:焊接步骤1

我将把这一部分分成几个小步骤来更好地解释一切。为了更好地解释一切,我对上图中LED条的各个部分进行了编号。

我就是这样做的,如果你有更好的方法,就用你自己的。

一定要注意LED带片的方向!放错一块会给你带来很多麻烦。

步骤1:因为我们需要12个LED的部分,你应该先把LED条切成12片,每个12个LED。接下来,将3根导线连接到零件1,确保将它们连接到零件1上德国工业标准侧。在第12部分上添加2个电线以连接到V5和GND蠢货侧,这侧的电线需要至少长12厘米,因为它们需要穿过框架,电线还不需要焊接到第12部分。把连接这些零件的5根电线穿过孔。然后取下胶带的盖子,把第1部分粘到框架上,别担心,胶带粘得不好,以后会用胶水粘上。

第五步:焊接第二步

一定要注意LED带片的方向!放错一块会给你带来很多麻烦。

第二步:现在将添加第2-3部分,相同的过程可重复4、5和6、7。首先,一根电线需要焊接到第3部分的Din上,这根电线需要15厘米或更长,并且是连接到第2部分的Dout的电线(图中的蓝线)。这根电线稍后会修剪掉。焊接完电线后,取下该零件的胶带盖并将其放下。

接下来,将Dout op第1部分与第2部分的Din连接起来,要做到这一点,您可能需要将第1部分从框架中拉出一点。这需要一个很短的电线,中间有一块绝缘材料。从零件2中取出胶带并将其放置到位,确保蓝色导线在其后面。

现在修剪连接到第3部分的DIN的电线并将其焊接到第2部分的焊料中。焊接这一点,很可能您必须再次从框架中移除第2部分以获得一些空间。这是一个非常紧密的角,部分2下方的电线需要使锐利的180度转向连接到第2部分(这可以在图像4中看到)。

现在连接第1部分和第3部分的V5,可能需要短线来执行此操作。

最后,取一小段导线将零件1、2和3的GND相互连接起来。如果第2部分的5V焊盘挡住了路,你只需将该部分的角对角切开,就可以拆下焊盘。

如果你认为自己可能弄错了,就检查一下短裤。

现在重复第4、5和6、7部分:)


第6步:焊接步骤3

一定要注意LED带片的方向!放错一块会给你带来很多麻烦。

第3步:现在应该将第1部分到7部分放下,确保三重检查一切,因为您无法轻易测试它,因为部件2,4和6还没有5V。连接穿过孔的5V和GND导线到第12部分。从部12中拆下粘带盖并将其放下。确保电线在第8部分(尚未放置)的位置处的排水沟很好地槽。你可以拉动电线有点槽,使它们更好。接下来将第8部分的DIN连接到第7部分的DOUT,就像上一步一样。然后用部分8连接第7部分的GND。

(在上面的图像中,我还没有添加第12部分,我确实添加了它,但没有它的图像。)

第7步:焊接步骤4

一定要注意LED带片的方向!放错一块会给你带来很多麻烦。

第四步:你差不多完成了,只需要把第9、10和11部分放下来。焊接这些应该是直接向前,只是要确保焊接一块的豆瓣到下一个的Din第一,因为它是很难访问之后。别忘了把这一层的5V和零件2、4、6、8的5V连接起来。

要测试所有LED工作,我使用以下代码。它将逐一通过所有LED。如果某些东西不起作用,则可以使用万用表来弄清楚出了什么问题。

#include
#define LED#PIN 7#define NUM#u LED 144 CRGB LED[NUM#LED];int counter;void setup(){FastLED.addLeds文件(led,NUMïled);counter=0;}void loop(){counter=(counter+1)%144;led[counter]=CRGB(255,0,0);快速显示.show();延迟(20);LED[计数器]=CRGB(0,0,0);}

由于一次只有一个LED通电,因此此代码可以通过Arduino供电。这意味着运行此代码不需要外部电源,只需将条带的5V和GND连接到Arduino即可。

第8步:将LED粘到框架上

如前所述,胶带本身不能很好地粘在PLA上。这就是为什么我提出了所有的LED带片一点,并把一些第二胶水下面,然后按下他们。

小心不要泄漏这个胶水。除了将双手放在一起,它会在框架上留下污渍。

第9步:切割亚克力正方形(如果你没有切割)

我没有把亚克力切成91毫米的正方形,而是用尺子和小刀在亚克力上我想弄断的地方画线。在用刀在亚克力上画了一条线之后,我把这条线放在桌子边上,把这条线上的一块弄断。这不是超级准确,可能会导致有点不均匀的边缘,但有几个毫米的误差空间,所以这并不重要。

(我已经在图像中的两个正方形上涂了胶卷)

步骤10:涂抹镜片

在这里是一个指向某人的链接,说明如何做到这一点,总结一下:

  1. 清洁亚克力,去除纤维或灰尘
  2. 在丙烯酸上涂肥皂水
  3. 从薄膜中取出塑料
  4. 将电影放在丙烯酸上
  5. 用塑料卡从中间取出气泡和肥皂
  6. 修剪边缘

一定要在涂膜前把所有的颗粒都去掉,这对涂膜的外观有很大的影响。

第11步:在镜框中放置镜子

在将任何后视镜放入镜框之前,请确保后视镜侧清洁良好,此侧将向内放置,之后不能清洁。

我把镜子放在相反的一对,只是为了检查它们的步调是否完全相同。这实际上很容易实现,因为框架应该负责对齐。我用第二种胶水把镜子粘在镜框上(热胶水可能更好,它不会弄脏PLA)。镜子的一面朝里,因为那是最脆弱的一面,这样光线就不必穿过一层亚克力才能再次反射。

第12步:电子产品

我开始清理从立方体里出来的电线,在我看来这只是让一切看起来有点整洁。因为这个项目只是一个带有LED带的Arduino,所以一切都非常简单。5V电源应连接到立方体的5V和Arduino的5V。电源的GND需要连接到立方体的GND和Arduino的GND。确保你得到了正确的极性,如果必要的话用万用表检查,然后再通电,否则你可能会炸你的Arduino。为了避免这种情况,您也可以通过电源连接器为Arduino供电,但您需要一个额外的连接器来完成此操作。现在唯一要做的就是将立方体的Din连接到Arduino上的一个管脚上,我最终使用了管脚5,但这并不重要。简单吧?!

注:第三张图片只是我在网上找到的一些方案,里面的电阻是不需要的。你可以决定把它包括进去,

第13步:代码:)

我现在使用的代码非常简单,我只是从fast-LED示例库中获取了一些代码,并更改了一些数字以在这个立方体上运行(可以找到我使用的原始代码)在这里). 在使用USB端口将Arduino连接到电脑之前,请确保拔下电源和Arduino之间的5V连接。

我最终写了有多个动画的编写代码,其中一些可以在上面的视频中看到:

不要从中复制粘贴,它不会由于赋予指令粘贴代码

#include的方式运行

#define led_pin 5 #define num_leds 144 crgb lets [num_leds];

void setup(){FastLED.addLeds文件(发光二极管数);实心填充(发光二极管、发光二极管数量、CRGB(0,0,0));//填写所有黑色绑定.show();void循环(){OneNake(10000);实心填充(发光二极管、发光二极管数量、CRGB(0,0,0));时尚中心(10000);实心填充(发光二极管、发光二极管数量、CRGB(0,0,0));//彩虹(5000);实心填充(发光二极管、发光二极管数量、CRGB(0,0,0)); sparkles(10000); fill_solid(leds, NUM_LEDS, CRGB(0,0,0)); //loopThroughColors(5000); fill_solid(leds, NUM_LEDS, CRGB(0,0,0)); } void onesnake( int duration){ unsigned long startTime; startTime=millis(); int location=1; int nextpath =1; int corners[8][3] = {{-7,8,1},{-1,2,3},{-3,4,5},{-5,6,7},{-8,-12,9},{-2,-9,10},{-4,-10,11},{-6,-11,12}}; int ledsInSnake[48]; int color=0; for (int i=0;i<48;i++){ ledsInSnake[i]=0; } while(startTime+duration>millis()){ if (location>0){ for(int i=0;i<12;i++){ color=(color+5)%2550; leds[ledsInSnake[0]]=CHSV(255, 255, 0); for(int j = 0; j < 48; j++){ if (j!=0){ leds[ledsInSnake[j]]=CHSV(color/10,255, (j*255)/48); ledsInSnake[j-1]=ledsInSnake[j]; } } ledsInSnake[47]=(location-1)*12+i; leds[ledsInSnake[47]]=CHSV(color/10,255, 255); FastLED.show(); delay(20); } } if (location<0){ for(int i=0;i<12;i++){ color=(color+5)%2550; leds[ledsInSnake[0]]=CHSV(255, 255, 0); for(int j = 0; j < 48; j++){ if (j!=0){ leds[ledsInSnake[j]]=CHSV(color/10,255, (j*255)/48); ledsInSnake[j-1]=ledsInSnake[j]; } } ledsInSnake[47]=(location+1)*-12+11-i; leds[ledsInSnake[47]]=CHSV(color/10,255, 255); FastLED.show(); delay(20); } } nextpath=random(0,2); for (int i=0; i<8;i++){//differen 8 if (corners[i][0]==-location || corners[i][1]==-location || corners[i][2]==-location){ if (corners[i][nextpath]!=-location){ location=corners[i][nextpath]; }else{ location=corners[i][nextpath+1]; } break; } }

FastLED.show(); delay(20); } } void fadeFromCenter( int duration){ unsigned long startTime; startTime=millis(); int counter = 0; while(startTime+duration>millis()){ counter=(counter+1)%255; for (int i=0;i<12;i++){ for (int j=0;j<6;j++){ leds[i*12+j]=CHSV((counter+j*15)%255,255,255); leds[i*12+11-j]=CHSV((counter+j*15)%255,255,255); } } FastLED.show(); delay(20); } } void loopThroughColors(int duration){ unsigned long startTime; startTime=millis(); int counter = 0; while(startTime+duration>millis()){ counter=(counter+1)%255; for ( int i=0;i

void rainbow(int duration){ unsigned long startTime; startTime=millis(); int counter = 0; while(startTime+duration>millis()){ counter=(counter+1)%255; for(int i = 0; i < NUM_LEDS; i++){ leds[i]=CHSV((i*5+counter)%255, 255, 255); } FastLED.show(); delay(20); } } void sparkles(int duration){ unsigned long startTime; startTime=millis(); int LENGTH = 40; int blink[LENGTH]; int color =0; for (int i=0;imillis()){ color=(color+5)%2550; leds[blink[0]]=CHSV(255, 255, 0); for(int i = 0; i < LENGTH; i++){ if (i!=0){ leds[blink[i]]=CHSV(color/10,255, (i*255)/LENGTH); blink[i-1]=blink[i]; } } blink[LENGTH-1]=random(0,NUM_LEDS); FastLED.show(); delay(50); } }

第14步:享受你的无限立方体!!

我希望你喜欢这个。如果是的话,请在比赛中投票给我,并给我一些反馈,我想听听你对这个项目或改进的想法。感谢阅读!

让它发光比赛

年度二等奖
让它发光比赛

2个人做了这个项目!

建议

  • 让它发光比赛

    让它发光比赛
  • 第一次作家比赛

    第一次作家比赛
  • PCB挑战

    PCB挑战

37讨论

0
登普塞6

问题三个月前

还有别的地方可以买到LED灯带吗?

0
捷豹电信

8个月前

我喜欢这个东西。太漂亮了!我用这种薄,实用刀切割材料从亚马逊而不是玻璃和薄膜。

SupremeTech 12 x 12 x 0.04英寸亚克力透明镜,30%透明

0
吉米282

8个月前回复

这就是我用的。干得不错

0
扎克帕特罗斯

8个月前回复

我每米有100个LED,每边应该有多少个?

0
Thomasj152

8个月前回复

大概8个

0
阿平尼97

问题11个月前

你有焊接的提示吗?垫很小,焊接电线真的很棘手,特别是当你需要2根垫上时......

1
Thomasj152

11个月前回答

我先焊接了数据线,还没有将条带连接到立方体上,因为一旦LED条带连接到框架上,中间的焊盘就很难接近。在将电线焊接到焊盘上之前,还要确保在焊盘上放一些焊锡

1
吉米282

8个月前回复

有件事可能会有帮助。你用的电线不要便宜。硅涂层钢丝弹簧(28至32ga)。它是更灵活,将有助于保持你的焊点弹出松散。务必对导线和焊盘b4进行锡焊。

另请注意:我从我的第一个多维数据集版中发出了“接线夹具”。只需在焊接前录制LED条带的立方体的一角。

0
dempsey2344

问题10个月前

嗨,托马斯!爱的设计和您的容易遵循的方向!我想知道你能不能给我看张照片或者解释一下如何把电线连接到电池上。我买的电池和说明书上的一样,但是我在连接电线时遇到了一些问题。谢谢!

0
23约翰森

11个月前

我的最后一次脑细胞.....这很棒!

0
BGF1650型

11个月前

我是一个纽伯,我的儿子想要建立这个。他比我更熟悉的arduino熟悉,但我想知道你是否有稍微更清晰地解释了接线。抱歉不称职,但这看起来真的很酷。任何指导都会受到欣赏。

0
Thomasj152

11个月前回复

可以在步骤3中在图像中看到立方体的接线。只需将所有条带件的串联连接到串联的方式,然后确保每个部件都有5V连接到5V和地面连接到地面。就电源的连接而言,将LED条带的5V连接到电源的5V,将LED条的GND连接到电源的地面。从相同的电源供电,这可以通过USB端口完成,或者使用它的侧面上的5V和GND来完成。然后,需要仅从Arduino的销5到LED条的第一件(全部串联)的最终导线。我希望我清楚地解释一切。祝好运!

0
WANEWOLF98.

问题12个月前

非常好的建设,我在电子商店在我的贸易学校,我计划建立这个,我唯一的问题是你从哪里得到的有机玻璃。我本来打算在亚马逊上四处看看,但是你在材料清单上要求的具体尺寸有点不太合适。我想知道你能否提供一个链接到你从哪里得到有机玻璃?

0
阿平尼97

11个月前回答

你可以把所有6个正方形都放在一张A4纸上——我花了大约4英镑从亚马逊买了一个。我用一把拼图锯(刀片很细,速度很慢)把它锯了下来,结果很好。

0
猎户座上升

11个月前回答

我订购了我的tapplastics.com网站,但运费和这些零件一样高(12个切割方块12美元,装运12美元)(如果我想再做一个,12美元,最低10美元)。但我在想,任何一个制作画框或海报的地方都有可能做到。或者你身边有一家塑料公司来避免运输。

0
Thomasj152

12个月前回答

我实际上从eBay购买了一些剩余的有机玻璃(有史以来最糟糕的决定,质量不好,并产生了糟糕的建设)。你应该只买3毫米厚的床单并以正确的尺寸切断正方形(锯切可能比打破(我做的)更好)。这可以粗略地完成,因为有几毫米误差的空间。我在指令中提到的有机玻璃的大小可能有点关,我刚测量框架,似乎很好地效果很好。我建议您首先打印帧,然后测量面板需要的大小只是确定。此外,立方体在1M LED条带周围构建,由于这一点,有机玻璃的尺寸有点奇怪。

1
泰勒99

小费11个月前第7步

步骤7中的代码包含HTML标记和格式不正确的代码。请尝试以下操作:
#包括紧固件
#定义LED U引脚7
#定义数字指示灯144
CRGB LED[发光二极管数量];
int计数器;
无效设置(){
FastLED.addLeds文件(发光二极管数);
计数器= 0;

}
void loop(){
计数器=(计数器+1)%144;
LED [计数器] = CRGB(255,0,0);
错了();
延迟(20);
LED[计数器]=CRGB(0,0,0);
}

最后一步:
#include fiteled#define LED_PIN 5
#定义数字指示灯144
CRGB LED[发光二极管数量];

无效设置(){
FastLED.addLeds文件(发光二极管数);
实心填充(发光二极管、发光二极管数量、CRGB(0,0,0));//填补所有黑色
错了();
}
void loop(){
一条蛇(10000);
实心填充(发光二极管、发光二极管数量、CRGB(0,0,0));
时尚中心(10000);
实心填充(发光二极管、发光二极管数量、CRGB(0,0,0));
//彩虹(5000);
实心填充(发光二极管、发光二极管数量、CRGB(0,0,0));
闪闪发光(10000);
实心填充(发光二极管、发光二极管数量、CRGB(0,0,0));
// loopthroughcolors(5000);
实心填充(发光二极管、发光二极管数量、CRGB(0,0,0));
}
void onesnake(int持续时间){
无符号长起始时间;
开始时间=毫秒();
int位置=1;
int nextpath=1;
int corners[8][3]={-7,8,1},{-1,2,3},{-3,4,5},{-5,6,7},{-8,-12,9},{-2,-9,10},{-4,-10,11},{-6,-11,12};
内特·莱德辛斯内克[48];
int color = 0;
对于(int i=0;i<48;i++){
ledsInSnake[i]=0;
}
虽然(starttime +持续时间> millis()){
如果(位置>0){
对于(int i=0;i<12;i++){
颜色=(颜色+5)%2550;
发光二极管[ledsInSnake[0]]=CHSV(255,255,0);
对于(int j=0;j<48;j++){
如果(j!=0){
发光二极管[ledsInSnake[j]]=CHSV(颜色/10255,(j*255)/48);
莱德辛斯内克[j-1]=莱德辛斯内克[j];
}
}
ledsInSnake[47]=(位置-1)*12+i;
LED [LEDSINSNAKE [47]] = CHSV(颜色/ 10,255,255);
错了();
延迟(20);
}
}
if(位置<0){
对于(int i=0;i<12;i++){
颜色=(颜色+5)%2550;
发光二极管[ledsInSnake[0]]=CHSV(255,255,0);
对于(int j=0;j<48;j++){
如果(j!=0){
发光二极管[ledsInSnake[j]]=CHSV(颜色/10255,(j*255)/48);
莱德辛斯内克[j-1]=莱德辛斯内克[j];
}
}
ledsInSnake[47]=(位置+1)*-12+11-i;
LED [LEDSINSNAKE [47]] = CHSV(颜色/ 10,255,255);
错了();
延迟(20);
}
}
nettpath =随机(0,2);
for(int i=0;i<8;i++){//差异8
if(角落[i] [0] == - 位置||角落[i] [1] == - 位置||角落[i] [2] == - 位置){
if(角落[i] [nettpath]!= - 位置){
位置=转角[i][nextpath];
}其他{
位置=角落[i] [nettpath + 1];
}
中断;
}
}

错了();
延迟(20);
}
}
无效fadeFromCenter(int持续时间){
无符号长起始时间;
开始时间=毫秒();
int计数器=0;
虽然(starttime +持续时间> millis()){
计数器=(计数器+1)%255;
对于(int i=0;i<12;i++){
for(int j = 0; j <6; j ++){
LED [I * 12 + J] = CHSV((计数器+ J * 15)%255,255,255);
发光二极管[i*12+11-j]=CHSV((计数器+j*15)%255255);
}
}
错了();
延迟(20);
}
}
void loopThroughColors(int duration){
无符号长起始时间;
开始时间=毫秒();
int计数器=0;
虽然(starttime +持续时间> millis()){
计数器=(计数器+1)%255;
对于(int i=0;i

虚空彩虹(int持续时间){
无符号长起始时间;
开始时间=毫秒();
int计数器=0;
虽然(starttime +持续时间> millis()){
计数器=(计数器+1)%255;
for(int i = 0; i LED[i]=CHSV((i*5+计数器)%255、255、255);
}
错了();
延迟(20);
}
}
虚空闪烁(int持续时间){
无符号长起始时间;
开始时间=毫秒();
int长度=40;
int眨眼[长度];
int color = 0;
for(int i=0;imillis()){
颜色=(颜色+5)%2550;
LED[闪烁[0]]=CHSV(255,255,0);
for(int i = 0; i 如果(我)!=0){
LED [闪烁[i]] = CHSV(颜色/ 10,255,(i * 255)/长度);
闪烁[i-1]=闪烁[i];
}
}
闪烁[长度-1] =随机(0,num_leds);
错了();
延迟(50);
}
}

未测试,请告诉我是否有效
0
Thomasj152

11个月前回复

对,代码部分的代码不起作用。这是由于Instructables没有正确格式化它。应改用提供的.ino文件。那个人不应该有错误

0
温瓦那斯普伦

问题12个月前

很好的项目,但我有一些问题。。。无法编译和加载草图。
我已经尝试了ArduinoIDE的几个版本,但都没有成功。
请让我知道您使用的IDE版本,请您打开所用库的源代码?
你好,维姆