This shows you the differences between two versions of the page.
pm:prj2021:avaduva:musicvisualizer [2021/06/02 00:02] octavian.craciun |
pm:prj2021:avaduva:musicvisualizer [2021/06/04 09:51] (current) octavian.craciun |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Music Visualizer ====== | ====== Music Visualizer ====== | ||
+ | |||
+ | Autor: Crăciun Octavian | ||
+ | |||
+ | Grupa: 332CB | ||
Line 8: | Line 12: | ||
**Descriere Generală** | **Descriere Generală** | ||
- | Dispozitivul, folosind un microfon, preia un input audio si afiseaza pe un ecran OLED spectrul de frecvente al acestui input, si in acelasi timp in functie de frecventa primita trimite diverse semnale matricei led. | + | Dispozitivul, folosind un microfon, preia un input audio si afiseaza pe un ecran OLED spectrul de frecvente al acestui input, si in acelasi timp in functie de frecventa primita trimite diverse semnale matricei led. Datele sunt citite cu ajutarul microfonului electret la o perioada din pinul analog A0 reprezinta tensiunea in volti. Datele sunt stocate intr-un vector, transformate in spectrul de frecvente si este calculata media frecventelor pe portiuni care este afisata. |
{{:pm:prj2021:avaduva:music_visualizer.png?600|}} | {{:pm:prj2021:avaduva:music_visualizer.png?600|}} | ||
Line 31: | Line 35: | ||
Mediu de dezvoltare: | Mediu de dezvoltare: | ||
* Arduino IDE | * Arduino IDE | ||
+ | |||
+ | * Pentru display-ul LCD am folosit bibliotecile <Adafruit_GFX.h> si <Adafruit_SSD1306.h> | ||
+ | * Pentru matricea de leduri am folosit bibliotecile <MD_MAX72xx.h> si <Max72xxPanel.h> | ||
+ | * Pentru banda de leduri am folosit biblioteca #<Adafruit_NeoPixel.h> | ||
+ | * Pentru datele citite(sample-uri),am un vector de 64 de elemente. Am incercat prima data folosirea unui vector de 1024 dar memoria nu era suficienta si am scazut la cea mai mica putere a lui 2 la care nu primeam warning-uri. | ||
+ | * Pentru a obtine spectrul de frecvente am folosit Fast Fourier Transform, un algoritm care duce un domeniu in domeniul lui de frecvente, folosind biblioteca "arduinoFFT.h" | ||
+ | * Dupa ce se obtine spectrul de frecvente este facuta media pe fiecare interval de sample-uri | ||
+ | * Se reprezinta pe display-ul OLED I2C prin 12 bari ce reprezinta valorile din spectrul de frecevente si pe matricea led pe fiecare coloana cate o valoare a frecventei, iar pe banda de leduri media frecventelor | ||
**Rezultate Obținute** | **Rezultate Obținute** | ||
Line 87: | Line 99: | ||
**Zgomotul microfoanelor** | **Zgomotul microfoanelor** | ||
- | Am incercat eliminarea zgomotului printr-un filtru trece jos respectiv filtru trece sus. Am incercat prima oara un filtru deja implementat dar frecevnetele erau deja prea inalte, apoi am incercat implemntarea unuia cu o rezistenta legata in parallel cu un condensator dar nu am gasit condensatoare si rezistente destuk de mici pentru a obtine o frecventa potrivita. Am pus o conditie in codul Arduino ca sa ignore valorile mai mici sau mai mari decat zgomotul de pe microfon. Pentru o mai buna exactitate a obtinerii frecventelor am adaugat un condensator pe power bus. | + | Am incercat eliminarea zgomotului printr-un filtru trece jos respectiv filtru trece sus. Am incercat prima oara un filtru deja implementat dar frecventele erau deja prea inalte, apoi am incercat implementarea unuia cu o rezistenta legata in parallel cu un condensator dar nu am gasit condensatoare si rezistente destul de mici pentru a obtine o frecventa potrivita. Am pus o conditie in codul Arduino ca sa ignore valorile mai mici sau mai mari decat zgomotul de pe microfon. Pentru o mai buna exactitate a obtinerii frecventelor am adaugat un condensator pe power bus. |
{{:pm:prj2021:avaduva:ftj.jpg?400|}} | {{:pm:prj2021:avaduva:ftj.jpg?400|}} | ||
{{:pm:prj2021:avaduva:frecventa.jpg?100|}} | {{:pm:prj2021:avaduva:frecventa.jpg?100|}} | ||
+ | **Testare Matrice LED 8x32** | ||
+ | |||
+ | Bazat pe MAX7219, acest modul dispune de 4 matrice cu 8x8 LED-uri. | ||
+ | |||
+ | Matricea LED(Light Emitting Diode), este un grid de lumini aranajat in linii si coloane. Impreuna cu alte diode, electrictatea trece prin LED prin o directive de la anod la catod, realizand aprinderea luminilor. | ||
+ | |||
+ | Tensiune alimentare: 5V | ||
+ | |||
+ | Dimensiuni: 128x32x14 mm. | ||
+ | |||
+ | {{:pm:prj2021:avaduva:led_matrix.jpeg?300|}} | ||
+ | |||
+ | Documentatie:[[https://ardushop.ro/ro/home/1491-4xmatrix.html?search_query=matrice+leduri&results=34]] | ||
+ | |||
+ | **Testare ecran OLED 128x32 I2C** | ||
+ | |||
+ | Display-ul are chipset-ul SSD1306, și are o rezoluție de 128x32. | ||
+ | |||
+ | Are un unghi de vizualizare foarte larg, 160 de grade. De asemenea, tehnologia OLED pe care este bazat acest display, asigura un contrast ridicat și în același timp consumul de energie va fi foarte redus. | ||
+ | |||
+ | Modelul are 4 pini si comunica cu Arduino folosind protocolul de comunicatie I2C. Se folosesc bibliotecile adafruit_SSD1306.h si adafruit_GFX.h pentru controlarea display-ului. | ||
+ | |||
+ | Detalii tehnice: | ||
+ | |||
+ | * Dimensiune ecran: 0.91" | ||
+ | * Rezoluția display-ului: 128x32 pixeli | ||
+ | * Tehnologie display: OLED | ||
+ | * Driver IC:SSD1306 | ||
+ | * Interfață comunicare: IIC (GND, VCC, SCL, SDA) | ||
+ | * Tensiune de alimentare: DC 3.3 - 5V | ||
+ | * Dimensiune modul: 38 X 12 X 2.4mm | ||
+ | |||
+ | {{:pm:prj2021:avaduva:display_oled.jpeg?300|}} | ||
+ | |||
+ | Documentatie:[[https://ardushop.ro/ro/home/393-display-oled-128x32-i2c.html]] | ||
+ | |||
+ | |||
+ | **Afisarea spectrului de frecvente folosind matricea led si a ecranului OLED** | ||
+ | |||
+ | {{:pm:prj2021:avaduva:matrix_display.jpeg?300|}} | ||
+ | |||
+ | **Adaugarea unei benzi led NEOPIXEL pentru afisare** | ||
+ | |||
+ | Fiecare circuit este compus din patru bucati de siliciu: trei leduri de culori diferite (RGB) si un circuit de control si limitare a curentului. Pe o banda, alimentarile sunt legate in paralel dar circuitele de control in serie. | ||
+ | |||
+ | {{:pm:prj2021:avaduva:led_neopixel.jpeg?300|}} | ||
+ | |||
+ | Documentatie:[[https://ardushop.ro/ro/electronica/331-banda-leduri-rgb-neopixels-ws2812b.html#/126-leduri_metru-144]] | ||
+ | |||
+ | **Montaj complet** | ||
+ | |||
+ | {{:pm:prj2021:avaduva:montaj_complet.jpeg?300|}} | ||
+ | |||
+ | [[https://youtu.be/2zI9ASAasy8|Demonstratie video]] | ||
**Download** | **Download** | ||
+ | |||
+ | [[https://ocw.cs.pub.ro/courses/pm/prj2021/avaduva/musicvisualizer?do=export_pdf|Descarcare PDF]] | ||
**Jurnal** | **Jurnal** | ||
Line 103: | Line 171: | ||
- Afisarea spectrului de frecvente folosind matricea led | - Afisarea spectrului de frecvente folosind matricea led | ||
- Adaugarea afisarii si prin intermediul ecranului OLED | - Adaugarea afisarii si prin intermediul ecranului OLED | ||
+ | - Adaugarea afisarii folosind o banda led | ||
**Bibliografie/Resurse** | **Bibliografie/Resurse** | ||
+ | |||
+ | {{:pm:prj2021:avaduva:craciun_octavian_332cb_music_visualizer.zip|Arhiva cod sursa arduino}} | ||
+ | |||
+ | * [[https://en.wikipedia.org/wiki/Fast_Fourier_transform|Fast Fourirer Transform]] | ||
+ | * [[https://learn.adafruit.com/sound-reactive-neopixel-peace-pendant/arduino-code|Arduino NeoPixel LEDs]] | ||
+ | * [[https://create.arduino.cc/projecthub/shajeeb/32-band-audio-spectrum-visualizer-analyzer-902f51|LED Matrix Arduino]] | ||
+ | * [[https://www.arduino.cc/reference/en/language/functions/math/map/]] | ||
+ | * [[https://www.arduino.cc/reference/en/language/functions/math/constrain/]] | ||