Kazalo:

NeckCrusher (pedal z učinkom na kitaro): 6 korakov (s slikami)
NeckCrusher (pedal z učinkom na kitaro): 6 korakov (s slikami)

Video: NeckCrusher (pedal z učinkom na kitaro): 6 korakov (s slikami)

Video: NeckCrusher (pedal z učinkom na kitaro): 6 korakov (s slikami)
Video: РОБОТ СТАЛ НАШИМ УЧИТЕЛЕМ НА 24 ЧАСА! 2024, Julij
Anonim
NeckCrusher (pedal z učinkom na kitaro)
NeckCrusher (pedal z učinkom na kitaro)

Dale Rosen, Carlos Reyes in Rob Koch

DATT 2000

1. korak: Težava

Problem
Problem

Pedala za kitaro omejujejo glasbenika na platformo za pedale. Rešitev: Vgradite in vgradite funkcionalnost pedal za kitaro v kitaro samo. To omogoča glasbeniku, da se prosto giblje po odru in uporablja vrat kitare kot vmesnik, namesto da bi bil omejen na lokacijo pedalboard -a. Ta koncept bomo raziskovali z ustvarjanjem naprave za bitcrusher/učinek vzorčne frekvence.

2. korak: Kontekst projekta

Kontekst projekta
Kontekst projekta

Glasbeniki uporabljajo veliko pedal za kitaro za manipulacijo z zvokom svojih kitar. Večina teh je običajno v regalih ali stomp box enotah, zato je nadzor učinkov omejen na lokacijo enote za učinke. Namestitev naprave na kitaro igralcem omogoča nadzor parametrov učinka kjer koli na odru. To pomeni, da ne bodo omejeni in se bodo lahko svobodno gibali za svoje delovanje.

Ker Arduino zmore samo 8 -bitni zvok, ni mogoče obdelati signala visoke zvestobe. Zato smo izbrali učinke, ki smo jih naredili, saj temeljijo na ustvarjanju popačenega zvoka z nizko zvestobo. To so edini učinki, ki so razumno možni pri Arduinu.

3. korak: Potrebni deli / orodja

Potrebni deli / orodja
Potrebni deli / orodja

● udarni vrtalnik

● Rezalniki žice

● Odstranjevalci žice

● spajkalnik

● Pištola za vroče lepilo

● Črpalka za spajkanje

● kitara ● ohišje

● Spajkanje

● Vroče lepilo

● Arduino

● Proto Board

● prevlečena žica

● avdio priključki (x2)

● Potenciometri (x3)

● Kondenzatorji: 2,2 uF (x2)

● izpostavljena bakrena žica

● Vijaki (M3,5 *8)

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

● * Op ojačevalec (LM358) / * Tranzistor (2N3442)

4. korak: Tehnična strategija

Tehnična strategija
Tehnična strategija

Notranje vezje

Vhod/izhod

Zvočni signal, ki prihaja iz kitare, moramo pretvoriti v nekaj, kar lahko arduino uporablja in spreminja. Nato bomo morali signal, ki prihaja iz arduina, pretvoriti v zvočni signal. Arduino bere napetosti od 0V do 5V, zvočni signali so od -1V do 1V. Te pretvorbe se izvajajo z upori. Signal se pretvori tudi v izhodnem vezju.

Knjižnica Arduino: ArduinoDSP

Opis projekta (vmesnik)

Gumbi Gumb 1: Sample Rate

Ročaj 2: Bit Crusher

Ročaj 3: Bit Shifter

5. korak: Koda

Koda
Koda

#include "dsp.h"

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

logični div32; logični div16;

hlapni logični f_sample; nestanovitni bajt badc0; hlapna bajta badc1; hlapna bajta 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; bajt bb;

bajt dd [512]; // 8-bitni niz pomnilnika zvoka

void setup () {setupIO ();

// ponovno naloži val po 1 sekundi fill_sinewave ();

// nastavimo predkaler adc na 64 za frekvenco vzorčenja 19 kHz cbi (ADCSRA, ADPS2); sbi (ADCSRA, ADPS1); sbi (ADCSRA, ADPS0); // 8-bitni ADC v registru ADCH sbi (ADMUX, ADLAR); sbi (ADMUX, REFS0); cbi (ADMUX, REFS1); cbi (ADMUX, MUX0); cbi (ADMUX, MUX1); cbi (ADMUX, MUX2); cbi (ADMUX, MUX3); // Timer2 PWM Mode nastavljen na hitro PWM cbi (TCCR2A, COM2A0); sbi (TCCR2A, COM2A1); sbi (TCCR2A, WGM20); sbi (TCCR2A, WGM21); // Nastavitev za Timer2 cbi (TCCR2B, WGM22); // Prednastavitev ure Timer2 za: 1 sbi (TCCR2B, CS20); cbi (TCCR2B, CS21); cbi (TCCR2B, CS22); // Vmesnik PWM Timer2 Omogoči sbi (DDRB, 3); // cli (); cbi (TIMSK0, TOIE0); sbi (TIMSK2, TOIE2); iw1 = badc1;

}

void loop () {

// preverimo stanje potenciometra učinka in vrtljivega stikala readKnobs ();

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

if (fx1 == 0 && fx2 == 0 && fx3 == 0 && fx4 == 0) {bajtni vnos = analogRead (levo); izhod (levo, vhod); }

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

če (fx4> 100) {

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

while (! f_sample) {// počakajte na vrednost vzorca iz ADC} // Cikel 15625 KHz = 64uSec PORTD = PORTD | 128; f_sample = false; bb = badc1; dd [icnt1] = bb; // zapis v vmesnik fx4 = iw * badc0 / 255; // merjenje zakasnjenega vzorca s potenciometrom iw1 = dd [icnt2]; // preberemo zakasnitveni vmesnik badc0 = badc0 / 20; // mejna vrednost na 512 icnt1 ++; icnt2 = icnt1 - badc0; icnt2 = icnt2 & 511; // mejni indeks 0.. icnt1 = icnt1 & 511; // mejni indeks 0..511 iw2 = iw1 + bb; iw2 = iw2 / 2; bb = iw2; OCR2A = bb; // Vzorčna vrednost za izhod PWM

PORTD = PORTD ^ 128; izhod (levo, PORTD); // izhod}

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

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

while (! f_sample) {// počakajte na vrednost vzorca iz ADC} // Cikel 15625 KHz = 64uSec

PORTD = PORTD | 128; f_sample = false; bb = dd [icnt]; // preberemo zakasnitveni vmesnik iw = 127 - bb; // odmik odmika fx3 = iw * badc0 / 255; // merjenje zakasnjenega vzorca s potenciometrom iw1 = 127 - badc1; // odsek odmika od novega vzorca iw1 = iw1 + iw; // dodamo zapozneli vzorec in nov vzorec, če (iw1 127) iw1 = 127; // Omejevalnik zvoka bb = 127 + iw1; // dodaj odmik dd [icnt] = bb; // shranimo vzorec v avdio vmesnik icnt ++; icnt = icnt & 511; // mejni vmesni indeks 0..511 OCR2A = bb; // Vzorčna vrednost za izhod PWM

PORTD = PORTD ^ 128; izhod (levo, PORTD); // Izhod

} }

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

}

void fill_sinewave () {float pi = 3,141592; float dx; float fd; float fcnt; dx = 2 * pi / 512; // zapolnimo 512 bajtno bazo za (iw = 0; iw <= 511; iw ++) {// s 50 točkami sinewawe fd = 127 * sin (fcnt); // osnovni ton fcnt = fcnt + dx; // v območju od 0 do 2xpi in 1/512 korakov bb = 127 + fd; // dodamo enosmerni odmik sinewawe dd [iw] = bb; // zapiše vrednost v matriko

} }

// ********************************************** ****************** // Timer2 Interrupt Service pri 62,5 KHz // tukaj se zvočni in potni signal vzorči s hitrostjo: 16Mhz / 256 /2 /2 = 15625 Hz ISR (TIMER2_OVF_vect) {

PORTB = PORTB | 1;

div32 =! div32; // deli časovnik 2 časovnika / 2 na 31,25 kHz if (div32) {div16 =! div16; if (div16) {// vzorec kanala 0 in 1 izmenično, tako da se vsak kanal vzorči s 15,6kHz badc0 = ADCH; // dobimo ADC kanal 0 sbi (ADMUX, MUX0); // nastavi multipleksor na kanal 1} else {badc1 = ADCH; // dobimo ADC kanal 1 cbi (ADMUX, MUX0); // nastavite multiplekser na kanal 0 f_sample = true; } ibb ++; ibb--; ibb ++; ibb--; // kratka zakasnitev pred začetkom pretvorbe sbi (ADCSRA, ADSC); // začni naslednjo pretvorbo}

}

6. korak: Video

Možne težave ● Pobiralnik je nekoliko prešibak za napajalni tokokrog - potrebujete op ojačevalnik. - V videu smo uporabili ojačevalnik signala. (Siva škatla leži na mizi.)

Priporočena: