Symphony of Lights

Balanica Darius, 334CC



Introducere

Proiectul presupune construirea unui cub format dintr-o retea de leduri, capabile sa ofere diverse jocuri de lumini. Astfel, este creata o “simfonie” a luminilor, avand totodata si scop educativ, intrucat va ajuta la aprofundarea cunostintelor din cadrul cursului “Proiectarea cu Microprocesoare”.

Descriere generală

Reteaua de led-uri va forma un cub 4 x 4 x 4 (64 de led-uri in total). Initial, am resupus ca pentru controlul ledurilor se vor folosi butoane, insa am renuntat la idee si am ales implementarea mai multor jocuri de lumini. Astfel, am implementat 9 jocuri diferite de lumini, capabile sa creeze “simfonia luminilor”, mentionata anterior.

Schema bloc

Aceasta ilustreaza simplist modul in care utilizatorul interactioneaza cu microprocesorul si cum poate controla jocul de lumini. Schema bloc a fost actualizata cu ultimele modificari in ceea ce priveste implementarea.

Hardware Design

Lista de piese

Denumire Cantitate
Kit-ul cu componentele de baza 1
LED colorat 64
Placa de Test 2
Rezistenta 220 Ohm 16
Tranzistor NPN 2n2222 4
Bareta pini 8
Rezistenta 1k Ohm 4
Fir mama-tata 21
Fir tata-tata 20
Consumabile

Pe parcursul implementarii proiectului, din diverse motive, pot fi adaugate componente aditionale, fapt ce va duce la actualizarea lista de piese ulterior, daca este cazul.

Schema electrica

Schema electrica a fost actualizata pentru a reflecta implementarea curenta. Astfel, s-a renuntat la butoane si au fost actualizati pinii corespunzatori.

Asocierea fiecrui pin cu fiecare coloana a cubului este urmatoarea (Orientarile sunt pentru cubul privit din partea pinilor):

Stanga Centru-Stanga Centru-Dreapta Dreapta
PC0 PC4 PA7 PA3
PC1 PC5 PA6 PA2
PC2 PC6 PA5 PA1
PC3 PC7 PA4 PA0

Asocierea fiecarui nivel (rand) al cubului de leduri cu fiecare pin este urmatoarea:

Nivel (de la baza spre partea de sus) Pin
Nivelul 1 PD5
Nivelul 2 PD0
Nivelul 3 PD4
Nivelul 4 PD1

Software Design

Mediul de dezvoltare

Din punct de vedere software, proiectul a fost realizat folosind Windows 10. Pentru editarea codului a fost folosit Visual Studio Code, compilarea surselor s-a realizat in terminalul de Ubuntu din Windows, iar incarcarea programului pe microcontroller s-a realizat folosind executabilul cu interfata grafica, pus la dispozitie pe platforma cursului.

Alte precizari legate de implementare

Desi fisierul sursa contine un numar considerabil de linii de cod, acesta este destul intuitiv, intrucat pentru fiecare animatie in parte a fost implementata o functie care aprinde ledurile in ordinea dorita. Astfel, animatiile au fost implementate dupa cum urmeaza:

  • flicker (toate ledurile cubului pulseaza intermitent la intervale regulate de timp);
  • lines (ledurile pulseaza formand iluzia unor linii orizontale aleatoare, generate la intervale aleatoare de timp);
  • vortex (fluctuatiile ledurilor formeaza un “vartej”, din exteriorul cubului catre centru, pentru ca apoi sa revina in exteriorul cubului);
  • rowsUp (ledurile pulseaza pe fiecare rand in parte, de la baza spre partea superioara, generand iluzia unei miscari ascendente);
  • randomColumns (coloanele cubului sunt aprinse aleator la intervale regulate de timp, pentru crearea unui efect vizual aparte);
  • fill (ledurile cubului se aprind nivel cu nivel, pentru ca la final intregul cub sa fie aprins, generand astfel un efect gradual);
  • rowsDown (ledurile pulseaza pe fiecare rand in parte, de la partea superioara spre baza, generand iluzia unei miscari descentente);
  • randomLeds (ledurile pulseaza aleator si cu mare viteza);
  • allCube (cubul se aprinde cu fiecare led in parte, in mod aleator, pentru ca la final cubul sa ramana aprins);

Pentru implementarea acestor animatii, au fost create urmatoarele functii ajutatoare:

  • clearCube (stinge intreg cubul);
  • flickerColumnPortC (genereaza pulsatia unei coloane de leduri primita ca parametru, pentru coloanele de pe PORTC);
  • flickerColumnPortA (genereaza pulsatia unei coloane de leduri primita ca parametru, pentru coloanele de pe PORTA);
  • lightColumnPortC (genereaza aprinderea unei coloane de leduri primita ca parametru, pentru coloanele de pe PORTC);
  • lightColumnPortA (genereaza aprinderea unei coloane de leduri primita ca parametru, pentru coloanele de pe PORTA);
  • lightLedPortC (genereaza aprinderea unui led pe baza randului si coloanei primite ca parametru, pentru coloanele de pe PORTC);
  • lightLedPortA (genereaza aprinderea unui led pe baza randului si coloanei primite ca parametru, pentru coloanele de pe PORTA);
  • flickerLedPortC (genereaza pulsatia unui led pe baza randului si coloanei primite ca parametru, pentru coloanele de pe PORTC);
  • flickerLedPortA (genereaza pulsatia unui led pe baza randului si coloanei primite ca parametru, pentru coloanele de pe PORTA);
  • lightAllColumns (aprinde toate coloanele cubului);
  • lightAllRows (aprinde toate liniile cubului);
  • offAllRows (stinge toate randurile cubului);

Rezultate obtinute

Din considerente estetice, am confectionat un suport pentru placa ce suporta cubul, la care a fost atasat si microcontrollerul, in lateral. Alimentarea se face de la o baterie externa situata in interiorul suportului. In continuare au fost adaugate mai multe poze sugestive, ce ilustreaza intreg ansamblul confectionat, dar si 2 demo-uri cu locurile de lumini implementate.

Demo 1: https://www.youtube.com/watch?v=-SYGo5YHUYs

Dema 2: https://www.youtube.com/watch?v=7wQ3JP7SGgQ

Concluzii

Proiectul a fost unul interesant, intrucat a presupus imbinarea partii hardware (lipirea pieselor, conectarea lor, testarea componentelor, etc) cu cea software (implementarea functionalitatilor dorite). Realizarea acestuia a fost mai dificila la inceput, dar aceasta face ca satisfactia unui proiect realizat de la zero din toate punctele de vedere si pana in stadiul actual sa fie mult mai mare.

Proiectul poate fi imbunatatit prin adaugarea de noi functionalitati (extinderea cubului, adaugarea de animatii pe baza unor sunete, adaugarea unor butoane de control).

Ma declar multumit de ce am realizat in intervalul de timp oferit si iau in considerare adaugarea pe viitor a functionalitatilor mentionate anterior.

Download

Codul Sursa, Readme si Makefile: symphonyoflights.zip

Bibliografie/Resurse

pm/prj2019/ctranca/symphony.txt · Last modified: 2021/04/14 17:07 (external edit)
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