Inhaltsverzeichnis:

NeckCrusher (Gitarrenmontiertes Effektpedal) - Gunook
NeckCrusher (Gitarrenmontiertes Effektpedal) - Gunook

Video: NeckCrusher (Gitarrenmontiertes Effektpedal) - Gunook

Video: NeckCrusher (Gitarrenmontiertes Effektpedal) - Gunook
Video: Neckcrusher 2024, Juli
Anonim
NeckCrusher (Gitarrenmontiertes Effektpedal)
NeckCrusher (Gitarrenmontiertes Effektpedal)

Dale Rosen, Carlos Reyes und Rob Koch

DATT 2000

Schritt 1: Problem

Problem
Problem

Gitarrenpedale beschränken den Musiker auf die Pedalplattform. Lösung: Bauen und betten Sie eine Gitarrenpedal-Funktionalität in die Gitarre selbst ein. Dies ermöglicht es dem Musiker, sich frei über die Bühne zu bewegen und den Gitarrenhals als Schnittstelle zu verwenden, anstatt auf die Position des Pedalboards beschränkt zu sein. Wir werden dieses Konzept untersuchen, indem wir ein Bitcrusher/Sample-Rate-Effektgerät entwickeln.

Schritt 2: Projektkontext

Projektkontext
Projektkontext

Es gibt viele Gitarrenpedale, die von Musikern verwendet werden, um den Klang ihrer Gitarren zu manipulieren. Die meisten davon befinden sich normalerweise in Rack- oder Stomp-Box-Einheiten, wodurch die Kontrolle der Effekte auf den Standort der Effekteinheit beschränkt ist. Die Montage des Geräts an der Gitarre ermöglicht es den Spielern, die Parameter des Effekts überall auf der Bühne zu steuern. Dies bedeutet, dass sie nicht eingeschränkt werden und sich für ihre Leistung frei bewegen können.

Da Arduino nur 8-Bit-Audio unterstützt, ist es unmöglich, eine High-Fidelity-Signalverarbeitung durchzuführen. Aus diesem Grund haben wir uns für die von uns verwendeten Effekte entschieden, da sie auf der Erzeugung eines verzerrten Klangs mit geringer Wiedergabetreue basieren. Dies sind die einzigen Effekte, die mit einem Arduino vernünftigerweise möglich sind.

Schritt 3: Erforderliche Teile / Werkzeuge

Erforderliche Teile / Werkzeuge
Erforderliche Teile / Werkzeuge

● Schlagbohrmaschine

● Drahtschneider

● Abisolierzangen

● Lötkolben

● Heißklebepistole

● Entlötpumpe

● Gitarre● Gehäuse

● Löten

● Heißkleber

● Arduino

● Proto-Board

● Beschichteter Draht

● Audiobuchsen (x2)

● Potentiometer (x3)

● Kondensatoren: 2,2 uF (x2)

● Freiliegender Kupferdraht

● Schrauben (M3,5 *8)

● Widerstände: 1 k, 10 k, 1,2 k, 1,5 k, 390 k

● * Operationsverstärker (LM358) / * Transistor (2N3442)

Schritt 4: Technische Strategie

Technische Strategie
Technische Strategie

Interne Schaltung

Input-Output

Wir müssen das Audiosignal einer Gitarre in etwas umwandeln, das das Arduino verwenden und ändern kann. Wir müssen dann das vom Arduino kommende Signal wieder in ein Audiosignal umwandeln. Arduino liest Spannungen von 0V bis 5V, Audiosignale sind von -1V bis 1V. Diese Umwandlungen werden mit Widerständen durchgeführt. Das Signal wird auch im Ausgangskreis gewandelt.

Arduino-Bibliothek: ArduinoDSP

Projektbeschreibung (Schnittstelle)

Drehregler Drehregler 1: Abtastrate

Knopf 2: Bit Crusher

Knopf 3: Bit-Shifter

Schritt 5: Code

Code
Code

#include "dsp.h"

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

boolesches div32; boolesches div16;

volatile boolesche f_sample; flüchtiges Byte badc0; flüchtiges Byte badc1; flüchtiges Byte 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]; // Audio-Speicher-Array 8-Bit

Void setup () { setupIO ();

// Welle nach 1 Sekunde neu laden fill_sinewave ();

// Adc-Prescaler auf 64 für 19 kHz Abtastfrequenz setzen cbi (ADCSRA, ADPS2); sbi(ADCSRA, ADPS1); sbi(ADCSRA, ADPS0); // 8-Bit-ADC im ADCH-Register sbi (ADMUX, ADLAR); sbi(ADMUX, REFS0); cbi(ADMUX, REFS1); cbi(ADMUX, MUX0); cbi(ADMUX, MUX1); cbi(ADMUX, MUX2); cbi(ADMUX, MUX3); // Timer2 PWM-Modus auf schnelles PWM cbi (TCCR2A, COM2A0) eingestellt; sbi (TCCR2A, COM2A1); sbi (TCCR2A, WGM20); sbi (TCCR2A, WGM21); // Setup für Timer2 cbi (TCCR2B, WGM22); // Timer2 Clock Prescaler auf: 1 sbi (TCCR2B, CS20); cbi (TCCR2B, CS21); cbi (TCCR2B, CS22); // Timer2 PWM-Port aktivieren sbi (DDRB, 3); //cli(); cbi (TIMSK0, TOIE0); sbi (TIMSK2, TOIE2); iw1 = badc1;

}

Leere Schleife () {

// Status des Effektpotentiometers und des Drehschalters überprüfen readKnobs ();

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

if (fx1 == 0 && fx2 == 0 && fx3 == 0 && fx4 == 0) { Byte-Eingang = analogRead (links); Ausgang (links, Eingang); }

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

wenn (fx4 > 100) {

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

while (!f_sample) {// auf Sample Value vom ADC warten} // Zyklus 15625 KHz = 64uSec PORTD = PORTD | 128; f_sample = falsch; bb = badc1; dd[icnt1] = bb; // in Puffer schreiben fx4 = iw * badc0 / 255; // Verzögertes Sample mit Potentiometer skalieren iw1 = dd[icnt2]; // Verzögerungspuffer lesen badc0 = badc0 / 20; // Grenzwert auf 512 icnt1++ begrenzen; icnt2 = icnt1 - badc0; icnt2 = icnt2 & 511; // Begrenzungsindex 0.. icnt1 = icnt1 & 511; // Grenzwertindex 0..511 iw2 = iw1 + bb; iw2 = iw2 / 2; bb = iw2; OCR2A = bb; // Abtastwert zum PWM-Ausgang

PORTD = PORTD ^ 128; Ausgang (links, PORTD); // Ausgabe }

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

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

while (!f_sample) {// auf Sample Value vom ADC warten} // Zyklus 15625 KHz = 64uSec

PORTD = PORTD | 128; f_sample = falsch; bb = dd[icnt]; // den Verzögerungspuffer lesen iw = 127 - bb; // Offset subtrahieren fx3 = iw * badc0 / 255; // verzögertes Sample mit Potentiometer skalieren iw1 = 127 - badc1; // Offset vom neuen Sample subtrahieren iw1 = iw1 + iw; // verzögertes Sample und neues Sample hinzufügen if (iw1 127) iw1 = 127; // Audiobegrenzer bb = 127 + iw1; // Offset hinzufügen dd[icnt] = bb; // Sample im Audiopuffer speichern icnt++; icnt = icnt & 511; // Pufferindex 0..511 begrenzen OCR2A = bb; // Abtastwert zum PWM-Ausgang

PORTD = PORTD ^ 128; Ausgang (links, PORTD); // Ausgabe

} }

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

}

Void fill_sinewave () { float pi = 3,141592; schweben dx; schweben fd; Schwimmer-Fkt; dx = 2 * pi / 512; // Fülle die 512 Byte Bufferarry für (iw = 0; iw <= 511; iw++) { // mit 50 Perioden sinewawe fd = 127 * sin(fcnt); // Grundton fcnt = fcnt + dx; // im Bereich von 0 bis 2xpi und 1/512 Inkrementen bb = 127 + fd; // DC-Offset zu Sinewawe hinzufügen dd[iw] = bb; // Wert in Array schreiben

} }

//************************************************ ****************** // Timer2 Interrupt Service bei 62,5 KHz // hier wird das Audio- und Pot-Signal mit einer Rate von 16Mhz / 256 / 2 / 2 = 15625. abgetastet Hz ISR(TIMER2_OVF_vect) {

PORTB = PORTB | 1;

div32 = !div32; // Timer2-Frequenz teilen / 2 bis 31,25 kHz if (div32) {div16 =!div16; if (div16) { // Kanal 0 und 1 abwechselnd abtasten, sodass jeder Kanal mit 15,6 kHz abgetastet wird badc0 = ADCH; // ADC-Kanal 0 abrufen sbi (ADMUX, MUX0); // Multiplexer auf Kanal 1 setzen} else {badc1 = ADCH; // ADC-Kanal 1 abrufen cbi (ADMUX, MUX0); // Multiplexer auf Kanal 0 setzen f_sample = true; } ibb++; ibb--; ibb++; ibb--; // kurze Verzögerung vor dem Start der Konvertierung sbi (ADCSRA, ADSC); // nächste Konvertierung starten }

}

Schritt 6: Video

Potenzielle Probleme ● Der Pickup ist etwas zu schwach, um den Stromkreis zu versorgen - benötigen Sie einen Operationsverstärker. - Im Video haben wir einen Signalverstärker verwendet. (Die graue Kiste liegt auf dem Tisch.)