Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2025:rnedelcu:dan_andrei.cretu03 [2025/05/27 13:32]
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> ​
Line 41: Line 40:
 Listă de componente hardware Listă de componente hardware
  
-Microcontroller: ​STM32F103C8T6+Microcontroller: ​Arduino UNO R3
  
-Control ​analog2x 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):+}
  
-Am dezvoltat componenta software a poriectului in Arduino IDE, care s-a demonstrat util datorita usurintei de utilizare. +</​code>​
-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).+
  
-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. 
  
-Semnalul de la portul jack de input este aduc la o frecventa mai prietenoasa pentru arduino, unde este apoi prelucrat+ * Overdirve 
-Pentru prelucrarea semnalului ​in sine am folosit intreruperi,​ iar pentru transmiterea ​semnalului procesat ​mai departe spre portul ​de output am folosit PWM.+ 
 +<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 
 + 
 +#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.
  
-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 112: 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>​
  
pm/prj2025/rnedelcu/dan_andrei.cretu03.1748341971.txt.gz · Last modified: 2025/05/27 13:32 by dan_andrei.cretu03
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