This shows you the differences between two versions of the page.
pm:prj2025:rnedelcu:dan_andrei.cretu03 [2025/04/29 09:41] 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ă două 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ă, controlabilă de utilizator | + | Reverb – simulează modul în care sunetul se reflectă și se estompează într-un spațiu închis. |
- | Efectele sunt controlate de un microcontroller STM32, folosind periferice precum ADC (pentru citirea potențiometrelor care controlează intensitatea fiecărui efect), PWM (pentru modularea semnalului audio în cazul tremolo-ului) și GPIO (pentru controlul on/off al efectelor prin butoane sau footswitch). | + | 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 17: | 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. |
- | O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. | + | 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. | ||
+ | |||
+ | 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. | ||
- | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | + | Microcontrolerul controlează aplicațiile prin algoritmi. |
</note> | </note> | ||
Line 28: | 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ă | + | |
+ | Rezistențe si condensatoare pentru atenuare si filtrarea semnalului | ||
- | - 2x Condensatori de cuplare audio (100nF – 1µF) – blocare componentă DC | + | Overdrive stage: DAC, unde ma intereseaza in mod special amplificatorul operational si diodele pentru amplificarea si clipping-ul semnalului |
- | Rezistențe 10kΩ – 100kΩ – pentru atenuare și biasare semnal audio | + | Fire |
- | Overdrive stage: | + | Rezistenta de 5k legata la masa creeaza un divizor de tensiune, stabilizand semnalul ce vine de la chitara. |
- | - 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ă) | + | Condensatorul de 0.47 µF de la intrare protejeaza restul componentelor de tensiuni nedorite si pastreaza numai variatiile audio utile. (cel putin in teorie) |
- | Tremolo stage: | + | Filtrul trece jos de la iesire elimina zgomotele nedorite. |
- | PWM pin de la microcontroller – pentru modulație volum | + | |
- | - 1x MOSFET N-channel (ex: 2N7000 sau IRF540N) – control volum semnal | + | {{:pm:prj2025:rnedelcu:hardware_pedala.jpeg?600|}} |
+ | </note> | ||
- | - 1x Condensator electrolitic (10µF – 100µF) – smoothing PWM dacă ai nevoie | + | ===== Software Design ===== |
- | Alte periferice: | ||
- | - LCD I2C 16x2 – afișaj pentru parametri efect | ||
- | - Encoder rotativ sau butoane – opțional, pentru schimbare moduri/parametri | + | <note tip> |
+ | 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. | ||
- | - Buzzer piezo – opțional, semnal de pornire/operații | + | Structura principală a programului include: |
- | Alimentare: | + | Citirea semnalului audio analogic de la chitară (pin A0). |
- | - Sursă de alimentare 9V DC sau baterie | + | |
- | - Regulator de tensiune 3.3V/5V (AMS1117 sau LM7805) – în funcție de cerințele microcontrollerului | + | <code c++> |
+ | lastButtonState = buttonState; | ||
- | Conectică & prototipare: | + | unsigned int raw = analogRead(ADC_PIN); |
- | - Breadboard mare | + | raw = (raw + 1) / 4 - 1; |
- | - Fire jumper | + | unsigned int out = applyEffect(((float)raw) / SIGNAL_MAX) * SIGNAL_MAX; |
+ | </code> | ||
- | - Pin headers | + | Prelucrarea semnalului prin funcții specifice fiecărui efect audio (distorsiune, tremolo, reverb etc.). |
- | - Fire audio ecranate (pentru conexiuni curate) | + | * Tremolo |
- | - LED pentru stare sistem | + | <code c++> |
- | Rezistență 330Ω pentru LED | + | 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))); | ||
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | return trem * x * 2.0f; |
- | * diagrame de semnal | + | } |
- | * rezultatele simulării | + | |
- | </note> | + | |
- | ===== Software Design ===== | + | </code> |
- | <note tip> | + | * Overdirve |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | <code c++> |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | float applyDistortion(float x) { |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | x *= 1.75f; |
- | * (etapa 3) surse şi funcţii implementate | + | |
+ | 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 | ||
+ | |||
+ | #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 | ||
+ | </code> | ||
+ | |||
+ | 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. | ||
</note> | </note> | ||
Line 96: | 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> | ||