This shows you the differences between two versions of the page.
pm:prj2024:alucaci:teofil.padurariu [2024/05/23 00:29] teofil.padurariu |
pm:prj2024:alucaci:teofil.padurariu [2024/05/23 00:54] (current) teofil.padurariu [Bibliografie] |
||
---|---|---|---|
Line 44: | Line 44: | ||
{{:pm:prj2024:alucaci:guitar_tuner_hardware.jpg?700|}} | {{:pm:prj2024:alucaci:guitar_tuner_hardware.jpg?700|}} | ||
===== Implementare Software ===== | ===== Implementare Software ===== | ||
- | ==== Descriere ==== | ||
Este un proiect software-heavy. | Este un proiect software-heavy. | ||
- | === INPUTUL ȘI PROCESAREA SA === | + | ==== INPUTUL ȘI PROCESAREA SA ==== |
Core-ul tunerului este Arduino Nano. Pe pinul A0 vor veni datele de la microfonul cu ajutorul căruia se captează semnalul analogic generat de vibrația corzii de chitară. Pentru a putea prelucra semnalul de intrare, este necesară eșantionarea acestuia de către ADC. | Core-ul tunerului este Arduino Nano. Pe pinul A0 vor veni datele de la microfonul cu ajutorul căruia se captează semnalul analogic generat de vibrația corzii de chitară. Pentru a putea prelucra semnalul de intrare, este necesară eșantionarea acestuia de către ADC. | ||
Line 53: | Line 52: | ||
index_nota | index_nota | ||
- | === BIBLIOTECI EXTERNE === | + | ==== BIBLIOTECI EXTERNE ==== |
Pentru implementarea tuner-ului, am folosit 2 biblioteci externe: | Pentru implementarea tuner-ului, am folosit 2 biblioteci externe: | ||
* arduinoFFT: [[https://github.com/kosme/arduinoFFT|GitHub]] | * arduinoFFT: [[https://github.com/kosme/arduinoFFT|GitHub]] | ||
Line 130: | Line 129: | ||
* Dacă amplitudinea nu este îndeajuns de mare încât tunerul să o considere input, atunci LCD-ul va afișa ”Play some notes”. | * Dacă amplitudinea nu este îndeajuns de mare încât tunerul să o considere input, atunci LCD-ul va afișa ”Play some notes”. | ||
- | === CALIBRARE === | + | **LCD-ul** este folosit pentru afișarea rezultatului procesării, alături de LED-ul RGB ce indică starea curentă a tuner-ului. Arduino Nano comunică prin protocolul I2C cu LCD-ul (vezi **labul de I2C**). Am creat 7 caractere custom pentru segmente, care au fost încărcare la inițializarea tuner-ului în memoria controllerului LCD-ului, la adresele 0x0-0x6. Biblioteca permite, prin apelarea unor funcții simple, afișarea caracterelor pe display. |
- | Pentru că nu am avut hardwareul necesar să măresc buffer sizeul pentru rezultate mai accurate, am făcut o funcție care întoarce erorile specifice pentru anumite range-uri de frecvențe (le-am determinat experimental): | + | |
+ | Let's see some code: | ||
+ | |||
+ | <code> | ||
+ | LCD.init(); // Initializare I2C | ||
+ | LCD.backlight(); // Pornire backlight | ||
+ | LCD.setCursor(0, 0); // Setare cursor in poziția de scriere (linia 0, caracter 0) | ||
+ | LCD.print("Guitar Tuner v1"); // Afișare string pe ecran | ||
+ | LCD.clear(); // Ștergere caractere de pe ecran | ||
+ | LCD.setCursor(0, 0); | ||
+ | LCD.write(0x1); // Afișarea caracterului de la poziția 0x1 în memoria controllerului LCD-ului. | ||
+ | </code> | ||
+ | |||
+ | Pentru schimbarea culorii LED-ului am folosit **labul de GPIO**. | ||
+ | |||
+ | ==== CALIBRARE + OPTIMIZARE COD ==== | ||
+ | Pentru că nu am avut hardware-ul necesar să măresc buffer sizeul pentru rezultate mai accurate, am făcut o funcție care întoarce erorile specifice pentru anumite range-uri de frecvențe (le-am determinat experimental): | ||
<code> | <code> | ||
Line 148: | Line 163: | ||
} | } | ||
</code> | </code> | ||
+ | |||
+ | ===== Download ===== | ||
+ | {{:pm:prj2024:alucaci:guitar_tuner.zip|}} | ||
+ | |||
+ | ===== Bibliografie ===== | ||
+ | * FFT: [[https://en.wikipedia.org/wiki/Fast_Fourier_transform#:~:text=A%20Fast%20Fourier%20Transform%20(FFT,frequency%20domain%20and%20vice%20versa. | see]] | ||
+ | * FFT Windowing: [[https://download.ni.com/evaluation/pxi/Understanding%20FFTs%20and%20Windowing.pdf|see]] | ||
+ | * ATMega328P: [[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf | see]] | ||
+ | * LCD: [[https://www.openhacks.com/uploadsproductos/eone-1602a1.pdf | see]] | ||
+ | * LED RGB: [[https://datasheetspdf.com/datasheet/KY-016.html|see]] |