Innholdsfortegnelse:

NeckCrusher (gitarmontert effektpedal): 6 trinn (med bilder)
NeckCrusher (gitarmontert effektpedal): 6 trinn (med bilder)

Video: NeckCrusher (gitarmontert effektpedal): 6 trinn (med bilder)

Video: NeckCrusher (gitarmontert effektpedal): 6 trinn (med bilder)
Video: Дневник хранящий жуткие тайны. Переход. Джеральд Даррелл. Мистика. Ужасы 2024, November
Anonim
NeckCrusher (gitarmontert effektpedal)
NeckCrusher (gitarmontert effektpedal)

Dale Rosen, Carlos Reyes og Rob Koch

DATT 2000

Trinn 1: Problem

Problem
Problem

Gitarpedaler begrenser musikeren til pedalplattformen. Løsning: Bygg og integrer en gitarpedalfunksjonalitet i selve gitaren. Dette gjør at musikeren kan bevege seg fritt over scenen, ved å bruke gitarhalsen som et grensesnitt i stedet for å være begrenset til plasseringen av pedalbrettet. Vi vil utforske dette konseptet ved å lage en bitcrusher/sample rate effekt -enhet.

Trinn 2: Prosjektkontekst

Prosjektkontekst
Prosjektkontekst

Det er mange gitarpedaler som brukes av musikere for å manipulere lyden av gitarene deres. De fleste av disse er vanligvis i rackbaserte eller stampboks-enheter, og begrenser derfor kontrollen over effektene til plasseringen av effektenheten. Ved å montere enheten på gitaren kan spillerne kontrollere parametrene for effekten hvor som helst på scenen. Dette betyr at de ikke vil være begrenset og kan ha frihet til å bevege seg rundt for prestasjonene sine.

Siden Arduino bare er i stand til 8 -biters lyd, er det umulig å utføre signalbehandling av høy kvalitet. Dette er grunnen til at vi valgte effektene vi gjorde, ettersom de er basert på å skape en forvrengt lyd med lav trofasthet. Dette er de eneste effektene som er rimelig mulig med en Arduino.

Trinn 3: Deler / verktøy nødvendig

Deler / verktøy nødvendig
Deler / verktøy nødvendig

● Slagbor

● Wire Cutters

● Wire Strippers

● Loddejern

● Varmlimpistol

● Desolderingspumpe

● Gitar ● Vedlegg

● Lodding

● Varm lim

● Arduino

● Proto Board

● Belagt wire

● Lydkontakter (x2)

● Potensiometre (x3)

● Kondensatorer: 2,2 uF (x2)

● Frilagt kobbertråd

● Skruer (M3,5 *8)

● Motstander: 1 k, 10 k, 1,2 k, 1,5 k, 390 k

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

Trinn 4: Teknisk strategi

Teknisk strategi
Teknisk strategi

Intern kretsløp

Inngang/utgang

Vi må konvertere lydsignalet fra en gitar til noe arduinoen kan bruke og endre. Vi må da konvertere signalet som kommer fra arduinoen tilbake til et lydsignal. Arduino leser spenninger fra 0V til 5V, lydsignaler er fra -1V til 1V. Disse konverteringene gjøres ved hjelp av motstander. Signalet vil også bli konvertert i utgangskretsen.

Arduino bibliotek: ArduinoDSP

Prosjektbeskrivelse (grensesnitt)

Knotter Knott 1: Prøvehastighet

Knott 2: Bitknuser

Knott 3: Bitskifter

Trinn 5: Kode

Kode
Kode

#inkluder "dsp.h"

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

boolsk div32; boolsk div16;

flyktig boolsk f_sample; flyktig byte badc0; flyktig byte badc1; flyktig byte 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; byte bb;

byte dd [512]; // Lydminnearray 8-bit

ugyldig oppsett () {setupIO ();

// last inn på nytt etter 1 sekund fill_sinewave ();

// sett adc prescaler til 64 for 19 kHz samplingsfrekvens cbi (ADCSRA, ADPS2); sbi (ADCSRA, ADPS1); sbi (ADCSRA, ADPS0); // 8-bits ADC i ADCH Register sbi (ADMUX, ADLAR); sbi (ADMUX, REFS0); cbi (ADMUX, REFS1); cbi (ADMUX, MUX0); cbi (ADMUX, MUX1); cbi (ADMUX, MUX2); cbi (ADMUX, MUX3); // Timer2 PWM -modus satt til rask PWM cbi (TCCR2A, COM2A0); sbi (TCCR2A, COM2A1); sbi (TCCR2A, WGM20); sbi (TCCR2A, WGM21); // Oppsett for Timer2 cbi (TCCR2B, WGM22); // Timer2 Clock Prescaler til: 1 sbi (TCCR2B, CS20); cbi (TCCR2B, CS21); cbi (TCCR2B, CS22); // Timer2 PWM Port Aktiver sbi (DDRB, 3); // cli (); cbi (TIMSK0, TOIE0); sbi (TIMSK2, TOIE2); iw1 = badc1;

}

void loop () {

// sjekk status for effektpotensiometer og dreiebryter readKnobs ();

// ************* // ***Vanlig*** // *************

hvis (fx1 == 0 && fx2 == 0 && fx3 == 0 && fx4 == 0) {byte input = analogRead (venstre); utgang (venstre, inngang); }

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

hvis (fx4> 100) {

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

mens (! f_sample) {// vent på prøveverdi fra ADC} // syklus 15625 KHz = 64uSec PORTD = PORTD | 128; f_sample = false; bb = badc1; dd [icnt1] = bb; // skrive til buffer fx4 = iw * badc0 / 255; // skala forsinket prøve med potensiometer iw1 = dd [icnt2]; // les forsinkelsesbufferen badc0 = badc0 / 20; // grenseverdi til 512 icnt1 ++; icnt2 = icnt1 - badc0; icnt2 = icnt2 & 511; // grenseindeks 0.. icnt1 = icnt1 & 511; // grenseindeks 0..511 iw2 = iw1 + bb; iw2 = iw2 / 2; bb = iw2; OCR2A = bb; // Prøveverdi til PWM -utgang

PORTD = PORTD ^ 128; utgang (venstre, PORTD); // Output}

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

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

mens (! f_sample) {// vent på prøveverdi fra ADC} // syklus 15625 KHz = 64uSec

PORTD = PORTD | 128; f_sample = false; bb = dd [icnt]; // les forsinkelsesbufferen iw = 127 - bb; // subtract offset fx3 = iw * badc0 / 255; // skala forsinket prøve med potensiometer iw1 = 127 - badc1; // subtrahere offset fra ny prøve iw1 = iw1 + iw; // legg til forsinket prøve og ny prøve hvis (iw1 127) iw1 = 127; // Lydbegrensning bb = 127 + iw1; // legg til offset dd [icnt] = bb; // lagre prøve i lydbuffer icnt ++; icnt = icnt & 511; // limit bufferindex 0..511 OCR2A = bb; // Prøveverdi til PWM -utgang

PORTD = PORTD ^ 128; utgang (venstre, PORTD); // Utgang

} }

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

}

void fill_sinewave () {float pi = 3.141592; flyte dx; flyte fd; float fcnt; dx = 2 * pi / 512; // fyll 512 byte bufferarry for (iw = 0; iw <= 511; iw ++) {// med 50 perioder sinewawe fd = 127 * sin (fcnt); // grunnleggende tone fcnt = fcnt + dx; // i området 0 til 2xpi og 1/512 trinn bb = 127 + fd; // legg dc offset til sinewawe dd [iw] = bb; // skrive verdi i array

} }

// ************************************************ ****************** // Timer2 Interrupt Service ved 62,5 KHz // her samles lyd- og pottesignalet i en hastighet på: 16Mhz / 256 /2 /2 = 15625 Hz ISR (TIMER2_OVF_vekt) {

PORTB = PORTB | 1;

div32 =! div32; // dele timer2 frekvens / 2 til 31,25 kHz hvis (div32) {div16 =! div16; hvis (div16) {// prøvekanal 0 og 1 vekselvis slik at hver kanal samples med 15,6 kHz badc0 = ADCH; // få ADC -kanal 0 sbi (ADMUX, MUX0); // sett multiplexer til kanal 1} else {badc1 = ADCH; // få ADC kanal 1 cbi (ADMUX, MUX0); // sett multiplexer til kanal 0 f_sample = true; } ibb ++; ibb--; ibb ++; ibb--; // kort forsinkelse før konvertering sbi (ADCSRA, ADSC) startes; // start neste konvertering}

}

Trinn 6: Video

Potensielle problemer ● Pickup er litt for svak til å gi strømkrets - trenger en forsterker. - I videoen brukte vi en signalforsterker. (Den grå boksen som ligger på bordet.)

Anbefalt: