Î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ă. |
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. |
Demo: Download demo video
Proiectul functioneaza complet si implementeaza urmatoarele functii:
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.
Resurse Hardware:
Resurse Software: