This shows you the differences between two versions of the page.
pm:prj2021:avaduva:guitartuner [2021/05/21 10:10] sergiu.fratila [Descriere generala] |
pm:prj2021:avaduva:guitartuner [2021/05/28 10:01] (current) sergiu.fratila [Schema Bloc] |
||
---|---|---|---|
Line 8: | Line 8: | ||
===== Descriere generala ===== | ===== Descriere generala ===== | ||
Dispozitivul functioneaza prin intermediul masuratorii frecventei sunetului captat de microfon. Daca frecventa corecta este atinsa, dispozitivul indica acest lucru. Altfel, sugereaza ca nota sa fie ridicata/coborata prin intermediul ecranului LCD. | Dispozitivul functioneaza prin intermediul masuratorii frecventei sunetului captat de microfon. Daca frecventa corecta este atinsa, dispozitivul indica acest lucru. Altfel, sugereaza ca nota sa fie ridicata/coborata prin intermediul ecranului LCD. | ||
+ | |||
Datele citite cu ajutarul microfonului la fiecare 1ms din pinul analog respectiv reprezinta tensiunea in Volti. Analiza sunetului este facuta astfel: datele discrete sunt stocate intr-un array de x sample-uri, acestea fiind analizate sample cu sample pentru a determina peak-urile. Numarul de peak-uri gasite intr-un array este impartit la x (nr sample-uri) pentru a determina perioada in ms. Se calculeaza inversul acesteia pentru a afla frecventa. | Datele citite cu ajutarul microfonului la fiecare 1ms din pinul analog respectiv reprezinta tensiunea in Volti. Analiza sunetului este facuta astfel: datele discrete sunt stocate intr-un array de x sample-uri, acestea fiind analizate sample cu sample pentru a determina peak-urile. Numarul de peak-uri gasite intr-un array este impartit la x (nr sample-uri) pentru a determina perioada in ms. Se calculeaza inversul acesteia pentru a afla frecventa. | ||
+ | |||
Aceste frecvente obtinute sunt comparate cu unele de referinta (cele 6 note ale corzilor chitarilor), iar in functie de acuratetea notei, pe ecranul LCD va fi sugerata tensionarea/detensionarea corzii ce a fost ascultata. | Aceste frecvente obtinute sunt comparate cu unele de referinta (cele 6 note ale corzilor chitarilor), iar in functie de acuratetea notei, pe ecranul LCD va fi sugerata tensionarea/detensionarea corzii ce a fost ascultata. | ||
==== Schema Bloc ==== | ==== Schema Bloc ==== | ||
- | {{:pm:prj2021:avaduva:arduino-guitar-tuner.png?750|}} | + | {{:pm:prj2021:avaduva:schema_finala.png?750|}} |
===== Hardware Design ===== | ===== Hardware Design ===== | ||
{{:pm:prj2021:avaduva:tunersergiufratila_schemaeagle.jpg?800|}} | {{:pm:prj2021:avaduva:tunersergiufratila_schemaeagle.jpg?800|}} | ||
Line 26: | Line 28: | ||
[2] https://www.robofun.ro/sunet/modul-amplificator-microfon-electret-5buc.html | [2] https://www.robofun.ro/sunet/modul-amplificator-microfon-electret-5buc.html | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | * Pentru modulul LCD am folosit biblioteca <LiquidCrystal_I2C.h> | ||
+ | * Pentru stocarea datelor citite de la pinul A0, folosesc un array de 64 de sample-uri. Am incercat initial cu 128, insa avand in vedere ca am nevoie de un array si pentru partea imaginara a semnalului, atunci cand calculez FFT, varianta cu 128 de sample-uri ocupa 75-80% din memoria dinamica a placutei Arduino. Primeam warning-uri de stabilitate, asa ca am coborat la 64. | ||
+ | * Pentru a obtine frecventa sunetului din sample-urile citite de la pinul A0 cu ajutorul microfonului, am folosit cateva functii din biblioteca <arduinoFFT.h>. Fast Fourier Transform este o metoda matematica de a analiza componentele de frecventa dintr-un semnal. | ||
+ | * In loop, frecventa intoarsa de functia FindFrequency(implementata cu FFT) este comparata cu cate un interval ce corespunde fiecarei corzi de chitara. | ||
+ | * Astfel, acordorul meu este capabil sa recunoasca fiecare coarda din acordajul standard al unei chitare (E A D G B e). | ||
+ | * Dupa ce incadreaza frecventa gasita intr-unul dintre intervalele specifice corzilor, este verificat daca sunetul este mai inalt sau mai jos decat un alt interval mai restrans, care ar insemna ca acea coarda este acordata. | ||
+ | * In functie de cum se incadreaza in intervalele: mai mic, perfect, mai mare, ecranul LCD afiseaza "< < <" pentru un sunet cu frecventa prea mica, "> > >" pentru frecventa prea mare si "good" pentru cazul in care este acordata. | ||
+ | * Pe masura ce am scris codul ce incadra frecventa intr-un interval pentru fiecare coarda, am incercat sa calibrez indicatiile tunerului meu in functie de alte 2 acordoare. | ||
===== Rezultate Obtinute ===== | ===== Rezultate Obtinute ===== | ||
+ | |||
+ | {{:pm:prj2021:avaduva:sergiuf_afisare.jpeg?700|}} | ||
+ | * Fig. 1: Mesaj de intampinare. | ||
+ | {{:pm:prj2021:avaduva:sergiuf_montaj_1.jpeg?700|}} | ||
+ | {{:pm:prj2021:avaduva:sergiuf_montaj_2.jpeg?700|}} | ||
+ | * Fig. 2, 3: Montaj complet. | ||
+ | |||
+ | [[https://www.youtube.com/watch?v=FfgnMOZE9rM|Demonstratie video]] | ||
===== Concluzii===== | ===== Concluzii===== | ||
- | ==== Download ==== | + | * Implementarea acestui proiect nu a fost nici mai grea, nici mai usoara decat ma asteptam. |
+ | * A trebuit sa fac ceva research legat de analiza frecventei / alte proiecte arduino guitar tuner astfel incat sa aflu ca aveam nevoie de FFT pentru a obtine frecventa dintr-un sample. | ||
+ | * Desi Arduino nu este cea mai buna placuta pentru procesare audio, sunt multumit de rezultatul final si de acuratetea tunerului. In videoul demonstrativ se vede faptul ca este utilizabil ...cu toate ca mai da mici rateuri, asa fac si tunerele profesionale, in experienta mea:)) | ||
==== Jurnal ==== | ==== Jurnal ==== | ||
+ | * **7 mai** - achizitionare componente + implementare afisare LCD | ||
+ | * **14 mai** - implementare beta (fara FFT) didn't work :( | ||
+ | * **21 mai** - research FFT + aflare frecventa in Hz | ||
+ | * **21-27 mai** - implementarea interpretarii frecventelor citite + afisare sugestii acordare + finalizare | ||
==== Bibliografie/Resurse ==== | ==== Bibliografie/Resurse ==== | ||
- | {{:pm:prj2021:avaduva:guitartuner.pdf|}} | + | [[https://forum.arduino.cc/t/frequency-detection/253647|Arduino Frequency Detection]] |
- | {{https://ocw.cs.pub.ro/courses/pm/prj2021/avaduva/guitartuner?do=export_pdf}} | + | [[https://www.youtube.com/watch?v=spUNpyF58BY|Fourier Transform]] |
+ | [[https://www.instructables.com/Arduino-Guitar-Tuner/|Arduino Guitar Tuner (instructables)]] | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Descarcare pagina/arhiva surse ===== | ||
+ | Click [[https://ocw.cs.pub.ro/courses/pm/prj2021/avaduva/guitartuner?do=export_pdf|aici]] pentru descarcarea PDF a paginii curente. | ||
+ | |||
+ | <note important>{{:pm:prj2021:avaduva:Sergiu_Fratila_PM_Proiect.zip|Arhiva cu codul sursa}}</note> |