7×7×7 LEDキューブの製作:Arduinoステップバイステップガイド
部品と材料
| Arduino UNO | ×1 |
| 74HC574 | ×7 |
| 74HC138 | ×1 |
| 抵抗 220Ω | ×49 |
| 16MHz 水晶発振子 | ×1 |
必要な工具と機械
- はんだごて(汎用)
プロジェクト概要
私は常に自分でLEDキューブを作りたいと思っていました。今回、そのプロジェクトを皆さんと共有します。
ステップ1:LEDマトリックスの作成
最初に行うことはLEDマトリックスの作成です。今回は7×7のLEDマトリックスを7層作成しました。
アノードとカソードを分け、それぞれを行と列にはんだ付けしました。最終的に各LEDマトリックスには7つのアノードと7つのカソードがあります。
ステップ2:ハードウェアの準備
LEDキューブを制御するために必要なハードウェアを用意します。電子工作に詳しくない場合、これが最も難しい部分です。できるだけわかりやすく説明します。
74HC574を7個使用します。 これは8ビットD型フリップフロップ、つまり8ビットのメモリです。これにより、ビットを読み込んでキューブ上に画像を表示できます。7層のLEDマトリックスがあるため、7個必要です。
また、どの層を点灯させるかを決めるために7個のNPNトランジスタも必要です。マルチプレクス技術を使って、キューブ全体に画像を表示します。
さらに74LS138(3-8ラインエンコーダ/デマルチプレクサ)も必要です。これで3ビットだけで全フリップフロップを制御できます(データを保存するためのパルスも必要です)。
ハードウェアのブロック図は以下の通りです。
私は回路を自作し、ArduinoのATmega328Pをスタンドアロンで使用しました。完全な回路図は以下をご覧ください。
ステップ3:構造の製作
ハードウェアとLEDキューブのための構造体が必要です。木材のパーツを使って作りました。
その後、すべてを組み立てます。各LEDマトリックスは互いに向き合うように配置し、各層のカソードを同じトランジスタに接続します。
ステップ4:プログラミング
最後に、キューブを点灯させるコードを書きます。上記のブロック図がコード作成の助けになります。
この部分はかなり複雑ですが、練習すれば簡単になります。
以下のコードは最も簡単なアニメーションを表しています。他のアニメーションは長すぎますが、少しの想像力で何でも作れます。
コード
// LEDキューブ用の最も簡単なアニメーション
int temp = 50, cont = 0;
// キューブ全体を読み込む関数
void load_all(void) {
// layer 1
digitalWrite(A2, LOW); digitalWrite(A1, LOW); digitalWrite(A0, LOW); delay(1);
// layer 2
digitalWrite(A2, HIGH); digitalWrite(A1, LOW); digitalWrite(A0, LOW); delay(1);
// layer 3
digitalWrite(A2, LOW); digitalWrite(A1, HIGH); digitalWrite(A0, LOW); delay(1);
// layer 4
digitalWrite(A2, HIGH); digitalWrite(A1, HIGH); digitalWrite(A0, LOW); delay(1);
// layer 5
digitalWrite(A2, LOW); digitalWrite(A1, LOW); digitalWrite(A0, HIGH); delay(1);
// layer 6
digitalWrite(A2, HIGH); digitalWrite(A1, LOW); digitalWrite(A0, HIGH); delay(1);
// layer 7
digitalWrite(A2, LOW); digitalWrite(A1, HIGH); digitalWrite(A0, HIGH); delay(1);
// layer 8
digitalWrite(A2, HIGH); digitalWrite(A1, HIGH); digitalWrite(A0, HIGH); delay(1);
}
// 各層を1回ずつアクティブにし、点灯時間を決める関数
void scrolling(int t) {
PORTB = 0x00;
digitalWrite(7, HIGH); delay(t); digitalWrite(7, LOW);
digitalWrite(8, HIGH); delay(t); digitalWrite(8, LOW);
digitalWrite(9, HIGH); delay(t); digitalWrite(9, LOW);
digitalWrite(10, HIGH); delay(t); digitalWrite(10, LOW);
digitalWrite(11, HIGH); delay(t); digitalWrite(11, LOW);
digitalWrite(12, HIGH); delay(t); digitalWrite(12, LOW);
digitalWrite(13, HIGH); delay(t); digitalWrite(13, LOW);
}
// 1層ずつ点灯し、速度を上げていくアニメーション
void one(void) {
PORTD = 0xff;
load_all();
while (1) {
scrolling(temp);
temp = temp - 2;
if (temp <= 0) {
temp = 1;
cont++;
if (cont == 1000) { cont = 0; temp = 100; }
}
}
}
void setup() {
DDRD = 0xff; DDRB = 0xff; DDRC = 0xff;
}
void loop() {
one();
}
カスタムパーツとエンクロージャ
gestione_mankWMoVhz.sch
回路図
部品配置用の画像を使用しています。
製造プロセス
- ルービックキューブ:発明から現代のパズルへ
- 発光ダイオード(LED):誕生から100年寿命へ
- Arduino Nanoで37LEDルーレットゲームを自作:ヨーロピアンスタイル完全再現
- Arduinoで「棺桶ダンス」メロディーを再現するプロジェクト
- Arduino Megaで作る美しい5x5x5 LEDキューブ
- 古いリモコンを再利用:ArduinoでDIYスマートデバイスを構築
- ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
- 音声反応型 8 LED ライトディスプレイ
- スマートArduino四足歩行ロボットの製作:ステップバイステップガイド
- Arduino RGB LEDカラーミキサー:初心者向けDIYプロジェクト
- Arduino Unoと1Sheeldで作る4x4x4 LEDキューブ – インタラクティブLEDプロジェクト