Table des matières:

NeckCrusher (pédale d'effet montée sur guitare) : 6 étapes (avec photos)
NeckCrusher (pédale d'effet montée sur guitare) : 6 étapes (avec photos)

Vidéo: NeckCrusher (pédale d'effet montée sur guitare) : 6 étapes (avec photos)

Vidéo: NeckCrusher (pédale d'effet montée sur guitare) : 6 étapes (avec photos)
Vidéo: Marvel's Guardians of The Galaxy Gameplay Walkthrough [Full Game Movie - All Cutscenes Playthrough] 2024, Novembre
Anonim
NeckCrusher (pédale d'effet montée sur guitare)
NeckCrusher (pédale d'effet montée sur guitare)

Dale Rosen, Carlos Reyes et Rob Koch

DATT 2000

Étape 1: Problème

Problème
Problème

Les pédales de guitare restreignent le musicien à la plate-forme de pédale. Solution: créez et intégrez une fonctionnalité de pédale de guitare dans la guitare elle-même. Cela permet au musicien de se déplacer librement sur la scène, en utilisant le manche de la guitare comme interface au lieu d'être limité à l'emplacement du pédalier. Nous allons explorer ce concept en créant un dispositif d'effet bitcrusher/taux d'échantillonnage.

Étape 2: Contexte du projet

Contexte du projet
Contexte du projet

Il existe de nombreuses pédales de guitare utilisées par les musiciens pour manipuler le son de leurs guitares. La plupart d'entre eux se trouvent généralement dans des unités de rack ou de pédales, limitant ainsi le contrôle des effets à l'emplacement de l'unité d'effets. Le montage de l'appareil sur la guitare permet aux joueurs de contrôler les paramètres de l'effet n'importe où sur la scène. Cela signifie qu'ils ne seront pas limités et peuvent avoir la liberté de se déplacer pour leur performance.

Étant donné qu'Arduino n'est capable que de l'audio 8 bits, il est impossible de faire un traitement de signal haute fidélité. C'est pourquoi nous avons choisi les effets que nous avons réalisés, car ils sont basés sur la création d'un son basse fidélité et déformé. Ce sont les seuls effets raisonnablement possibles avec un Arduino.

Étape 3: pièces/outils requis

Pièces/outils requis
Pièces/outils requis

● Perceuse à percussion

● Coupe-fils

● Pince à dénuder

● Fer à souder

● Pistolet à colle chaude

● Pompe à dessouder

● Guitare● Enceinte

● Soudure

● Colle chaude

● Arduino

● Carte Proto

● Fil enduit

● Prises audio (x2)

● Potentiomètres (x3)

● Condensateurs: 2,2 uF (x2)

● Fil de cuivre exposé

● Vis (M3.5 *8)

● Résistances: 1 k, 10 k, 1,2 k, 1,5 k, 390 k

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

Étape 4: Stratégie technique

Stratégie technique
Stratégie technique

Circuits internes

Entrée sortie

Nous devons convertir le signal audio provenant d'une guitare en quelque chose que l'arduino peut utiliser et modifier. Nous devrons ensuite reconvertir le signal provenant de l'arduino en un signal audio. Arduino lit les tensions de 0V à 5V, les signaux audio sont de -1V à 1V. Ces conversions se font à l'aide de résistances. Le signal sera également converti dans le circuit de sortie.

Bibliothèque Arduino: ArduinoDSP

Description du projet (Interface)

Boutons Bouton 1: Taux d'échantillonnage

Bouton 2: Broyeur d'embouts

Bouton 3: Bit Shifter

Étape 5: Coder

Code
Code

#include "dsp.h"

#définir cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) #définir sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))

booléen div32; div16 booléen;

f_sample booléen volatile; octet volatile badc0; octet volatile badc1; octet volatile ibb;

entier fx1; entier fx2; entier fx3; entier fx4;

int cnta; int icnt; int icnt1; int icnt2; int cnt2; int iw; int iw1; int iw2; octet bb;

octet dd[512]; // Matrice de mémoire audio 8 bits

void setup() { setupIO();

// recharge la vague après 1 seconde fill_sinewave();

// régler le prédimensionneur adc sur 64 pour une fréquence d'échantillonnage de 19 kHz cbi (ADCSRA, ADPS2); sbi(ADCSRA, ADPS1); sbi(ADCSRA, ADPS0); // CAN 8 bits dans le registre ADCH sbi(ADMUX, ADLAR); sbi(ADMUX, REFS0); cbi(ADMUX, REFS1); cbi(ADMUX, MUX0); cbi(ADMUX, MUX1); cbi(ADMUX, MUX2); cbi(ADMUX, MUX3); // Mode PWM Timer2 réglé sur cbi PWM rapide (TCCR2A, COM2A0); sbi (TCCR2A, COM2A1); sbi (TCCR2A, WGM20); sbi (TCCR2A, WGM21); //Configuration pour Timer2 cbi (TCCR2B, WGM22); // Timer2 Clock Prescaler à: 1 sbi (TCCR2B, CS20); cbi (TCCR2B, CS21); cbi (TCCR2B, CS22); // Activation du port PWM Timer2 sbi(DDRB, 3); //cli(); cbi (TIMSK0, TOIE0); sbi (TIMSK2, TOOIE2); iw1 = badc1;

}

boucle vide() {

//vérifier l'état du potentiomètre d'effet et du commutateur rotatif readKnobs();

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

if (fx1 == 0 && fx2 == 0 && fx3 == 0 && fx4 == 0) { byte input = analogRead(left); sortie (gauche, entrée); }

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

si (fx4 > 100) {

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

while (!f_sample) { // attend la valeur de l'échantillon de l'ADC } // Cycle 15625 KHz = 64uSec PORTD = PORTD | 128; f_échantillon = faux; bb = badc1; dd[icnt1] = bb; // écrit dans le tampon fx4 = iw * badc0 / 255; // échelle de l'échantillon retardé avec le potentiomètre iw1 = dd[icnt2]; // lit le tampon de retard badc0 = badc0 / 20; // valeur limite à 512 icnt1++; icnt2 = icnt1 - badc0; icnt2 = icnt2 & 511; // index limite 0.. icnt1 = icnt1 & 511; // index limite 0..511 iw2 = iw1 + bb; iw2 = iw2 / 2; bb = iw2; OCR2A = bb; // Exemple de valeur vers la sortie PWM

PORTD = PORTD ^ 128; sortie(gauche, PORTD); // Sortir }

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

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

while (!f_sample) { // attend la valeur de l'échantillon de l'ADC } // Cycle 15625 KHz = 64uSec

PORTD = PORTD | 128; f_échantillon = faux; bb = dd[icnt]; // lit le tampon de retard iw = 127 - bb; // soustrait le décalage fx3 = iw * badc0 / 255; // échelle échantillon retardé avec potentiomètre iw1 = 127 - badc1; // soustrait le décalage du nouvel échantillon iw1 = iw1 + iw; // ajoute un échantillon retardé et un nouvel échantillon if (iw1 127) iw1 = 127; // Limiteur audio bb = 127 + iw1; // ajoute un décalage dd[icnt] = bb; // stocker l'échantillon dans le tampon audio icnt++; icnt = icnt & 511; // limite bufferindex 0..511 OCR2A = bb; // Exemple de valeur vers la sortie PWM

PORTD = PORTD ^ 128; sortie(gauche, PORTD); // Sortir

} }

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

}

void fill_sinewave() { float pi = 3.141592; flotteur dx; float fd; float fcnt; dx = 2 * pi / 512; // remplit le bufferarry de 512 octets pour (iw = 0; iw <= 511; iw++) { // avec 50 périodes sinusoïdale fd = 127 * sin(fcnt); // tonalité fondamentale fcnt = fcnt + dx; // dans la plage de 0 à 2xpi et incréments de 1/512 bb = 127 + fd; // ajoute un décalage continu à la sinusoïde dd[iw] = bb; // écrit la valeur dans le tableau

} }

//****************************************************** ****************** // Timer2 Interrupt Service à 62,5 KHz // ici le signal audio et potentiomètre est échantillonné à une fréquence de: 16Mhz / 256 / 2 / 2 = 15625 Hz ISR(TIMER2_OVF_vect) {

PORTB = PORTB | 1;

div32 = !div32; // diviser la fréquence timer2 / 2 à 31,25 kHz if (div32) { div16 = !div16; if (div16) { // échantillonner les canaux 0 et 1 alternativement afin que chaque canal soit échantillonné avec 15,6 kHz badc0 = ADCH; // obtenir le canal ADC 0 sbi(ADMUX, MUX0); // régler le multiplexeur sur le canal 1 } else { badc1 = ADCH; // obtenir le canal ADC 1 cbi(ADMUX, MUX0); // règle le multiplexeur sur le canal 0 f_sample = true; } ibb++; ibb--; ibb++; ibb--; // court délai avant le démarrage de la conversion sbi(ADCSRA, ADSC); // lancer la prochaine conversion }

}

Étape 6: Vidéo

Problèmes potentiels ● Le micro est un peu trop faible pour alimenter le circuit - nécessite un ampli op. - Dans la vidéo, nous avons utilisé un amplificateur de signal. (La boîte grise posée sur la table.)

Conseillé: