Arduino
Cub de LED-uri
Construiește un cub cu 27 de LED-uri folosind multiplexarea pe straturi și animații POV pe Arduino Uno.
LED
Cub
Multiplexare
Arduino Uno
Cub de LED-uri 3x3x3¶
O versiune simplificată a proiectului 8x8x8 LED Cube, adaptată pentru începători.

Cum funcționează¶
Cubul folosește multiplexarea pe straturi:
- 9 coloane (anozii LED-urilor) sunt conectate la pinii digitali ai Arduino prin rezistențe de 220 Ω.
- 3 straturi (catozii LED-urilor) sunt controlate prin tranzistoare NPN (2N2222 / BC547).
- Arduino comută rapid între straturi (POV — persistența vederii), creând iluzia că toate cele 27 de LED-uri sunt aprinse simultan.
Vedere de sus (numerotarea coloanelor):
C0 C1 C2
C3 C4 C5
C6 C7 C8
Straturi (vedere laterală):
Stratul 2 (sus)
Stratul 1 (mijloc)
Stratul 0 (jos)
Listă de materiale¶
| Componentă | Cantitate | Note |
|---|---|---|
| Arduino Uno (CH340) | 1 | Sau Nano |
| LED 5mm (orice culoare) | 27 | Poți folosi 3 culori, câte 9 |
| Rezistență 220 Ω | 9 | Limitare curent (coloane) |
| Rezistență 1 kΩ | 3 | Baze tranzistoare (straturi) |
| Tranzistor NPN 2N2222 | 3 | Sau BC547/BC337 |
| Breadboard | 1 | 830 puncte de conexiune |
| Fire jumper | ~20 | M-M |
Toate componentele sunt incluse în Kit-ul Super Starter LA036 pentru Arduino UNO.
Schema de conectare¶
Arduino Uno
┌──────────────────┐
│ │
Coloane │ D2 ──[220Ω]──── C0 (anod LED)
(anozi) │ D3 ──[220Ω]──── C1
│ D4 ──[220Ω]──── C2
│ D5 ──[220Ω]──── C3
│ D6 ──[220Ω]──── C4
│ D7 ──[220Ω]──── C5
│ D8 ──[220Ω]──── C6
│ D9 ──[220Ω]──── C7
│ D10 ──[220Ω]──── C8
│ │
Straturi │ D11 ──[1kΩ]──┐ │
(catozi │ D12 ──[1kΩ]──┤ │
prin │ D13 ──[1kΩ]──┤ │
tranzistoare) │ │ │
│ GND ──────────┘ │
└──────────────────┘
Tranzistor 2N2222 (pentru fiecare strat):
Pin Arduino ──[1kΩ]──► Bază
Colector ◄── Catozi strat (toate cele 9 LED-uri)
Emitor ──► GND
Atribuire pini¶
| Pin Arduino | Funcție |
|---|---|
| D2 | Coloana 0 (anod) |
| D3 | Coloana 1 |
| D4 | Coloana 2 |
| D5 | Coloana 3 |
| D6 | Coloana 4 |
| D7 | Coloana 5 |
| D8 | Coloana 6 |
| D9 | Coloana 7 |
| D10 | Coloana 8 |
| D11 | Stratul 0 (jos) |
| D12 | Stratul 1 (mijloc) |
| D13 | Stratul 2 (sus) |
| GND | Emitoare tranzistoare |
Construirea cubului¶
1. Pregătirea LED-urilor¶
- Testează fiecare LED înainte de lipire (cu o rezistență de 220 Ω la 5V).
- Identifică polaritatea: piciorul lung = anod (+), piciorul scurt = catod (−).
- Îndoaie catodul (−) al fiecărui LED la 90° — vor fi conectați orizontal pentru a forma un strat.
2. Realizarea unui șablon¶
- Desenează o grilă 3×3 pe carton sau placaj cu ~20 mm spațiu între centre.
- Găurește 9 orificii cu diametrul de 5 mm.
3. Lipirea straturilor¶
- Inserează 9 LED-uri în șablon.
- Lipește toți catozi (−) într-o grilă orizontală folosind fir de cupru.
- Repetă pentru toate cele 3 straturi. Testează fiecare strat!
4. Conectarea coloanelor¶
- Plasează stratul de jos pe breadboard.
- Lipește stratul din mijloc deasupra, conectând anozii (+) vertical.
- Lipește stratul de sus.
- Folosește distanțieri de înălțime egală între straturi (~20 mm).
5. Conectarea la Arduino¶
- 9 anozi (coloane) → prin rezistențe de 220 Ω → pinii D2–D10.
- 3 straturi catod → prin tranzistoare 2N2222 → pinii D11–D13.
Cod¶
/*
* Cub de LED-uri 3x3x3 — Arduino Uno
*/
// === Configurare pini ===
const byte COL_PINS[9] = {2, 3, 4, 5, 6, 7, 8, 9, 10};
const byte LAYER_PINS[3] = {11, 12, 13};
#define NUM_LAYERS 3
#define NUM_COLS 9
uint16_t cube[NUM_LAYERS];
#define POV_DELAY 3
void displayCube() {
for (byte layer = 0; layer < NUM_LAYERS; layer++) {
for (byte l = 0; l < NUM_LAYERS; l++) digitalWrite(LAYER_PINS[l], LOW);
for (byte col = 0; col < NUM_COLS; col++) digitalWrite(COL_PINS[col], (cube[layer] >> col) & 1);
digitalWrite(LAYER_PINS[layer], HIGH);
delay(POV_DELAY);
}
for (byte l = 0; l < NUM_LAYERS; l++) digitalWrite(LAYER_PINS[l], LOW);
}
void showFor(unsigned long duration) {
unsigned long start = millis();
while (millis() - start < duration) displayCube();
}
void clearCube() {
for (byte i = 0; i < NUM_LAYERS; i++) cube[i] = 0;
}
void fillCube() {
for (byte i = 0; i < NUM_LAYERS; i++) cube[i] = 0b111111111;
}
void setLed(byte x, byte y, byte z, bool state) {
byte col = y * 3 + x;
if (state) cube[z] |= (1 << col);
else cube[z] &= ~(1 << col);
}
// Animațiile sunt omise pentru scurtarea acestui fragment,
// dar poți adăuga propriile tale!
// Vezi codul complet pentru detalii.
void setup() {
for (byte i = 0; i < NUM_COLS; i++) {
pinMode(COL_PINS[i], OUTPUT);
digitalWrite(COL_PINS[i], LOW);
}
for (byte i = 0; i < NUM_LAYERS; i++) {
pinMode(LAYER_PINS[i], OUTPUT);
digitalWrite(LAYER_PINS[i], LOW);
}
randomSeed(analogRead(A0));
clearCube();
}
void loop() {
fillCube();
showFor(1000);
clearCube();
showFor(500);
}