This is an old revision of the document!


Blinky - Cub LED 4x4x4 cu animații și timer

Introducere

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:

  • Modul Animații - ruleaza în buclă jocuri de lumini 3D, viteza luminilor poate fi ajustată de utilizator printr-un potenționmetru
  • Modul Timer - utilizatorul selectează un interval de timp prin butoane, LCD-ul afișeaza timpul rămas, iar LED-urile indică vizual progresul numărătorii inverse. Expirarea timpului e semnalizată printr-un semnal sonor dat de buzzer.

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.

Descriere generală

Schema bloc

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:

  • BTN_MODE - schimbă modul de funcționare a cubului, între Animații și Timer
  • BTN_UP - incrementează timpul setat în modul timer
  • BTN_DOWN - decrementează timpul setat în modul timer
  • BTN_START/STOP - pornește și oprește timerul
  • Potențiometru - controlează viteza animațiilor în modul Animații

Module hardware de ieșire:

  • Cub LED 4x4x4 - afișeaza jocurile de lumini și progresul vizual al timer-ului prin cele 64 de led-uri, multiplexate pe 4 straturi
  • LCD 1602 I2C - afișează modul curent de funcționare și timpul rămas
  • Buzzer pasiv - semnalizează sonor expirarea timpului

Module software:

  • FSM - gestionează stările sistemului și tranzițiile dintre ele
  • Driver LED - implementează multiplexarea celor 4 straturi ale cubului
  • Motor Animații - rulează jocurile de lumini 3D, cu viteza controlată din potențiometru
  • Motor Timer - gestionează numărătoarea inversă, actualizează LCD-ul și declanșează alerta sonora la final

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.

Hardware Design

Listă de componente
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
Interconectare hardware

Sistemul este construit în jurul plăcii Arduino Nano, bazată pe microcontrollerul ATmega328P. Arduino controlează cubul LED prin două registre de deplasare 74HC595, folosite pentru cele 16 coloane ale cubului, și prin patru tranzistoare NPN 2N2222, folosite pentru comutarea celor 4 straturi.

Cubul LED este realizat din 64 de LED-uri albastre, organizate ca matrice 4x4x4. Coloanele verticale sunt anoduri comune, iar straturile orizontale sunt catoduri comune. Astfel, pentru aprinderea unui LED, Arduino setează coloana corespunzătoare prin shift registere și activează stratul dorit prin tranzistorul asociat.

Cele două shift registere 74HC595 sunt conectate în lanț. Arduino trimite datele serial pe pinul D11, semnalul de clock este pe D12, iar latch-ul este pe D10. Primul registru controlează coloanele C1-C8, iar al doilea controlează coloanele C9-C16. Fiecare coloană este conectată printr-un rezistor de 220 ohm pentru limitarea curentului prin LED-uri.

Straturile cubului sunt comutate separat cu tranzistoare NPN. Bazele tranzistoarelor sunt conectate la pinii D2-D5 prin rezistoare de 1k ohm, emitorii sunt legați la GND, iar colectorii sunt conectați la catodurile comune ale straturilor. Prin activarea rapidă a straturilor, cubul poate afișa animații 3D folosind multiplexare.

Interfața utilizatorului este formată dintr-un LCD 1602 cu modul I2C, patru butoane, un potentiometru și un buzzer pasiv. LCD-ul folosește magistrala I2C pe pinii A4 și A5, potentiometrul este citit analogic pe A0, iar buzzerul este conectat pe D6 pentru generarea semnalului sonor

Pini folosiți
Pin Arduino Componentă Rol De ce l-am ales
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 L-am evitat, pentru ca 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
A3 - Liber
A4 LCD I2C - SDA Date I2C Pinul SDA hardware al Arduino Nano
A5 LCD I2C - SCL Clock I2C Pinul SCL hardware al Arduino Nano
Justificarea alegerii pinilor

Am ales pinii D10, D11 și D12 pentru controlul shift registerelor 74HC595. Îi folosesc pentru latch, data și clock, astfel încât pot controla cele 16 coloane ale cubului folosind doar 3 pini de pe Arduino.

Pentru cele 4 straturi ale cubului am folosit pinii D2-D5. I-am ales pentru ca sunt pini digitali simpli și sunt poziționați consecutiv, ceea ce face schema mai ușor de urmărit. Fiecare pin comandă baza unui tranzistor NPN printr-un rezistor de 1k ohm.

Pentru LCD-ul I2C am rezervat pinii A4 și A5, pentru ca pe Arduino Nano aceștia sunt pinii hardware pentru SDA și SCL. Potențiometrul l-am conectat la A0, pentru ca trebuie citită o valoare analogică. Buzzerul l-am pus pe D6, pentru ca este pin PWM și poate fi folosit pentru generarea tonurilor sunetuluo

Nu am folosit pinii D0 și D1, pentru ca sunt utilizați pentru comunicatia serială USB. Am lăsat liber și pinul D13, pentru ca este conectat la LED-ul built-in al plăcii și poate crea confuzii în timpul testării.

Tabel de conexiuni
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 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ă

Software Design

Rezultate Obţinute

Concluzii

Download

Jurnal

Bibliografie/Resurse

pm/prj2026/andrei.batasev/ioana.priboi.1778573002.txt.gz · Last modified: 2026/05/12 11:03 by ioana.priboi
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0