このチュートリアルでは、ArduinoMegaを使用して5x5x5LEDキューブを作成および作成する方法を段階的に説明します。このチュートリアルでは、LEDを使用して3D配置を作成する方法、さまざまなアニメーションとパターンを作成する方法、回路とコードの動作、Arduino Megaのボードとピンの構成など、5x5x5LEDキューブを作成するために必要なすべての基本についても説明します。
Arduinoメガボード構成
ArduinoMegaのピン配置
デジタル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
ArduinoMegaの機能
- 動作電圧:5V
- 入力電圧:6-20V
- 動作電流:
- 出力電圧:3.3Vおよび5V
- 出力電流:20mA(5V)および50mA(3.3V)
- デジタルI/Oピン:54
- ADCピン:16
- PWMピン:15
- UART:4
このプロジェクトに必要なコンポーネント
- Arduino Mega–1
- LED(任意の色)-125
- 抵抗器220オーム-30
- ジャンパー
- 溶接ワイヤ
- 鉄
プロジェクトの運営
このLEDキューブは、合計125個のLEDで構成されています。Arduinoメガボードを使用して各LEDを制御します。LEDキューブに存在するすべてのLEDを制御するために、キューブを5つのレイヤーと25の列に分割します。これらのレイヤーは、レイヤー0、レイヤー1、レイヤー2、レイヤー3、レイヤー4です。各層は25個の発光ダイオードで構成されており、特定の層のすべての発光ダイオードのマイナス端子は互いに接続されています。同様に、他のすべての層は同じ数のLEDで構成され、すべてのLEDのマイナス端子は互いに接続されています。
次に、c0、c2、c3、c4、c5....c24から始まる25の列があります。列c0は、レイヤー0、レイヤー1、レイヤー2、レイヤー3、およびレイヤー4のLEDで構成され、これらすべてのLEDのプラス端子は相互に接続されています。同様に、他のすべての列も同じ方法で結合されます。
したがって、各LEDは、LEDキューブ内で一意の位置を持ち、レイヤーと列の数で指定できます。同様に、立方体の最初のLEDは(layer0、c0)です。同様に、立方体の2番目のLEDは(レイヤー0、c1)などです。
最初のLEDをオンにする場合は、レイヤー0をGNDに接続し、c0を5Vに接続する必要があるとします。同様に、最後のLEDをオンにする場合は、レイヤー4をGNDに接続し、c24を5Vに接続する必要があります。同様に、すべてのLEDをオンまたはオフにすることができます。
以下の手順に従って、5x5x5LEDキューブを作成します
ステップ1:すべてのライトを1つずつテストして、すべてのライトが正しく機能していることを確認します。キューブの完成後にLEDを交換するのは難しいため、これはすべてのステップの中で最も重要です。このために、示されているようにブレッドボードを使用できます。
ステップ2:段ボールを取り出し、図のように125個の穴を開けます。このために、ドリルを使用できます。この穴の直径は5mmである必要があります。
ステップ3:図のようにすべてのLEDのマイナス端子を曲げます。
ステップ4:25個のLEDすべてを穴に挿入します。
ステップ5:最初の行のすべてのLEDのマイナス端子をはんだ付けします。
ステップ6:同じ方法で他の列をはんだ付けします。
ステップ7:次に、すべての列を銀線で接続します。
ステップ8:このようにさらに4つのレイヤーを作成する必要があります。全部で5階必要です。
手順9:すべての投稿を1つずつ接続します。はんだ付けを容易にするために、2つの層の間に段ボールを置くことができます。25列あることを忘れないでください。
ステップ10:すべての列とレイヤーを接続すると、5つのレイヤーと25の列が得られます。
ステップ11:すべてのレイヤーと列をArduinoメガボードに接続する
ステップ12:コードをArduinoメガボードにアップロードする
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);
}
}
ボイド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);
}
}
ボイド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という配列を作成し、その中にすべてのピン番号を格納しました。
int layerPin [5] = {13,12,11,10,9};
列のすべての連絡先を定義します。このために、columnPinという配列を作成し、その中にすべてのピン番号を格納しました。
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()関数を使用すると、デフォルトですべてのピンがLowに設定されるため、すべてのレイヤーピンをHighに設定します。すべての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が1つずつオンとオフになります。
ボイド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);
}
}
この関数は、2番目のアニメーションに使用されます。このアニメーションでは、レイヤーが次々に開いたり閉じたりします。これは、このLEDキューブを使用して必要なアニメーションを作成する方法です。
ボイド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が実行され、3つの関数がループで繰り返し実行されます。
void loop(){
Animation1();
clearPin();
Animation2();
}
結果を示す