This shows you the differences between two versions of the page.
pm:prj2025:rnedelcu:dan_andrei.cretu03 [2025/05/27 13:26] dan_andrei.cretu03 [Introducere] |
pm:prj2025:rnedelcu:dan_andrei.cretu03 [2025/05/28 14:57] (current) dan_andrei.cretu03 [Rezultate Obţinute] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | Pedală de efect pentru chitară electrică | + | ===== Pedală de efect pentru chitară electrică ===== |
- | ===== Introducere ===== | + | |
- | <note tip> | + | <note tip> |
Acest proiect constă în realizarea unei pedale de efect audio pentru chitară electrică, care aplică mai multe efecte sonore: | Acest proiect constă în realizarea unei pedale de efect audio pentru chitară electrică, care aplică mai multe efecte sonore: | ||
- | Overdrive – pentru a satura semnalul și a obține un sunet distorsionat, specific rock-ului clasic | + | Overdrive – pentru a satura semnalul și a obține un sunet distorsionat, specific rock-ului clasic. |
- | Tremolo – pentru a modula volumul semnalului audio într-o manieră periodică | + | Tremolo – pentru a modula volumul semnalului audio într-o manieră periodică. |
- | Reverb - simuleaza modul in care sunetul se reflecta si se estompeaza intr-un spatiu inchis | + | Reverb – simulează modul în care sunetul se reflectă și se estompează într-un spațiu închis. |
- | Efectele sunt controlate de un microcontroller Arduino UNO R3, folosind componente precum DAC (digital to analog converter), PWM (pentru modularea semnalului audio) și GPIO (pentru controlul selectiei efectelor prin butoane). | + | Efectele sunt controlate de un microcontroler Arduino UNO R3, folosind componente precum DAC (digital to analog converter), PWM (pentru modularea semnalului audio) și GPIO (pentru controlul selecției efectelor prin butoane). |
Scopul proiectului este de a crea o pedală de chitară digitală, compactă și personalizabilă, care poate fi utilizată în locul unor pedale comerciale, costisitoare sau rigide ca funcționalitate. | Scopul proiectului este de a crea o pedală de chitară digitală, compactă și personalizabilă, care poate fi utilizată în locul unor pedale comerciale, costisitoare sau rigide ca funcționalitate. | ||
Line 19: | Line 18: | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | <note tip> | + | <note tip> Proiectul meu presupune realizarea unei pedale de efect pentru chitară electrică care include efecte audio clasice, precum overdrive și tremolo. Scopul pedalei este de a îmbunătăți experiența sonoră a chitaristului, aducând un sunet distorsionat (overdrive) și un efect de modulație al volumului (tremolo). Pedala va fi controlată printr-un microcontroler care va procesa semnalul audio. |
- | Proiectul meu presupune realizarea unei pedale de efect pentru chitară electrică care include două efecte audio clasice: overdrive și tremolo. Scopul pedalei este de a îmbunătăți experiența sonoră a chitaristului, aducând un sunet distorsionat (overdrive) și un efect de modulație al volumului (tremolo). Pedala va fi controlată printr-un microcontroller care va procesa semnalul audio și va permite ajustarea parametrilor efectelor prin potențiometre. | + | |
Pedala va include următoarele module: | Pedala va include următoarele module: | ||
- | * Intrare și ieșire audio: Semnalul audio al chitarei va fi preluat și trimis prin intermediul jack-urilor audio standard. | + | Intrare și ieșire audio: Semnalul audio al chitarei va fi preluat și trimis prin intermediul jack-urilor audio standard. |
- | * Microcontroller: Modulul principal de procesare a semnalului, care controlează efectele de overdrive și tremolo, prin algoritmi software. | + | Microcontroler: Modulul principal de procesare a semnalului, care controlează efectele, prin algoritmi software. |
- | * Control prin potențiometre: Utilizatorul va putea ajusta intensitatea overdrive-ului și rata/depth-ul tremolo-ului. | + | Selecție: Efectele pot fi selectate cu ajutorul unui buton. |
- | + | ||
- | * Interfață vizuală: Va include un display LCD/LED care va afișa informații despre statusul efectului activ și setările curente. | + | |
Interacțiunea dintre module: | Interacțiunea dintre module: | ||
- | Semnalul audio intră în sistem prin jack-ul de intrare, este procesat de microcontroller, iar semnalul procesat iese prin jack-ul de ieșire. | + | Semnalul audio intră în sistem prin jack-ul de intrare, este procesat de microcontroler, iar semnalul procesat iese prin jack-ul de ieșire. |
- | Utilizatorul poate ajusta efectele în timp real folosind potențiometrele. | + | Utilizatorul poate ajusta efectele în timp real folosind butoane. |
- | Microcontrollerul controlează aplicațiile de overdrive și tremolo prin algoritmi, iar statusul și setările sunt vizualizate pe interfața vizuală. | + | Microcontrolerul controlează aplicațiile prin algoritmi. |
</note> | </note> | ||
Line 45: | Line 40: | ||
Listă de componente hardware | Listă de componente hardware | ||
- | Microcontroller: STM32F103C8T6 | + | Microcontroller: Arduino UNO R3 |
- | Control analog: 2x Potențiometre liniare 10kΩ – pentru reglaj: gain (overdrive) și rate/Depth (tremolo) | + | Control: Buton simplu |
- | Intrare/ieșire audio: | + | Intrare/ieșire audio: 2x Jack mono 6.35mm (1/4”) cu pini PCB – pentru intrare/ieșire chitară |
- | * 2x Jack mono 6.35mm (1/4”) cu pini PCB – pentru intrare/ieșire chitară | + | |
- | + | ||
- | * 2x Condensatori de cuplare audio (100nF – 1µF) – blocare componentă DC | + | |
- | Rezistențe 10kΩ – 100kΩ – pentru atenuare și biasare semnal audio | + | Rezistențe si condensatoare pentru atenuare si filtrarea semnalului |
- | Overdrive stage: | + | Overdrive stage: DAC, unde ma intereseaza in mod special amplificatorul operational si diodele pentru amplificarea si clipping-ul semnalului |
- | * 2x Diodă 1N4148 / LED-uri rosii (clipping simetric) – pentru distorsionare semnal | + | |
- | * Op-amp (ex: LM358, TL072, NE5532) – opțional, dacă vrei overdrive analog (în loc de simulare digitală) | + | Fire |
- | Tremolo stage: | + | Rezistenta de 5k legata la masa creeaza un divizor de tensiune, stabilizand semnalul ce vine de la chitara. |
- | PWM pin de la microcontroller – pentru modulație volum | + | |
- | * 1x MOSFET N-channel (ex: 2N7000 sau IRF540N) – control volum semnal | + | Condensatorul de 0.47 µF de la intrare protejeaza restul componentelor de tensiuni nedorite si pastreaza numai variatiile audio utile. (cel putin in teorie) |
- | * 1x Condensator electrolitic (10µF – 100µF) – smoothing PWM dacă ai nevoie | + | Filtrul trece jos de la iesire elimina zgomotele nedorite. |
- | Alte periferice: | + | {{:pm:prj2025:rnedelcu:hardware_pedala.jpeg?600|}} |
- | * LCD I2C 16x2 – afișaj pentru parametri efect | + | </note> |
- | * Encoder rotativ sau butoane – opțional, pentru schimbare moduri/parametri | + | ===== Software Design ===== |
- | * Buzzer piezo – opțional, semnal de pornire/operații | ||
- | Alimentare: | + | <note tip> |
- | * Sursă de alimentare 9V DC sau baterie | + | Software-ul este scris în limbajul Arduino și rulează pe un microcontroller Arduino UNO R3. Acesta procesează semnalul audio de la o chitară electrică în timp real și aplică unul dintre cele cinci efecte sonore: bypass, overdrive, tremolo și reverb. |
- | * Regulator de tensiune 3.3V/5V (AMS1117 sau LM7805) – în funcție de cerințele microcontrollerului | + | Structura principală a programului include: |
- | Conectică & prototipare: | + | Citirea semnalului audio analogic de la chitară (pin A0). |
- | * Breadboard mare | + | |
- | * Fire jumper | + | <code c++> |
+ | lastButtonState = buttonState; | ||
- | * Pin headers | + | unsigned int raw = analogRead(ADC_PIN); |
+ | raw = (raw + 1) / 4 - 1; | ||
- | * Fire audio ecranate (pentru conexiuni curate) | + | unsigned int out = applyEffect(((float)raw) / SIGNAL_MAX) * SIGNAL_MAX; |
+ | </code> | ||
- | * LED pentru stare sistem | + | Prelucrarea semnalului prin funcții specifice fiecărui efect audio (distorsiune, tremolo, reverb etc.). |
- | Rezistență 330Ω pentru LED | + | * Tremolo |
- | {{:pm:prj2025:rnedelcu:hardware_dan.jpeg?400|}} | + | <code c++> |
- | </note> | + | |
- | ===== Software Design ===== | + | int index = 0; |
+ | float applyTremolo(float x) { | ||
+ | // version 1 | ||
+ | index++; | ||
+ | float Fs = TIMER / 8.0f; | ||
+ | float Fx = 5.0f; | ||
+ | float alpha = 0.25f; | ||
+ | float trem = (1.1f + alpha * sin(2.0f * M_PI * index * (Fx / Fs))); | ||
- | <note tip> | + | return trem * x * 2.0f; |
- | Descrierea codului aplicaţiei (firmware): | + | } |
+ | |||
+ | </code> | ||
+ | |||
+ | |||
+ | * Overdirve | ||
+ | |||
+ | <code c++> | ||
+ | float applyDistortion(float x) { | ||
+ | x *= 1.75f; | ||
+ | |||
+ | if (x > 1.0f) x = 1.0f; | ||
+ | if (x < 0.0f) x = 0.0f; | ||
+ | |||
+ | float y; | ||
+ | if (x < 0.2f) | ||
+ | y = 0.0f; | ||
+ | else if (x > 0.7f) | ||
+ | y = 1.0f; | ||
+ | else | ||
+ | y = x * x * (3 - 2 * x); // Smooth curve in between | ||
+ | |||
+ | return y; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | * Reverb | ||
+ | |||
+ | <code c++> | ||
+ | uint8_t reverbBuffer[REVERB_BUFFER_SIZE]; | ||
+ | int reverbIndex = 0; | ||
+ | float applyReverb(float x) { | ||
+ | // Read the delayed sample from buffer | ||
+ | int delayedIndex = (reverbIndex - REVERB_DELAY + REVERB_BUFFER_SIZE) % REVERB_BUFFER_SIZE; | ||
+ | float delayedSample = reverbBuffer[delayedIndex] / 255.0f; | ||
+ | |||
+ | // Mix current input with decayed delayed sample | ||
+ | float out = x + REVERB_DECAY * delayedSample; | ||
+ | |||
+ | // Store current output in the buffer | ||
+ | reverbBuffer[reverbIndex] = (uint8_t)(adjustAmplitude(out) * 255); | ||
+ | reverbIndex = (reverbIndex + 1) % REVERB_BUFFER_SIZE; | ||
+ | |||
+ | return adjustAmplitude(out); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Scrierea semnalului procesat pe un DAC extern (PCF8591) pentru ieșirea audio analogică. | ||
+ | |||
+ | Controlul efectului activ printr-un buton fizic conectat la pinul A1 – fiecare apăsare schimbă efectul curent. | ||
+ | |||
+ | <code c++> | ||
+ | int buttonState = digitalRead(BUTTON); | ||
+ | |||
+ | if (lastButtonState == HIGH && buttonState == LOW) { | ||
+ | currentEffect = (currentEffect + 1) % MAX_EFFECT; // Next effect | ||
+ | Serial.println(currentEffect); | ||
+ | delay(200); // Debounce simplu | ||
+ | } | ||
+ | |||
+ | lastButtonState = buttonState; | ||
+ | </code> | ||
+ | |||
+ | Algoritmi de procesare audio implementați în funcții dedicate fiecărui efect, folosind formule matematice simple și buffer circular (pentru reverb). | ||
+ | |||
+ | <code c++> | ||
+ | #define ADC_PIN A0 // Analog input from guitar signal | ||
+ | #define BUTTON A1 | ||
+ | #define SIGNAL_MAX 255 | ||
+ | |||
+ | #define TIMER 15625 | ||
- | Am dezvoltat componenta software a poriectului in Arduino IDE, care s-a demonstrat util datorita usurintei de utilizare. | + | #define REVERB_BUFFER_SIZE 1000 // Adjust based on available RAM |
- | In procesul de adaptare a hardware-ului la nevoile proiectului a fost foarte utila optiunea de plotting din aceasta aplicatie, deoarece m-a ajutat sa aleg cele mai bune valori pentru condensatori si rezistente (din partea de prelucrare a semnalului din hardware). | + | #define REVERB_DECAY 0.75f // How much of the echo is preserved |
+ | #define REVERB_DELAY 800 // How far back in time (in samples) the echo is | ||
- | In ceea ce priveste implementarea efectului de overdrive, acesta este activat de apasarea unui buton ce modifica o variabila in cod ce marcheaza folosirea efectului de overdrive. | + | #define MAX_EFFECT 5 |
+ | </code> | ||
- | Semnalul de la portul jack de input este aduc la o frecventa mai prietenoasa pentru arduino, unde este apoi prelucrat. | + | Acest software permite utilizatorului să comute dinamic între efecte și să obțină sunete expresive folosind doar hardware minim și procesare digitală în timp real. |
- | Pentru prelucrarea semnalului in sine am folosit intreruperi, iar pentru transmiterea semnalului procesat mai departe spre portul de output am folosit PWM. | + | |
- | In functia ce prelucreaza semnalul folosesc niste constante pentru gain si boostul semnalului, care sunt apoi aplicate fie pe semnalul cu efect de overdrive, fie pe semnalul curat. | ||
</note> | </note> | ||
Line 116: | Line 183: | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Dupa multe incercari, am reusit sa ajung la o versiune finala. |
+ | |||
+ | Partea de hardware ramas mai simpla decat ce mi-as fi dorit, fara valori reglate prin potentiometru. | ||
+ | |||
+ | Am experimentat cu mai multe efecte, cele mai reusite fiind cel de distors, tremolo si reverb. | ||
+ | |||
+ | Nu am reusit sa filtrez suficient de bine semnalul astfel incat semnalul ajuns la amplificator sa fie curat. | ||
+ | |||
+ | * ADC - analogRead() | ||
+ | |||
+ | * I2C - comunicarea cu DAC-ul | ||
+ | |||
+ | * GPIO - pinMode | ||
+ | |||
+ | * timere pentru tremolo | ||
</note> | </note> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | ===== Download ===== | + | Nu am. |
+ | }===== Download ===== | ||
<note warning> | <note warning> | ||
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | {{:pm:prj2025:rnedelcu:proiect_hau.zip|}} |
- | + | ||
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | |
</note> | </note> | ||