Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2022:sgherman:ledmatrix [2022/05/16 21:40]
mihnea.buzatu [Schema bloc]
pm:prj2022:sgherman:ledmatrix [2022/05/25 12:37] (current)
mihnea.buzatu
Line 18: Line 18:
  
  
 +`
 ===== Hardware design ===== ===== Hardware design =====
   * Arduino UNO   * Arduino UNO
-  * Breadboard 
-  * Fire de conexiune 
-  * Rezistente 
   * Matrice LED   * Matrice LED
   * Modul card SD   * Modul card SD
   * Microfon   * Microfon
   * Modul RTC   * Modul RTC
-  * Buton+  * Buton x 2
   * Display LCD   * Display LCD
 +
 +{{:​pm:​prj2022:​sgherman:​ledmatrix_schema_electrica.png?​750x480}}
 +
 ===== Software design ===== ===== Software design =====
 +== Scripts ==
 +Un script acceptat este un fisier text cu urmatorea structura:
 +  * pe prima linie N, un numar intre 0 - 255 care reprezinta numarul de "​faze"​ (o faza descrie starea fiecarui led din matrice la un moment)
 +  * pe a doua linie D, un numar > 20 care reprezinta numarul de ms asteptate intre 2 faze consecutive (sau durata pentru care o faza sta pe matrice)
 +  * pe urmatoarele N linii, caracterul "​|"​ urmat de descrierea fazei
  
-<note tip> +O faza poate fi descrisa in urmatoarele moduri
-Descrierea codului aplicaţiei (firmware)+  * 32 de numere intre 0 - 255unde fiecare reprezinta starea unei coloane a matricei 
-  * mediu de dezvoltare (if any) (e.g. AVR StudioCodeVisionAVR) +  * sirul "​clock"​ care va afisa ora curenta ​pe matrice
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) +
-  * algoritmi şi structuri ​pe care plănuiţi să le implementaţi +
-  * (etapa 3) surse şi funcţii implementate +
-</​note>​+
  
-===== Rezultate obtinute =====+== Optimizare Memorie ​== 
 +Cea mai frecventa problema intalnita in dezvoltarea software a fost epuizarea SRAM-ului. In acest sens am luat urmatoarele decizii de implementare:​ 
 +  - La setup, cardul SD este scanat si sunt salvate numele primelor 8 scripturi gasite in directorul script/ 
 +  - Pentru scriptul curent, sunt retinute in memorie doar numarul de faze, timpul asteptat intre faze si o structura File 
 +  - Atunci cand scriptul curent este schimbat, este inchisa structura File a scriptului vechi si deschisa pentru scriptul nou 
 +  - Array-urile constante de tip look-up table sunt puse in PROGMEM 
 +  - Pentru analiza spectrului audio, folosesc un algoritm optimizat de FFT care ruleaza pe 64 de samples de la microfon 
 +   
 +== Optimizare Matrice ​== 
 +O alta problema a fost modul in care afisez pe matrice. Biblioteca LedControl pe care am folosit-o pune la dispozitie mai multe fucntii de afisare, printre care setColumn si setRow.
  
-<note tip> +Functia setColumn ar fi optima pentru cazul meu de utilizare (atat pentru scripturi cat si pentru afisarea frecventelor generate de FFT), insa din testele mele, aceasta functie este mult prea lenta. Pentru a seta toate cele 32 de coloane, are nevoie de peste 200 ms, pe cand functia setRow poate seta 32 de randuri de cate 8 led-uri in aproximativ 4 ms.
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
-===== Concluzii =====+Pentru a rezolva aceasta problema, folosesc un buffer in care traduc manual cele 32 de coloane in 32 de randuri compatibile cu functia setRow.
  
-<note tip> +Folosirea unui buffer permite si optimizarea incarcarii unei faze din fisier. Dupa ce faza curenta este afisata pe matrice, se poate incepe incarcarea urmatoarei faze in buffer, iar timpul pierdut pentru citirea din fisier poate fi substras din timpul asteptat intre faze. Astfel se asigura ca scriptul va rula la o viteaza constanta si alease de utilizator, fara a fi influentat de durata operatiilor IO.
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
-===== Download ​=====+===== Rezultate obtinute ​=====
  
-<note warning>​ +Am reusit sa implementez toate functionalitatile dorite, iar rezultatul final este unul calitativ din punctul meu de vedere.
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script ​de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+
  
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. +== Exemplu musica == 
-</​note>​+{{:pm:prj2022:sgherman:lexmatrix_example1.jpeg?700x420}} 
 +== Exemplu ​faza script == 
 +{{:pm:prj2022:sgherman:lexmatrix_example2.jpeg?​700x420}}
  
-===== Jurnal ​=====+===== Concluzii ​=====
  
-**19.04.2022** +Proiectul a fost usor de implementat din punct de vedere hardware, dar mai complicat din punct de vedere software, in special datorita problemelor cu memoria.
-  * Alegere tema proiect +
-  * Cautare componente+
  
-**28.04.2022** +Folosind o placa de dezvoltare cu mai multa memorie (cum ar fi un arduino mega), calitatea frecventelor audio calculate de FFT ar fi putut fi imbunatatite substantial prin cresterea numarului de samples de microfon.
-  * Incepere pagina Wiki +
-  * Comandare componente+
  
 +Scripturile ar fi putut sa fie mai prietenoase,​ insa forma lor actuala reprezinta un compromis intre performanta (citire/​afisare) si user experience.
 +Un mod de a maximiza user experience ulterior ar fi implementarea unei aplicatii desktop/web care sa contina un gui care sa poate genera mai usor scripturile.
 +
 +Totusi, sunt multumit de calitatea finala proiectului si am invatat foarte multe in implementarea sa.
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
 +Resurse Software
 +  - https://​create.arduino.cc/​projecthub/​abhilashpatel121/​approxfft-fastest-fft-function-for-arduino-fd4917
 +  - https://​www.arduino.cc/​reference/​en/​libraries/​ledcontrol/​
 +  - https://​www.arduino.cc/​reference/​en/​libraries/​liquidcrystal-i2c/​
 +  - https://​www.arduino.cc/​reference/​en/​libraries/​rtclib/​
  
-<​note>​ +Link cod 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +  https://​github.com/mihneabuz/​arduino-led-matrix
-</note>+
  
 +===== Download =====
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Buzatu_Mihnea_334CB</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Buzatu_Mihnea_334CB</​a></​html>​
  
pm/prj2022/sgherman/ledmatrix.1652726452.txt.gz · Last modified: 2022/05/16 21:40 by mihnea.buzatu
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