Mục lục:

NeckCrusher (Bàn đạp hiệu ứng gắn trên guitar): 6 bước (có hình ảnh)
NeckCrusher (Bàn đạp hiệu ứng gắn trên guitar): 6 bước (có hình ảnh)

Video: NeckCrusher (Bàn đạp hiệu ứng gắn trên guitar): 6 bước (có hình ảnh)

Video: NeckCrusher (Bàn đạp hiệu ứng gắn trên guitar): 6 bước (có hình ảnh)
Video: Cách chọn đàn Guitar điện | Phân biệt Pickup đơn Single coil - pickup đôi Humbucker | CUMINH ROCK 2024, Tháng bảy
Anonim
NeckCrusher (Bàn đạp hiệu ứng gắn trên guitar)
NeckCrusher (Bàn đạp hiệu ứng gắn trên guitar)

Dale Rosen, Carlos Reyes và Rob Koch

DATT 2000

Bước 1: Vấn đề

Vấn đề
Vấn đề

Bàn đạp của đàn ghita hạn chế người nhạc công ngồi trên bàn đạp. Giải pháp: Xây dựng và nhúng chức năng bàn đạp guitar vào chính cây đàn. Điều này cho phép nhạc công tự do di chuyển trên sân khấu, sử dụng cổ guitar làm giao diện thay vì bị hạn chế về vị trí của bàn đạp. Chúng tôi sẽ khám phá khái niệm này bằng cách tạo ra một thiết bị hiệu ứng tốc độ mẫu / bitcrusher.

Bước 2: Bối cảnh dự án

Bối cảnh dự án
Bối cảnh dự án

Có rất nhiều bàn đạp guitar được sử dụng bởi các nhạc sĩ để điều chỉnh âm thanh của guitar của họ. Hầu hết chúng thường nằm trong các đơn vị hộp dựa trên giá đỡ hoặc hộp dậm, do đó hạn chế việc kiểm soát các hiệu ứng đến vị trí của đơn vị hiệu ứng. Việc gắn thiết bị trên cây đàn giúp người chơi có thể kiểm soát các thông số của hiệu ứng ở bất kỳ vị trí nào trên sân khấu. Điều này có nghĩa là họ sẽ không bị hạn chế và có thể tự do di chuyển để thực hiện màn trình diễn của mình.

Vì Arduino chỉ có khả năng xử lý âm thanh 8 bit nên không thể xử lý tín hiệu có độ trung thực cao. Đây là lý do tại sao chúng tôi chọn các hiệu ứng mà chúng tôi đã làm, vì chúng dựa trên việc tạo ra âm thanh có độ trung thực thấp, bị méo. Đây là những hiệu ứng duy nhất có thể có với Arduino.

Bước 3: Bộ phận / Công cụ cần thiết

Bộ phận / Công cụ bắt buộc
Bộ phận / Công cụ bắt buộc

● Máy khoan tác động

● Máy cắt dây

● Dụng cụ cắt dây

● Sắt hàn

● Súng bắn keo nóng

● Bơm khử mùi

● Guitar ● Bao vây

● Hàn

● Keo nóng

● Arduino

● Ban Proto

● Dây tráng

● Giắc cắm âm thanh (x2)

● Chiết áp (x3)

● Tụ điện: 2,2 uF (x2)

● Dây đồng tiếp xúc

● Vít (M3.5 * 8)

● Điện trở: 1 k, 10 k, 1,2 k, 1,5 k, 390 k

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

Bước 4: Chiến lược kỹ thuật

Chiến lược kỹ thuật
Chiến lược kỹ thuật

Mạch nội bộ

Đầu ra đầu vào

Chúng ta cần chuyển đổi tín hiệu âm thanh từ một cây đàn guitar sang một thứ mà arduino có thể sử dụng và sửa đổi. Sau đó, chúng ta sẽ cần chuyển đổi tín hiệu đến từ arduino trở lại thành tín hiệu âm thanh. Arduino đọc điện áp từ 0V đến 5V, tín hiệu âm thanh từ -1V đến 1V. Các chuyển đổi này được thực hiện bằng cách sử dụng điện trở. Tín hiệu cũng sẽ được chuyển đổi trong mạch đầu ra.

Thư viện Arduino: ArduinoDSP

Mô tả dự án (Giao diện)

Núm núm 1: Tỷ lệ mẫu

Núm 2: Máy nghiền bit

Núm 3: Bộ chuyển số bit

Bước 5: Mã

Mã số
Mã số

#include "dsp.h"

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

boolean div32; boolean div16;

boolean dễ bay hơi f_sample; byte dễ bay hơi badc0; byte dễ bay hơi badc1; byte dễ bay hơi 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; byte bb;

byte dd [512]; // Mảng bộ nhớ âm thanh 8-bit

void setup () {setupIO ();

// tải lại wave sau 1 giây fill_sinewave ();

// set adc prescaler thành 64 cho tần số lấy mẫu 19kHz cbi (ADCSRA, ADPS2); sbi (ADCSRA, ADPS1); sbi (ADCSRA, ADPS0); // ADC 8-Bit trong ADCH Đăng ký sbi (ADMUX, ADLAR); sbi (ADMUX, REFS0); cbi (ADMUX, REFS1); cbi (ADMUX, MUX0); cbi (ADMUX, MUX1); cbi (ADMUX, MUX2); cbi (ADMUX, MUX3); // Chế độ Timer2 PWM được đặt thành cbi PWM nhanh (TCCR2A, COM2A0); sbi (TCCR2A, COM2A1); sbi (TCCR2A, WGM20); sbi (TCCR2A, WGM21); // Thiết lập cho Timer2 cbi (TCCR2B, WGM22); // Định mức đồng hồ Timer2 thành: 1 sbi (TCCR2B, CS20); cbi (TCCR2B, CS21); cbi (TCCR2B, CS22); // Cổng Timer2 PWM Enable sbi (DDRB, 3); // cli (); cbi (TIMSK0, TOIE0); sbi (TIMSK2, TOIE2); iw1 = badc1;

}

void loop () {

// kiểm tra trạng thái của chiết áp hiệu ứng và công tắc xoay readKnobs ();

// ************* // ***Bình thường*** // *************

if (fx1 == 0 && fx2 == 0 && fx3 == 0 && fx4 == 0) {byte input = analogRead (left); đầu ra (trái, đầu vào); }

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

nếu (fx4> 100) {

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

while (! f_sample) {// đợi Giá trị mẫu từ ADC} // Chu kỳ 15625 KHz = 64uSec PORTD = PORTD | 128; f_sample = false; bb = badc1; dd [icnt1] = bb; // ghi vào bộ đệm fx4 = iw * badc0 / 255; // chia tỷ lệ mẫu bị trễ với chiết áp iw1 = dd [icnt2]; // đọc bộ đệm trễ badc0 = badc0 / 20; // giới hạn giá trị là 512 icnt1 ++; icnt2 = icnt1 - badc0; icnt2 = icnt2 & 511; // giới hạn chỉ số 0.. icnt1 = icnt1 & 511; // giới hạn chỉ số 0..511 iw2 = iw1 + bb; iw2 = iw2 / 2; bb = iw2; OCR2A = bb; // Giá trị mẫu cho đầu ra PWM

PORTD = PORTD ^ 128; đầu ra (trái, PORTD); // Đầu ra}

// ************* // *** Mặt bích *** // ************* if (fx3> 100) {

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

while (! f_sample) {// đợi Giá trị mẫu từ ADC} // Chu kỳ 15625 KHz = 64uSec

PORTD = PORTD | 128; f_sample = false; bb = dd [icnt]; // đọc bộ đệm trễ iw = 127 - bb; // giá trị bù trừ phụ fx3 = iw * badc0 / 255; // chia tỷ lệ mẫu bị trễ với chiết áp iw1 = 127 - badc1; // phần bù trừ từ mẫu mới iw1 = iw1 + iw; // thêm mẫu bị trễ và mẫu mới if (iw1 127) iw1 = 127; // Bộ giới hạn âm thanh bb = 127 + iw1; // thêm offset dd [icnt] = bb; // lưu trữ mẫu trong bộ đệm âm thanh icnt ++; icnt = icnt & 511; // giới hạn bufferindex 0..511 OCR2A = bb; // Giá trị mẫu cho đầu ra PWM

PORTD = PORTD ^ 128; đầu ra (trái, PORTD); // Đầu ra

} }

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; // điền vào vùng đệm 512 byte for (iw = 0; iw <= 511; iw ++) {// với 50 khoảng thời gian sinewawe fd = 127 * sin (fcnt); // âm cơ bản fcnt = fcnt + dx; // trong khoảng tăng từ 0 đến 2xpi và 1/512 bb = 127 + fd; // thêm phần bù dc vào sinewawe dd [iw] = bb; // ghi giá trị vào mảng

} }

// ************************************************ ****************** // Dịch vụ ngắt Timer2 ở 62,5 KHz // tại đây tín hiệu âm thanh và tín hiệu nồi được lấy mẫu theo tỷ lệ: 16Mhz / 256/2/2 = 15625 Hz ISR (TIMER2_OVF_vect) {

PORTB = PORTB | 1;

div32 =! div32; // chia tần số timer2 / 2 cho 31,25kHz if (div32) {div16 =! div16; if (div16) {// kênh mẫu 0 và 1 xen kẽ nên mỗi kênh được lấy mẫu với 15,6kHz badc0 = ADCH; // lấy kênh ADC 0 sbi (ADMUX, MUX0); // đặt bộ ghép kênh thành kênh 1} else {badc1 = ADCH; // lấy kênh ADC 1 cbi (ADMUX, MUX0); // đặt bộ ghép kênh thành kênh 0 f_sample = true; } ibb ++; ibb--; ibb ++; ibb--; // độ trễ ngắn trước khi bắt đầu chuyển đổi sbi (ADCSRA, ADSC); // bắt đầu chuyển đổi tiếp theo}

}

Bước 6: Video

Các vấn đề có thể xảy ra ● Pickup hơi quá yếu đối với mạch nguồn - cần một bộ khuếch đại op. - Trong video, chúng tôi đã sử dụng một bộ tăng cường tín hiệu. (Hộp màu xám nằm trên bàn.)

Đề xuất: