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.

Cub de LED-uri 3x3x3 asamblat

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

Schema de conectare: Cub de LED-uri
Schema de conectare
                  Arduino Uno
               ┌──────────────
  Coloane      │ D2  ──[220Ω]── C0 (anozii coloanei)
  (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Ω]─── baza T0 (stratul 0, jos)
  (catozi,     │ D12 ──[1kΩ]─── baza T1 (stratul 1, mijloc)
  prin         │ D13 ──[1kΩ]─── baza T2 (stratul 2, sus)
  tranzistoare)│
               │ GND ────────── emitoarele T0, T1, T2
               └──────────────

  Tranzistor 2N2222 (câte unul pentru fiecare strat):

      Pin Arduino ──[1kΩ]──► Bază
      Catozii stratului (9 LED-uri) ──► Colector
      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);
}

Referințe

Subscribed!

You'll hear from me soon.