Spisu treści:

Syntezator Wii Nunchuck: 4 kroki
Syntezator Wii Nunchuck: 4 kroki

Wideo: Syntezator Wii Nunchuck: 4 kroki

Wideo: Syntezator Wii Nunchuck: 4 kroki
Wideo: Ռեյնհարդ Բոնկե «Սուրբ Հոգի. Մենք հրավտա՞նգ ենք, թե հրակայո՞ւն», գլուխ 1/Reyn. Bonke, Surb Hogi, gl 1 2024, Lipiec
Anonim
Syntezator Wii Nunchuck
Syntezator Wii Nunchuck

Świat muzyki na Wii:

Postanowiłem w końcu połączyć moją miłość do muzyki z odrobiną doświadczenia programistycznego, które zdobyłem w ciągu ostatnich kilku lat. Zainteresowałem się stworzeniem własnego instrumentu, odkąd zobaczyłem wykład Toda Machovera w mojej szkole. Jeśli nie jesteś zaznajomiony z jego twórczością, daj mu Google, ponieważ od wielu lat przesuwa granice muzyki, technologii, a także ich przecinanie (laboratoria mediów MIT, Rock Band, Guitar Hero itp.).).

Połączyłem mój Nunchuck z Arduino Uno działającym w bibliotece syntezy dźwięku Mozzi ze względu na dobrze udokumentowane użycie obu w Internecie. Dla ułatwienia używam adaptera płytki stykowej WiiChuck, który podłącza się bezpośrednio do Arduino. Ten stosunkowo prosty projekt odtwarza serię tonów w zależności od wysokości tonu (płaszczyzny YZ) mierzonej za pomocą akcelerometru Nunchuck. Wartość Y joysticka jest odwzorowywana na wzmocnienie, aby zwiększyć lub zmniejszyć wysokość dźwięku. Zmienia również akordy w zależności od przycisku Z i włącza obwiednię modulacji fazy po naciśnięciu przycisku C. Częstotliwość obwiedni jest następnie modyfikowana za pomocą rolki mierzonej od Nunchuck (zdjęcie obracając pokrętło).

Zasoby:

  • 1 x Arduino Uno
  • 1 x nunczako Wii
  • 1 x adapter WiiChuck
  • 1 x żeńskie gniazdo stereo 3,5 mm kompatybilne z płytką stykową
  • Kabel audio 1x3.5mm
  • 1 x głośnik jakiegoś rodzaju (możesz najpierw podłączyć brzęczyk, aby go przetestować)
  • 4-5 przewodów w różnych kolorach

Opcjonalne, ale zalecane:

  • Rezystor 1x330 Ohm
  • 1 x kondensator 0,1 uF

Krok 1: Podłączanie NunChuck

Podłączanie Twojego NunChuck
Podłączanie Twojego NunChuck
Podłączanie Twojego NunChuck
Podłączanie Twojego NunChuck
Podłączanie Twojego NunChuck
Podłączanie Twojego NunChuck

Skopiuj/wklej klasę WiiChuck z Arduino Playground. Potrzebna nam będzie wersja z deklaracją pinów PWR i GND. Zapisz go jako WiiChuck.h i trzymaj w tym samym katalogu, co projekt.

Teraz skopiuj / wklej następujące elementy do Arduino IDE i prześlij je.

#include "Wire.h"//#include "WiiChuckClass.h" //najprawdopodobniej jest to WiiChuck.h dla reszty z nas. #include "WiiChuck.h" Uchwyt WiiChuck = WiiChuck();

pusta konfiguracja () {

//nunchuck_init(); Serial.początek(115200); chuck.początek(); chuck.aktualizacja(); //chuck.kalibracjaJoy(); }

pusta pętla () {

opóźnienie(20); chuck.aktualizacja();

Serial.print(chuck.readPitch());

Serial.print(", "); Serial.print(chuck.readRoll()); Serial.print(", ");

Serial.print(chuck.readJoyX());

Serial.print(", "); Serial.print(chuck.readJoyY()); Serial.print(", ");

jeśli (uchwyt.przyciskZ) {

Serial.print("Z"); } else { Serial.print("-"); }

Serial.print(", ");

//nie jest funkcją// if (chuck.buttonC()) {

if (chuck.buttonC) { Serial.print("C"); } else { Serial.print("-"); }

Serial.println();

}

Odłącz Arduino od zasilania i podłącz adapter WiiChuck do pinów analogowych 2-5 w Arduino.

Podłącz ponownie do zasilania i upewnij się, że wartości Nunchuck są wysyłane do Arduino i drukowane na monitorze szeregowym. Jeśli nie widzisz żadnych zmian w liczbach, upewnij się, że masz dobre połączenia, a Nunchuck działa. Spędziłem kilka dni próbując naprawić oprogramowanie, zanim zdałem sobie sprawę, że przewód mojego Nunchucka został wewnętrznie uszkodzony!

Następnie podłączymy wszystko do Mozzi…

Krok 2: Poznaj Mozzi

Poznawanie Mozzi
Poznawanie Mozzi

Najpierw musisz pobrać najnowszą wersję Mozzi. Są one napędzane darowiznami, więc przekaż darowiznę, jeśli masz na to ochotę i pobierz bibliotekę. Możesz łatwo dodać go do swoich bibliotek, wybierając Szkic> Biblioteki> Dodaj bibliotekę. ZIP… z Arduino IDE.

Teraz podłączymy gniazdo słuchawkowe 3,5 mm do płytki stykowej i Arduino, aby móc później łatwo podłączyć się do niego (na razie możesz odłączyć Nunchuck i adapter).

  1. Podłącz swojego Jacka do prawego dolnego rogu planszy, aby zrobić miejsce na resztę. Gniazdo powinno mieć szerokość 5 pinów.
  2. Połącz środkowy rząd z uziemieniem za pomocą przewodu połączeniowego.
  3. Połącz najwyższy rząd podnośnika z pustym rzędem powyżej (Rząd 10 na obrazku). To jest przewód przenoszący sygnał audio.
  4. Podłącz cyfrowy pin ~9 również do rzędu 10.
  5. Podłącz uziemienie na swoim Arduino do szyny uziemiającej na płytce stykowej.
  6. Nie musisz jeszcze koniecznie używać rezystora i kondensatora, ale możesz zauważyć wysoki pisk, jeśli tego nie zrobisz. Działa jak filtr dolnoprzepustowy, eliminując częstotliwości powyżej ~15 kHz.

Otwórz szkic Sinewave Mozzi w Arduino IDE, wybierając Plik > Przykłady > Mozzi > Podstawy > Sinewave. Jest to zasadniczo odpowiednik „Hello World” Mozziego.

Prześlij szkic i podłącz głośnik do płytki prototypowej. Możesz również użyć brzęczyka, jeśli płytka stykowa nie została jeszcze podłączona do gniazda audio.

Jeśli nie słyszysz stałego sygnału A4 (440 Hz) z głośnika, upewnij się, że wszystkie połączenia są dobre i spróbuj ponownie.

Następnie połączymy Nunchuck z Arduino!

Krok 3: Łączenie wszystkiego w całość

Kładąc wszystko razem
Kładąc wszystko razem

Teraz użyjemy wartości rzutu z Nunchuck, aby zmienić częstotliwość fali sinusoidalnej.

Z Arduino IDE Wybierz Plik > Przykłady > Mozzi > Czujniki > Częstotliwość piezo

Będziemy musieli dodać kilka linii do tego kodu, aby działał z Nunchuck. Dodaj do biblioteki WiiChuck i stwórz instancję obiektu WiiChuck o nazwie chuck. Możesz również skomentować deklarację PIEZO_PIN lub po prostu ją usunąć, ponieważ nie będziemy jej używać.

#include "WiiChuck. H"

Uchwyt WiiChuck = WiiChuck(); //const int PIEZO_PIN = 3; // ustaw pin wejścia analogowego dla piezo

Teraz w konfiguracji będziemy musieli dodać następujące elementy:

chuck.begin();chuck.update();

i na koniec będziemy musieli zmienić kilka rzeczy w updateControl():

void updateControl(){

chuck.aktualizacja(); // pobierz najnowsze dane nunchuck // odczytaj piezo //int piezo_value = mozziAnalogRead(PIEZO_PIN); // wartość to 0-1023 int piezo_value = map(Skomentuj linię, która ustawia wartość piezo_value i dodaj poniżej:

void updateControl(){chuck.update(); // pobierz najnowsze dane nunchuck // odczytaj piezo //int piezo_value = mozziAnalogRead(PIEZO_PIN); // wartość to 0-1023 // Nie potrzebujemy powyższej linii, ale dlaczego nie zmapować rolki do tego samego zakresu? int wartość_piezo = mapa(chuck.readRoll(), -180, 180, 0 1023);

Prześlij kod, a częstotliwość powinna odpowiadać Twojemu Nunchuck's Roll. Spróbuj zmapować go do różnych zakresów częstotliwości. Jeśli nie zauważyłeś dalej na szkicu, wartość z czujnika jest mnożona przez 3, więc aktualnie odtwarzamy dźwięki od 0 Hz do około 3000 Hz.

Krok 4: Ostatnie poprawki

Ostatnie poprawki
Ostatnie poprawki

Teraz jesteś gotowy, aby przesłać ostateczną wersję kodu, który poskładałem z poprzedniego kroku i kilka innych przykładów Mozziego (dokładnie Phase_Mod_Envelope i Control_Gain). Aby ułatwić sobie życie, dołączyłem również plik o nazwie pitches.h, który po prostu definiuje wartości częstotliwości ze znanymi nazwami nut (np. NOTE_A4).

Proponuję przeczytać dokumentację Mozzi, ponieważ większość kodu pochodzi prosto z przykładów, z wyjątkiem kodu dla Nunchuck.

Oto link do mojego repozytorium Git. Dołączone są wszystkie ważne pliki z wyjątkiem biblioteki Mozzi, którą powinieneś pobrać z ich strony internetowej, aby była aktualna. Pobierz WiiMusic.ino i prześlij go na swoje urządzenie, aby usłyszeć, jak brzmi. Proponuję pobawić się parametrami, które zmieniam (zmiana zakresu mapy, dzielenie/mnożenie liczb itp.), ponieważ w ten sposób znalazłem konkretny dźwięk, którego szukałem.

Odbicie

Nie czuję się całkiem skończony. To nie znaczy, że nie jestem zadowolony z projektu lub dźwięku, który on wydaje, ale czuję, że właśnie zanurzyłem palce u stóp w nowym świecie, który chcę dalej odkrywać, więc dodam nową gałąź z tego projektu w miarę kontynuacji pracować.

Mimo to była to moja pierwsza prawdziwa podróż do świata mikrokontrolerów, więc jestem bardzo wdzięczna za naukę. Około dwudziestu godzin spędzonych nad nim dało mi świąteczne pomysły dla siebie i praktycznie dla każdego członka mojej rodziny. Trochę żałuję, że nie pracowałem nad tym projektem z kimś innym, ponieważ po drodze mogłem skorzystać z wielu rad i wskazówek. Jednak osobiście wiele się nauczyłem podczas moich prób, w tym przez trzy dni wyrywania włosów, próbując debugować problem z oprogramowaniem, którego nigdy nie było (przerwał wewnętrzny przewód w Nunchuck).

Wciąż istnieje wiele możliwości. Na przykład chciałbym użyć Arduino jako rodzaju interfejsu MIDI między kontrolerem MIDI a wyjściem słuchawkowym, aby zmienić parametry nuty MIDI, ponieważ jest tak wiele do wyboru (głośność, odcięcie, częstotliwość obwiedni, zginanie tonu modulacja, vibrato, co tylko chcesz). Pozwoliłoby to na znacznie większą elastyczność, w tym przełączanie parametrów za pomocą przycisków i po prostu granie akordu, który nie jest zakodowany na stałe w tablicy C++.

Zalecana: