• “简单”的无限魔方


    “简单”的无限魔方

    查看原文
    另一个制作教程
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    无限立方体和二十面体总是引起我的注意。然而,由于框架相对复杂,它们似乎总是很难制作。然而,这个无限立方体有一个一体打印的框架。使构建比大多数其他项目更强大和更容易。选择立方体的尺寸,整个立方体只需要1M的LED灯条,保持低成本。我对这个项目的结果非常满意,希望你也喜欢它!

    第 1 步:材料/工具

    材料:

    • 1米 ws2812b 144LED/m IP30
    • 微控制器 (Arduino)
    • 6个有机玻璃方块(91*91*3mm
    • 镜膜 (产品到货质量不好,我不建议在阿里订购)
    • 电线(连接 LED 灯条)
    • 3D打印框架
    • 肥皂水(这甚至是一种材料吗?)
    • 5V 电源(如果您希望所有 LED 都是白色的,则为 10 A,但在大多数情况下 5A 应该没问题)

    工具:

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

    第 2 步:框架

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

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

    由于方向的原因,需要 180160180 的空间来打印 114114114 的立方体。我花了 10 小时打印,模型需要大约 65 克灯丝。

    附件

    第 3 步:LED 接线

    在这里插入图片描述
    在这里插入图片描述

    重要的是要了解在实际焊接之前需要如何焊接电线,因为没有太多空间可以使用。上图(代表立方体)应该让您了解所有东西是如何焊接的。

    5 根电线穿过孔进入立方体。两对 5V 和 GND,一对给 LED 灯条的开头供电(在底层),一对给末端供电(在顶层)。这不仅仅是在两端为条带供电,这实际上是消除对更复杂焊点的需要所必需的。进入的另一根线是数据线,这是向所有 LED 发送数据以指定它们颜色的线。

    如果沿着绿线,您可以看到 12 个 LED 的条形部分相互连接的顺序(它们在图像上按顺序编号)。在绿线在一条 LED 灯带旁边运行的部分,这意味着它在灯带下方运行(框架有这些电线的空间)。

    在草图中,您可以看到有三个部分,中心正方形、外侧正方形和位于两个正方形之间的中间 4 块。中间的 4 块从外部正方形获得 5V,从中心正方形获得 GND。

    请注意,为外部方块供电的电线进入底层,并穿过框架(在 LED 灯条的一部分后面)到达顶层。

    添加提示问问题评论下载

    第 4 步:焊接第 1 步

    在这里插入图片描述
    在这里插入图片描述

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

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

    一定要注意LED灯条的方向!放置一件不正确的东西会给你带来很多麻烦。

    第 1 步:由于我们需要 12 个 LED 的部分,因此您应该首先将 LED 灯条切割成 12 块,每块 12 个 LED。接下来,将 3 根电线连接到第 1 部分,确保将它们连接到Din侧。再添加 2 根电线将第 12 部分的 V5 和 GND 连接到Dout侧,这一侧的电线需要至少长 12 厘米,因为它们需要穿过框架,电线不需要焊接到零件上12 还。将连接这些部件的所有 5 根电线穿过孔。然后取下胶带的盖子,将第 1 部分粘贴到框架上,不用担心,胶带粘得不是很好,零件稍后会用胶水粘上。

    添加提示问问题评论下载

    第 5 步:焊接第 2 步

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    一定要注意LED灯条的方向!放置一件不正确的东西会给你带来很多麻烦。

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

    接下来,将第 1 部分的 Dout op 与第 2 部分的 Din 连接起来,为此,您可能需要将第 1 部分拉出一点。这需要是一根非常短的电线,中间有一块绝缘层。从第 2 部分取下胶带并将其放置在原位,确保蓝线在其后面运行。

    现在修剪连接到第 3 部分的 Din 的电线并将其焊接到第 2 部分的 Dout。要焊接它,很可能您必须再次从框架中移除第 2 部分以获得一些空间。这是一个非常狭窄的角落,位于第 2 部分下方的电线需要进行 180 度的急转弯才能连接到第 2 部分的 Dout(这可以在图 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,就像上一步一样。然后将第 7 部分的 GND 与第 8 部分连接起来。

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

    添加提示问问题评论下载

    第 7 步:焊接第 4 步

    在这里插入图片描述
    在这里插入图片描述

    一定要注意LED灯条的方向!放置一件不正确的东西会给你带来很多麻烦。

    **第 4 步:**您几乎完成了,只需要放下第 9,10 和 11 部分。焊接这些应该是直截了当的,只要确保先将一个的 Dout 焊接到下一个的 Din,因为之后很难访问。不要忘记将这一层的 5V 与第 2、4、6 和 8 部分的 5V 连接起来。

    为了测试所有 LED 是否正常工作,我使用了以下代码。它将一一通过所有 LED。如果某些东西不起作用,您可以使用万用表找出问题所在。

    #include <br>#define LED_PIN     7
    #define NUM_LEDS    144
    CRGB leds[NUM_LEDS];
    int counter;
    void setup() {
      FastLED.addLeds(leds, NUM_LEDS);
      counter=0;
      
    }
    void loop() {  
      counter=(counter+1)%144;
      leds[counter] = CRGB(255, 0, 0);
      FastLED.show();
      delay(20);  
      leds[counter] = CRGB(0, 0, 0);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    由于一次只为一个 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步:代码:)

    
    
    • 1

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

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

    #include <br>#define LED_PIN     5
    #define NUM_LEDS    144
    CRGB leds[NUM_LEDS]; < / p > <p>void setup() {
      FastLED.addLeds(leds, NUM_LEDS);
      fill_solid(leds, NUM_LEDS, CRGB(0, 0, 0));       // fill all black
      FastLED.show();
    }
    void loop() {
      onesnake(10000);
      fill_solid(leds, NUM_LEDS, CRGB(0, 0, 0));
      fadeFromCenter(10000);
      fill_solid(leds, NUM_LEDS, CRGB(0, 0, 0));
      //rainbow(5000);
      fill_solid(leds, NUM_LEDS, 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;
          }
        } < / p > <p>    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 < / p > <p>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);
          }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132

    附件

    第 14 步:享受您的超棒无限立方体!

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    PyTorch :YOLOv5实战
    Redis快速入门
    DolphinDB Python API 离线安装教程
    Flink Yarn Per Job - JobManger 申请 Slot
    模拟实现一个Linux中的简单版shell
    旧版本金庸群侠传3D新Unity重置修复版入门-lua”脚本“
    Git 作用&&操作
    浏览器网页截屏妙用Capture node screenshot
    Vue + Element 表格拖拽排序、树形表格拖拽排序
    Tree-LSTM的一些理解以及DGL代码实现
  • 原文地址:https://blog.csdn.net/acktomas/article/details/125558536