“理工男最后的浪漫”手把手教你制作led立方体(附教程)

在本教程中,我将逐步指导您如何使用Arduino Mega创建和制作5x5x5 LED立方体。本教程还将涵盖制作5x5x5 LED立方体所需的所有基础知识,如如何使用LED创建3D排列,如何创建不同的动画和图案,电路和代码的工作,Arduino Mega的电路板和引脚配置。

Arduino Mega的板卡配置

Arduino Mega的引脚配置

数字I/O引脚:D0-D53

模拟输入引脚:A0-A15

PWM引脚:2–13,44–46

I2C引脚:SDA(20), SCL(21)

SPI引脚:50 (MISO)、51 (MOSI)、52 (SCK)、53 (SS)

UART引脚:

  • TX0-D0,RX0- D1
  • TX1-D19,RX1- D18
  • TX2-D16,RX2-D17
  • TX3-D14,RX3-D15

Arduino Mega的特性

  • 工作电压:5V
  • 输入电压:6-20V
  • 工作电流:
  • 输出电压:3.3V和5V
  • 输出电流:20mA(5V)和50mA(3.3V)
  • 数字I/O引脚:54
  • ADC引脚:16
  • PWM引脚:15
  • UART: 4

此项目所需的组件

  • arduino Mega–1
  • 发光二极管(任何颜色)- 125
  • 电阻器220欧姆- 30
  • 跳线
  • 焊丝
  • 烙铁

项目的运作

这个LED立方体总共由125个LED组成。我们将在Arduino Mega板的帮助下控制每个LED。为了控制LED立方体中存在的所有LED,我们将该立方体分成5层和25列。这些层是第0层、第1层、第2层、第3层和第4层。每层由25个发光二极管组成,特定层中所有发光二极管的负极端子相互连接。类似地,所有其他层由相同数量的led组成,并且所有led的负极端子彼此连接。

 

那么我们有25列,从c0、c2、c3、c4、c5开始……..c24。列c0由来自层0、层1、层2、层3和层4的LED组成,并且所有这些LED的正极端子相互连接。同样,所有其他列也以同样的方式连接。

因此,每个LED在LED立方体中都有一个唯一的位置,可以通过层数和列数来指定。像,立方体的第一个LED是(layer0,c0)。类似地,立方体的第二个LED是(层0,c1)等等。

假设如果你想打开第一个LED,那么你必须将层0连接到GND,将c0连接到5V。类似地,如果你想打开最后一个LED,那么你必须将第4层连接到GND,将c24连接到5V。同样,你可以打开和关闭所有的发光二极管。

按照以下步骤制作5x5x5 LED立方体

第一步:逐个测试所有指示灯,确保所有指示灯都工作正常。这是所有步骤中最重要的一步,因为立方体完成后很难更换LED。为此,您可以使用如图所示的试验板。

第二步:拿一块纸板,如图所示钻125个洞。为此你可以使用钻孔机。这个洞的直径应该是5毫米。

 

步骤3:弯曲所有led的负极端子,如图所示。

第四步:将所有25个发光二极管插入孔中。

步骤5:焊接第一行中所有led的负极端子。

第六步:用同样的方法焊接其他排。

第七步:现在,用银线连接所有的行。

第八步:你必须像这样再创建四层。我们总共需要五层。

第九步:把所有的柱子一个一个连接起来。您可以在两层之间放置一块纸板,以便于焊接。记住有25列。

步骤10:连接所有的列和层后,你会得到5层和25列。

步骤11:将所有的层和列连接到Arduino Mega板上

步骤12:将代码上传到Arduino Mega板上

int layerPin[5]={13,12,11,10,9};

int columnPin[25]={2,3,4,5,6,7,8,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31};

void setup() {

  

for(int i=0;i<5;i++)

{

  pinMode(layerPin[i],OUTPUT);

}

for(int i=0;i<25;i++)

{

  pinMode(columnPin[i],OUTPUT);

}

for(int i=0;i<5;i++)

{

  digitalWrite(layerPin[i],HIGH);

}

}

void loop() {

animation1();

clearPin();

animation2();

}

void clearPin()

{

  for(int i=0;i<5;i++)

  {

    digitalWrite(layerPin[i],HIGH);

  }

  for(int i=0;i<25;i++)

  {

    digitalWrite(columnPin[i],LOW);

  }

}

void animation1()

{

  for(int i=0;i<25;i++)

  {

    digitalWrite(columnPin[i],HIGH);

    for(int y=0;y<5;y++)

    {

      digitalWrite(layerPin[i],LOW);

      delay(1000);

      digitalWrite(layerPin[i],HIGH);

      delay(1000);

    }

    digitalWrite(columnPin[i],LOW);

  }

}

void animation2()

{

  for(int i=0;i<5;i++)

  {

    digitalWrite(layerPin[i],LOW);

    for(int y=0;y<25;y++)

    {

      digitalWrite(columnPin[i],HIGH);

    }

    delay(1000);

    for(int y=0;y<25;y++)

    {

      digitalWrite(columnPin[i],LOW);

    }

    delay(1000);

    digitalWrite(layerPin[i],HIGH);

  }

}

代码的工作

首先定义所有图层索引。为此,我创建了一个名为layerPin的数组,并在其中存储了所有的Pin号。

int layerPin[5]={13,12,11,10,9};

定义列的所有接点。为此,我创建了一个名为columnPin的数组,并在其中存储了所有的Pin号。

int columnPin[25]={2,3,4,5,6,7,8,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31};

在void setup()中,首先使用for循环将所有层引脚设置为输出。

void setup() {

  

for(int i=0;i<5;i++)

{

  pinMode(layerPin[i],OUTPUT);

}

类似地,使用for循环将所有列引脚设置为输出。

for(int i=0;i<25;i++)

{

  pinMode(columnPin[i],OUTPUT);

}

将所有层引脚设置为高电平,因为当使用pinMode()函数时,默认情况下所有引脚都设置为低电平。我们已经将所有led的负极端子连接到这些层引脚。所以,我们必须让他们高。

for(int i=0;i<5;i++)

{

  digitalWrite(layerPin[i],HIGH);

}

这是一个将所有列和层引脚设置为默认状态的功能。为了关闭LED,层引脚必须设为高电平,列引脚必须设为低电平。该功能将有助于从一种模式转换到另一种模式。

void clearPin()

{

  for(int i=0;i<5;i++)

  {

    digitalWrite(layerPin[i],HIGH);

  }

  for(int i=0;i<25;i++)

  {

    digitalWrite(columnPin[i],LOW);

  }

}

这是另一个函数,我创建它是为了生成第一个动画。在这个动画中,所有的led将一个接一个地打开和关闭。

void animation1()

{

  for(int i=0;i<25;i++)

  {

    digitalWrite(columnPin[i],HIGH);

    for(int y=0;y<5;y++)

    {

      digitalWrite(layerPin[i],LOW);

      delay(1000);

      digitalWrite(layerPin[i],HIGH);

      delay(1000);

    }

    digitalWrite(columnPin[i],LOW);

  }

}

此功能用于第二个动画。在这个动画中,该层将一个接一个地打开和关闭。这就是你如何使用这个LED立方体创建任何你想要的动画。

void animation2()

{

  for(int i=0;i<5;i++)

  {

    digitalWrite(layerPin[i],LOW);

    for(int y=0;y<25;y++)

    {

      digitalWrite(columnPin[i],HIGH);

    }

    delay(1000);

    for(int y=0;y<25;y++)

    {

      digitalWrite(columnPin[i],LOW);

    }

    delay(1000);

    digitalWrite(layerPin[i],HIGH);

  }

}

这是这个项目的主循环。首先,动画1将运行。然后使用clearPin()函数,我们将清除所有的管脚。之后,动画2将运行,这三个函数将在一个循环中反复运行。

void loop() {

animation1();

clearPin();

animation2();

}

效果展示

猜你喜欢

转载自blog.csdn.net/danpianji777/article/details/123138849