Mündəricat:

NeckCrusher (Gitara Efektli Pedal): 6 addım (şəkillərlə)
NeckCrusher (Gitara Efektli Pedal): 6 addım (şəkillərlə)

Video: NeckCrusher (Gitara Efektli Pedal): 6 addım (şəkillərlə)

Video: NeckCrusher (Gitara Efektli Pedal): 6 addım (şəkillərlə)
Video: PIXEL GUN 3D LIVE 2024, Iyul
Anonim
NeckCrusher (Gitara Efektli Pedal)
NeckCrusher (Gitara Efektli Pedal)

Dale Rosen, Carlos Reyes və Rob Koch

DATT 2000

Addım 1: Problem

Problem
Problem

Gitara pedalları musiqiçini pedal platformasına məhdudlaşdırır. Həll yolu: Gitara pedallarının funksionallığını qurun və gitaranın özünə yerləşdirin. Bu, musiqiçinin pedal taxtasının yeri ilə məhdudlaşmaq əvəzinə gitara boynunu interfeys olaraq istifadə edərək səhnədə sərbəst hərəkət etməsinə imkan verir. Bir bitcrusher/nümunə dərəcəsi təsir cihazı quraraq bu konsepsiyanı araşdıracağıq.

Addım 2: Layihə Konteksti

Layihə Konteksti
Layihə Konteksti

Musiqiçilərin gitaralarının səsini idarə etmək üçün istifadə etdikləri bir çox gitara pedalı var. Bunların çoxu ümumiyyətlə rack-based və ya stump box vahidlərindədir, buna görə də effektlərin nəzarətini effekt bölməsinin yerləşdiyi yerə məhdudlaşdırır. Cihazı gitaraya quraşdırmaq, oyunçuların səhnənin istənilən yerində efekt parametrlərini idarə etməsinə imkan verir. Bu, məhdudlaşdırılmayacaqları və performansları üçün hərəkət etmək sərbəstliyinə sahib ola biləcəkləri deməkdir.

Arduino yalnız 8 bitlik səs qabiliyyətinə malik olduğundan, yüksək sədaqətli siqnal emalı etmək mümkün deyil. Efektləri aşağı sədaqətlə, təhrif olunmuş bir səs yaratmağa əsaslandığı üçün seçdiyimiz təsirlərin səbəbidir. Bunlar bir Arduino ilə mümkün olan yeganə təsirlərdir.

Addım 3: Ehtiyac duyulan hissələr / alətlər

Ehtiyac duyulan hissələr / alətlər
Ehtiyac duyulan hissələr / alətlər

● Zərbəli Matkap

● Tel kəsicilər

● Tel çıxarıcılar

● Havya

● İsti Yapışqan Tabancası

● Sökülmə Pompası

● Gitara ● Qutusu

● Lehim

● İsti yapışqan

● Arduino

● Proto Board

● örtülmüş tel

● Audio Jaklar (x2)

● Potansiyometrlər (x3)

● Kondansatörler: 2.2 uF (x2)

● Açıq Mis Tel

● Vintlər (M3.5 *8)

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

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

Addım 4: Texniki Strategiya

Texniki Strategiya
Texniki Strategiya

Daxili Dövrə

Giriş/Çıxış

Gitardan gələn səs siqnalını arduinonun istifadə edə və dəyişdirə biləcəyi bir şeyə çevirməliyik. Arduino -dan gələn siqnalı yenidən səs siqnalına çevirməliyik. Arduino 0V -dan 5V -a qədər gərginlik oxuyur, səs siqnalları -1V -dən 1V -ə qədərdir. Bu dönüşümlər rezistorlardan istifadə etməklə həyata keçirilir. Siqnal çıxış dövrəsində də çevriləcək.

Arduino Kitabxanası: ArduinoDSP

Layihənin Təsviri (İnterfeys)

Düymələr Topuzu 1: Nümunə Hızı

Topuz 2: Bit Kırıcı

Düymə 3: Bit dəyişdirici

Addım 5: Kod

Kod
Kod

#"dsp.h" daxil edin

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

boolean div32; boolean div16;

uçucu boolean f_sample; uçucu bayt badc0; uçucu bayt badc1; uçucu bayt 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; bayt bb;

bayt dd [512]; // Audio Yaddaş Array 8-Bit

void setup () {setupIO ();

// 1 saniyədən sonra dalğanı yenidən doldurun fill_sinewave ();

// 19kHz nümunə götürmə tezliyi cbi (ADCSRA, ADPS2) üçün adc prescaler -ı 64 -ə təyin edin; sbi (ADCSRA, ADPS1); sbi (ADCSRA, ADPS0); // ADCH Register sbi-də 8-bit ADC (ADMUX, ADLAR); sbi (ADMUX, REFS0); cbi (ADMUX, REFS1); cbi (ADMUX, MUX0); cbi (ADMUX, MUX1); cbi (ADMUX, MUX2); cbi (ADMUX, MUX3); // Timer2 PWM rejimi sürətli PWM cbi (TCCR2A, COM2A0) olaraq təyin edilmişdir; sbi (TCCR2A, COM2A1); sbi (TCCR2A, WGM20); sbi (TCCR2A, WGM21); // Timer2 cbi üçün quraşdırma (TCCR2B, WGM22); // Timer2 Clock Prescaler: 1 sbi (TCCR2B, CS20); cbi (TCCR2B, CS21); cbi (TCCR2B, CS22); // Timer2 PWM Port Enable sbi (DDRB, 3); // cli (); cbi (TIMSK0, TOIE0); sbi (TIMSK2, TOIE2); iw1 = badc1;

}

boşluq döngəsi () {

// effekt potensiometrinin və fırlanan açarın readKnobs () vəziyyətini yoxlayın;

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

if (fx1 == 0 && fx2 == 0 && fx3 == 0 && fx4 == 0) {byte input = analogRead (solda); çıxış (sol, giriş); }

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

əgər (fx4> 100) {

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

while (! f_sample) {// ADC -dən Nümunə Dəyərini gözləyin} // Dövr 15625 KHz = 64uSec PORTD = PORTD | 128; f_sample = yalan; bb = badc1; gg [icnt1] = bb; // tampona yaz fx4 = iw * badc0 / 255; // potensialiometr iw1 = dd [icnt2] ilə gecikmiş nümunə miqyası; // gecikmə tamponunu oxuyun badc0 = badc0 / 20; // 512 icnt1 ++ ilə məhdudlaşdırın; icnt2 = icnt1 - badc0; icnt2 = icnt2 & 511; // limit indeksi 0.. icnt1 = icnt1 & 511; // limit indeksi 0..511 iw2 = iw1 + bb; iw2 = iw2 / 2; bb = iw2; OCR2A = bb; // PWM Çıxışına Nümunə Dəyəri

PORTD = PORTD ^ 128; çıxış (sol, PORTD); // Çıxış}

// ************* // *** Flanşer *** // ************* əgər (fx3> 100) {

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

while (! f_sample) {// ADC -dən Nümunə Dəyərini gözləyin} // Dövr 15625 KHz = 64uSec

PORTD = PORTD | 128; f_sample = yalan; bb = gg [icnt]; // gecikmə tamponunu oxuyun iw = 127 - bb; // subset ofset fx3 = iw * badc0 / 255; // potensialiometr iw1 = 127 ilə gecikmiş nümunə miqyası - badc1; // yeni nümunədən subset ofset iw1 = iw1 + iw; // gecikmiş nümunə və yeni nümunə əlavə edin, əgər (iw1 127) iw1 = 127; // Səs məhdudlaşdırıcısı bb = 127 + iw1; // ofset əlavə et dd [icnt] = bb; // nümunəni audio tamponda icnt ++ saxla; icnt = icnt & 511; // limit tampon indeksi 0..511 OCR2A = bb; // PWM Çıxışına Nümunə Dəyəri

PORTD = PORTD ^ 128; çıxış (sol, PORTD); // Çıxış

} }

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; // (iw = 0; iw <= 511; iw ++) {// üçün 512 baytlıq buferi doldurun, sinewawe fd = 127 * sin (fcnt) 50 dövrlə; // əsas ton fcnt = fcnt + dx; // 0 ilə 2xpi və 1/512 artımlar aralığında bb = 127 + fd; // sinewawe dc ofset əlavə edin dd [iw] = bb; // diziyə dəyər yazın

} }

// ********************************************** ****************** // 62.5 KHz -də Timer2 Interrupt Service // burada səs və pot siqnalı nümunə olaraq alınır: 16Mhz / 256/2/2 = 15625 Hz ISR (TIMER2_OVF_vect) {

PORTB = PORTB | 1;

div32 =! div32; // timer2 tezliyini / 2 -ni 31.25kHz -ə bölün, əgər (div32) {div16 =! div16; if (div16) {// nümunə kanal 0 və 1 alternativ olaraq hər bir kanal 15.6kHz badc0 = ADCH ilə nümunələnir; // ADC kanalını 0 sbi (ADMUX, MUX0) əldə edin; // multiplekseri 1 kanala təyin et} başqa {badc1 = ADCH; // ADC kanal 1 cbi (ADMUX, MUX0) alın; // multiplekseri 0 kanalına qoy f_sample = true; } ibb ++; ibb--; ibb ++; ibb--; // dönüşüm başlamazdan əvvəl qısa gecikmə sbi (ADCSRA, ADSC); // növbəti çevrilməyə başla}

}

Addım 6: Video

Potensial Problemlər ● Pikap elektrik dövrəsi üçün bir az zəifdir - bir op amp lazımdır. - Videoda bir siqnal gücləndiricisindən istifadə etdik. (Masada uzanan boz qutu.)

Tövsiyə: