3X3X3 简易LED光立方

本文详细介绍了如何从测量LED尺寸、制作固定孔、焊接LED到编程Arduino实现光立方的动态显示,为爱好者提供了一个完整的LED光立方制作过程。
摘要由CSDN通过智能技术生成

3X3X3 LED光立方

简介:吾犹喜爱LED光污染,自亲眼所见YouTube大神与bilibili up主所制作光立方,心有所想,便想自己动手实践。所做光立方为3X3X3大小,若成功,便将其升级。

材料名称数量备注
5mmLED27尽量是彩色LED
arduino1/
洞洞板1/
排母21 X 15
电阻9100-330Ω都行
线//

话不多说,走曲

虚҉伪҉  (Huski)原创


步骤1:前言

        工欲善其事必先利其器。

        尺子必须要用,当你的每层3X3led焊接好后,不能有太大的弯曲度,否则你得重新做一遍

步骤2:测量LED尺寸

        在焊接LED之前,需要先用尺子测量LED的引脚长度、大小(LED灯珠的直径),保障制作固定孔的时候,每个LED都能连接上,也不会有太多的余量,更能使LED焊接出来的效果跟家美观。

步骤3:固定孔材料

        接下来就需要使用某种材料来固定LED了,我使用的是木板,在这里,我并不推荐你使用纸页来当作LED固定孔,因为纸过于薄了,并不能很好的固定led

步骤4:规划LED固定孔

        由第二步测量得知,LED的直径为5mm,LED引脚长度不能太长也不能太短,取15mm即可

        再拿出尺子和笔,画出LED的位置

步骤5:钻头选取

        钻孔的时候要确定使用的钻头是否为5mm,选好之后还需要比对一下

        如果钻的孔大了,LED放进去会晃动,起不到固定的作用,过于小了,LED又放不进去,还是不行。

步骤6:钻孔

        到了这一步就可以开始钻孔了,保证你的钻头尖部和画好的LED方格对角线是同一垂直线,小心钻歪了,影响美观

步骤7:折叠LED引脚

        为了使上层的LED的引脚有效的连接下层的LED引脚,我们需要折弯LED引脚,避开灯珠

        折弯的引脚为正极,负极不动

        (注意:长脚为正,短脚为负)

步骤8:放置LED灯前的准备工作/注意事项

        在此之前,我需要注意,每层的LED引脚朝向都需要一致,否则上层的LED引脚连接不到下层的LED引脚,为此,我特意在LED固定孔旁边又标记了每个LED的引脚方向。标记好后,固定孔的方向就需要保持不动。

步骤9:开始放置LED灯

        将LED灯珠按照画好的正负极依次摆放,并将所有负极折弯相连接。

        连接好后,再使用烙铁将刚才压弯连接到一起的负极依次焊接即可。

 步骤10:制作第二和第三层LED

        另外两层需按照固定孔放置并焊接,切记:固定孔不要乱移动

步骤11:焊接光立方

        将制作好的三层LED焊接到一起

步骤12:底板

        我这里使用了洞洞板来充当底板,你也可以选择其他的材料作为底板

步骤13:固定光立方

        将光立方固定至洞洞板的一侧,预留出空间放置arduino,将其焊接好即可

步骤14:准备电阻

        之前材料清单讲过,准备9个100-330Ω的电阻

        (这一步可以不做:电阻一只引脚折弯,一直引脚裁剪至3mm长度)

        依次使电阻一端连接光立方固定在底板(洞洞板)的9个引脚

步骤15:焊接Arduino排母

        准备好1 X 15的排母,焊接到洞洞板上。

步骤16:小插曲

步骤17:准备线若干

步骤18:接线图

        图中黑色的线(LED灯珠的正极)共有三根,即对应三层的正极

        红色的线即连接了三层的9个引脚

步骤19:上传程序

        拿出你的arduino单片机,将文件打开,烧录程序至单片机中即可

步骤20:光立方

        为避免出丑,我就不放我那焊接的像盘丝洞一样的线了,直接看成品吧

 步骤21:灯光预览

         这是在黑暗环境中的效果

 

程序

#define apin 12
#define bpin 11
#define cpin 10
#define dpin 9
#define epin 8
#define fpin 7
#define gpin 6
#define hpin 5
#define ipin 4

#define jpin 3
#define kpin 2
#define lpin 1


void setup() {
    pinMode(apin, OUTPUT);
    pinMode(bpin, OUTPUT);
    pinMode(cpin, OUTPUT);
    pinMode(dpin, OUTPUT);
    pinMode(epin, OUTPUT);
    pinMode(fpin, OUTPUT);
    pinMode(gpin, OUTPUT);
    pinMode(hpin, OUTPUT);
    pinMode(ipin, OUTPUT);
    
    pinMode(jpin, OUTPUT);
    pinMode(kpin, OUTPUT);
    pinMode(kpin, OUTPUT);
    
}
void loop() {

    //1
    analogWrite (apin, 0);
    analogWrite (bpin, 0);
    analogWrite (cpin, 0);
    analogWrite (dpin, 0);
    analogWrite (epin, 0);
    analogWrite (fpin, 0);
    analogWrite (gpin, 0);
    analogWrite (hpin, 0);
    analogWrite (ipin, 0);
    
    analogWrite (jpin, 0);
    analogWrite (kpin, 0);
    analogWrite (lpin, 0);
    delay (250);
    
    
    //2
    analogWrite (apin, 255);
    analogWrite (bpin, 0);
    analogWrite (cpin, 0);
    analogWrite (dpin, 255);
    analogWrite (epin, 0);
    analogWrite (fpin, 0);
    analogWrite (gpin, 255);
    analogWrite (hpin, 0);
    analogWrite (ipin, 0);
    
    analogWrite (jpin, 0);
    analogWrite (kpin, 0);
    analogWrite (lpin, 0);
    delay (160);
    
    //3
    analogWrite (apin, 0);
    analogWrite (bpin, 255);
    analogWrite (cpin, 0);
    analogWrite (dpin, 0);
    analogWrite (epin, 255);
    analogWrite (fpin, 0);
    analogWrite (gpin, 0);
    analogWrite (hpin, 255);
    analogWrite (ipin, 0);
    
    analogWrite (jpin, 0);
    analogWrite (kpin, 0);
    analogWrite (lpin, 0);
    delay (160);
    
    
    
    //4
    analogWrite (apin, 0);
    analogWrite (bpin, 0);
    analogWrite (cpin, 255);
    analogWrite (dpin, 0);
    analogWrite (epin, 0);
    analogWrite (fpin, 255);
    analogWrite (gpin, 0);
    analogWrite (hpin, 0);
    analogWrite (ipin, 255);
    
    analogWrite (jpin, 0);
    analogWrite (kpin, 0);
    analogWrite (lpin, 0);
    delay (600);
    
    //5
    analogWrite (apin, 0);
    analogWrite (bpin, 255);
    analogWrite (cpin, 0);
    analogWrite (dpin, 0);
    analogWrite (epin, 255);
    analogWrite (fpin, 0);
    analogWrite (gpin, 0);
    analogWrite (hpin, 255);
    analogWrite (ipin, 0);
    
    analogWrite (jpin, 0);
    analogWrite (kpin, 0);
    analogWrite (lpin, 0);
    delay (160);
    
    //6
    analogWrite (apin, 255);
    analogWrite (bpin, 0);
    analogWrite (cpin, 0);
    analogWrite (dpin, 255);
    analogWrite (epin, 0);
    analogWrite (fpin, 0);
    analogWrite (gpin, 255);
    analogWrite (hpin, 0);
    analogWrite (ipin, 0);
    
    analogWrite (jpin, 0);
    analogWrite (kpin, 0);
    analogWrite (lpin, 0);
    delay (160);
    
    
    //7
    analogWrite (apin, 0);
    analogWrite (bpin, 0);
    analogWrite (cpin, 0);
    analogWrite (dpin, 0);
    analogWrite (epin, 0);
    analogWrite (fpin, 0);
    analogWrite (gpin, 0);
    analogWrite (hpin, 0);
    analogWrite (ipin, 0);
    
    analogWrite (jpin, 0);
    analogWrite (kpin, 0);
    analogWrite (lpin, 0);
    delay (250);
    
    //8
    analogWrite (apin, 0);
    analogWrite (bpin, 0);
    analogWrite (cpin, 0);
    analogWrite (dpin, 0);
    analogWrite (epin, 0);
    analogWrite (fpin, 0);
    analogWrite (gpin, 255);
    analogWrite (hpin, 255);
    analogWrite (ipin, 255);
    
    analogWrite (jpin, 0);
    analogWrite (kpin, 0);
    analogWrite (lpin, 0);
    delay (160);
    
    //9
    analogWrite (apin, 0);
    analogWrite (bpin, 0);
    analogWrite (cpin, 0);
    analogWrite (dpin, 255);
    analogWrite (epin, 255);
    analogWrite (fpin, 255);
    analogWrite (gpin, 0);
    analogWrite (hpin, 0);
    analogWrite (ipin, 0);
    
    analogWrite (jpin, 0);
    analogWrite (kpin, 0);
    analogWrite (lpin, 0);
    delay (160);
    
    //10
    analogWrite (apin, 255);
    analogWrite (bpin, 255);
    analogWrite (cpin, 255);
    analogWrite (dpin, 0);
    analogWrite (epin, 0);
    analogWrite (fpin, 0);
    analogWrite (gpin, 0);
    analogWrite (hpin, 0);
    analogWrite (ipin, 0);
    
    analogWrite (jpin, 0);
    analogWrite (kpin, 0);
    analogWrite (lpin, 0);
    delay (600);
    
    
    
    //11
    analogWrite (apin, 0);
    analogWrite (bpin, 0);
    analogWrite (cpin, 0);
    analogWrite (dpin, 255);
    analogWrite (epin, 255);
    analogWrite (fpin, 255);
    analogWrite (gpin, 0);
    analogWrite (hpin, 0);
    analogWrite (ipin, 0);
    
    analogWrite (jpin, 0);
    analogWrite (kpin, 0);
    analogWrite (lpin, 0);
    delay (160);
    
    //12
    analogWrite (apin, 0);
    analogWrite (bpin, 0);
    analogWrite (cpin, 0);
    analogWrite (dpin, 0);
    analogWrite (epin, 0);
    analogWrite (fpin, 0);
    analogWrite (gpin, 255);
    analogWrite (hpin, 255);
    analogWrite (ipin, 255);
    
    analogWrite (jpin, 0);
    analogWrite (kpin, 0);
    analogWrite (lpin, 0);
    delay (160);
    
    //13
    analogWrite (apin, 0);
    analogWrite (bpin, 0);
    analogWrite (cpin, 0);
    analogWrite (dpin, 0);
    analogWrite (epin, 0);
    analogWrite (fpin, 0);
    analogWrite (gpin, 0);
    analogWrite (hpin, 0);
    analogWrite (ipin, 0);
    
    analogWrite (jpin, 0);
    analogWrite (kpin, 0);
    analogWrite (lpin, 0);
    delay (250);
    
    //14
    analogWrite (apin, 255);
    analogWrite (bpin, 255);
    analogWrite (cpin, 255);
    analogWrite (dpin, 255);
    analogWrite (epin, 255);
    analogWrite (fpin, 255);
    analogWrite (gpin, 255);
    analogWrite (hpin, 255);
    analogWrite (ipin, 255);
    
    analogWrite (jpin, 255);
    analogWrite (kpin, 255);
    analogWrite (lpin, 0);
    delay (160);
    
    //15
    analogWrite (apin, 255);
    analogWrite (bpin, 255);
    analogWrite (cpin, 255);
    analogWrite (dpin, 255);
    analogWrite (epin, 255);
    analogWrite (fpin, 255);
    analogWrite (gpin, 255);
    analogWrite (hpin, 255);
    analogWrite (ipin, 255);
    
    analogWrite (jpin, 255);
    analogWrite (kpin, 0);
    analogWrite (lpin, 255);
    delay (160);
    
    //16
    analogWrite (apin, 255);
    analogWrite (bpin, 255);
    analogWrite (cpin, 255);
    analogWrite (dpin, 255);
    analogWrite (epin, 255);
    analogWrite (fpin, 255);
    analogWrite (gpin, 255);
    analogWrite (hpin, 255);
    analogWrite (ipin, 255);
    
    analogWrite (jpin, 0);
    analogWrite (kpin, 255);
    analogWrite (lpin, 255);
    delay (600);
    
    
    //17
    analogWrite (apin, 255);
    analogWrite (bpin, 255);
    analogWrite (cpin, 255);
    analogWrite (dpin, 255);
    analogWrite (epin, 255);
    analogWrite (fpin, 255);
    analogWrite (gpin, 255);
    analogWrite (hpin, 255);
    analogWrite (ipin, 255);
    
    analogWrite (jpin, 255);
    analogWrite (kpin, 0);
    analogWrite (lpin, 255);
    delay (160);
    
    //18
    analogWrite (apin, 255);
    analogWrite (bpin, 255);
    analogWrite (cpin, 255);
    analogWrite (dpin, 255);
    analogWrite (epin, 255);
    analogWrite (fpin, 255);
    analogWrite (gpin, 255);
    analogWrite (hpin, 255);
    analogWrite (ipin, 255);
    
    analogWrite (jpin, 255);
    analogWrite (kpin, 255);
    analogWrite (lpin, 0);
    delay (160);
    
    }

作者:Huski(   虚҉伪҉    )

转载请注明出处

  • 34
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Arduino 2x2x2阶光立方旋转的代码实现: ```C++ // 定义光立方的引脚 int rowPins[] = {2, 3}; int colPins[] = {4, 5}; // 定义光立方的状态 int cube[2][2][2] = { {{0, 0}, {0, 0}}, {{0, 0}, {0, 0}} }; // 定义旋转方向和速度 int direction = 1; // 1表示正方向,-1表示反方向 int speed = 100; // 控制旋转速度的延迟时间 void setup() { // 配置光立方的引脚为输出模式 for (int i = 0; i < 2; i++) { pinMode(rowPins[i], OUTPUT); pinMode(colPins[i], OUTPUT); } } void loop() { // 旋转光立方 rotateCube(); // 在光立方上循环显示数字 for (int i = 0; i < 8; i++) { displayNumber(i); delay(500); } } // 旋转光立方的函数 void rotateCube() { // 将所有LED灭掉 for (int i = 0; i < 2; i++) { digitalWrite(rowPins[i], LOW); digitalWrite(colPins[i], LOW); } delay(speed); // 等待一段时间,让LED灭掉 // 根据旋转方向,更新光立方的状态 if (direction == 1) { int tmp = cube[0][0][0]; cube[0][0][0] = cube[1][0][0]; cube[1][0][0] = cube[1][1][0]; cube[1][1][0] = cube[0][1][0]; cube[0][1][0] = cube[0][0][1]; cube[0][0][1] = cube[1][0][1]; cube[1][0][1] = cube[1][1][1]; cube[1][1][1] = cube[0][1][1]; cube[0][1][1] = tmp; } else { int tmp = cube[1][1][1]; cube[1][1][1] = cube[1][0][1]; cube[1][0][1] = cube[0][0][1]; cube[0][0][1] = cube[0][1][1]; cube[0][1][1] = cube[1][1][0]; cube[1][1][0] = cube[1][0][0]; cube[1][0][0] = cube[0][0][0]; cube[0][0][0] = cube[0][1][0]; cube[0][1][0] = tmp; } // 将LED点亮,根据光立方的状态 for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { for (int k = 0; k < 2; k++) { digitalWrite(rowPins[i], HIGH); digitalWrite(colPins[j], HIGH); digitalWrite(colPins[k + 2], cube[i][j][k]); delay(speed); } } } } // 在光立方上显示数字的函数 void displayNumber(int num) { // 将所有LED灭掉 for (int i = 0; i < 2; i++) { digitalWrite(rowPins[i], LOW); digitalWrite(colPins[i], LOW); digitalWrite(colPins[i + 2], LOW); } delay(speed); // 等待一段时间,让LED灭掉 // 在光立方上显示数字 switch (num) { case 0: cube[0][0][0] = HIGH; cube[0][0][1] = HIGH; cube[0][1][0] = HIGH; cube[0][1][1] = HIGH; cube[1][0][0] = HIGH; cube[1][0][1] = HIGH; cube[1][1][0] = HIGH; cube[1][1][1] = LOW; break; case 1: cube[0][0][0] = LOW; cube[0][0][1] = LOW; cube[0][1][0] = HIGH; cube[0][1][1] = HIGH; cube[1][0][0] = LOW; cube[1][0][1] = LOW; cube[1][1][0] = HIGH; cube[1][1][1] = HIGH; break; case 2: cube[0][0][0] = HIGH; cube[0][0][1] = LOW; cube[0][1][0] = HIGH; cube[0][1][1] = HIGH; cube[1][0][0] = LOW; cube[1][0][1] = HIGH; cube[1][1][0] = HIGH; cube[1][1][1] = LOW; break; case 3: cube[0][0][0] = LOW; cube[0][0][1] = HIGH; cube[0][1][0] = HIGH; cube[0][1][1] = HIGH; cube[1][0][0] = LOW; cube[1][0][1] = HIGH; cube[1][1][0] = LOW; cube[1][1][1] = HIGH; break; case 4: cube[0][0][0] = LOW; cube[0][0][1] = HIGH; cube[0][1][0] = LOW; cube[0][1][1] = HIGH; cube[1][0][0] = HIGH; cube[1][0][1] = HIGH; cube[1][1][0] = LOW; cube[1][1][1] = HIGH; break; case 5: cube[0][0][0] = HIGH; cube[0][0][1] = HIGH; cube[0][1][0] = LOW; cube[0][1][1] = HIGH; cube[1][0][0] = HIGH; cube[1][0][1] = LOW; cube[1][1][0] = LOW; cube[1][1][1] = HIGH; break; case 6: cube[0][0][0] = HIGH; cube[0][0][1] = HIGH; cube[0][1][0] = HIGH; cube[0][1][1] = HIGH; cube[1][0][0] = HIGH; cube[1][0][1] = LOW; cube[1][1][0] = HIGH; cube[1][1][1] = HIGH; break; case 7: cube[0][0][0] = LOW; cube[0][0][1] = LOW; cube[0][1][0] = HIGH; cube[0][1][1] = HIGH; cube[1][0][0] = LOW; cube[1][0][1] = LOW; cube[1][1][0] = HIGH; cube[1][1][1] = HIGH; break; default: break; } // 将LED点亮,根据光立方的状态 for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { for (int k = 0; k < 2; k++) { digitalWrite(rowPins[i], HIGH); digitalWrite(colPins[j], HIGH); digitalWrite(colPins[k + 2], cube[i][j][k]); delay(speed); } } } } ``` 这个代码可以在一个2x2x2阶的光立方上循环显示数字,并且可以通过控制旋转方向和速度来调整旋转效果。注意,这个代码只是一个简单的示例,实际的光立方旋转程序可能需要更加复杂的算法和控制逻辑来达到更好的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值