Բովանդակություն:

NeckCrusher (կիթառի վրա տեղադրված էֆեկտի ոտնակ) ՝ 6 քայլ (նկարներով)
NeckCrusher (կիթառի վրա տեղադրված էֆեկտի ոտնակ) ՝ 6 քայլ (նկարներով)

Video: NeckCrusher (կիթառի վրա տեղադրված էֆեկտի ոտնակ) ՝ 6 քայլ (նկարներով)

Video: NeckCrusher (կիթառի վրա տեղադրված էֆեկտի ոտնակ) ՝ 6 քայլ (նկարներով)
Video: Anaal Nathrakh Depravity Favours the Bold bedroom bass cover 2024, Հուլիսի
Anonim
NeckCrusher (կիթառի վրա ամրացված էֆեկտի ոտնակ)
NeckCrusher (կիթառի վրա ամրացված էֆեկտի ոտնակ)

Դեյլ Ռոզեն, Կառլոս Ռեյես և Ռոբ Կոխ

DATT 2000

Քայլ 1: Խնդիր

Խնդիր
Խնդիր

Կիթառի ոտնակները երաժիշտին սահմանափակում են ոտնակի հարթակով: Լուծում. Կառուցեք և տեղադրեք կիթառի ոտնակների գործառույթը հենց կիթառի մեջ: Սա թույլ է տալիս երաժիշտին ազատ տեղաշարժվել բեմի վրայով ՝ օգտագործելով կիթառի պարանոցը որպես ինտերֆեյս, ոչ թե սահմանափակվել ոտնաթաթի տեղադրությամբ: Մենք ուսումնասիրելու ենք այս հայեցակարգը `ստեղծելով bitcrusher/sample rate rate սարք:

Քայլ 2. Նախագծի համատեքստը

Նախագծի համատեքստը
Նախագծի համատեքստը

Կան բազմաթիվ կիթառի ոտնակներ, որոնք երաժիշտներն օգտագործում են իրենց կիթառների ձայնը շահարկելու համար: Դրանցից շատերը սովորաբար գտնվում են դարակաշարերի վրա հիմնված կամ ստոմպային տուփի միավորներում, հետևաբար `ազդեցությունների վերահսկումը սահմանափակելով էֆեկտների միավորի տեղակայմամբ: Սարքը կիթառի վրա ամրացնելը հնարավորություն է տալիս նվագարկիչներին վերահսկել էֆեկտի պարամետրերը բեմի ցանկացած վայրում: Սա նշանակում է, որ նրանք չեն սահմանափակվի և կարող են ազատություն ունենալ շրջելու իրենց կատարման համար:

Քանի որ Arduino- ն ունակ է միայն 8 բիթ ձայնի, անհնար է բարձր հավատարմության ազդանշանի մշակում կատարել: Ահա թե ինչու մենք ընտրեցինք մեր արած էֆեկտները, քանի որ դրանք հիմնված են ցածր հավատարմության, խեղաթյուրված ձայնի ստեղծման վրա: Սրանք միակ ազդեցություններն են, որոնք ողջամիտ հնարավոր են Arduino- ի միջոցով:

Քայլ 3: Պահանջվում են մասեր / գործիքներ

Պահանջվող մասեր / գործիքներ
Պահանջվող մասեր / գործիքներ

● Ազդեցիկ վարժանք

● Մետաղական կտրիչներ

● մետաղալարեր

● oldոդման երկաթ

● տաք սոսինձ ատրճանակ

● Հալման պոմպ

● կիթառ ● պարիսպ

Erոդող

● տաք սոսինձ

Du Արդուինո

● Պրոտո տախտակ

● ծածկված մետաղալար

● Աուդիո խցիկներ (x2)

● Պոտենցիոմետրեր (x3)

● կոնդենսատորներ ՝ 2.2 uF (x2)

● Բաց պղնձե մետաղալարեր

● Պտուտակներ (M3.5 *8)

● Ռեզիստորներ ՝ 1 կ, 10 կ, 1.2 կ, 1.5 կ, 390 կ

Op * Op Amp (LM358) / * Տրանզիստոր (2N3442)

Քայլ 4: Տեխնիկական ռազմավարություն

Տեխնիկական ռազմավարություն
Տեխնիկական ռազմավարություն

Ներքին միացում

Մուտք/ելք

Մենք պետք է կիթառից եկող ձայնային ազդանշանը փոխակերպենք մի բանի, որը arduino- ն կարող է օգտագործել և փոփոխել: Այնուհետև մենք պետք է arduino- ից եկող ազդանշանը հետ փոխարկենք ձայնային ազդանշանի: Arduino- ն կարդում է 0V- ից մինչև 5V լարումները, ձայնային ազդանշանները `-1V- ից մինչև 1V: Այս փոխակերպումները կատարվում են դիմադրիչների միջոցով: Ազդանշանը կփոխարկվի նաև ելքային շղթայում:

Arduino գրադարան ՝ ArduinoDSP

Նախագծի նկարագրություն (ինտերֆեյս)

Բռնակներ Գլան 1. Նմուշի տոկոսադրույք

Գլխ 2. Բիթ ջախջախիչ

Բռնակ 3: Bit Shifter

Քայլ 5: Կոդ

Կոդ
Կոդ

#ներառել «dsp.h»

#սահմանել cbi (sfr, bit) (_SFR_BYTE (sfr) & = ~ _BV (bit)) #սահմանել sbi (sfr, bit) (_SFR_BYTE (sfr) | = _BV (bit))

բուլյան div32; բուլյան div16;

ցնդող բուլյան f_sample; անկայուն բայթ badc0; անկայուն բայթ badc1; անկայուն բայթ 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; բայթ bb;

բայթ դդ [512]; // Աուդիո հիշողության զանգված 8-բիթանոց

void setup () {setupIO ();

// վերաբեռնել ալիքը 1 վայրկյան հետո fill_sinewave ();

// սահմանել adc prescaler- ը 64 -ի համար 19kHz նմուշառման հաճախականության cbi (ADCSRA, ADPS2); sbi (ADCSRA, ADPS1); sbi (ADCSRA, ADPS0); // 8-բիթանոց ADC 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 ռեժիմը սահմանվել է արագ PWM cbi (TCCR2A, COM2A0); sbi (TCCR2A, COM2A1); sbi (TCCR2A, WGM20); sbi (TCCR2A, WGM21); // Կարգավորում Timer2 cbi- ի համար (TCCR2B, WGM22); // Timer2 ockամացույց Prescaler to: 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;

}

դատարկ շրջան () {

// ստուգել ազդեցության պոտենցիոմետրի և պտտվող անջատիչի կարգավիճակը readKnobs ();

// ************* *** *** Նորմալ *** // *************

if (fx1 == 0 && fx2 == 0 && fx3 == 0 && fx4 == 0) {բայթ մուտքագրում = analogRead (ձախ); ելք (ձախ, մուտքագրում); }

// ************* // *** Փազոր *** // *************

եթե (fx4> 100) {

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

while (! f_sample) {// սպասեք ADC- ից Sample Value} // ցիկլ 15625 KHz = 64uSec PORTD = PORTD | 128; f_sample = կեղծ; bb = badc1; dd [icnt1] = bb; // գրել բուֆերային fx4 = iw * badc0 / 255; // մասշտաբի հետաձգված նմուշ պոտենցիոմետրով iw1 = dd [icnt2]; // կարդալ հետաձգման բուֆերը badc0 = badc0 / 20; // սահմանափակել արժեքը մինչև 512 icnt1 ++; icnt2 = icnt1 - badc0; icnt2 = icnt2 & 511; // սահմանային ինդեքս 0.. icnt1 = icnt1 & 511; // սահմանային ինդեքս 0..511 iw2 = iw1 + bb; iw2 = iw2 / 2; bb = iw2; OCR2A = bb; // PWM արտադրանքի ընտրանքային արժեք

PORTD = PORTD ^ 128; ելք (ձախ, PORTD); // Ելք}

// ************* // *** Flanger *** // ************ եթե (fx3> 100) {

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

while (! f_sample) {// սպասեք ADC- ից Sample Value} // Cycle 15625 KHz = 64uSec

PORTD = PORTD | 128; f_sample = կեղծ; bb = dd [icnt]; // կարդալ հետաձգման բուֆերը iw = 127 - bb; // հանել օֆսեթ fx3 = iw * badc0 / 255; // մասշտաբի հետաձգված նմուշ պոտենցիոմետրով iw1 = 127 - badc1; // փոխարինել նոր ընտրանքից փոխհատուցում iw1 = iw1 + iw; // ավելացնել հետաձգված նմուշ և նոր նմուշ, եթե (iw1 127) iw1 = 127; // Ձայնի սահմանափակիչ bb = 127 + iw1; // ավելացնել օֆսեթ dd [icnt] = bb; // պահել նմուշը աուդիո բուֆերում icnt ++; icnt = icnt & 511; // սահմանափակել bufferindex 0..511 OCR2A = bb; // PWM արտադրանքի ընտրանքային արժեք

PORTD = PORTD ^ 128; ելք (ձախ, PORTD); // Ելք

} }

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

}

void fill_sinewave () {float pi = 3.141592; բոց dx; float fd; բոց fcnt; dx = 2 * pi / 512; // լրացրեք 512 բայթ բուֆերարրի համար (iw = 0; iw <= 511; iw ++) {// 50 պարբերությամբ sinewawe fd = 127 * sin (fcnt); // հիմնարար տոն fcnt = fcnt + dx; // 0 -ից 2xpi և 1/512 հավելումների միջակայքում bb = 127 + fd; // ավելացնել dc offset sinewawe dd [iw] = bb; // արժեքը գրել զանգվածում

} }

// ********************************************* ****************** // Timer2 ընդհատման ծառայություն 62.5 ԿՀց հաճախությամբ // այստեղ աուդիո և զամբյուղի ազդանշանը նմուշառվում է ՝ 16 ՄՀց / 256 /2 /2 = 15625 արագությամբ Հց ISR (TIMER2_OVF_vect) {

PORTB = PORTB | 1;

div32 =! div32; // բաժանել ժամանակաչափ 2 հաճախականությունը / 2 -ից 31.25kHz, եթե (div32) {div16 =! div16; եթե (div16) {// ընտրանքային ալիք 0 և 1 հերթափոխով, այնպես որ յուրաքանչյուր ալիք նմուշառվում է 15.6kHz badc0 = ADCH- ով; // ստանալ ADC ալիք 0 sbi (ADMUX, MUX0); // մուլտիպլեքսեր դնել 1 -ին ալիքին {badc1 = ADCH; // ստանալ ADC ալիք 1 cbi (ADMUX, MUX0); // բազմապատկիչը սահմանել 0 ալիքի վրա f_sample = true; } ibb ++; ibb--; ibb ++; ibb--; // կարճ հետաձգում փոխակերպման մեկնարկից առաջ sbi (ADCSRA, ADSC); // սկսել հաջորդ փոխակերպումը}

}

Քայլ 6: Տեսանյութ

Պոտենցիալ խնդիրներ ● Վերցումը մի փոքր չափազանց թույլ է հոսանքի միացման համար. Անհրաժեշտ է օպերատորի ուժեղացուցիչ: - Տեսահոլովակում մենք ազդանշանի ուժեղացուցիչ ենք օգտագործել: (Մոխրագույն տուփը պառկած է սեղանին):

Խորհուրդ ենք տալիս: