两步教你制作立方体(理工男最后的浪漫)
两步教你制作立方体(理工男最后的浪漫)UART引脚:SPI引脚:50 (MISO)、51 (MOSI)、52 (SCK)、53 (SS)模拟输入引脚:A0-A15PWM引脚:2–13,44–46I2C引脚:SDA(20) SCL(21)
在本教程中,我将逐步指导您如何使用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
{
pinMode(layerPin[i] OUTPUT);
}
for(int i=0;i
{
pinMode(columnPin[i] OUTPUT);
}
for(int i=0;i
{
digitalWrite(layerPin[i] HIGH);
}
}
void loop() {
animation1();
clearPin();
animation2();
}
void clearPin()
{
for(int i=0;i
{
digitalWrite(layerPin[i] HIGH);
}
for(int i=0;i
{
digitalWrite(columnPin[i] LOW);
}
}
void animation1()
{
for(int i=0;i
{
digitalWrite(columnPin[i] HIGH);
for(int y=0;y
{
digitalWrite(layerPin[i] LOW);
delay(1000);
digitalWrite(layerPin[i] HIGH);
delay(1000);
}
digitalWrite(columnPin[i] LOW);
}
}
void animation2()
{
for(int i=0;i
{
digitalWrite(layerPin[i] LOW);
for(int y=0;y
{
digitalWrite(columnPin[i] HIGH);
}
delay(1000);
for(int y=0;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
{
pinMode(layerPin[i] OUTPUT);
}
类似地,使用for循环将所有列引脚设置为输出。
for(int i=0;i
{
pinMode(columnPin[i] OUTPUT);
}
将所有层引脚设置为高电平,因为当使用pinMode()函数时,默认情况下所有引脚都设置为低电平。我们已经将所有led的负极端子连接到这些层引脚。所以,我们必须让他们高。
for(int i=0;i
{
digitalWrite(layerPin[i] HIGH);
}
这是一个将所有列和层引脚设置为默认状态的功能。为了关闭LED,层引脚必须设为高电平,列引脚必须设为低电平。该功能将有助于从一种模式转换到另一种模式。
void clearPin()
{
for(int i=0;i
{
digitalWrite(layerPin[i] HIGH);
}
for(int i=0;i
{
digitalWrite(columnPin[i] LOW);
}
}
这是另一个函数,我创建它是为了生成第一个动画。在这个动画中,所有的led将一个接一个地打开和关闭。
void animation1()
{
for(int i=0;i
{
digitalWrite(columnPin[i] HIGH);
for(int y=0;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
{
digitalWrite(layerPin[i] LOW);
for(int y=0;y
{
digitalWrite(columnPin[i] HIGH);
}
delay(1000);
for(int y=0;y
{
digitalWrite(columnPin[i] LOW);
}
delay(1000);
digitalWrite(layerPin[i] HIGH);
}
}
这是这个项目的主循环。首先,动画1将运行。然后使用clearPin()函数,我们将清除所有的管脚。之后,动画2将运行,这三个函数将在一个循环中反复运行。
void loop() {
animation1();
clearPin();
animation2();
}
效果展示