Sommario:

Sintetizzatore Wii Nunchuck: 4 passaggi
Sintetizzatore Wii Nunchuck: 4 passaggi

Video: Sintetizzatore Wii Nunchuck: 4 passaggi

Video: Sintetizzatore Wii Nunchuck: 4 passaggi
Video: Nintendo Wii Nunchucks - Restoration 2024, Dicembre
Anonim
Sintetizzatore Wii Nunchuck
Sintetizzatore Wii Nunchuck

Il mondo di Wii Music:

Ho deciso finalmente di unire il mio amore per la musica con il po' di esperienza di programmazione che ho acquisito negli ultimi anni. Sono stato interessato a creare uno strumento tutto mio da quando ho visto un discorso di Tod Machover nella mia scuola. Se non hai familiarità con il suo lavoro, dagli un Google, poiché è da diversi anni che spinge i confini della musica, della tecnologia e del loro intersezione (laboratori multimediali del MIT, Rock Band, Guitar Hero ecc…).

Ho collegato il mio Nunchuck a un Arduino Uno in esecuzione sulla libreria di sintesi sonora Mozzi a causa dell'uso ben documentato di entrambi online. Per facilità, sto usando un adattatore per breadboard WiiChuck che si collega direttamente ad Arduino. Questo progetto relativamente semplice riproduce una serie di altezze che dipendono dal Pitch (YZ-Plane) misurato dall'accelerometro del Nunchuck. Il valore Y del joystick è mappato sul guadagno per aumentare o diminuire il tono. Cambia anche gli accordi a seconda del pulsante Z e attiva un inviluppo di modulazione di fase quando viene premuto il pulsante C. La frequenza dell'inviluppo viene quindi modificata con il Roll misurato dal Nunchuck (immagine ruotando una manopola).

Risorse:

  • 1 x Arduino Uno
  • 1 x Wii Nunchuck
  • 1 x adattatore WiiChuck
  • 1 x jack stereo femmina da 3,5 mm compatibile con breadboard
  • 1 cavo audio da 3,5 mm
  • 1 x altoparlante di qualche tipo (puoi collegare un cicalino all'inizio per testarlo
  • 4-5 Fili di vari colori

Facoltativo ma consigliato:

  • 1 x 330 Ohm resistore
  • Condensatore 1 x 0,1 uF

Passaggio 1: collegare il tuo NunChuck

Collegando il tuo NunChuck
Collegando il tuo NunChuck
Collegando il tuo NunChuck
Collegando il tuo NunChuck
Collegando il tuo NunChuck
Collegando il tuo NunChuck

Copia/incolla la classe WiiChuck da Arduino Playground. Avremo bisogno della versione con la dichiarazione dei pin PWR e GND. Salvalo come WiiChuck.h e tienilo nella stessa directory del tuo progetto.

Ora copia/incolla quanto segue nell'IDE di Arduino e caricalo.

#include "Wire.h"//#include "WiiChuckClass.h" //molto probabilmente è WiiChuck.h per il resto di noi. #include "WiiChuck.h" Mandrino WiiChuck = WiiChuck();

void setup() {

//nunchuck_init(); Serial.begin(115200); chuck.begin(); chuck.update(); //chuck.calibrateJoy(); }

ciclo vuoto() {

ritardo(20); chuck.update();

Serial.print(chuck.readPitch());

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

Serial.print(chuck.readJoyX());

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

if (chuck.buttonZ) {

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

Serial.print(", ");

//non è una funzione// if (chuck.buttonC()) {

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

Serial.println();

}

Scollega il tuo Arduino dall'alimentazione e collega il tuo adattatore WiiChuck ai pin analogici 2-5 sul tuo Arduino.

Collegati nuovamente all'alimentazione e assicurati che i valori del Nunchuck vengano inviati al tuo Arduino e stampati sul monitor seriale. Se non vedi alcun cambiamento nei numeri assicurati che le tue connessioni siano buone e che il tuo Nunchuck funzioni. Ho passato alcuni giorni a provare a riparare il software prima di rendermi conto che il filo del mio Nunchuck era rotto internamente!

Successivamente, collegheremo tutto a Mozzi…

Passaggio 2: conoscere Mozzi

Conoscere Mozzi
Conoscere Mozzi

Per prima cosa, dovrai scaricare l'ultima versione di Mozzi. Sono alimentati da donazioni, quindi dona se ti senti così incline e scarica la libreria. Puoi aggiungerlo facilmente alle tue librerie scegliendo Schizzo > Librerie > Aggiungi libreria. ZIP… da Arduino IDE.

Ora collegheremo il jack per cuffie da 3,5 mm alla breadboard e ad Arduino in modo da poterci collegare facilmente in seguito (puoi scollegare il Nunchuck e l'adattatore per ora).

  1. Collega il tuo jack nell'angolo in basso a destra della scheda per fare spazio al resto. Il jack dovrebbe essere largo 5 pin.
  2. Collegare la fila centrale a terra con un ponticello.
  3. Collega la riga più in alto del jack a una riga vuota sopra (riga 10 nell'immagine). Questo è il filo che trasporta il segnale audio.
  4. Collega anche il pin digitale ~9 alla riga 10.
  5. Collega Ground sul tuo Arduino al binario di terra sulla breadboard.
  6. Non è necessario utilizzare ancora il resistore e il condensatore, ma se non lo fai potresti notare uno stridio acuto. Agisce come un filtro passa basso per eliminare le frequenze superiori a ~ 15 kHz.

Apri lo schizzo Sinewave di Mozzi nell'IDE di Arduino scegliendo File > Esempi > Mozzi > Nozioni di base > Sinewave. Questo è essenzialmente l'equivalente di Mozzi di "Hello World".

Carica lo schizzo e collega un altoparlante alla breadboard. Puoi anche usare un cicalino se non hai ancora collegato la breadboard al jack audio.

Se non senti un A4 costante (440Hz) proveniente dal tuo altoparlante assicurati che tutte le connessioni siano buone e riprova.

Successivamente, collegheremo il Nunchuck ad Arduino!

Passaggio 3: mettere tutto insieme

Mettere tutto insieme
Mettere tutto insieme

Ora useremo il valore di rollio del Nunchuck per cambiare la frequenza di un'onda sinusoidale.

Dall'IDE di Arduino scegli File > Esempi > Mozzi > Sensori > Piezo Frequency

Avremo bisogno di aggiungere alcune righe a questo codice per farlo funzionare con il Nunchuck. Aggiungi un'inclusione alla libreria WiiChuck e crea un'istanza di un oggetto WiiChuck chiamato chuck. Puoi anche commentare la dichiarazione di PIEZO_PIN o semplicemente eliminarla poiché non la utilizzeremo.

#include "WiiChuck. H"

WiiChuck mandrino = WiiChuck(); //const int PIEZO_PIN = 3; // imposta il pin di ingresso analogico per il piezo

Ora nella configurazione, dovremo aggiungere quanto segue:

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

e infine dovremo cambiare alcune cose in updateControl():

void updateControl(){

chuck.update(); // ottiene gli ultimi dati nunchuck // legge il piezo //int piezo_value = mozziAnalogRead(PIEZO_PIN); // il valore è 0-1023 int piezo_value = map(Commenta la riga che imposta piezo_value e aggiungi quanto segue sotto:

void updateControl(){ chuck.update(); // ottiene gli ultimi dati nunchuck // legge il piezo //int piezo_value = mozziAnalogRead(PIEZO_PIN); // il valore è 0-1023 // Non abbiamo bisogno della riga sopra, ma perché non mappare il roll sullo stesso intervallo? int piezo_value = map(chuck.readRoll(), -180, 180, 0 1023);

Carica il codice e la frequenza dovrebbe corrispondere al tuo Nunchuck's Roll. Prova a mapparlo su diverse gamme di frequenza. Se non hai notato più in basso nello schizzo, il valore del sensore viene moltiplicato per 3, quindi al momento stiamo suonando toni da 0 Hz a circa 3000 Hz.

Passaggio 4: ritocchi finali

Tocchi finali
Tocchi finali

Ora sei pronto per caricare la versione finale del codice che ho messo insieme dal passaggio precedente e alcuni altri esempi di Mozzi (Phase_Mod_Envelope e Control_Gain per l'esattezza). Per semplificarmi la vita ho incluso anche un file chiamato pitches.h che definisce semplicemente i valori di frequenza con nomi di note familiari (es. NOTE_A4).

Suggerisco di leggere la documentazione di Mozzi poiché gran parte del codice è direttamente dagli esempi ad eccezione del codice per il Nunchuck.

Ecco un link al mio repository Git. Tutti i file importanti sono inclusi ad eccezione della libreria Mozzi che dovresti ottenere dal loro sito Web in modo che sia aggiornata. Scarica WiiMusic.ino e caricalo sul tuo dispositivo per ascoltare come suona. Ti suggerisco di giocare con i parametri che sto modificando (cambia gli intervalli di mappa, dividi/moltiplica i numeri, ecc..) poiché è così che ho trovato il suono particolare che stavo cercando.

Riflessione

Non mi sento del tutto finito. Questo non vuol dire che non sono soddisfatto del progetto o del suono che produce, ma mi sento come se avessi appena immerso le dita dei piedi in un nuovo mondo che voglio continuare ad esplorare, quindi aggiungerò un nuovo ramo di questo progetto mentre continuo lavorare.

Tuttavia, detto questo, questo è stato il mio primo vero viaggio nel mondo dei microcontrollori, quindi sono molto grato per l'esperienza di apprendimento. Le circa venti ore che ho passato a lavorarci mi hanno dato spunti natalizi per me stesso e praticamente per ogni membro della mia famiglia. Mi rammarico in qualche modo di non aver lavorato a questo progetto con qualcun altro perché avrei potuto usare molti consigli e indicazioni lungo la strada. Tuttavia, personalmente ho imparato molto durante le mie prove, inclusi tre giorni in cui mi sono strappato i capelli cercando di eseguire il debug di un problema software che non si è mai verificato (un filo interno nel Nunchuck si era rotto).

Ci sono ancora una serie di possibilità per andare avanti. Ad esempio, mi piacerebbe utilizzare Arduino come un tipo di interfaccia MIDI tra un controller MIDI e l'uscita cuffie per modificare i parametri della nota MIDI poiché ce ne sono così tanti tra cui scegliere (volume, cutoff, frequenza dell'inviluppo, pitch bend, modulazione, vibrato, lo chiami). Ciò consentirebbe molta più flessibilità, incluso il cambio di parametri con i pulsanti e la semplice riproduzione di un accordo che non è codificato in un array C++.

Consigliato: