Cuprins:

NeckCrusher (Pedală de efect montată pe chitară): 6 pași (cu imagini)
NeckCrusher (Pedală de efect montată pe chitară): 6 pași (cu imagini)

Video: NeckCrusher (Pedală de efect montată pe chitară): 6 pași (cu imagini)

Video: NeckCrusher (Pedală de efect montată pe chitară): 6 pași (cu imagini)
Video: JAMES HETFIELD REACTION WHEN KIRK HAMMETT PLAYS KILLER RIFF #METALLICA #shorts 2024, Noiembrie
Anonim
NeckCrusher (Pedală de efect montată pe chitară)
NeckCrusher (Pedală de efect montată pe chitară)

Dale Rosen, Carlos Reyes și Rob Koch

DATT 2000

Pasul 1: Problemă

Problemă
Problemă

Pedalele de chitară restricționează muzicianul la platforma pedalei. Soluție: Construiți și încorporați o funcționalitate a pedalelor de chitară în chitara însăși. Acest lucru îi permite muzicianului să se deplaseze liber pe scenă, folosind gâtul chitarei ca interfață în loc să fie limitat la locația pedalei. Vom explora acest concept prin crearea unui dispozitiv de tip bitcrusher / sample rate effect.

Pasul 2: Contextul proiectului

Contextul proiectului
Contextul proiectului

Există multe pedale de chitară folosite de muzicieni pentru a manipula sunetul chitarelor lor. Cele mai multe dintre acestea sunt de obicei în unități de tip rack sau stomp box, restrângând astfel controlul efectelor la locația unității de efecte. Montarea dispozitivului pe chitară permite jucătorilor să controleze parametrii efectului oriunde pe scenă. Aceasta înseamnă că nu vor fi restricționați și pot avea libertatea de a se deplasa pentru performanța lor.

Deoarece Arduino este capabil doar de sunet pe 8 biți, este imposibil să efectuați procesarea semnalului de înaltă fidelitate. Acesta este motivul pentru care am ales efectele pe care le-am făcut, deoarece acestea se bazează pe crearea unui sunet distorsionat de fidelitate redusă. Acestea sunt singurele efecte care sunt în mod rezonabil posibile cu un Arduino.

Pasul 3: Piese / Instrumente necesare

Piese / Instrumente necesare
Piese / Instrumente necesare

● Burghiu de impact

● Freze de sârmă

● Dispozitive de despicare

● Fier de lipit

● Pistol de lipit fierbinte

● Pompa de dezlipire

● Chitară ● Carcasă

● lipit

● Hot Glue

● Arduino

● Proto Board

● Sârmă acoperită

● Mufe audio (x2)

● Potențiometre (x3)

● Condensatoare: 2,2 uF (x2)

● Sârmă de cupru expusă

● Șuruburi (M3.5 * 8)

● Rezistențe: 1 k, 10 k, 1,2 k, 1,5 k, 390 k

● * Op Amp (LM358) / * Tranzistor (2N3442)

Pasul 4: Strategia tehnică

Strategia tehnică
Strategia tehnică

Circuite interne

Intrare ieșire

Trebuie să convertim semnalul audio provenit de la o chitară la ceva ce arduino poate folosi și modifica. Va trebui apoi să convertim semnalul care vine de la arduino înapoi într-un semnal audio. Arduino citește tensiuni de la 0V la 5V, semnalele audio sunt de la -1V la 1V. Aceste conversii se fac folosind rezistențe. Semnalul va fi convertit și în circuitul de ieșire.

Biblioteca Arduino: ArduinoDSP

Descrierea proiectului (interfață)

Butoane Buton 1: Rată de eșantionare

Buton 2: Concasor de biți

Buton 3: Bit Shifter

Pasul 5: Cod

Cod
Cod

#include „dsp.h”

#define cbi (sfr, bit) (_SFR_BYTE (sfr) & = ~ _BV (bit)) #define sbi (sfr, bit) (_SFR_BYTE (sfr) | = _BV (bit))

div32 boolean; div16 boolean;

f_sample boolean volatil; octet volatil badc0; octet volatil badc1; octet volatil ibb;

int fx1; int fx2; int fx3; int fx4;

int cnta; int icnt; int icnt1; int icnt2; int cnt2; int iw; int iw1; int iw2; octet bb;

octet dd [512]; // Matrice de memorie audio pe 8 biți

void setup () {setupIO ();

// reîncarcă val după 1 secundă fill_sinewave ();

// setați adc prescaler la 64 pentru frecvența de eșantionare 19kHz cbi (ADCSRA, ADPS2); sbi (ADCSRA, ADPS1); sbi (ADCSRA, ADPS0); // 8-Bit ADC în ADCH Register sbi (ADMUX, ADLAR); sbi (ADMUX, REFS0); cbi (ADMUX, REFS1); cbi (ADMUX, MUX0); cbi (ADMUX, MUX1); cbi (ADMUX, MUX2); cbi (ADMUX, MUX3); // Modul PWM Timer2 setat la PWM rapid cbi (TCCR2A, COM2A0); sbi (TCCR2A, COM2A1); sbi (TCCR2A, WGM20); sbi (TCCR2A, WGM21); // Configurare pentru Timer2 cbi (TCCR2B, WGM22); // Timer2 Clock Prescaler la: 1 sbi (TCCR2B, CS20); cbi (TCCR2B, CS21); cbi (TCCR2B, CS22); // Timer2 PWM Port Enable sbi (DDRB, 3); // cli (); cbi (TIMSK0, TOIE0); sbi (TIMSK2, TOIE2); iw1 = badc1;

}

bucla nulă () {

// verificați starea potențiometrului de efect și a comutatorului rotativ readKnobs ();

// ************* // *** Normal *** // *************

if (fx1 == 0 && fx2 == 0 && fx3 == 0 && fx4 == 0) {octet input = analogRead (stânga); ieșire (stânga, intrare); }

// ************* // *** Phasor *** // *************

dacă (fx4> 100) {

fx1 = 0; fx2 = 0; fx3 = 0;

while (! f_sample) {// wait for Sample Value from ADC} // Ciclul 15625 KHz = 64uSec PORTD = PORTD | 128; f_sample = false; bb = badc1; dd [icnt1] = bb; // scrie în buffer fx4 = iw * badc0 / 255; // eșantion întârziat la scară cu potențiometru iw1 = dd [icnt2]; // citiți buffer-ul de întârziere badc0 = badc0 / 20; // limitează valoarea la 512 icnt1 ++; icnt2 = icnt1 - badc0; icnt2 = icnt2 & 511; // index limită 0.. icnt1 = icnt1 & 511; // index limită 0..511 iw2 = iw1 + bb; iw2 = iw2 / 2; bb = iw2; OCR2A = bb; // Valoarea eșantionului la ieșirea PWM

PORTD = PORTD ^ 128; ieșire (stânga, PORTD); // ieșire}

// ************* // *** Flanger *** // ************* if (fx3> 100) {

fx1 = 0; fx2 = 0; fx4 = 0;

while (! f_sample) {// așteptați valoarea Sample din ADC} // Ciclu 15625 KHz = 64uSec

PORTD = PORTD | 128; f_sample = false; bb = dd [icnt]; // citiți buffer-ul de întârziere iw = 127 - bb; // offset scade fx3 = iw * badc0 / 255; // probă întârziată la scară cu potențiometru iw1 = 127 - badc1; // scăpați offset din noua mostră iw1 = iw1 + iw; // adaugă eșantion întârziat și eșantion nou dacă (iw1 127) iw1 = 127; // Limitator audio bb = 127 + iw1; // adaugă offset dd [icnt] = bb; // stochează eșantionul în bufferul audio icnt ++; icnt = icnt & 511; // limit bufferindex 0..511 OCR2A = bb; // Valoarea eșantionului la ieșirea PWM

PORTD = PORTD ^ 128; ieșire (stânga, PORTD); // Ieșire

} }

void readKnobs () {fx1 = analogRead (1); fx2 = analogRead (2); fx3 = analogRead (3); fx4 = analogRead (4);

}

void fill_sinewave () {float pi = 3.141592; float dx; plutitor fd; float fcnt; dx = 2 * pi / 512; // umpleți bufferarry-ul de 512 octeți pentru (iw = 0; iw <= 511; iw ++) {// cu 50 de perioade sinewawe fd = 127 * sin (fcnt); // ton fundamental fcnt = fcnt + dx; // în intervalul de la 0 la 2xpi și 1/512 trepte bb = 127 + fd; // adaugă dc offset la sinewawe dd [iw] = bb; // scrieți valoarea în matrice

} }

// ************************************************* ****************** // Timer2 Interrupt Service la 62,5 KHz // aici semnalul audio și pot este eșantionat într-o rată de: 16Mhz / 256/2/2 = 15625 Hz ISR (TIMER2_OVF_vect) {

PORTB = PORTB | 1;

div32 =! div32; // împărțiți frecvența timer2 / 2 la 31,25 kHz dacă (div32) {div16 =! div16; if (div16) {// eșantionează canalul 0 și 1 alternativ, astfel încât fiecare canal este eșantionat cu 15,6kHz badc0 = ADCH; // obțineți canalul ADC 0 sbi (ADMUX, MUX0); // setați multiplexorul la canalul 1} else {badc1 = ADCH; // obțineți canalul ADC 1 cbi (ADMUX, MUX0); // setați multiplexorul la canalul 0 f_sample = true; } ibb ++; ibb--; ibb ++; ibb--; // scurtă întârziere înainte de a începe conversia sbi (ADCSRA, ADSC); // începe următoarea conversie}

}

Pasul 6: Video

Probleme potențiale ● Pickup-ul este puțin prea slab pentru a alimenta circuitul - aveți nevoie de un amplificator op. - În videoclip am folosit un amplificator de semnal. (Cutia cenușie întinsă pe masă.)

Recomandat: