This is an old revision of the document!
* Autor: Jumărea Ștefan Dorin - 331CC
Proiectul își propune realizarea unei pedale programabile pentru chitară. Pedala va modifica sunetul produs de chitară, va fi amplasată între chitară și amplificator, și va putea fi programată pentru a simula mai multe efecte. Vor exista butoane și switch-uri prin care se vor putea modifica efectele fără a se reprograma plăcuța.
La intrare, semnalul va trece printr-un set de filtre pentru a elimina parte din zgomot. Intrarea va fi amplificată, de la 2.8V (ieșirea pe cablu Jack) la 5V. Semnalul va intra apoi într-o intrare analogică, unde va fi modificat după cerințe. Semnalul de ieșire se va genera folosind PWM. Se vor afișa pe un LCD informații despre modul curent al pedalei.
Pentru pornirea/oprirea pedalei se va folosi un footswitch. Când pedala este oprită, se va face doar bypass la semnalul de intrare spre ieșire. Vor exista butoane și switch-uri ca intrări în Arduino.
Schema electrică:
Surse de inspirație schemă electrică:
Piesele folosite vor fi:
Se vor implementa mai multe efecte, printre care:
Pentru a realiza un efect de Volume Booster, se va prelua semnalul de la ADC și se va aduna la el o valoare pentru a modifica volumul:
input += booster_var;, unde booster_var este o variablilă ce se va modifica
folosind butoanele. Dacă booster_var este un întreg pozitiv, volumul va fi mărit, altfel va fi scăzut.
Pentru a se realiza un efect de Distortion, se vor selecta toate armonicele cu un volum mai mic ca o variabilă dată, și se vor ridica toate la un prag:
Mai multe detalii aici: https://en.wikipedia.org/wiki/Distortion#Harmonic_distortion
if (!digitalRead(PUSHBUTTON_2)) {
if (distortion_threshold < 32768)
distortion_threshold = distortion_threshold + 25;
}
if (!digitalRead(PUSHBUTTON_1)) {
if (distortion_threshold > 0)
distortion_threshold = distortion_threshold - 25;
}
if (input > distortion_threshold)
input = distortion_threshold;
Pentru a se realiza un efect de Pitch Shifter, se va modifica frecvența cu care este citit și transmis semnalul. Astfel se poate modifica pitch-ul semnalului, prin întârzierea transmiterii semnalului.
if (!digitalRead(PUSHBUTTON_2)) {
if (pitch_var < 500)
pitch_var = pitch_var + 25;
}
if (!digitalRead(PUSHBUTTON_1)) {
if (pitch_var > 0)
pitch_var = pitch_var - 25;
}
counter2++;
if (counter2 >= dist_variable) {
counter2 = 0;
// read input
...
// write output
...
}
Pentru a se realiza un efect de Chorus, se va combina semnalul primit cu o copie a sa, puțin întârziată. Efectul poate fi mai intens sau mai puțin intens în funcție de dimensiunea bufferului în care se reține copia semnalului.
if (!digitalRead(PUSHBUTTON_2)) {
if (chorus_counter < MAX_VALUE)
chorus_counter = chorus_counter + 1;
}
if (!digitalRead(PUSHBUTTON_1)) {
if (chorus_counter > MIN_VALUE)
chorus_counter = chorus_counter - 1;
}
ch_delay_cnt ++;
// Populate the buffer
if (ch_delay_cnt >= delay_depth) {
ch_delay_cnt = 0;
if (count_up) {
for (p = 0; p < buff_len + 1; p++)
chorusBuffer[delay_depth + p] = chorusBuffer[delay_depth - 1];
delay_depth = delay_depth + buff_len;
if (delay_depth > MAX_DELAY)
count_up = 0
} else {
delay_depth = delay_depth - buff_len;
if (delay_depth < MIN_DELAY)
count_up = 1
}
}
// send chorusBuffer[ch_delay_cnt] to output
Cod adaptat de la: https://github.com/ElectroSmash/pedalshield/blob/master/chorus_vibrato/chorus_vibrato.ino.