This shows you the differences between two versions of the page.
|
pm:prj2026:farhad_ali.gul:alexandru.ionita04 [2026/05/03 22:24] alexandru.ionita04 |
pm:prj2026:farhad_ali.gul:alexandru.ionita04 [2026/05/18 16:57] (current) alexandru.ionita04 [Jurnal] |
||
|---|---|---|---|
| Line 28: | Line 28: | ||
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| - | <note tip> | ||
| - | Tot ce ţine de hardware design | ||
| - | </note> | ||
| + | ==== Microfon ==== | ||
| + | |||
| + | |||
| + | ^ Nume Pin ^ Semnal / Functie ^ Pin ATmega328P ^ | ||
| + | | OUT | Output analog audio | PC0 (ADC0) | | ||
| + | | VCC | Supply putere | 5V | | ||
| + | | GND | Ground | GND | | ||
| + | |||
| + | ==== Modul MicroSD ==== | ||
| + | |||
| + | |||
| + | ^ Nume Pin ^ Semnal / Functie ^ Pin ATmega328P ^ | ||
| + | | VCC | Supply putere | 5V | | ||
| + | | GND | Masa | GND | | ||
| + | | MISO | SPI Master In Slave Out | PB4 | | ||
| + | | MOSI | SPI Master Out Slave In | PB3 | | ||
| + | | SCK | SPI Clock | PB5 | | ||
| + | | CS | SPI Chip Select | PB2 | | ||
| + | |||
| + | ==== Amplificator audio ==== | ||
| + | |||
| + | ^ Nume Pin ^ Semnal / Functie ^ Pin ATmega328P ^ | ||
| + | | IN | Input audio | PD6 | | ||
| + | | VCC | Supply putere | 5V | | ||
| + | | GND | Masa | GND | | ||
| + | |||
| + | ==== Butoane ==== | ||
| + | |||
| + | ^ Buton ^ Semnal / Functie ^ Pin ATmega328P ^ | ||
| + | | Buton 1 | Buton Next | PB1 | | ||
| + | | Buton 2 | Buton Previous | PB0 | | ||
| + | | Buton 3 | Buton Play | PD7 | | ||
| + | |||
| + | ==== Buzzer pasiv ==== | ||
| + | |||
| + | ^ Nume Pin ^ Semnal / Functie ^ Pin ATmega328P ^ | ||
| + | | I/O | PWM / digital output | PD5 | | ||
| + | | VCC | Power supply | 5V | | ||
| + | | GND | Ground | GND | | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| + | |||
| + | |||
| + | Implementarea software a proiectului se bazează pe prelucrarea în timp real a semnalului audio recepționat de la un microfon și pe generarea unei frecvențe corectate muzical prin intermediul unui buzzer pasiv. Sistemul funcționează pe microcontrolerul ATmega328P Xplained Mini și utilizează resursele interne ale acestuia pentru achiziția semnalului, analiza frecvenței și generarea semnalului audio de ieșire. | ||
| + | |||
| + | Procesul software este împărțit în mai multe etape principale: | ||
| + | |||
| + | |||
| + | ==== 1. Obținerea semnalului audio ==== | ||
| + | |||
| + | |||
| + | Semnalul audio este captat cu ajutorul unui modul microfon conectat la pinul PC0 al microcontrolerului, corespunzător canalului analogic A0. Microfonul transformă undele sonore în variații de tensiune electrică. | ||
| + | |||
| + | Microcontrolerul utilizează convertorul analog-digital (ADC – Analog to Digital Converter) integrat pentru a eșantiona semnalul audio la intervale regulate de timp. În urma acestui proces se obține o succesiune de valori numerice ce reprezintă amplitudinea semnalului audio în funcție de timp. | ||
| + | |||
| + | Datele rezultate sunt stocate într-un buffer și sunt utilizate ulterior pentru analiza frecvenței fundamentale. | ||
| + | |||
| + | |||
| + | ==== 2. Determinarea frecvenței folosind algoritmul YIN ==== | ||
| + | |||
| + | |||
| + | Pentru identificarea notei muzicale cântate sau detectate de microfon se utilizează algoritmul YIN, un algoritm eficient pentru estimarea frecvenței fundamentale a unui semnal periodic. | ||
| + | |||
| + | Algoritmul funcționează prin compararea semnalului cu versiuni decalate ale acestuia și determinarea perioadei dominante. Principalele etape ale algoritmului sunt: | ||
| + | |||
| + | * calculul funcției de diferență | ||
| + | * normalizarea cumulativă a diferenței | ||
| + | * identificarea minimului local relevant | ||
| + | * determinarea perioadei semnalului | ||
| + | * conversia perioadei în frecvență | ||
| <note tip> | <note tip> | ||
| - | Descrierea codului aplicaţiei (firmware) | + | Frecvența este calculată utilizând relația: |
| + | |||
| + | **f = fs / T** | ||
| + | |||
| + | unde: | ||
| + | * f reprezintă frecvența semnalului | ||
| + | * fs reprezintă frecvența de eșantionare | ||
| + | * T reprezintă perioada detectată de algoritm | ||
| + | </note> | ||
| + | |||
| + | Rezultatul obținut reprezintă nota reală emisă de utilizator. | ||
| + | |||
| + | |||
| + | ==== 3. Corectarea tonală („autotune”) ==== | ||
| + | |||
| + | |||
| + | După determinarea frecvenței fundamentale, sistemul compară valoarea detectată cu un set predefinit de note muzicale aparținând unei game selectate. | ||
| + | |||
| + | Fiecare notă are asociată o frecvență standard conform sistemului temperării egale. Software-ul determină cea mai apropiată notă validă din gama activă prin calculul diferenței dintre frecvența detectată și frecvențele notelor disponibile. | ||
| + | |||
| + | <note> | ||
| + | Exemplu: | ||
| + | dacă utilizatorul cântă o frecvență apropiată de Fa#, iar gama selectată nu conține această notă, sistemul o poate corecta către Sol sau Fa, în funcție de regula implementată. | ||
| + | </note> | ||
| + | |||
| + | Această etapă reprezintă funcția principală de autotune în timp real. | ||
| + | |||
| + | |||
| + | ==== 4. Generarea frecvenței corectate ==== | ||
| + | |||
| + | |||
| + | După alegerea notei corectate, microcontrolerul generează un semnal dreptunghiular cu frecvența corespunzătoare notei respective. | ||
| + | |||
| + | Pentru acest lucru este utilizat unul dintre temporizatoarele hardware interne ale microcontrolerului ATmega328P. Timerul este configurat astfel încât să producă o undă PWM sau un semnal periodic la frecvența dorită. | ||
| + | |||
| + | |||
| + | ==== 5. Redarea notei prin buzzer ==== | ||
| + | |||
| + | |||
| + | Semnalul generat de timer este transmis către un buzzer pasiv conectat la unul dintre pinii digitali ai microcontrolerului. | ||
| + | |||
| + | Buzzerul convertește semnalul electric periodic în vibrații mecanice, producând astfel sunetul notei corectate. | ||
| + | |||
| + | În acest mod, utilizatorul aude în timp real varianta corectată tonal a notei detectate de microfon. | ||
| + | |||
| + | |||
| + | ==== 6. Funcționarea în timp real ==== | ||
| + | |||
| + | |||
| + | Întregul proces: | ||
| + | |||
| + | * captarea semnalului | ||
| + | * analiza frecvenței | ||
| + | * corectarea tonală | ||
| + | * generarea sunetului | ||
| + | |||
| + | este executat continuu într-o buclă principală de program, ceea ce permite funcționarea sistemului în timp real. | ||
| + | |||
| + | <note important> | ||
| + | Pentru reducerea latenței: | ||
| + | |||
| + | * dimensiunea bufferului este menținută relativ mică | ||
| + | * calculele sunt optimizate pentru arhitectura AVR pe 8 biți | ||
| + | * se utilizează periferice hardware interne ale microcontrolerului | ||
| </note> | </note> | ||
| Line 49: | Line 177: | ||
| <note tip> | <note tip> | ||
| Concluzii | Concluzii | ||
| + | |||
| + | * Urasc cititoarele microSD | ||
| </note> | </note> | ||
| Line 61: | Line 191: | ||
| <note tip> | <note tip> | ||
| Secțiune de jurnal. | Secțiune de jurnal. | ||
| + | |||
| + | Este ziua a doua când mă bat cu cititorul de card microSD și cititorul de card microSD câștigă | ||
| </note> | </note> | ||