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]] | ||