Spisu treści:

NeckCrusher (pedał efektów montowany na gitarze): 6 kroków (ze zdjęciami)
NeckCrusher (pedał efektów montowany na gitarze): 6 kroków (ze zdjęciami)

Wideo: NeckCrusher (pedał efektów montowany na gitarze): 6 kroków (ze zdjęciami)

Wideo: NeckCrusher (pedał efektów montowany na gitarze): 6 kroków (ze zdjęciami)
Wideo: Part 2 - The Return of Sherlock Holmes Audiobook by Sir Arthur Conan Doyle (Adventures 04-05) 2024, Grudzień
Anonim
NeckCrusher (pedał efektów montowany na gitarze)
NeckCrusher (pedał efektów montowany na gitarze)

Dale Rosen, Carlos Reyes i Rob Koch

DATT 2000

Krok 1: Problem

Problem
Problem

Pedały gitarowe ograniczają muzyka do platformy pedałów. Rozwiązanie: Zbuduj i osadź funkcjonalność pedałów gitarowych w samej gitarze. Pozwala to muzykowi na swobodne poruszanie się po scenie, używając gryfu gitary jako interfejsu zamiast ograniczania się do położenia pedału. Będziemy badać tę koncepcję, tworząc urządzenie z efektem kruszenia bitów/częstotliwości próbkowania.

Krok 2: Kontekst projektu

Kontekst projektu
Kontekst projektu

Istnieje wiele pedałów gitarowych używanych przez muzyków do manipulowania dźwiękiem ich gitar. Większość z nich znajduje się zwykle w jednostkach typu rack lub stomp box, co ogranicza kontrolę efektów do lokalizacji jednostki efektów. Zamontowanie urządzenia na gitarze pozwala graczom kontrolować parametry efektu w dowolnym miejscu na scenie. Oznacza to, że nie będą podlegać ograniczeniom i będą mogli swobodnie poruszać się w celu wykonania swojej pracy.

Ponieważ Arduino obsługuje tylko dźwięk 8-bitowy, niemożliwe jest przetwarzanie sygnału o wysokiej wierności. Dlatego wybraliśmy efekty, które wykonaliśmy, ponieważ opierają się na tworzeniu niskiej wierności, zniekształconego dźwięku. To jedyne efekty, które są rozsądnie możliwe z Arduino.

Krok 3: Wymagane części/narzędzia

Wymagane części/narzędzia
Wymagane części/narzędzia

● Wiertarka udarowa

● Przecinaki do drutu

● Narzędzie do ściągania izolacji

● Lutownica

● Pistolet do klejenia na gorąco

● Pompa rozlutowująca

● Gitara● Obudowa

● Lutowane

● Gorący Klej

● Arduino

● Prototablica

● Drut powlekany

● Gniazda audio (x2)

● Potencjometry (x3)

● Kondensatory: 2,2 uF (x2)

● Odsłonięty drut miedziany

● Śruby (M3,5*8)

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

● * Wzmacniacz operacyjny (LM358) / * Tranzystor (2N3442)

Krok 4: Strategia techniczna

Strategia techniczna
Strategia techniczna

Obwody wewnętrzne

Wejście wyjście

Musimy przekonwertować sygnał audio pochodzący z gitary na coś, co arduino może używać i modyfikować. Następnie będziemy musieli przekonwertować sygnał pochodzący z arduino z powrotem na sygnał audio. Arduino odczytuje napięcia od 0V do 5V, sygnały audio od -1V do 1V. Te konwersje są wykonywane za pomocą rezystorów. Sygnał będzie konwertowany również w obwodzie wyjściowym.

Biblioteka Arduino: ArduinoDSP

Opis projektu (interfejs)

Pokrętła Pokrętło 1: Częstotliwość próbkowania

Pokrętło 2: Kruszarka do bitów

Pokrętło 3: przesuwanie bitów

Krok 5: Kod

Kod
Kod

#include "dsp.h"

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

boolowski div32; boolowski div16;

lotna wartość logiczna f_sample; ulotny bajt badc0; ulotny bajt badc1; ulotny bajt ibb;

int fx1; int fx2; int fx3; int fx4;

wewn cnt; wewn. int int1; int icnt2; int cnt2; wew; int iw1; int iw2; bajt bb;

bajt dd[512]; // 8-bitowa macierz pamięci audio

void setup() { setupIO();

// przeładowanie fali po 1 sekundzie fill_sinewave();

// ustaw preskaler adc na 64 dla częstotliwości próbkowania 19kHz cbi(ADCSRA, ADPS2); sbi(ADCSRA, ADPS1); sbi(ADCSRA, ADPS0); // 8-bitowy ADC w ADCH Rejestr sbi(ADMUX, ADLAR); sbi(ADMUX, REFS0); cbi(ADMUX, REFS1); cbi(ADMUX, MUX0); cbi(ADMUX, MUX1); cbi(ADMUX, MUX2); cbi(ADMUX, MUX3); // Tryb Timer2 PWM ustawiony na szybki PWM cbi (TCCR2A, COM2A0); sbi (TCCR2A, COM2A1); sbi (TCCR2A, WGM20); sbi (TCCR2A, WGM21); //Konfiguracja dla Timera2 cbi (TCCR2B, WGM22); // Preskaler zegara Timer2 do: 1 sbi (TCCR2B, CS20); cbi (TCCR2B, CS21); cbi (TCCR2B, CS22); // Port PWM timera2 Włącz sbi(DDRB, 3); //cli(); cbi (TIMSK0, TOIE0); sbi (TIMSK2, TOIE2); iw1 = badc1;

}

pusta pętla () {

//sprawdź stan potencjometru efektu i przełącznika obrotowego readKnobs();

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

if (fx1 == 0 && fx2 == 0 && fx3 == 0 && fx4 == 0) { byte input = analogRead(po lewej); wyjście (po lewej, wejście); }

// ************* // ***Wskaźnik*** // *************

jeśli (fx4 > 100) {

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

while (!f_sample) { // czekaj na wartość próbki z ADC } // Cykl 15625 KHz = 64uSec PORTD = PORTD | 128; f_próbka = fałsz; bb = badc1; dd[icnt1] = bb; // zapis do bufora fx4 = iw * badc0 / 255; // skalowanie opóźnionej próbki potencjometrem iw1 = dd[icnt2]; // odczytaj bufor opóźnienia badc0 = badc0 / 20; // ograniczenie wartości do 512 icnt1++; icnt2 = icnt1 - badc0; icnt2 = icnt2 i 511; // indeks limitu 0.. icnt1 = icnt1 & 511; // indeks limitu 0..511 iw2 = iw1 + bb; iw2 = iw2 / 2; bb = iw2; OCR2A = bb; // Przykładowa wartość do wyjścia PWM

PORTD = PORT ^ 128; wyjście (po lewej, PORTD); // Wyjście }

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

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

while (!f_sample) { // czekaj na wartość próbki z ADC } // Cykl 15625 KHz = 64uSec

PORTD = PORT | 128; f_próbka = fałsz; bb = dd[icnt]; // odczytaj bufor opóźnienia iw = 127 - bb; // odejmij offset fx3 = iw * badc0 / 255; // skalowanie opóźnionej próbki potencjometrem iw1 = 127 - badc1; // odejmij offset od nowej próbki iw1 = iw1 + iw; // dodaj opóźnioną próbkę i nową próbkę if (iw1 127) iw1 = 127; // Ogranicznik dźwięku bb = 127 + iw1; // dodaj przesunięcie dd[icnt] = bb; // przechowuj próbkę w buforze audio icnt++; icnt = icnt & 511; // limit bufora indeksu 0..511 OCR2A = bb; // Przykładowa wartość do wyjścia PWM

PORTD = PORT ^ 128; wyjście (po lewej, PORTD); // Wyjście

} }

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

}

void fill_sinewave() { float pi = 3.141592; pływak dx; pływak fd; pływak fcnt; dx = 2 * pi / 512; // wypełnij 512 bajtową tablicę bufora for (iw = 0; iw <= 511; iw++) { // 50 okresami sinewawe fd = 127 * sin(fcnt); // ton podstawowy fcnt = fcnt + dx; // w zakresie od 0 do 2xpi i 1/512 przyrostów bb = 127 + fd; // dodaj przesunięcie dc do sinusoidy dd[iw] = bb; // zapisz wartość do tablicy

} }

//************************************************** ****************** // Usługa przerwań Timer2 przy 62,5 KHz // tutaj sygnał audio i pot są próbkowane z częstotliwością: 16 Mhz / 256 / 2 / 2 = 15625 Hz ISR(TIMER2_OVF_vect) {

PORTB = PORTB | 1;

div32 = !div32; // podziel częstotliwość timera2 / 2 na 31.25kHz if (div32) { div16 = !div16; if (div16) { // próbkowanie kanału 0 i 1 naprzemiennie, więc każdy kanał jest próbkowany z 15,6kHz badc0 = ADCH; // pobierz kanał ADC 0 sbi(ADMUX, MUX0); // ustaw multiplekser na kanał 1 } else { badc1 = ADCH; // pobierz kanał ADC 1 cbi(ADMUX, MUX0); // ustaw multiplekser na kanał 0 f_sample = true; } ibb++; ibb--; ibb++; ibb--; // krótkie opóźnienie przed rozpoczęciem konwersji sbi(ADCSRA, ADSC); // rozpocznij następną konwersję }

}

Krok 6: Wideo

Potencjalne problemy ● Odbiór jest trochę za słaby do zasilania obwodu - potrzebny jest wzmacniacz operacyjny. - W filmie użyliśmy wzmacniacza sygnału. (Szare pudełko leżące na stole.)

Zalecana: