Indholdsfortegnelse:

NeckCrusher (guitarmonteret effektpedal): 6 trin (med billeder)
NeckCrusher (guitarmonteret effektpedal): 6 trin (med billeder)

Video: NeckCrusher (guitarmonteret effektpedal): 6 trin (med billeder)

Video: NeckCrusher (guitarmonteret effektpedal): 6 trin (med billeder)
Video: My first time using a tube screamer 2024, November
Anonim
NeckCrusher (effektmonteret pedal til guitar)
NeckCrusher (effektmonteret pedal til guitar)

Dale Rosen, Carlos Reyes og Rob Koch

DATT 2000

Trin 1: Problem

Problem
Problem

Guitarpedaler begrænser musikeren til pedalplatformen. Løsning: Byg og integrer en guitarpedalfunktion i selve guitaren. Dette giver musikeren mulighed for frit at bevæge sig over scenen ved at bruge guitarhalsen som en grænseflade i stedet for at være begrænset til pedalboardets placering. Vi vil undersøge dette koncept ved at oprette en bitcrusher/sample rate effekt -enhed.

Trin 2: Projektkontekst

Projektkontekst
Projektkontekst

Der er mange guitarpedaler, der bruges af musikere til at manipulere lyden af deres guitarer. De fleste af disse er sædvanligvis i rack-baserede eller stampe-boksenheder, hvilket begrænser kontrollen med effekterne til placeringen af effektenheden. Ved at montere enheden på guitaren kan spillerne kontrollere parametrene for effekten hvor som helst på scenen. Dette betyder, at de ikke bliver begrænset og kan have frihed til at bevæge sig rundt for deres præstationer.

Da Arduino kun er i stand til 8 bit lyd, er det umuligt at foretage signalbehandling i høj kvalitet. Derfor valgte vi de effekter, vi gjorde, da de er baseret på at skabe en forvrænget lyd med lav trofasthed. Dette er de eneste effekter, der er rimeligt mulige med en Arduino.

Trin 3: Dele / værktøjer påkrævet

Dele / værktøjer påkrævet
Dele / værktøjer påkrævet

● Slagbor

● Trådskærere

● Wire Strippers

● Loddejern

● Varmlimpistol

● Aflodningspumpe

● Guitar ● Kabinet

● Lodning

● Varm lim

● Arduino

● Proto Board

● Coated Wire

● Lydstik (x2)

● Potentiometre (x3)

● Kondensatorer: 2,2 uF (x2)

● Frilagt kobbertråd

● Skruer (M3,5 *8)

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

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

Trin 4: Teknisk strategi

Teknisk strategi
Teknisk strategi

Intern kredsløb

Input/Output

Vi skal konvertere lydsignalet fra en guitar til noget, arduinoen kan bruge og ændre. Vi bliver derefter nødt til at konvertere signalet, der kommer fra arduinoen tilbage til et lydsignal. Arduino læser spændinger fra 0V til 5V, lydsignaler er fra -1V til 1V. Disse konverteringer udføres ved hjælp af modstande. Signalet vil også blive konverteret i udgangskredsløbet.

Arduino bibliotek: ArduinoDSP

Projektbeskrivelse (grænseflade)

Knopper Knop 1: Prøvehastighed

Knop 2: Bitknuser

Knap 3: Bitskifter

Trin 5: Kode

Kode
Kode

#include "dsp.h"

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

boolsk div32; boolsk div16;

flygtig boolsk f_sample; flygtig byte badc0; flygtig byte badc1; flygtig 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]; // Lydhukommelsesarray 8-bit

ugyldig opsætning () {setupIO ();

// genindlæs bølge efter 1 sekund fill_sinewave ();

// indstil adc prescaler til 64 for 19 kHz samplingsfrekvens cbi (ADCSRA, ADPS2); sbi (ADCSRA, ADPS1); sbi (ADCSRA, ADPS0); // 8-bit 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 Mode indstillet til hurtig PWM cbi (TCCR2A, COM2A0); sbi (TCCR2A, COM2A1); sbi (TCCR2A, WGM20); sbi (TCCR2A, WGM21); // Opsætning til 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 () {

// kontrollere status for effektpotentiometeret og drejekontakten readKnobs ();

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

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

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

hvis (fx4> 100) {

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

mens (! f_sample) {// vent på prøveværdi fra ADC} // Cyklus 15625 KHz = 64uSec PORTD = PORTD | 128; f_sample = falsk; bb = badc1; dd [icnt1] = bb; // skriv til buffer fx4 = iw * badc0 / 255; // skala forsinket prøve med potentiometer iw1 = dd [icnt2]; // læs forsinkelsesbufferen badc0 = badc0 / 20; // grænseværdi til 512 icnt1 ++; icnt2 = icnt1 - badc0; icnt2 = icnt2 & 511; // grænseindeks 0.. icnt1 = icnt1 & 511; // grænseindeks 0..511 iw2 = iw1 + bb; iw2 = iw2 / 2; bb = iw2; OCR2A = bb; // Prøveværdi til PWM -output

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

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

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

mens (! f_sample) {// vent på prøveværdi fra ADC} // Cyklus 15625 KHz = 64uSec

PORTD = PORTD | 128; f_sample = falsk; bb = dd [icnt]; // læs forsinkelsesbufferen iw = 127 - bb; // subtract offset fx3 = iw * badc0 / 255; // skala forsinket prøve med potentiometer iw1 = 127 - badc1; // subtrahere forskydning fra ny prøve iw1 = iw1 + iw; // tilføj forsinket prøve og ny prøve, hvis (iw1 127) iw1 = 127; // Lydbegrænser bb = 127 + iw1; // tilføj offset dd [icnt] = bb; // gem prøve i lydbuffer icnt ++; icnt = icnt & 511; // limit bufferindex 0..511 OCR2A = bb; // Prøveværdi til PWM -output

PORTD = PORTD ^ 128; output (venstre, PORTD); // Output

} }

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

}

void fill_sinewave () {float pi = 3.141592; float dx; flyde fd; float fcnt; dx = 2 * pi / 512; // fyld 512 byte bufferarry for (iw = 0; iw <= 511; iw ++) {// med 50 perioder sinewawe fd = 127 * sin (fcnt); // grundlæggende tone fcnt = fcnt + dx; // i området 0 til 2xpi og 1/512 trin bb = 127 + fd; // tilføj dc offset til sinewawe dd [iw] = bb; // skriv værdi i array

} }

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

PORTB = PORTB | 1;

div32 =! div32; // divider timer2 frekvens / 2 til 31,25 kHz hvis (div32) {div16 =! div16; hvis (div16) {// prøvekanal 0 og 1 skiftevis, så hver kanal samples med 15,6 kHz badc0 = ADCH; // få ADC kanal 0 sbi (ADMUX, MUX0); // indstil multiplexer til kanal 1} else {badc1 = ADCH; // få ADC kanal 1 cbi (ADMUX, MUX0); // indstil multiplexer til kanal 0 f_sample = true; } ibb ++; ibb--; ibb ++; ibb--; // kort forsinkelse før konverteringsstart sbi (ADCSRA, ADSC); // start næste konvertering}

}

Trin 6: Video

Potentielle problemer ● Pickup er lidt for svag til strømforsyning - har brug for en op -forstærker. - I videoen brugte vi en signalforstærker. (Den grå æske, der ligger på bordet.)

Anbefalede: