This is an old revision of the document!
Pedală de efect pentru chitară electrică
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ă.
Reverb – simulează modul în care sunetul se reflectă și se estompează într-un spațiu închis.
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.
Ideea a pornit din pasiunea pentru muzică și electronica audio, dar și din dorința de a explora modul în care microcontrolerele pot prelucra semnal analogic și pot genera efecte sonore în timp real.
Intrare și ieșire audio: Semnalul audio al chitarei va fi preluat și trimis prin intermediul jack-urilor audio standard.
Microcontroler: Modulul principal de procesare a semnalului, care controlează efectele, prin algoritmi software.
Selecție: Efectele pot fi selectate cu ajutorul unui buton.
Interacțiunea dintre module: 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 butoane.
Microcontrolerul controlează aplicațiile prin algoritmi.
Microcontroller: Arduino UNO R3
Control: Buton simplu
Intrare/ieșire audio: 2x Jack mono 6.35mm (1/4”) cu pini PCB – pentru intrare/ieșire chitară
Rezistențe si condensatoare pentru atenuare si filtrarea semnalului
Overdrive stage: DAC, unde ma intereseaza in mod special amplificatorul operational si diodele pentru amplificarea si clipping-ul semnalului
Fire
Structura principală a programului include:
Citirea semnalului audio analogic de la chitară (pin A0).
lastButtonState = buttonState; unsigned int raw = analogRead(ADC_PIN); raw = (raw + 1) / 4 - 1; unsigned int out = applyEffect(((float)raw) / SIGNAL_MAX) * SIGNAL_MAX;
Prelucrarea semnalului prin funcții specifice fiecărui efect audio (distorsiune, tremolo, reverb etc.).
* Tremolo
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))); return trem * x * 2.0f; }
* Overdirve
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; }
* Reverb
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); }
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.
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;
Algoritmi de procesare audio implementați în funcții dedicate fiecărui efect, folosind formule matematice simple și buffer circular (pentru reverb).
#define ADC_PIN A0 // Analog input from guitar signal #define BUTTON A1 #define SIGNAL_MAX 255 #define TIMER 15625 #define REVERB_BUFFER_SIZE 1000 // Adjust based on available RAM #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 #define MAX_EFFECT 5
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.
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.