This is an old revision of the document!


Audio Spectrum Analyzer

Introducere

Partea principala a proiectul consta in preluarea frecventelor audio din jur si afisarea lor pe o matrice de led-uri, oferind si alte moduri de afisare precum temperatura din mediul ambiental, umiditatea, ora curenta, dar si anumite jocuri de lumini predefinite.

Interschimbarea se face prin apasarea singurul buton de pe carcasa.

De asemenea luminozitatea matricii este setata automat in functie de mediu in care functioneaza proiectul, in zone mai intunecate aceasta fiind mult redusa pentru a nu deveni deranjanta.

Conceptul pentru acest proiect a plecat de la dorinta mea de a adauga un feature nou televizorului, initial folosind o banda de LED-uri ambientala de unde a pornit si ideea de a amplasa sub acesta pe perete (langa difuzoare) dispozitivul, avand astfel un input cat mai bun pentru microfon.

Descriere generală

Doua moduri de functionare:

1. Idle - sunt afisate anumite modele presetate pe card sd

2. Receptionare frecvente - se afiseaza pe matrice frecventele primite prin microfon

Voi folosi doua butoane de “Next” respectiv “Prev” pentru setarea modului de functionare.

Hardware Design

Lista componente:

  • Arduino UNO
  • Matrice LED-uri 8*32 - MAX7219
  • Modul microfon - LM393
  • Modul senzor temperatura - DHT11
  • Modul RTC - DS1302
  • Buton
  • Rezistenta 10k * 2
  • Fotorezistor
  • Cablu alimentare
  • Adaptor priza 5V

Software Design

MAX7219 Matrice LED-uri 32×8:

  • Pentru acest modul este disponibila o varietate larga de biblioteci

capabile sa ofere posibilitatea de a afisa diverse imagini pe acesta.

  • Pentru afisajul principal (Audio Spectrum Analyzer) am folosit

biblioteca “MD_MAX72xx” care imi permite controlarea individuala a coloanelor, avand astfel posibilitatea de a seta fiecare coloana a matricei pe verticala in functie de frecventele captate de microfon. De asemenea pentru a avea un rezultat cat mai placut vizual am folosit “arduinoFFT” care preia semnalele si stabileste armonicele corespunzatoare.

  • Pentru celelalte moduri de functionare am folosit “MD_Parola” care ofera

functii mult mai potrivite si mai usor de folosit pentru jocuri de lumini decat biblioteca mentionata anterior, dar nu este de o flexibilitate foarte mare de aceea nu am folosit-o si la modul de la punctul anterior.

  • Pentru a nu seta manual fiecare led pe o coloana am folosit un vector pentru

fiecare amplitudine posibila.

Luminozitate reglata automat:

  • Pentru acest feature m-am bazat pe conceptul de ADC invatat la laborator,

folosind un fotorezistor asupra caruia am aplicat un factor de “smoothing”.

Schimbare moduri afisare:

  • Am folosind o simpla intrerupere cuplata la PIN-ul 2 de pe Arduino pe care

am facut un debouncer in software.

Moduri secundare de afisare:

  • Pentru modurile care nu implica “VU Metrul” am preluat datele de la senzori prin

bibliotecile corespondente (ex. sezonr tmeperatura → “DHT”), iar pentru jocurile de lumini am folosit conceptul de “SpriteData” dat in MD_Parola.

  • La afisare modelul l-am pastrat simplu cu PA_CENTER pentru a avea totul centrat pe matrice.

Optimizari:

  • Avand un numar destul de mare de biblioteci si o memorie limitata pe arduino acest lucru a

fost o problema din start.

  • Jocurile de lumini se bazeaza pe matrici care seteaza starea ledurilor, matrici care pot ocupa

destula memorie de aceea am folosit keyword-ul “PROGMEM” care indruma compilatorul sa puna aceste date pe memoria flash, nu pe SRAM unde ar fii fost puse.

  • Mi-as fi dorit sa pot renunta la una din bibliotecile pentru MAX7219 deorece ocupa destula memorie,

dar MD_Parola este dependenta de MD_MAX72xx ceea mi-a ingreuna procesul de implementare.

  • Memoria utilizata in momentul actual este de 86%.

Rezultate Obţinute

Am reusit sa implementez absolut tot ce mi-am propus, inclus o carcasa functionala pentru acesta. Pe langa conceptul initial am adaugat si feature-ul de reglare automata al luminozitatii.

Concluzii

Download

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.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2023/gpatru/audiospectrum.1685374582.txt.gz · Last modified: 2023/05/29 18:36 by alexandru.ene2208
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