Mini MP3 Player

Introducere

Proiectul meu constă într-un player audio portabil construit pe microcontrolerul ATmega328P-XMINI, care redă fișiere .wav stocate pe un card microSD.

  • Ideea a pornit din dorința de a construi de la zero un dispozitiv personalizat, funcțional și estetic, dedicat redării muzicii.
  • Utilizatorul poate controla redarea prin butoane fizice (play/pause, next, prev), poate regla volumul printr-un potențiometru, iar numele melodiei curente este afișat pe un display OLED.
  • Proiectul demonstrează cum un microcontroler simplu poate gestiona simultan mai multe periferice — stocare, afișaj, audio și input utilizator — oferind o perspectivă practică asupra sistemelor embedded.

Descriere generală

  • Stocare (SPI): Fișierele .wav sunt stocate pe un card microSD citit prin protocolul SPI cu biblioteca SDFat.
  • Redare audio (PWM + Timere): Samplelele audio sunt trimise unui Timer în mod Fast PWM pe 8 biți. Semnalul PWM de mare viteză generat pe pinul D9 este injectat direct în modulul de amplificare SC8002B, care conduce direct difuzorul sau mufa jack pentru căști (atenuată prin rețeaua de rezistențe), eliminând distorsiunile și nevoia de filtre complexe.
  • Control (GPIO + Întreruperi): Trei butoane fizice pe pinii de întrerupere gestionează play/pause, next și prev.
  • Afișare (I2C): Display-ul OLED SSD1306 afișează numele melodiei și statusul playerului prin I2C.
  • Volum (ADC): Un potențiometru de 10kΩ citit prin ADC controlează volumul redării.
  • VU Meter (PWM): 4 LED-uri (verde, galben, roșu) vizualizează nivelul sonor în timp real.

Hardware Design

Componente folosite:

  • ATmega328P-XMINI: Placa de bază pentru controlul întregului sistem.
  • Modul MicroSD (SPI): Stochează fișierele audio .wav.
  • Display OLED 1.3” I2C: Afișează numele melodiei curente și statusul playerului.
  • Modul audio SC8002B cu difuzor integrat: Amplifică semnalul PWM și redă sunetul prin difuzorul de 2W integrat.
  • Mufă jack audio 3.5mm (PJ392): Permite conectarea căștilor.
  • Potențiometru 10kΩ: Controlează volumul prin ADC.
  • Butoane tactile (x3): Play/pause, next, prev.
  • LED-uri 5mm roșu x1, galben x1, verde x2: VU meter vizual.
  • Rezistente: 220Ω (x4), 2.2kΩ (x1), 1kΩ (x1): Protectie LED-uri si atenuare casti
  • Breadboard + fire Dupont: Pentru realizarea conexiunilor între componente.

În tabelul de mai jos este prezentată configurația pinilor utilizați, alături de justificarea tehnică a alegerii acestora:

Componentă Pin Componentă Pin ATmega328P Justificare Tehnică
Modul MicroSD VCC 5V Alimentare modul SD.
GND GND Masă comună a circuitului.
MISO D12 (PB4) Master In Slave Out — date de la SD spre microcontroler.
MOSI D11 (PB3) Master Out Slave In — date de la microcontroler spre SD.
SCK D13 (PB5) Clock SPI. Sincronizează transferul de date.
CS D10 (PB2) Chip Select. Activează comunicarea cu modulul SD.
Modul SC8002B + Difuzor VCC 5V Alimentare modul audio.
GND GND Masă comună a circuitului.
IN (+) D9 (PB1) Pin Timer1 OC1A. Generează semnalul audio prin Fast PWM.
OUT Difuzor Semnal amplificat către difuzor extern de 2W.
Mufă Jack Căști Left / Right - Canale audio căști, conectate după rezistența de 2.2kΩ.
GND GND Conectat la bara albastră (GND) pentru închiderea circuitului.
Potențiometru Slider VCC 5V Alimentare potențiometru.
OUT (cursor) A0 (PC0) Intrare analogică ADC. Citește poziția sliderului pentru volum.
GND GND Masă comună.
LED Verde 1 (VU) Anod D3 (PD3) Pin PWM. Controlează intensitatea prin analogWrite().
LED Verde 2 (VU) Anod D4 (PD4) GPIO digital. Primul nivel al VU meter-ului.
LED Galben (VU) Anod D5 (PD5) Pin PWM. Nivel intermediar VU meter.
LED Roșu (VU) Anod D7 (PD7) Pin PWM. Nivel maxim VU meter.
LED-uri (toți) Catod GND Masă comună prin rezistență 220Ω.
OLED SSD1306 VCC 5V Alimentare display.
GND GND Masă comună.
SDA A4 (PC4) Serial Data I2C. Pin dedicat hardware pe ATmega328P.
SCL A5 (PC5) Serial Clock I2C. Sincronizează transferul de date.
Buton PREV P1 A1 (PC1) Intrare digitală cu INPUT_PULLUP intern. Melodia anterioară.
P2 GND Masă — butonul trage pinul la GND la apăsare.
Buton PLAY/PAUSE P1 A2 (PC2) Intrare digitală cu INPUT_PULLUP intern. Play/Pause toggle.
P2 GND Masă comună.
Buton NEXT P1 A3 (PC3) Intrare digitală cu INPUT_PULLUP intern. Melodia următoare.
P2 GND Masă comună.

Circuit MP3 Player

Software Design

Cod proiect: https://github.com/dariaharabagiu/Proiect_MP3

Proiectul a fost dezvoltat in mediul VS Code + PlatformIO, folosind framework-ul Arduino pentru microcontrollerul ATmega328P-XMINI.

Fisier / Biblioteca Rol
main.cpp Contine logica principala a proiectului: initializare hardware, redare audio, butoane, display si VU meter.
SD.h Gestioneaza citirea fisierelor .wav de pe cardul microSD prin protocolul SPI.
TMRpcm.h Redarea fisierelor audio WAV prin Timer1 in mod Fast PWM pe pinul D9.
U8g2lib.h (U8X8) Controlul display-ului OLED SSD1306 prin I2C, in mod fara buffer pentru a nu bloca intreruperile audio.
Wire.h Activeaza magistrala I2C hardware (A4=SDA, A5=SCL) pentru comunicatia cu display-ul.
SPI.h Protocoul SPI hardware pentru comunicatia cu modulul microSD.
Functie Rol
setup() Initializeaza toti pinii, cardul SD, display-ul OLED si porneste prima melodie.
loop() Citeste butoanele cu debounce, potentiometrul ADC, actualizeaza volumul si VU meter-ul.
pornesteMelodie(index) Opreste piesa curenta, porneste piesa de la indexul dat si actualizeaza display-ul.
afiseazaOLED() Scrie pe display numele melodiei curente, numarul track-ului si statusul play/pause.
Laborator Utilizare in proiect
Lab 0 - GPIO LED-uri VU meter pe D3, D4, D5, D7 cu rezistente 220Ω; butoane PREV/PLAY/NEXT pe A1, A2, A3 cu INPUT_PULLUP intern.
Lab 3 - Timere & PWM TMRpcm foloseste Timer1 in mod Fast PWM pe pinul D9 (OC1A) pentru generarea semnalului audio.
Lab 4 - ADC Potentiometrul slider HW-233 citit prin analogRead() pe A0 (0-1023), mapat la volum (0-3) si numar LED-uri aprinse.
Lab 5 - SPI Cardul microSD comunicat prin SPI hardware pe pinii D10(CS), D11(MOSI), D12(MISO), D13(SCK).
Lab 6 - I2C Display-ul OLED SSD1306 comunicat prin I2C hardware pe A4(SDA) si A5(SCL) folosind biblioteca U8X8.

Rezultate Obţinute

Demo: Download demo video

Proiectul functioneaza complet si implementeaza urmatoarele functii:

  • Redarea fisierelor audio .wav stocate pe cardul microSD prin amplificatorul SC8002B
  • Navigarea intre melodii prin butoanele PREV si NEXT
  • Pauza si reluarea redarii prin butonul PLAY/PAUSE
  • Controlul volumului in timp real prin potentiometrul slider HW-233
  • Vizualizarea nivelului de volum prin VU meter-ul format din 4 LED-uri (verde, galben, rosu)
  • Afisarea numelui melodiei curente, numarul track-ului si statusul pe display-ul OLED SSD1306

Concluzii

Proiectul a demonstrat cum un microcontroller simplu (ATmega328P) poate gestiona simultan mai multe periferice: stocare SPI, redare audio PWM, afisaj I2C si input utilizator GPIO/ADC.

Principala provocare tehnica a fost compatibilitatea intre biblioteca TMRpcm (care foloseste Timer1 prin intreruperi) si biblioteca de display (care poate bloca intreruperile in timpul scrierii). Solutia a fost folosirea modului U8X8 al bibliotecii U8g2, care scrie direct pe display fara buffer, fara a dezactiva intreruperile.

Bibliografie/Resurse

pm/prj2026/ciprian.popescu0411/daria.harabagiu.txt · Last modified: 2026/05/25 11:20 by daria.harabagiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0