This is an old revision of the document!
Blinky este un cub LED 4x4x4 controlat de un microcontroller ATmega328P (Arduino Nano), care servește drept dispozitiv de birou pentru studenți. Proiectul combină o parte creativa, de jocuri de lumini, care acționeaza ca stress reliever, si o parte practica, de cronometrare a timpului de învățat sau a pauzelor.
Cubul are două moduri de funcționare, selectabile printr-un buton:
Ideea a pornit de la un cub LED mult mai mare și complex (văzut pe Tik Tok), și mi-am dorit să fac și eu ceva asemănător, doar că pe o scară mai mică. După aceea, mi-a venit ideea de timer, fie pentru studiu (tehnica Pomodoro), fie ca timer general (la gătit, de exemplu)
Proiectul este util mai ales pentru studenti, pentru ca arată bine pe birou, alungă plictiseala, e un stress reliever bun si contribuie la un stil de învățat mai organizat.
Proiectul are la bază un microcontroller ATmega328P (Arduino Nano), care acționeaza ca unitate centrală și coordonează toate modulele hardware si software.
Module hardware de intrare:
Module hardware de ieșire:
Module software:
Interacțiunea modulelor:
Utilizatorul pornește cubul si selectează modul de funcționare prin apăsarea butonului BTN_MODE. Modul curent este afișat pe LCD, iar FSM-ul gestionează tranziția între stările sistemului.
În modul Animații, FSM-ul acționează Motorul de Animații, care gestionează jocurile (pattern-urile) de lumini. Driver LED-ul preia aceste pattern-uri si le afișează pe cub prin multiplexarea celor 4 straturi, trimițând datele catre shift registers prin SPI și comutând straturile prin tranzistoare. Viteza animațiilor e controlată prin Potențiometru, a cărui valoare e citită continuu prin ADC.
În modul Timer, utilizatorul setează durata dorită (în minute) prin butoanele BTN_UP si BTN_DOWN, iar LCD-ul afișează timpul setat. La apăsarea BTN_START/STOP, Motorul Timer pornește numărătoarea inversă și actualizează LCD-ul la fiecare secundă. LED-urile indică vizual timpul rămas. La expirarea timpului, FSM-ul trece in starea de “alertă” ⇒ Driver LED-ul afișează animația corespunzătoare pe cub, iar Buzzer-ul emite un semnal sonor prin PWM. Timer-ul poate fi oprit oricand prin BTN_START/STOP.
| Componentă | Cantitate | Rol |
|---|---|---|
| Arduino Nano V3 CH340 (ATmega328P) | 1 | Microcontroller |
| LED 5mm albastru | 64 | Cubul LED 4×4×4 |
| Sârmă cupru | ~2m | Structura cubului LED |
| Shift register 74HC595 | 2 | Controlul coloanelor cubului |
| Tranzistor NPN 2N2222 | 4 | Comutarea straturilor cubului |
| Rezistor 220 Ohm | 16 | Limitare curent LED-uri |
| Rezistor 1k Ohm | 4 | Baza tranzistoarelor NPN |
| LCD 1602 cu modul I2C | 1 | Afișarea modului și timer-ului |
| Buzzer pasiv 5V | 1 | Alertă sonoră la expirarea timpului |
| Potențiometru 10k Ohm | 1 | Controlul vitezei animațiilor |
| Buton tactil 6×6×6mm | 4 | BTN_MODE, BTN_UP, BTN_DOWN, BTN_START/STOP |
| Comutator ON/OFF | 1 | Pornirea/oprirea cubului LED |
| Alimentator 5V 2A | 1 | Alimentare externă |
| Condensator ceramic 100nF | 2 | Stabilizare alimentare pt shift register |
| Condensator electrolitic 100uF | 1 | Stabilizare alimentare generală pe breadboard |
| Placă perforată | 1 | Montaj cub LED |
| Breadboard 830 puncte | 1 | Prototipare și testare |
| Fire Dupont | multe | Conexiuni între componente |
| Pin Arduino | Componentă | Rol | Motivul alegerii |
|---|---|---|---|
| D0 | - | RX | Rezervat pentru comunicatia USB/Serial |
| D1 | - | TX | Rezervat pentru comunicatia USB/Serial |
| D2 | Tranzistor S0 | Comutare strat 0, jos | Pin digital simplu |
| D3 | Tranzistor S1 | Comutare strat 1 | Pin digital simplu |
| D4 | Tranzistor S2 | Comutare strat 2 | Pin digital simplu |
| D5 | Tranzistor S3 | Comutare strat 3, sus | Pin digital simplu |
| D6 | Buzzer pasiv | Semnal sonor | Pin PWM, potrivit pentru generarea tonului |
| D7 | BTN_MODE | Schimbare mod | Pin digital simplu |
| D8 | BTN_UP | Creștere timer | Pin digital simplu |
| D9 | BTN_DOWN | Scădere timer | Pin digital simplu |
| D10 | 74HC595 - Latch (ST_CP) | Actualizare ieșiri shift register | Pin folosit pentru latch |
| D11 | 74HC595 - Data (DS) | Trimitere date serial | Pin folosit pentru data |
| D12 | 74HC595 - Clock (SH_CP) | Clock pentru shift registere | Pin folosit pentru clock |
| D13 | - | Liber | Evitat, deoarece este legat la LED-ul built-in |
| A0 | Potențiometru | Citire valoare analogică | Pin ADC |
| A1 | BTN_START/STOP | Pornire/oprire timer | Pin analogic folosit ca digital |
| A2 | - | Liber | Disponibil pentru extinderi |
| A3 | - | Liber | Disponibil pentru extinderi |
| A4 | LCD I2C - SDA | Date I2C | Pinul SDA hardware al Arduino Nano |
| A5 | LCD I2C - SCL | Clock I2C | Pinul SCL hardware al Arduino Nano |
| Componentă | Conexiune | Observații |
|---|---|---|
| Shift Register 1 | ||
| SR1 VCC, pin 16 | 5V Arduino | Alimentare |
| SR1 GND, pin 8 | GND Arduino | Masă comună |
| SR1 OE, pin 13 | GND Arduino | Ieșiri active permanent |
| SR1 MR, pin 10 | 5V Arduino | Reset dezactivat |
| SR1 DS, pin 14 | D11 Arduino | Linie de date |
| SR1 SH_CP, pin 11 | D12 Arduino | Clock |
| SR1 ST_CP, pin 12 | D10 Arduino | Latch |
| SR1 Q7', pin 9 | SR2 DS, pin 14 | Legătură în lanț către al doilea registru |
| SR1 Q0-Q7 | Rezistor 220 ohm → Coloane C1-C8 | Câte un rezistor pentru fiecare coloană |
| Shift Register 2 | ||
| SR2 VCC, pin 16 | 5V Arduino | Alimentare |
| SR2 GND, pin 8 | GND Arduino | Masă comună |
| SR2 OE, pin 13 | GND Arduino | Ieșiri active permanent |
| SR2 MR, pin 10 | 5V Arduino | Reset dezactivat |
| SR2 DS, pin 14 | SR1 Q7', pin 9 | Primește datele de la primul registru |
| SR2 SH_CP, pin 11 | D12 Arduino | Același clock ca SR1 |
| SR2 ST_CP, pin 12 | D10 Arduino | Același latch ca SR1 |
| SR2 Q0-Q7 | Rezistor 220 ohm → Coloane C9-C16 | Câte un rezistor pentru fiecare coloană |
| Tranzistoare NPN | ||
| D2 Arduino | Rezistor 1k ohm → baza TR1 | Controlează stratul 0 (jos) |
| D3 Arduino | Rezistor 1k ohm → baza TR2 | Controlează stratul 1 |
| D4 Arduino | Rezistor 1k ohm → baza TR3 | Controlează stratul 2 |
| D5 Arduino | Rezistor 1k ohm → baza TR4 | Controlează stratul 3 (sus) |
| Emitor TR1-TR4 | GND | Toți emitorii sunt legați la masă |
| Colector TR1-TR4 | Catod straturi L0-L3 | Câte un tranzistor pentru fiecare strat |
| LCD 1602 I2C | ||
| VCC | 5V Arduino | Alimentare |
| GND | GND Arduino | Masă comună |
| SDA | A4 Arduino | Linie date I2C |
| SCL | A5 Arduino | Linie clock I2C |
| Buzzer pasiv | ||
| + | D6 Arduino | Semnal PWM pentru ton |
| - | GND Arduino | Masă |
| Potențiometru | ||
| Pin 1 | 5V Arduino | Alimentare |
| Pin 2, cursor | A0 Arduino | Valoare analogică citită de Arduino |
| Pin 3 | GND Arduino | Masă |
| Butoane tactile | ||
| BTN_MODE | D7 Arduino și GND | Folosește INPUT_PULLUP, fără rezistor extern |
| BTN_UP | D8 Arduino și GND | Folosește INPUT_PULLUP, fără rezistor extern |
| BTN_DOWN | D9 Arduino și GND | Folosește INPUT_PULLUP, fără rezistor extern |
| BTN_START/STOP | A1 Arduino și GND | Folosește INPUT_PULLUP, fără rezistor extern |
| Condensatoare | ||
| 100nF nr.1 | VCC și GND SR1 | Montat cât mai aproape de chip |
| 100nF nr.2 | VCC și GND SR2 | Montat cât mai aproape de chip |
| 100uF | Linia 5V și GND breadboard | Stabilizare generală |