İçindekiler:

NeckCrusher (Gitar Üstü Efekt Pedalı): 6 Adım (Resimli)
NeckCrusher (Gitar Üstü Efekt Pedalı): 6 Adım (Resimli)

Video: NeckCrusher (Gitar Üstü Efekt Pedalı): 6 Adım (Resimli)

Video: NeckCrusher (Gitar Üstü Efekt Pedalı): 6 Adım (Resimli)
Video: don't use ear buds..... carefully....... 2024, Kasım
Anonim
NeckCrusher (Gitar Üstü Efekt Pedalı)
NeckCrusher (Gitar Üstü Efekt Pedalı)

Dale Rosen, Carlos Reyes ve Rob Koch

DATT 2000

1. Adım: Sorun

Sorun
Sorun

Gitar pedalları müzisyeni pedal platformuyla sınırlandırır. Çözüm: Bir gitar pedalı işlevi oluşturun ve gitarın içine gömün. Bu, müzisyenin pedal tahtasının konumuyla sınırlandırılmak yerine gitar sapını bir arayüz olarak kullanarak sahnede özgürce hareket etmesine izin verir. Bir bit kırıcı/örnek oranı efekt cihazı oluşturarak bu konsepti keşfedeceğiz.

2. Adım: Proje İçeriği

Proje İçeriği
Proje İçeriği

Müzisyenlerin gitarlarının sesini manipüle etmek için kullandıkları birçok gitar pedalı vardır. Bunların çoğu genellikle raf tabanlı veya pedallı ünitelerde bulunur, bu nedenle efektlerin kontrolünü efekt ünitesinin konumuyla sınırlar. Cihazı gitara monte etmek, oyuncuların efekt parametrelerini sahnenin herhangi bir yerinde kontrol etmelerini sağlar. Bu, kısıtlanmayacakları ve performansları için hareket etme özgürlüğüne sahip olabilecekleri anlamına gelir.

Arduino sadece 8 bit ses kapasitesine sahip olduğundan, yüksek kaliteli sinyal işleme yapmak imkansızdır. Bu nedenle yaptığımız efektleri seçtik, çünkü bunlar düşük kaliteli, bozuk bir ses oluşturmaya dayanıyor. Arduino ile makul olarak mümkün olan tek efektler bunlar.

Adım 3: Gerekli Parçalar / Araçlar

Gerekli Parçalar / Araçlar
Gerekli Parçalar / Araçlar

● Darbeli Matkap

● Tel Kesiciler

● Tel Sıyırıcılar

● Havya

● Sıcak Tutkal Tabancası

● Lehim Sökme Pompası

● Gitar● Muhafaza

● Lehim

● Sıcak Tutkal

● Arduino

● Proto Kartı

● Kaplamalı Tel

● Ses Jakları (x2)

● Potansiyometreler (x3)

● Kondansatörler: 2,2 uF (x2)

● Açık Bakır Tel

● Vidalar (M3.5 *8)

● Dirençler: 1 k, 10 k, 1,2 k, 1,5 k, 390 k

● * Op Amp (LM358) / * Transistör (2N3442)

Adım 4: Teknik Strateji

Teknik Strateji
Teknik Strateji

Dahili Devre

Giriş çıkış

Bir gitardan gelen ses sinyalini arduino'nun kullanabileceği ve değiştirebileceği bir şeye dönüştürmemiz gerekiyor. Daha sonra arduinodan gelen sinyali tekrar bir ses sinyaline dönüştürmemiz gerekecek. Arduino 0V ila 5V arasındaki voltajları okur, ses sinyalleri -1V ila 1V arasındadır. Bu dönüşümler dirençler kullanılarak yapılır. Sinyal, çıkış devresinde de dönüştürülecektir.

Arduino Kütüphanesi: ArduinoDSP

Proje Açıklaması (Arayüz)

Düğmeler Düğme 1: Örnekleme Hızı

Düğme 2: Bit Kırıcı

Düğme 3: Bit Kaydırıcı

Adım 5: Kod

kod
kod

#"dsp.h"yi dahil et

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

boolean div32; boolean div16;

uçucu boole 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]; // Ses Bellek Dizisi 8-Bit

geçersiz kurulum() { setupIO();

// 1 saniye sonra dalgayı yeniden yükle fill_sinewave();

// 19kHz örnekleme frekansı için adc ön ölçekleyicisini 64'e ayarlayın cbi(ADCSRA, ADPS2); sbi(ADCSRA, ADPS1); sbi(ADCSRA, ADPS0); // ADCH Register'da 8-Bit ADC sbi(ADMUX, ADLAR); sbi(ADMUX, REFS0); cbi(ADMUX, REFS1); cbi(ADMUX, MUX0); cbi(ADMUX, MUX1); cbi(ADMUX, MUX2); cbi(ADMUX, MUX3); // Timer2 PWM Modu hızlı PWM cbi'ye ayarlandı (TCCR2A, COM2A0); sbi (TCCR2A, COM2A1); sbi (TCCR2A, WGM20); sbi (TCCR2A, WGM21); //Timer2 cbi için kurulum (TCCR2B, WGM22); // Timer2 Clock Precaler to: 1 sbi (TCCR2B, CS20); cbi (TCCR2B, CS21); cbi (TCCR2B, CS22); // Timer2 PWM Port Etkinleştir sbi(DDRB, 3); //cli(); cbi (TIMSK0, TOIE0); sbi (TIMSK2, TOIE2); iw1 = kötüc1;

}

boşluk döngüsü () {

//etki potansiyometresinin ve döner anahtarın readKnobs() durumunu kontrol edin;

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

if (fx1 == 0 && fx2 == 0 && fx3 == 0 && fx4 == 0) { bayt girişi = analogRead(sol); çıktı(sol, girdi); }

// ************* // ***Fazör*** // *************

if (fx4 > 100) {

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

while (!f_sample) { // ADC'den Örnek Değeri Bekle } // Döngü 15625 KHz = 64uSec PORTD = PORTD | 128; f_örnek = yanlış; bb = kötüc1; dd[icnt1] = bb; // ara belleğe yaz fx4 = iw * badc0 / 255; // gecikmeli numuneyi potansiyometre ile ölçeklendir iw1 = dd[icnt2]; // gecikme arabelleğini oku badc0 = badc0 / 20; // değeri 512 icnt1++ ile sınırla; icnt2 = icnt1 - badc0; icnt2 = icnt2 & 511; // limit indeks 0.. icnt1 = icnt1 & 511; // limit indeksi 0..511 iw2 = iw1 + bb; iw2 = iw2 / 2; bb = iw2; OCR2A = bb; // PWM Çıkışına Örnek Değer

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

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

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

while (!f_sample) { // ADC'den Örnek Değeri Bekle } // Döngü 15625 KHz = 64uSec

PORTD = PORTD | 128; f_örnek = yanlış; bb = dd[icnt]; // gecikme arabelleğini oku iw = 127 - bb; // ofset çıkar fx3 = iw * badc0 / 255; // gecikmeli numuneyi potansiyometre ile ölçeklendir iw1 = 127 - badc1; // yeni örnekten ofseti çıkar iw1 = iw1 + iw; // gecikmeli örnek ve yeni örnek ekle eğer (iw1 127) iw1 = 127; // Ses sınırlayıcı bb = 127 + iw1; // ofset ekle dd[icnt] = bb; // örneği ses arabelleğinde sakla icnt++; icnt = icnt & 511; // arabellek indeksini sınırla 0..511 OCR2A = bb; // PWM Çıkışına Örnek Değer

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

} }

geçersiz readKnobs() { fx1 = analogRead(1); fx2 = analogRead(2); fx3 = analogRead(3); fx4 = analogRead(4);

}

void fill_sinewave() { kayan nokta pi = 3.141592; yüzer dx; yüzer fd; yüzer fcnt; dx = 2 * pi / 512; // (iw = 0; iw <= 511; iw++) için 512 bayt arabelleği doldurun { // 50 nokta ile sinewawe fd = 127 * sin(fcnt); // temel ton fcnt = fcnt + dx; // 0 ila 2xpi aralığında ve 1/512 artışlarla bb = 127 + fd; // sinewawe'ye dc ofset ekle dd[iw] = bb; // diziye değer yaz

} }

//******************************************************* ****************** // 62.5 KHz'de Timer2 Kesinti Hizmeti // burada ses ve pot sinyali şu hızda örneklenir: 16Mhz / 256 / 2 / 2 = 15625 Hz ISR(TIMER2_OVF_vect) {

PORTB = PORTB | 1;

div32 = !div32; // timer2 frekansını / 2'yi 31.25kHz'e böl if (div32) { div16 = !div16; if (div16) { // alternatif olarak kanal 0 ve 1'i örnekleyin, böylece her kanal 15.6kHz ile örneklenir badc0 = ADCH; // ADC kanalını al 0 sbi(ADMUX, MUX0); // çoklayıcıyı kanal 1'e ayarla } else { badc1 = ADCH; // ADC kanal 1'i al cbi(ADMUX, MUX0); // çoklayıcıyı kanal 0'a ayarla f_sample = true; } ibb++; ibb--; ibb++; ibb--; // dönüştürmeye başlamadan önce kısa gecikme sbi(ADCSRA, ADSC); // sonraki dönüşümü başlat }

}

6. Adım: Video

Olası Sorunlar ● Başlatma, güç devresi için biraz fazla zayıf - bir op amp gerekir. - Videoda sinyal güçlendirici kullandık. (Masanın üzerinde duran gri kutu.)

Önerilen: