Innehållsförteckning:

NeckCrusher (gitarrmonterad effektpedal): 6 steg (med bilder)
NeckCrusher (gitarrmonterad effektpedal): 6 steg (med bilder)

Video: NeckCrusher (gitarrmonterad effektpedal): 6 steg (med bilder)

Video: NeckCrusher (gitarrmonterad effektpedal): 6 steg (med bilder)
Video: Neckcrusher 2024, Juli
Anonim
NeckCrusher (gitarrmonterad effektpedal)
NeckCrusher (gitarrmonterad effektpedal)

Dale Rosen, Carlos Reyes och Rob Koch

DATT 2000

Steg 1: Problem

Problem
Problem

Gitarrpedaler begränsar musiker till pedalplattformen. Lösning: Bygg in och bädda in en gitarrpedalfunktion i själva gitarren. Detta gör det möjligt för musiker att fritt röra sig över scenen, använda gitarrhalsen som ett gränssnitt istället för att vara begränsad till pedalbrädans plats. Vi kommer att utforska detta koncept genom att skapa en bitcrusher/sample rate effekt -enhet.

Steg 2: Projektkontext

Projektkontext
Projektkontext

Det finns många gitarrpedaler som används av musiker för att manipulera ljudet från deras gitarrer. De flesta av dessa är vanligtvis i rackbaserade eller stampboxar, vilket begränsar kontrollen av effekterna till effektenheten. Montering av enheten på gitarr gör det möjligt för spelare att styra parametrarna för effekten var som helst på scenen. Det betyder att de inte kommer att begränsas och kan ha friheten att röra sig för sina prestationer.

Eftersom Arduino bara kan 8 -bitars ljud är det omöjligt att göra signalbehandling med hög kvalitet. Det är därför vi valde de effekter vi gjorde, eftersom de bygger på att skapa ett förvrängt ljud med låg trohet. Detta är de enda effekter som rimligen är möjliga med en Arduino.

Steg 3: Delar / verktyg krävs

Delar / verktyg krävs
Delar / verktyg krävs

● Slagborr

● Trådskärare

● Wire Strippers

● Lödkolv

● Hotlimpistol

● Avlödningspump

● Gitarr ● Kapsling

● Lödning

● Hot Lim

● Arduino

● Proto Board

● Belagd tråd

● Ljuduttag (x2)

● Potentiometrar (x3)

● Kondensatorer: 2,2 uF (x2)

● Exponerad koppartråd

● Skruvar (M3,5 *8)

● Motstånd: 1 k, 10 k, 1,2 k, 1,5 k, 390 k

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

Steg 4: Teknisk strategi

Teknisk strategi
Teknisk strategi

Intern krets

Ingång/utgång

Vi måste konvertera ljudsignalen från en gitarr till något arduino kan använda och modifiera. Vi kommer då att behöva konvertera signalen från arduino tillbaka till en ljudsignal. Arduino läser spänningar från 0V till 5V, ljudsignaler är från -1V till 1V. Dessa omvandlingar görs med hjälp av motstånd. Signalen kommer också att konverteras i utgångskretsen.

Arduino bibliotek: ArduinoDSP

Projektbeskrivning (gränssnitt)

Knoppar Knopp 1: Provhastighet

Knopp 2: Bitkross

Vred 3: Bitskift

Steg 5: Kod

Koda
Koda

#inkludera "dsp.h"

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

booleska div32; booleska div16;

flyktigt booleskt f_prov; 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]; // Ljudminnesuppsättning 8-bitars

void setup () {setupIO ();

// ladda om våg efter 1 sekund fill_sinewave ();

// ställ in adc prescaler till 64 för 19 kHz samplingsfrekvens cbi (ADCSRA, ADPS2); sbi (ADCSRA, ADPS1); sbi (ADCSRA, ADPS0); // 8-bitars 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 -läge inställt på snabb PWM -cbi (TCCR2A, COM2A0); sbi (TCCR2A, COM2A1); sbi (TCCR2A, WGM20); sbi (TCCR2A, WGM21); // Inställning för Timer2 cbi (TCCR2B, WGM22); // Timer2 Clock Prescaler till: 1 sbi (TCCR2B, CS20); cbi (TCCR2B, CS21); cbi (TCCR2B, CS22); // Timer2 PWM Port Aktivera sbi (DDRB, 3); // cli (); cbi (TIMSK0, TOIE0); sbi (TIMSK2, TOIE2); iw1 = badc1;

}

void loop () {

// kontrollera status för effektpotentiometern och vridomkopplaren readKnobs ();

// ************* // ***Vanligt*** // *************

if (fx1 == 0 && fx2 == 0 && fx3 == 0 && fx4 == 0) {byte input = analogRead (vänster); utgång (vänster, ingång); }

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

om (fx4> 100) {

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

medan (! f_sample) {// vänta på provvärde från ADC} // Cykel 15625 KHz = 64uSec PORTD = PORTD | 128; f_sample = false; bb = badc1; dd [icnt1] = bb; // skriva till buffert fx4 = iw * badc0 / 255; // skala försenat prov med potentiometer iw1 = dd [icnt2]; // läs fördröjningsbufferten badc0 = badc0 / 20; // gränsvärde till 512 icnt1 ++; icnt2 = icnt1 - badc0; icnt2 = icnt2 & 511; // gränsindex 0.. icnt1 = icnt1 & 511; // gränsindex 0..511 iw2 = iw1 + bb; iw2 = iw2 / 2; bb = iw2; OCR2A = bb; // Provvärde till PWM -utdata

PORTD = PORTD ^ 128; utgång (vänster, PORTD); // Output}

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

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

medan (! f_sample) {// vänta på provvärde från ADC} // Cykel 15625 KHz = 64uSec

PORTD = PORTD | 128; f_sample = false; bb = dd [icnt]; // läs fördröjningsbufferten iw = 127 - bb; // subtrahera offset fx3 = iw * badc0 / 255; // skala försenat prov med potentiometer iw1 = 127 - badc1; // subtrahera förskjutning från nytt prov iw1 = iw1 + iw; // lägg till försenat prov och nytt prov om (iw1 127) iw1 = 127; // Ljudbegränsare bb = 127 + iw1; // lägg till offset dd [icnt] = bb; // lagra prov i ljudbuffert icnt ++; icnt = icnt & 511; // limit bufferindex 0..511 OCR2A = bb; // Provvärde till PWM -utdata

PORTD = PORTD ^ 128; utgång (vänster, PORTD); // Utmatning

} }

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

}

void fill_sinewave () {float pi = 3.141592; float dx; flyta fd; float fcnt; dx = 2 * pi / 512; // fyll 512 byte bufferarry för (iw = 0; iw <= 511; iw ++) {// med 50 perioder sinewawe fd = 127 * sin (fcnt); // grundton fcnt = fcnt + dx; // i intervallet 0 till 2xpi och 1/512 steg bb = 127 + fd; // lägg till dc offset till sinewawe dd [iw] = bb; // skriva värde i array

} }

// ************************************************ ****************** // Timer2 Interrupt Service vid 62,5 KHz // här samplas ljud- och pott -signalen i en hastighet av: 16Mhz / 256 /2 /2 = 15625 Hz ISR (TIMER2_OVF_vect) {

PORTB = PORTB | 1;

div32 =! div32; // dela timer2 frekvens / 2 till 31,25 kHz om (div32) {div16 =! div16; om (div16) {// provkanal 0 och 1 omväxlande så att varje kanal samplas med 15,6 kHz badc0 = ADCH; // få ADC -kanal 0 sbi (ADMUX, MUX0); // ställ in multiplexer till kanal 1} else {badc1 = ADCH; // få ADC kanal 1 cbi (ADMUX, MUX0); // ställ multiplexer till kanal 0 f_sample = true; } ibb ++; ibb--; ibb ++; ibb--; // kort fördröjning innan konvertering startar sbi (ADCSRA, ADSC); // starta nästa konvertering}

}

Steg 6: Video

Potentiella problem ● Pickup är lite för svag för att driva kretsen - behöver en förstärkare. - I videon använde vi en signalförstärkare. (Den grå rutan som ligger på bordet.)

Rekommenderad: