This shows you the differences between two versions of the page.
|
pm:prj2026:farhad_ali.gul:alexandru.ionita04 [2026/05/18 12:47] alexandru.ionita04 [Butoane] |
pm:prj2026:farhad_ali.gul:alexandru.ionita04 [2026/05/18 16:57] (current) alexandru.ionita04 [Jurnal] |
||
|---|---|---|---|
| Line 32: | Line 32: | ||
| - | ^ Pin Name ^ Signal / Function ^ ATmega328P Pin ^ | + | ^ Nume Pin ^ Semnal / Functie ^ Pin ATmega328P ^ |
| - | | OUT | Analog audio output | PC0 (ADC0) | | + | | OUT | Output analog audio | PC0 (ADC0) | |
| - | | VCC | Power supply | 5V | | + | | VCC | Supply putere | 5V | |
| | GND | Ground | GND | | | GND | Ground | GND | | ||
| Line 40: | Line 40: | ||
| - | ^ Pin Name ^ Signal / Function ^ ATmega328P Pin ^ | + | ^ Nume Pin ^ Semnal / Functie ^ Pin ATmega328P ^ |
| - | | VCC | Power supply | 5V | | + | | VCC | Supply putere | 5V | |
| - | | GND | Ground | GND | | + | | GND | Masa | GND | |
| | MISO | SPI Master In Slave Out | PB4 | | | MISO | SPI Master In Slave Out | PB4 | | ||
| | MOSI | SPI Master Out Slave In | PB3 | | | MOSI | SPI Master Out Slave In | PB3 | | ||
| Line 50: | Line 50: | ||
| ==== Amplificator audio ==== | ==== Amplificator audio ==== | ||
| - | ^ Pin Name ^ Signal / Function ^ ATmega328P Pin ^ | + | ^ Nume Pin ^ Semnal / Functie ^ Pin ATmega328P ^ |
| - | | IN | Audio input | PD6 | | + | | IN | Input audio | PD6 | |
| - | | VCC | Power supply | 5V | | + | | VCC | Supply putere | 5V | |
| - | | GND | Ground | GND | | + | | GND | Masa | GND | |
| ==== Butoane ==== | ==== Butoane ==== | ||
| - | ^ Button ^ Signal / Function ^ ATmega328P Pin ^ | + | ^ Buton ^ Semnal / Functie ^ Pin ATmega328P ^ |
| - | | Button 1 | Button Next | PB1 | | + | | Buton 1 | Buton Next | PB1 | |
| - | | Button 2 | Button Previous | PB0 | | + | | Buton 2 | Buton Previous | PB0 | |
| - | | Button 3 | Button Play | PD7 | | + | | Buton 3 | Buton Play | PD7 | |
| ==== Buzzer pasiv ==== | ==== Buzzer pasiv ==== | ||
| - | ^ Pin Name ^ Signal / Function ^ ATmega328P Pin ^ | + | ^ Nume Pin ^ Semnal / Functie ^ Pin ATmega328P ^ |
| | I/O | PWM / digital output | PD5 | | | I/O | PWM / digital output | PD5 | | ||
| | VCC | Power supply | 5V | | | VCC | Power supply | 5V | | ||
| | GND | Ground | GND | | | 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 85: | Line 177: | ||
| <note tip> | <note tip> | ||
| Concluzii | Concluzii | ||
| + | |||
| + | * Urasc cititoarele microSD | ||
| </note> | </note> | ||
| Line 97: | 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> | ||