Table of Contents

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:

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:

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.

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 330 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
Schema electrică

Schema electrica

Creierul proiectului este plăcuța Arduino Nano V3 CH340 (ATmega328P). Microcontroller-ul 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 este alcătuit din 64 de LED-uri albastre, organizate ca matrice 4x4x4. Coloanele verticale sunt anoduri comune, iar layerele orizontale sunt catoduri comune. Astfel, pentru aprinderea unui LED, se setează coloana corespunzătoare prin shift registere și se activează stratul corespunzator prin tranzistorul asociat.

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

Straturile cubului sunt comutate separat cu tranzistoare NPN. Bazele tranzistoarelor sunt conectate la pinii D2-D5 prin rezistențe 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 generează animații 3D prin multiplexare.

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

Pini folosiți
Pin Arduino Net Label Componenta Rol De ce l-am ales
D0 - - RX Rezervat pentru comunicatia USB/Serial
D1 - - TX Rezervat pentru comunicatia USB/Serial
D2 LAYER1_CTRL Tranzistor TR1 Control layer L1 (jos) Pini digitali consecutivi pt controlul layerelor
D3 LAYER2_CTRL Tranzistor TR2 Control layer L2 Pini digitali consecutivi pt controlul layerelor
D4 LAYER3_CTRL Tranzistor TR3 Control layer L3 Pini digitali consecutivi pt controlul layerelor
D5 LAYER4_CTRL Tranzistor TR4 Control layer L4 (sus) Pini digitali consecutivi pt controlul layerelor
D6 BUZZER Buzzer pasiv Semnal sonor Pin PWM, pentru generarea tonului
D7 BTN_MODE Buton MODE Schimbare mod Pin digital cu suport PCINT
D8 BTN_UP Buton UP Crestere timer Pin digital cu suport PCINT
D9 BTN_DOWN Buton DOWN Scadere timer Pin digital cu suport PCINT
D10 SR_LATCH 74HC595 - RCLK Latch L-am grupat cu D11-D12 pt controlul shift registerelor
D11 SR_DATA 74HC595 - SER Data L-am grupat cu D10-D12 pt controlul shift registerelor
D12 SR_CLOCK 74HC595 - SRCLK Clock L-am grupat cu D10-D11 pt controlul shift registerelor
D13 - - - L-am evitat, pentru ca este legat la LED-ul built-in
A0 POT Potentiometru 10k Citire analogica pt viteza animatii Pin ADC
A1 BTN_START_STOP Buton START/STOP Pornire/oprire timer Pin analogic folosit ca digital, cu suport PCINT
A2 - - - -
A3 - - - -
A4 LCD_SDA LCD I2C - SDA Date I2C Pinul SDA hardware al Arduino Nano
A5 LCD_SCL LCD I2C - SCL Clock I2C Pinul SCL hardware al Arduino Nano

Am incercat sa pastrez o impartire cat mai logica pentru alegerea pinilor si sa ii aleg consecutivi. Am grupat pinii folositi pentru aceeasi componenta, ca sa fie mai usor de urmarit atat schema, cat si codul. De asemenea, am verificat ca pinii pentru butoane au suport PCINT pe ATmega328P. Astfel pot detecta apasarile fara sa blochez programul principal, iar multiplexarea cubului si timerul pot rula in paralel

Software Design

Rezultate Obţinute

Concluzii

Download

Jurnal

Bibliografie/Resurse

Export to PDF