Índice:

NeckCrusher (pedal de efeito montado na guitarra): 6 etapas (com imagens)
NeckCrusher (pedal de efeito montado na guitarra): 6 etapas (com imagens)

Vídeo: NeckCrusher (pedal de efeito montado na guitarra): 6 etapas (com imagens)

Vídeo: NeckCrusher (pedal de efeito montado na guitarra): 6 etapas (com imagens)
Vídeo: Cyberpunk 2077 - O Filme | Jogo Completo PT 2 Final V 2024, Novembro
Anonim
NeckCrusher (pedal de efeito montado na guitarra)
NeckCrusher (pedal de efeito montado na guitarra)

Dale Rosen, Carlos Reyes e Rob Koch

DATT 2000

Etapa 1: Problema

Problema
Problema

Os pedais da guitarra restringem o músico à plataforma do pedal. Solução: Construa e incorpore uma funcionalidade de pedais de guitarra na própria guitarra. Isso permite que o músico se mova livremente pelo palco, usando o braço da guitarra como uma interface, em vez de ficar restrito ao local da pedaleira. Exploraremos esse conceito criando um dispositivo de efeito bitcrusher / taxa de amostragem.

Etapa 2: Contexto do projeto

Contexto do Projeto
Contexto do Projeto

Existem muitos pedais de guitarra usados por músicos para manipular o som de suas guitarras. A maioria deles é geralmente em unidades de rack ou stomp box, portanto, restringindo o controle dos efeitos à localização da unidade de efeitos. Montar o dispositivo na guitarra permite que os jogadores controlem os parâmetros do efeito em qualquer lugar do palco. Isso significa que eles não serão restringidos e podem ter a liberdade de se movimentar durante sua apresentação.

Como o Arduino só é capaz de áudio de 8 bits, é impossível fazer processamento de sinal de alta fidelidade. É por isso que escolhemos os efeitos que fizemos, pois eles se baseiam na criação de um som distorcido de baixa fidelidade. Esses são os únicos efeitos razoavelmente possíveis com um Arduino.

Etapa 3: Peças / ferramentas necessárias

Peças / ferramentas necessárias
Peças / ferramentas necessárias

● Exercício de impacto

● Cortadores de fio

● Decapantes de fio

● Ferro de soldar

● pistola de cola quente

● Bomba de dessoldagem

● Guitarra ● Caixa

● solda

● cola quente

● Arduino

● Proto Board

● Fio Revestido

● Conectores de áudio (x2)

● Potenciômetros (x3)

● Capacitores: 2,2 uF (x2)

● Fio de cobre exposto

● Parafusos (M3.5 * 8)

● Resistores: 1 k, 10 k, 1,2 k, 1,5 k, 390 k

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

Etapa 4: Estratégia Técnica

Estratégia Técnica
Estratégia Técnica

Circuito Interno

Entrada / Saída

Precisamos converter o sinal de áudio vindo de uma guitarra para algo que o arduino possa usar e modificar. Em seguida, precisaremos converter o sinal vindo do arduino de volta em um sinal de áudio. O Arduino lê tensões de 0 V a 5 V, os sinais de áudio vão de -1 V a 1 V. Essas conversões são feitas usando resistores. O sinal também será convertido no circuito de saída.

Biblioteca Arduino: ArduinoDSP

Descrição do projeto (interface)

Knobs Knob 1: Sample Rate

Botão 2: triturador de broca

Botão 3: Bit Shifter

Etapa 5: Código

Código
Código

#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;

volátil booleano f_sample; byte volátil badc0; byte volátil badc1; byte volátil 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]; // Matriz de memória de áudio de 8 bits

void setup () {setupIO ();

// recarrega a onda após 1 segundo fill_sinewave ();

// define o prescaler adc para 64 para frequência de amostragem de 19 kHz cbi (ADCSRA, ADPS2); sbi (ADCSRA, ADPS1); sbi (ADCSRA, ADPS0); // ADC de 8 bits no registro ADCH sbi (ADMUX, ADLAR); sbi (ADMUX, REFS0); cbi (ADMUX, REFS1); cbi (ADMUX, MUX0); cbi (ADMUX, MUX1); cbi (ADMUX, MUX2); cbi (ADMUX, MUX3); // Modo PWM Timer2 definido como PWM cbi rápido (TCCR2A, COM2A0); sbi (TCCR2A, COM2A1); sbi (TCCR2A, WGM20); sbi (TCCR2A, WGM21); // Configuração para Timer2 cbi (TCCR2B, WGM22); // Timer2 Clock Prescaler para: 1 sbi (TCCR2B, CS20); cbi (TCCR2B, CS21); cbi (TCCR2B, CS22); // Ativar porta PWM do Timer2 sbi (DDRB, 3); // cli (); cbi (TIMSK0, TOIE0); sbi (TIMSK2, TOIE2); iw1 = badc1;

}

void loop () {

// verifica o status do potenciômetro de efeito e da chave rotativa readKnobs ();

// ************* // ***Normal*** // *************

if (fx1 == 0 && fx2 == 0 && fx3 == 0 && fx4 == 0) {entrada de byte = analogRead (esquerda); saída (esquerda, entrada); }

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

if (fx4> 100) {

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

while (! f_sample) {// aguarde o valor da amostra do ADC} // Ciclo 15625 KHz = 64uSec PORTD = PORTD | 128; f_sample = false; bb = badc1; dd [icnt1] = bb; // escreve no buffer fx4 = iw * badc0 / 255; // escala a amostra atrasada com potenciômetro iw1 = dd [icnt2]; // lê o buffer de atraso badc0 = badc0 / 20; // limite o valor a 512 icnt1 ++; icnt2 = icnt1 - badc0; icnt2 = icnt2 & 511; // limite do índice 0.. icnt1 = icnt1 & 511; // limite do índice 0..511 iw2 = iw1 + bb; iw2 = iw2 / 2; bb = iw2; OCR2A = bb; // Valor de amostra para saída PWM

PORTD = PORTD ^ 128; saída (esquerda, PORTD); // Saída }

// ************* // *** Flanger *** // ************* if (fx3> 100) {

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

while (! f_sample) {// aguarde o valor da amostra do ADC} // Ciclo 15625 KHz = 64uSec

PORTD = PORTD | 128; f_sample = false; bb = dd [icnt]; // lê o buffer de atraso iw = 127 - bb; // deslocamento do substrato fx3 = iw * badc0 / 255; // escala a amostra atrasada com potenciômetro iw1 = 127 - badc1; // subtrai o deslocamento da nova amostra iw1 = iw1 + iw; // adiciona amostra atrasada e nova amostra if (iw1 127) iw1 = 127; // Limitador de áudio bb = 127 + iw1; // adiciona deslocamento dd [icnt] = bb; // armazena amostra no buffer de áudio icnt ++; icnt = icnt & 511; // limite bufferindex 0..511 OCR2A = bb; // Valor de amostra para saída PWM

PORTD = PORTD ^ 128; saída (esquerda, PORTD); // Saída

} }

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; // preencher o bufferarry de 512 bytes para (iw = 0; iw <= 511; iw ++) {// com 50 pontos sinewawe fd = 127 * sin (fcnt); // tom fundamental fcnt = fcnt + dx; // no intervalo de 0 a 2xpi e incrementos de 1/512 bb = 127 + fd; // adiciona deslocamento dc ao sinewawe dd [iw] = bb; // escreve o valor no array

} }

// ************************************************* ******************* // Serviço de interrupção do Timer2 a 62,5 KHz // aqui o sinal de áudio e pot é amostrado em uma taxa de: 16Mhz / 256/2/2 = 15625 Hz ISR (TIMER2_OVF_vect) {

PORTB = PORTB | 1;

div32 =! div32; // divide a frequência do cronômetro2 / 2 em 31,25 kHz if (div32) {div16 =! div16; if (div16) {// faz a amostragem do canal 0 e 1 alternadamente para que cada canal seja amostrado com 15,6 kHz badc0 = ADCH; // obtém canal ADC 0 sbi (ADMUX, MUX0); // define o multiplexador para o canal 1} else {badc1 = ADCH; // obtém canal ADC 1 cbi (ADMUX, MUX0); // define o multiplexador para o canal 0 f_sample = true; } ibb ++; ibb--; ibb ++; ibb--; // pequeno atraso antes de iniciar a conversão sbi (ADCSRA, ADSC); // inicia a próxima conversão}

}

Etapa 6: Vídeo

Problemas potenciais ● O captador está um pouco fraco para o circuito de alimentação - precisa de um amplificador operacional. - No vídeo usamos um amplificador de sinal. (A caixa cinza sobre a mesa.)

Recomendado: