Оглавление:

NeckCrusher (педаль эффектов, установленная на гитаре): 6 шагов (с изображениями)
NeckCrusher (педаль эффектов, установленная на гитаре): 6 шагов (с изображениями)

Видео: NeckCrusher (педаль эффектов, установленная на гитаре): 6 шагов (с изображениями)

Видео: NeckCrusher (педаль эффектов, установленная на гитаре): 6 шагов (с изображениями)
Видео: RAN Crusher FF8 test 2024, Ноябрь
Anonim
NeckCrusher (педаль эффектов, установленная на гитаре)
NeckCrusher (педаль эффектов, установленная на гитаре)

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

DATT 2000

Шаг 1. Проблема

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

Педали гитары ограничивают музыканта педальной платформой. Решение: встроить функциональность гитарных педалей в саму гитару. Это позволяет музыканту свободно перемещаться по сцене, используя гриф гитары в качестве интерфейса вместо того, чтобы быть ограниченным местоположением педалборда. Мы будем исследовать эту концепцию, создав устройство эффекта битового дробления / частоты дискретизации.

Шаг 2: контекст проекта

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

Музыканты используют множество гитарных педалей для управления звуком своих гитар. Большинство из них обычно находятся в рэковых модулях или стомп-боксах, поэтому управление эффектами ограничивается местоположением модуля эффектов. Установка устройства на гитаре позволяет игрокам управлять параметрами эффекта в любом месте сцены. Это означает, что они не будут ограничены и могут свободно передвигаться во время выступления.

Поскольку Arduino поддерживает только 8-битный звук, обработка сигналов с высокой точностью невозможна. Вот почему мы выбрали созданные нами эффекты, поскольку они основаны на создании искаженного звука с низкой точностью. Это единственные эффекты, которые разумно возможны с Arduino.

Шаг 3: Необходимые детали / инструменты

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

● Ударная дрель

● Кусачки

● Устройства для зачистки проводов

● Паяльник.

● Пистолет для горячего клея.

● Демонтажный насос

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

● Припой

● Горячий клей

● Arduino

● Proto Board

● Проволока с покрытием

● Аудиоразъемы (2 шт.)

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

● Конденсаторы: 2,2 мкФ (x2)

● оголенный медный провод

● Винты (M3,5 * 8)

● Резисторы: 1 кОм, 10 кОм, 1,2 кОм, 1,5 кОм, 390 кОм

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

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

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

Внутренняя схема

Ввод, вывод

Нам нужно преобразовать звуковой сигнал, исходящий от гитары, во что-то, что Arduino может использовать и изменять. Затем нам нужно будет преобразовать сигнал, поступающий от Arduino, обратно в аудиосигнал. Arduino считывает напряжения от 0 В до 5 В, аудиосигналы от -1 до 1 В. Эти преобразования выполняются с помощью резисторов. Сигнал также будет преобразован в выходной цепи.

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

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

Ручки Ручка 1: Частота дискретизации

Ручка 2: Битовая дробилка

Ручка 3: Bit Shifter

Шаг 5: Код

Код
Код

#include "dsp.h"

#define cbi (sfr, bit) (_SFR_BYTE (sfr) & = ~ _BV (bit)) #define sbi (sfr, bit) (_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 ();

// устанавливаем предварительный делитель АЦП равным 64 для частоты дискретизации 19 кГц cbi (ADCSRA, ADPS2); sbi (ADCSRA, ADPS1); sbi (ADCSRA, ADPS0); // 8-битный АЦП в регистре ADCH sbi (ADMUX, ADLAR); sbi (ADMUX, REFS0); cbi (ADMUX, REFS1); cbi (ADMUX, MUX0); cbi (ADMUX, MUX1); cbi (ADMUX, MUX2); cbi (ADMUX, MUX3); // Timer2 PWM Mode установлен на быстрый PWM cbi (TCCR2A, COM2A0); sbi (TCCR2A, COM2A1); sbi (TCCR2A, WGM20); sbi (TCCR2A, WGM21); // Настройка Timer2 cbi (TCCR2B, WGM22); // Предделитель тактовых импульсов Timer2 до: 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) {byte input = analogRead (слева); вывод (слева, ввод); }

// ************* // *** Фазор *** // *************

if (fx4> 100) {

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

while (! f_sample) {// ждать значения выборки от АЦП} // Цикл 15625 кГц = 64uSec PORTD = PORTD | 128; f_sample = false; bb = badc1; дд [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); // Выход }

// ************* // *** Флэнджер *** // ************* if (fx3> 100) {

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

while (! f_sample) {// ждать значения выборки от АЦП} // Цикл 15625 кГц = 64uSec

PORTD = PORTD | 128; f_sample = false; bb = dd [icnt]; // читаем буфер задержки iw = 127 - bb; // вычесть смещение fx3 = iw * badc0 / 255; // масштабирование отсроченного отсчета с помощью потенциометра iw1 = 127 - badc1; // вычесть смещение из нового отсчета iw1 = iw1 + iw; // добавляем отсроченную выборку и новую выборку if (iw1 127) iw1 = 127; // Ограничитель звука bb = 127 + iw1; // добавляем смещение dd [icnt] = bb; // сохраняем сэмпл в аудиобуфер icnt ++; icnt = icnt & 511; // ограничить bufferindex 0..511 OCR2A = bb; // Пример значения для вывода PWM

PORTD = PORTD ^ 128; вывод (слева, PORTD); // Выход

} }

недействительным 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; дх = 2 * пи / 512; // заполняем 512-байтовый буфер для (iw = 0; iw <= 511; iw ++) {// 50 периодов sinewawe fd = 127 * sin (fcnt); // основной тон fcnt = fcnt + dx; // в диапазоне от 0 до 2xpi и с шагом 1/512 bb = 127 + fd; // добавляем смещение постоянного тока в sinewawe dd [iw] = bb; // записываем значение в массив

} }

// *********************************************** ****************** // Служба прерывания Timer2 на 62,5 кГц // здесь аудио и сигнал потенциометра дискретизируются с частотой: 16 МГц / 256/2/2 = 15625 Гц ISR (TIMER2_OVF_vect) {

PORTB = PORTB | 1;

div32 =! div32; // делим частоту таймера2 / 2 на 31,25 кГц if (div32) {div16 =! div16; if (div16) {// выборка каналов 0 и 1 поочередно, поэтому для каждого канала выполняется выборка с частотой 15,6 кГц badc0 = ADCH; // получаем канал 0 АЦП sbi (ADMUX, MUX0); // установить мультиплексор на канал 1} else {badc1 = ADCH; // получаем канал АЦП 1 cbi (ADMUX, MUX0); // установить мультиплексор на канал 0 f_sample = true; } ibb ++; ibb--; ibb ++; ibb--; // небольшая задержка перед началом преобразования sbi (ADCSRA, ADSC); // запуск следующего преобразования}

}

Шаг 6: видео

Возможные проблемы ● Датчик слишком слаб для цепи питания - нужен операционный усилитель. - В видео мы использовали усилитель сигнала. (Серая коробка, лежащая на столе.)

Рекомендуемые: