Mundarija:
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
Deyl Rozen, Karlos Reyes va Rob Kox
DATT 2000
1 -qadam: Muammo
Gitara pedallari musiqachini pedal platformasida cheklaydi. Yechim: Gitara pedallari funksiyasini gitaraning o'ziga yarating va o'rnating. Bu musiqachiga sahna bo'ylab erkin harakatlanishiga imkon beradi, gitara bo'ynini interfeys sifatida ishlatib, pedal taxtasining joylashuvi bilan chegaralanmaydi. Biz bu kontseptsiyani bit -maydalagich/namuna tezligi effekti qurilmasini yaratish orqali o'rganamiz.
2 -qadam: Loyihaning konteksti
Musiqachilar gitara tovushlarini boshqarish uchun ishlatadigan ko'plab gitara pedallari mavjud. Ularning aksariyati odatda rack yoki stomp qutilarida joylashgan, shuning uchun effektlarni nazorat qilish effektlar joylashuvi bilan cheklanadi. Qurilmani gitara ustiga o'rnatish o'yinchilarga effekt parametrlarini sahnaning istalgan joyida boshqarishga imkon beradi. Bu shuni anglatadiki, ular cheklanmaydi va o'z harakatlari uchun erkin harakatlana oladilar.
Arduino faqat 8 bitli ovozga ega bo'lgani uchun signalni yuqori aniqlikda qayta ishlash mumkin emas. Shuning uchun biz o'z effektlarimizni tanladik, chunki ular past aniqlikdagi, buzilgan tovushni yaratishga asoslangan. Bu Arduino bilan mumkin bo'lgan yagona effektlar.
3 -qadam: Ehtiyot qismlar / asboblar
● Ta'sirli matkap
● Tel kesgichlar
● Tel -strippers
● Lehimlash temir
● Issiq yopishtiruvchi qurol
● Tozdan tushirish nasosi
● Gitara ● korpus
● Lehim
● Issiq elim
● Arduino
● Proto karta
● Qoplangan sim
● Ovoz jakları (x2)
● Potansiyometrlar (x3)
● Kondansatkichlar: 2,2 uF (x2)
● ochiq mis mis
● vintlardek (M3.5 *8)
● Rezistorlar: 1 k, 10 k, 1,2 k, 1,5 k, 390 k
● * Op Amp (LM358) / * Transistor (2N3442)
4 -qadam: Texnik strategiya
Ichki davr
Kirish/chiqish
Biz gitardan keladigan audio signalni arduino ishlatadigan va o'zgartiradigan narsaga aylantirishimiz kerak. Keyin biz arduino -dan keladigan signalni yana audio signalga aylantirishimiz kerak bo'ladi. Arduino 0V dan 5V gacha bo'lgan kuchlanishlarni o'qiydi, audio signallari -1V dan 1V gacha. Bu konversiyalar rezistorlar yordamida amalga oshiriladi. Signal chiqish pallasida ham aylantiriladi.
Arduino kutubxonasi: ArduinoDSP
Loyihaning tavsifi (interfeys)
Tugmalar 1 -tugma: namuna tezligi
2 -tugma: Bit maydalagich
3 -tugma: Bit o'zgartirish
5 -qadam: kod
#"dsp.h" ni qo'shing
#define cbi (sfr, bit) (_SFR_BYTE (sfr) & = ~ _BV (bit)) #debine sbi (sfr, bit) (_SFR_BYTE (sfr) | = _BV (bit))
mantiqiy div32; mantiqiy div16;
uchuvchi mantiqiy f_sample; o'zgaruvchan bayt badc0; uchuvchi bayt badc1; uchuvchi 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]; // Ovozli xotira massivi 8 bitli
void setup () {setupIO ();
// 1 soniyadan keyin to'lqinni qayta yuklash fill_sinewave ();
// 19 kHz chastotali cbi (ADCSRA, ADPS2) uchun adc prescaler -ni 64 ga o'rnating; sbi (ADCSRA, ADPS1); sbi (ADCSRA, ADPS0); // ADCH Register sbi-da 8-bitli ADC (ADMUX, ADLAR); sbi (ADMUX, REFS0); cbi (ADMUX, REFS1); cbi (ADMUX, MUX0); cbi (ADMUX, MUX1); cbi (ADMUX, MUX2); cbi (ADMUX, MUX3); // Timer2 PWM rejimi tez PWM cbi (TCCR2A, COM2A0) ga o'rnatildi; sbi (TCCR2A, COM2A1); sbi (TCCR2A, WGM20); sbi (TCCR2A, WGM21); // Timer2 cbi uchun sozlash (TCCR2B, WGM22); // Timer2 Clock Prescaler: 1 sbi (TCCR2B, CS20); cbi (TCCR2B, CS21); cbi (TCCR2B, CS22); // Timer2 PWM portini yoqish sbi (DDRB, 3); // cli (); cbi (TIMSK0, TOIE0); sbi (TIMSK2, TOIE2); iw1 = badc1;
}
void loop () {
// effekt potentsiometrining holatini tekshirish va readKnobs ();
// ************* // *** Oddiy *** // *************
if (fx1 == 0 && fx2 == 0 && fx3 == 0 && fx4 == 0) {bayt kiritish = analogRead (chapda); chiqish (chap, kirish); }
// ************* // *** Phasor *** // *************
agar (fx4> 100) {
fx1 = 0; fx2 = 0; fx3 = 0;
while (! f_sample) {// ADC dan namuna qiymatini kuting} // Tsikl 15625 KHz = 64uSec PORTD = PORTD | 128; f_sample = noto'g'ri; bb = badc1; dd [icnt1] = bb; // buferga yozish fx4 = iw * badc0 / 255; // potentsiometr iw1 = dd [icnt2] bilan kechiktirilgan namuna shkalasi; // kechiktirish buferini o'qing badc0 = badc0 / 20; // chegara qiymati 512 icnt1 ++; icnt2 = icnt1 - badc0; icnt2 = icnt2 & 511; // chegara indeksi 0.. icnt1 = icnt1 & 511; // chegara indeksi 0..511 iw2 = iw1 + bb; iw2 = iw2 / 2; bb = iw2; OCR2A = bb; // PWM chiqishining namunaviy qiymati
PORTD = PORTD ^ 128; chiqish (chapda, PORTD); // Chiqish}
// ************* // *** Flanjer *** // ************* agar (fx3> 100) {
fx1 = 0; fx2 = 0; fx4 = 0;
while (! f_sample) {// ADC dan namuna qiymatini kuting} // Tsikl 15625 KHz = 64uSec
PORTD = PORTD | 128; f_sample = noto'g'ri; bb = dd [icnt]; // kechiktirish buferini o'qing iw = 127 - bb; // subxron ofset fx3 = iw * badc0 / 255; // potentsiometr iw1 = 127 bilan kechiktirilgan namuna - badc1; // subwatch ofset of new sample iw1 = iw1 + iw; // kechiktirilgan namuna va yangi namunani qo'shing, agar (iw1 127) iw1 = 127; // Ovoz cheklovchisi bb = 127 + iw1; // ofset qo'shing dd [icnt] = bb; // namunani audio buferda saqlang icnt ++; icnt = icnt & 511; // chegara buferindeksi 0..511 OCR2A = bb; // PWM chiqishining namunaviy qiymati
PORTD = PORTD ^ 128; chiqish (chapda, PORTD); // Chiqish
} }
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 ++) {// uchun 512 baytli buferni 50 davr sinewawe fd = 127 * sin (fcnt) bilan to'ldiring; // asosiy ohang fcnt = fcnt + dx; // 0 dan 2xpi va 1/512 qadam oralig'ida bb = 127 + fd; // sinewawe ga dc ofset qo'shing dd [iw] = bb; // qiymatni qatorga yozing
} }
// ********************************************** ****************** // Timer2 62,5 KHz chastotali uzilish xizmati // bu erda audio va pot signallari 16 MGts / 256/2/2 = 15625 tezligida tanlanadi. Hz ISR (TIMER2_OVF_vect) {
PORTB = PORTB | 1;
div32 =! div32; // taymer2 chastotasini / 2 ni 31,25 kHz ga bo'lin, agar (div32) {div16 =! div16; if (div16) {// namuna kanal 0 va 1, shuning uchun har bir kanal 15,6 kHz badc0 = ADCH bilan namuna olinadi; // ADC kanalini oling 0 sbi (ADMUX, MUX0); // multipleksorni 1 -kanalga qo'ying} else {badc1 = ADCH; // ADC kanalini oling 1 cbi (ADMUX, MUX0); // multipleksorni 0 kanaliga o'rnating f_sample = true; } ibb ++; ibb--; ibb ++; ibb--; // sbi (ADCSRA, ADSC) konvertatsiyasini boshlashdan oldin qisqa kechikish; // keyingi konvertatsiyani boshlash}
}
6 -qadam: video
Mumkin bo'lgan muammolar ● Quvvat olish uchun elektr ta'minoti biroz kuchsiz - operatsion kuchaytirgich kerak. - Videoda biz signal kuchaytirgichidan foydalandik. (Stol ustida yotgan kulrang quti.)