Table of Contents

Cub de LED-uri 4x4x4

Autor: Valentin Nița 332CC

Introducere

Tema proiectului este realizarea unui cub de 64 de LED-uri care lumineaza in diferite pattern-uri, pattern-ul putand fi schimbat odata cu apasarea unui buton.

Am ales acest proiect deoarece pare fun si rezultatul final este ceva ce as pastra la mine in casa.

Am pornit de la ideea ca doresc sa fac ceva cu LED-uri la proiect.

Utilitatea proiectului este una decorativa.

Descriere generala

Cuburile LED se bazeaza pe un fenomen optic numit persistenta a vederii sau POV. Daca aprinzi un LED pentru foarte putin timp, imaginea ramane pe retina o perioada dupa ce LED-ul se stinge. Prin aprinderea pentru foarte putin timp a straturilor cubului unul dupa altul, se da iluzia unei imagini 3D.

Cubul este alcatuit din coloane si straturi. Fiecare dintre cele 16 coloane (anodice) si cele patru straturi (catodice) sunt conectate la placa de control cu un fir separat si pot fi controlate individual.

Prezentare schema bloc

Utilizatorul va putea schimba prin apasarea unui buton jocul de lumini, iar microcontroller-ul va controla efectele luminoase ale cubului de LED-uri.


Hardware Design

Lista de piese

Nume Model Numar
Placuta PM 2019 1
LED-uri rosii 5mm 64
Rezistente 1kΩ 16
Array de tranzistori ULN2003A 1
Placuta de test - 1
Fire conductoare - *

Schema electrica

schema-electrica-buna.jpg

Modul de lucru

In prima faza, a trebuit rezolvata problema “cum controlam LED-urile individual fara a trage cate un fir catre fiecare?”. Solutia aleasa de catre mine a fost sa impart cubul in 4 straturi orizontale a cate 16 LED-uri fiecare. Toate LED-urile de pe un astfel de strat orizontal au catozii lipiti intre ei (au acelasi catod).

Pentru a nu obtine un cub stramb, am creat un suport pentru un strat, cu 16 gauri in el.
img_1474.jpg

Am lipit prima oara catozii intre ei pe randuri a cate 4 LED-uri, apoi am legat catozii celor 4 randuri intre ei. Astfel, LED-urile de pe un strat orizontal impartasesc acelasi catod. Repetand procesul de inca 3 ori, am obtinut cele 4 straturi orizontale.

Pentru a lega 2 straturi intre ele, le-am tinut unul peste celalalt si am lipit intre ei anozii LED-urilor care se suprapuneau pe verticala. Repetand procesul de inca 2 ori, am obtinut cubul final, unde toate LED-urile de pe o coloana verticala a cate 4 LED-uri au anozii lipiti intre ei (au acelasi anod) si toate LED-urile de pe un strat orizontal a cate 16 LED-uri, acelasi catod.

Cum se aprind LED-urile individual

Solutia aleasa presupune teoretic ca la un anumit moment de timp sa leg VCC la o coloana si GND la un strat pentru a selecta un singur LED care sa fie aprins.
Astfel, voi avea nevoie de 16 fire pentru a alimenta coloanele
img_1475.jpg
si de 4 fire pentru a alimenta straturile.
img_1476.jpg

Daca vreau sa aprind un LED aflat de exemplu in coltul din stanga-sus-spate, trimit VCC prin coloana corespunzatoare lui (coloana spate-stanga) si GND prin stratul corespunzator lui (stratul sus). Aceasta strategie functioneaza foarte bine atunci cand este vorba de LED-uri individuale sau straturi orizontale, insa e insuficienta pentru a crea imagini 3D.

Insa aici intra in scena efectul de persistenta a imaginii: prin aprinderea strat dupa strat pentru foarte putin timp a LED-urilor de pe straturile orizontale 2D ale cubului, se da iluzia unei animatii 3D.

ULN2003A

Pentru a evita ca o intensitate prea mare care vine dinspre cub sa ajunga la microcontroller fara a folosi 4 tranzistori separati, am folosit o componenta care se comporta ca un set de tranzistori NPN. Aceasta comuta GND in locul tranzistoarelor si este si mult mai usor de integrat in circuit.

Software Design

Fisierul `helpers.h` defineste functii ajutatoare, cum ar fi cea de initializare (`init`) sau de resetare a cubului (`reset`). Sunt definite de asemenea functii de aprindere a unui strat de LED-uri (`turn_on_level`) si de stingere a acestuia (`turn_off_level`).

Fisierul `main.c` contine o serie de animatii care se schimba intre ele la apasarea unui buton. In functie de animatia curenta selectata, logica high-level este una foarte simpla: fa reset, ruleaza logica specifica animatiei curente.

Am inclus demonstrativ 3 efecte.

Rezultate Obtinute

img_1495.jpg

Concluzii

E destul de dificl de programat in lipsa unui API mai high-level.
Firele lipite cu scotch se pot rupe foarte usor.

Download

Cod sursa
Wiki in format PDF

Jurnal

21-Apr-2019 - Tema proiectului, lista de piese si schema bloc
05-Mai-2019 - Schema electrica, definitivare lista piese
20-Mai-2019 - Implementarea hardware
24-Mai-2019 - Implementarea software

Bibliografie/Resurse

Tutorial Instructables