Съдържание:

NeckCrusher (педал за монтиран на китара ефект): 6 стъпки (със снимки)
NeckCrusher (педал за монтиран на китара ефект): 6 стъпки (със снимки)

Видео: NeckCrusher (педал за монтиран на китара ефект): 6 стъпки (със снимки)

Видео: NeckCrusher (педал за монтиран на китара ефект): 6 стъпки (със снимки)
Видео: Part 1 - A Connecticut Yankee in King Arthur's Court Audiobook by Mark Twain (Chs 01-06) 2024, Ноември
Anonim
NeckCrusher (Педал за ефект с монтирана на китара)
NeckCrusher (Педал за ефект с монтирана на китара)

Дейл Розен, Карлос Рейес и Роб Кох

DATT 2000

Стъпка 1: Проблем

Проблем
Проблем

Педалите за китара ограничават музиканта до платформата на педалите. Решение: Изградете и вградете функционалност на педалите за китара в самата китара. Това позволява на музиканта да се движи свободно по сцената, използвайки китарната шия като интерфейс, вместо да бъде ограничена до местоположението на педалната дъска. Ще проучим тази концепция, като създадем устройство за битръкшър/честота на дискретизация.

Стъпка 2: Контекст на проекта

Контекст на проекта
Контекст на проекта

Има много педали за китара, използвани от музикантите за манипулиране на звука на техните китари. Повечето от тях обикновено са в блокове, базирани на стелажи или кутии, което ограничава контрола на ефектите до местоположението на блока за ефекти. Монтирането на устройството върху китарата дава възможност на играчите да контролират параметрите на ефекта навсякъде по сцената. Това означава, че те няма да бъдат ограничени и могат да имат свободата да се движат за своето представяне.

Тъй като Arduino е способен само на 8 -битово аудио, е невъзможно да се извърши обработка на сигнал с висока точност. Ето защо избрахме ефектите, които направихме, тъй като те се основават на създаване на ниска вярност, изкривен звук. Това са единствените ефекти, които са разумно възможни с Arduino.

Стъпка 3: Необходими са части / инструменти

Необходими са части / инструменти
Необходими са части / инструменти

● Ударна бормашина

● Резачки за тел

● Машини за отстраняване на тел

● Поялник

● Пистолет за горещо лепило

● Помпа за разпаяване

● Китара ● Корпус

● Припой

● Горещо лепило

● Arduino

● Proto Board

● Тел с покритие

● Аудио жакове (x2)

● Потенциометри (x3)

● Кондензатори: 2.2 uF (x2)

● Открит меден проводник

● Винтове (M3.5 *8)

● Резистори: 1 k, 10 k, 1.2 k, 1.5 k, 390 k

● * Операционен усилвател (LM358) / * Транзистор (2N3442)

Стъпка 4: Техническа стратегия

Техническа стратегия
Техническа стратегия

Вътрешна схема

Вход изход

Трябва да преобразуваме аудио сигнала, идващ от китара, в нещо, което arduino може да използва и модифицира. След това ще трябва да преобразуваме сигнала, идващ от arduino обратно, в аудио сигнал. Arduino чете напрежения от 0V до 5V, аудио сигналите са от -1V до 1V. Тези преобразувания се извършват с помощта на резистори. Сигналът ще бъде преобразуван и в изходната верига.

Библиотека Arduino: ArduinoDSP

Описание на проекта (интерфейс)

Копчета Копче 1: Честота на дискретизация

Копче 2: Бит трошачка

Копче 3: Bit Shifter

Стъпка 5: Код

Код
Код

#include "dsp.h"

#дефинирайте cbi (sfr, бит) (_SFR_BYTE (sfr) & = ~ _BV (бит)) #дефинирайте sbi (sfr, бит) (_SFR_BYTE (sfr) | = _BV (бит))

булев 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;

байт dd [512]; // Аудио памет масив 8-битов

void setup () {setupIO ();

// презареждане на вълната след 1 секунда fill_sinewave ();

// настройте adc prescaler на 64 за 19kHz честота на семплиране cbi (ADCSRA, ADPS2); sbi (ADCSRA, ADPS1); sbi (ADCSRA, ADPS0); // 8-битов ADC в ADCH регистър sbi (ADMUX, ADLAR); sbi (ADMUX, REFS0); cbi (ADMUX, REFS1); cbi (ADMUX, MUX0); cbi (ADMUX, MUX1); cbi (ADMUX, MUX2); cbi (ADMUX, MUX3); // Таймер2 PWM режим настроен на бърза ШИМ cbi (TCCR2A, COM2A0); sbi (TCCR2A, COM2A1); sbi (TCCR2A, WGM20); sbi (TCCR2A, WGM21); // Настройка за Timer2 cbi (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;

}

void loop () {

// проверява състоянието на потенциометъра на ефекта и въртящия се ключ readKnobs ();

// ************* // *** Нормално *** // *************

if (fx1 == 0 && fx2 == 0 && fx3 == 0 && fx4 == 0) {байт вход = analogRead (вляво); изход (вляво, вход); }

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

ако (fx4> 100) {

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

while (! f_sample) {// изчакайте Sample Value от ADC} // Цикъл 15625 KHz = 64uSec PORTD = PORTD | 128; f_sample = false; 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 *** // ************* if (fx3> 100) {

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

while (! f_sample) {// изчакайте Sample Value от ADC} // Цикъл 15625 KHz = 64uSec

PORTD = PORTD | 128; f_sample = false; 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; // ограничаване на буферния индекс 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; float dx; float fd; float 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; // записва стойност в масив

} }

// ************************************************ ********** Hz ISR (TIMER2_OVF_vect) {

PORTB = PORTB | 1;

div32 =! div32; // разделяне на таймер2 на честота / 2 до 31.25kHz if (div32) {div16 =! div16; if (div16) {// пробен канал 0 и 1 последователно, така че всеки канал е избран с 15.6kHz badc0 = ADCH; // получаваме ADC канал 0 sbi (ADMUX, MUX0); // задаваме мултиплексор на канал 1} else {badc1 = ADCH; // получаваме ADC канал 1 cbi (ADMUX, MUX0); // задаваме мултиплексор на канал 0 f_sample = true; } ibb ++; ibb-; ibb ++; ibb-; // кратко забавяне преди стартиране на преобразуване sbi (ADCSRA, ADSC); // стартиране на следващото преобразуване}

}

Стъпка 6: Видео

Потенциални проблеми ● Пикапът е малко прекалено слаб за захранващата верига - нуждаете се от операционен усилвател. - Във видеото използвахме усилвател на сигнала. (Сивата кутия лежи на масата.)

Препоръчано: