Inhoudsopgave:

NeckCrusher (op gitaar gemonteerd effectpedaal): 6 stappen (met afbeeldingen)
NeckCrusher (op gitaar gemonteerd effectpedaal): 6 stappen (met afbeeldingen)

Video: NeckCrusher (op gitaar gemonteerd effectpedaal): 6 stappen (met afbeeldingen)

Video: NeckCrusher (op gitaar gemonteerd effectpedaal): 6 stappen (met afbeeldingen)
Video: Ran Custom 8-String Guitar - Crusher 2024, December
Anonim
NeckCrusher (op gitaar gemonteerd effectpedaal)
NeckCrusher (op gitaar gemonteerd effectpedaal)

Dale Rosen, Carlos Reyes en Rob Koch

DATT 2000

Stap 1: Probleem

Probleem
Probleem

Gitaarpedalen beperken de muzikant tot het pedaalplatform. Oplossing: bouw en integreer een functionaliteit voor gitaarpedalen in de gitaar zelf. Hierdoor kan de muzikant vrij over het podium bewegen, waarbij de gitaarhals als interface wordt gebruikt in plaats van beperkt te zijn tot de locatie van het pedaal. We zullen dit concept onderzoeken door een bitcrusher/sample rate-effectapparaat te maken.

Stap 2: Projectcontext

Projectcontext
Projectcontext

Er zijn veel gitaarpedalen die door muzikanten worden gebruikt om het geluid van hun gitaren te manipuleren. De meeste hiervan bevinden zich meestal in rack-gebaseerde of stompbox-eenheden, waardoor de controle van de effecten wordt beperkt tot de locatie van de effecteenheid. Door het apparaat op de gitaar te monteren, kunnen spelers de parameters van het effect overal op het podium regelen. Dit betekent dat ze niet worden beperkt en de vrijheid hebben om te bewegen voor hun prestaties.

Aangezien Arduino alleen 8-bits audio kan, is het onmogelijk om high-fidelity-signaalverwerking uit te voeren. Dit is de reden waarom we de effecten hebben gekozen die we hebben gemaakt, omdat ze zijn gebaseerd op het creëren van een vervormd geluid met lage getrouwheid. Dit zijn de enige effecten die redelijkerwijs mogelijk zijn met een Arduino.

Stap 3: Benodigde onderdelen/gereedschappen

Benodigde onderdelen/gereedschappen
Benodigde onderdelen/gereedschappen

● Klopboormachine

● Draadknippers

● Draadstrippers

● Soldeerbout

● Heet lijmpistool

● Desoldeerpomp

● Gitaar● Behuizing

● Solderen

●Hete lijm

Arduino

●Protobord

● Gecoate draad

● Audio-aansluitingen (x2)

● Potentiometers (x3)

● Condensatoren: 2,2 uF (x2)

●Blootgestelde koperdraad

● Schroeven (M3.5 *8)

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

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

Stap 4: Technische strategie

Technische Strategie
Technische Strategie

Interne circuits

Invoer uitvoer

We moeten het audiosignaal dat van een gitaar komt, converteren naar iets dat de Arduino kan gebruiken en wijzigen. We zullen dan het signaal dat van de arduino komt terug moeten omzetten in een audiosignaal. Arduino leest spanningen van 0V tot 5V, audiosignalen zijn van -1V tot 1V. Deze conversies worden gedaan met behulp van weerstanden. Het signaal wordt ook omgezet in het uitgangscircuit.

Arduino-bibliotheek: ArduinoDSP

Projectbeschrijving (Interface)

Knoppen Knop 1: Sample Rate

Knop 2: Bit Crusher

Knop 3: Bit Shifter

Stap 5: Coderen

Code
Code

#include "dsp.h"

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

booleaanse div32; booleaanse div16;

vluchtige booleaanse f_sample; vluchtige byte badc0; vluchtige byte badc1; vluchtige byte ibb;

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

intcnta; int ict; int icnt1; int icnt2; int cnt2; int iw; int iw1; int iw2; byte-bb;

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

void setup() { setupIO();

// herlaad wave na 1 seconde fill_sinewave();

// stel adc prescaler in op 64 voor 19 kHz bemonsteringsfrequentie cbi (ADCSRA, ADPS2); sbi(ADCSRA, ADPS1); sbi(ADCSRA, ADPS0); // 8-bits ADC in 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 ingesteld op snelle PWM cbi (TCCR2A, COM2A0); sbi (TCCR2A, COM2A1); sbi (TCCR2A, WGM20); sbi (TCCR2A, WGM21); // Setup voor Timer2 cbi (TCCR2B, WGM22); // Timer2 Klok Prescaler naar: 1 sbi (TCCR2B, CS20); cbi (TCCR2B, CS21); cbi (TCCR2B, CS22); // Timer2 PWM-poort sbi inschakelen (DDRB, 3); //cli(); cbi (TIMSK0, TOIE0); sbi (TIMSK2, TOIE2); iw1 = badc1;

}

lege lus() {

// controleer de status van de effectpotentiometer en draaischakelaar readKnobs ();

// ************* // ***Normaal*** // *************

if (fx1 == 0 && fx2 == 0 && fx3 == 0 && fx4 == 0) {byte input = analogRead (links); uitvoer (links, invoer); }

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

als (fx4 > 100) {

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

while (!f_sample) {// wacht op voorbeeldwaarde van ADC} // Cyclus 15625 KHz = 64uSec PORTD = PORTD | 128; f_sample = onwaar; bb = badc1; dd[icnt1] = bb; // schrijf naar buffer fx4 = iw * badc0 / 255; // schaal vertraagd monster met potentiometer iw1 = dd[icnt2]; // lees de vertragingsbuffer badc0 = badc0 / 20; // grenswaarde tot 512 icnt1++; icnt2 = icnt1 - badc0; icnt2 = icnt2 & 511; // limietindex 0.. icnt1 = icnt1 & 511; // limietindex 0..511 iw2 = iw1 + bb; iw2 = iw2 / 2; bb = iw2; OCR2A = bb; // Voorbeeldwaarde naar PWM-uitvoer

POORT = POORT ^ 128; uitgang (links, PORTD); // Uitgang}

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

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

while (!f_sample) {// wacht op voorbeeldwaarde van ADC} // Cyclus 15625 KHz = 64uSec

PORTD = PORTD | 128; f_sample = onwaar; bb = dd[icnt]; // lees de vertragingsbuffer iw = 127 - bb; // aftrekken offset fx3 = iw * badc0 / 255; // schaal vertraagd monster met potentiometer iw1 = 127 - badc1; // trek offset af van nieuwe steekproef iw1 = iw1 + iw; // voeg uitgesteld monster en nieuw monster toe als (iw1 127) iw1 = 127; // Audiobegrenzer bb = 127 + iw1; // voeg offset toe dd [icnt] = bb; // bewaar sample in audiobuffer icnt++; icnt = icnt & 511; // grens bufferindex 0..511 OCR2A = bb; // Voorbeeldwaarde naar PWM-uitvoer

POORT = POORT ^ 128; uitgang (links, PORTD); // Uitgang

} }

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

}

void fill_sinewave() { float pi = 3.141592; zweven dx; vlotter fd; vlotter fcnt; dx = 2 * pi / 512; // vul de 512 byte bufferarry voor (iw = 0; iw <= 511; iw++) {// met 50 perioden sinewawe fd = 127 * sin (fcnt); // grondtoon fcnt = fcnt + dx; // in het bereik van 0 tot 2xpi en 1/512 stappen bb = 127 + fd; // voeg dc offset toe aan sinewawe dd [iw] = bb; // schrijf waarde in array

} }

//************************************************** **************** // Timer2 Interrupt Service op 62,5 KHz // hier wordt het audio- en potsignaal gesampled met een snelheid van: 16Mhz / 256 / 2 / 2 = 15625 Hz ISR(TIMER2_OVF_vect) {

PORTB = PORTB | 1;

div32 = !div32; // deel timer2-frequentie / 2 tot 31,25 kHz als (div32) { div16 =! div16; if (div16) {// sample kanaal 0 en 1 afwisselend zodat elk kanaal wordt gesampled met 15,6 kHz badc0 = ADCH; // haal ADC-kanaal 0 sbi (ADMUX, MUX0); // zet multiplexer op kanaal 1 } else {badc1 = ADCH; // haal ADC-kanaal 1 cbi (ADMUX, MUX0); // zet multiplexer op kanaal 0 f_sample = true; } ibb++; ibb--; ibb++; ibb-; // korte vertraging voor start conversie sbi (ADCSRA, ADSC); // start volgende conversie}

}

Stap 6: Video

Mogelijke problemen ● Pickup is iets te zwak om het circuit van stroom te voorzien - een opamp nodig. - In de video hebben we een signaalversterker gebruikt. (De grijze doos ligt op de tafel.)

Aanbevolen: