Inhaltsverzeichnis:

Wii Nunchuck-Synthesizer - Gunook
Wii Nunchuck-Synthesizer - Gunook

Video: Wii Nunchuck-Synthesizer - Gunook

Video: Wii Nunchuck-Synthesizer - Gunook
Video: Nintendo Wii Nunchuck connected to a modular synthesizer 2024, November
Anonim
Wii Nunchuck-Synthesizer
Wii Nunchuck-Synthesizer

Die Welt der Wii-Musik:

Ich habe mich entschlossen, endlich meine Liebe zur Musik mit der kleinen Programmiererfahrung zu verbinden, die ich in den letzten Jahren gesammelt habe. Seit ich in meiner Schule einen Vortrag von Tod Machover gesehen habe, bin ich daran interessiert, ein eigenes Instrument zu entwickeln. Wenn Sie mit seiner Arbeit nicht vertraut sind, geben Sie ihm ein Google, da er seit einigen Jahren die Grenzen von Musik, Technologie sowie deren Schnittmengen überschreitet (MIT Media Labs, Rock Band, Guitar Hero usw….).

Ich habe mein Nunchuck an ein Arduino Uno angeschlossen, das auf der Mozzi-Soundsynthese-Bibliothek läuft, da beide online gut dokumentiert sind. Der Einfachheit halber verwende ich einen WiiChuck-Breadboard-Adapter, der direkt in das Arduino eingesteckt wird. Dieses relativ einfache Projekt spielt eine Reihe von Tonhöhen abhängig von der Tonhöhe (YZ-Ebene), die vom Beschleunigungsmesser des Nunchucks gemessen wird. Der Y-Wert des Joysticks wird dem Gain zugeordnet, um die Tonhöhe lauter oder leiser zu machen. Es ändert auch Akkorde abhängig von der Z-Taste und schaltet eine Phasenmodulations-Hüllkurve ein, wenn die C-Taste gedrückt wird. Die Frequenz der Hüllkurve wird dann mit dem vom Nunchuck gemessenen Roll modifiziert (Abbildung beim Drehen eines Knopfes).

Ressourcen:

  • 1 x Arduino Uno
  • 1 x Wii-Nunchuck
  • 1 x WiiChuck-Adapter
  • 1 x Breadboard-kompatibler 3,5-mm-Stereoanschluss
  • 1 x 3,5-mm-Audiokabel
  • 1 x Lautsprecher (Sie können zuerst einen Summer anschließen, um es zu testen)
  • 4-5 Drähte in verschiedenen Farben

Optional, aber empfohlen:

  • 1 x 330 Ohm Widerstand
  • 1 x 0,1 uF Kondensator

Schritt 1: Anschließen Ihres NunChuck

Einstecken Ihres NunChuck
Einstecken Ihres NunChuck
Einstecken Ihres NunChuck
Einstecken Ihres NunChuck
Einstecken Ihres NunChuck
Einstecken Ihres NunChuck

Kopieren/Einfügen der WiiChuck-Klasse von Arduino Playground. Wir benötigen die Version mit der Deklaration von PWR- und GND-Pins. Speichern Sie es als WiiChuck.h und speichern Sie es im selben Verzeichnis wie Ihr Projekt.

Kopieren / fügen Sie nun Folgendes in die Arduino IDE ein und laden Sie es hoch.

#include "Wire.h"//#include "WiiChuckClass.h" //höchstwahrscheinlich ist es WiiChuck.h für den Rest von uns. #include "WiiChuck.h" WiiChuck Chuck = WiiChuck();

Leere Einrichtung () {

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

Leere Schleife () {

Verzögerung (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"); } sonst {Serial.print("-"); }

Serial.print (", ");

//keine Funktion // if (chuck.buttonC()) {

wenn (chuck.buttonC) {Serial.print ("C"); } sonst {Serial.print("-"); }

Serial.println();

}

Trennen Sie Ihr Arduino von der Stromversorgung und verbinden Sie Ihren WiiChuck-Adapter mit den analogen Pins 2-5 auf Ihrem Arduino.

Schließen Sie die Stromversorgung wieder an und stellen Sie sicher, dass die Werte des Nunchucks an Ihren Arduino gesendet und auf den seriellen Monitor gedruckt werden. Wenn sich die Zahlen nicht ändern, stellen Sie sicher, dass Ihre Verbindungen gut sind und Ihr Nunchuck funktioniert. Ich verbrachte ein paar Tage damit, Software zu reparieren, bevor ich feststellte, dass der Draht meines Nunchucks intern gebrochen war!

Als nächstes werden wir alles an Mozzi anschließen…

Schritt 2: Mozzi. kennenlernen

Mozzi. kennenlernen
Mozzi. kennenlernen

Zuerst müssen Sie die neueste Version von Mozzi herunterladen. Sie werden durch Spenden angetrieben, also spenden Sie, wenn Sie Lust dazu haben, und laden Sie die Bibliothek herunter. Sie können es ganz einfach zu Ihren Bibliotheken hinzufügen, indem Sie Sketch> Libraries> Add. ZIP Library… von Arduino IDE wählen.

Jetzt werden wir die 3,5-mm-Kopfhörerbuchse mit dem Steckbrett und dem Arduino verbinden, damit wir sie später einfach anschließen können (Sie können das Nunchuck und den Adapter jetzt abziehen).

  1. Stecken Sie Ihren Jack in die untere rechte Ecke des Boards, um Platz für den Rest zu schaffen. Die Buchse sollte 5 Pins breit sein.
  2. Verbinden Sie die mittlere Reihe mit einem Überbrückungskabel mit Masse.
  3. Verbinden Sie die oberste Reihe der Buchse mit einer leeren Reihe darüber (Reihe 10 im Bild). Dies ist der Draht, der das Audiosignal überträgt.
  4. Verbinden Sie auch Digital Pin ~9 mit Reihe 10.
  5. Verbinden Sie Ground auf Ihrem Arduino mit der Erdungsschiene auf dem Steckbrett.
  6. Sie müssen den Widerstand und den Kondensator noch nicht unbedingt verwenden, aber Sie können ein hohes Quietschen bemerken, wenn Sie dies nicht tun. Es wirkt als Tiefpassfilter, um Frequenzen über ~ 15 kHz zu eliminieren.

Öffnen Sie die Sinewave-Skizze von Mozzi in der Arduino IDE, indem Sie Datei > Beispiele > Mozzi > Grundlagen > Sinewave wählen. Dies ist im Wesentlichen Mozzis Äquivalent zu "Hello World".

Laden Sie die Skizze hoch und schließen Sie einen Lautsprecher an das Steckbrett an. Sie können auch einen Summer verwenden, wenn Sie das Steckbrett noch nicht mit der Audiobuchse verbunden haben.

Wenn Sie kein konstantes A4 (440 Hz) aus Ihrem Lautsprecher hören, stellen Sie sicher, dass alle Ihre Verbindungen gut sind, und versuchen Sie es erneut.

Als nächstes verbinden wir das Nunchuck mit dem Arduino!

Schritt 3: Alles zusammenfügen

Alles zusammenfügen
Alles zusammenfügen

Jetzt verwenden wir den Rollwert des Nunchucks, um die Frequenz einer Sinuswelle zu ändern.

Wählen Sie in der Arduino IDE Datei > Beispiele > Mozzi > Sensoren > Piezofrequenz

Wir müssen diesem Code einige Zeilen hinzufügen, damit er mit dem Nunchuck funktioniert. Fügen Sie der WiiChuck-Bibliothek ein Include hinzu und instanziieren Sie ein WiiChuck-Objekt namens chuck. Sie können die Angabe von PIEZO_PIN auch auskommentieren oder einfach löschen, da wir sie nicht verwenden.

#include "WiiChuck. H"

WiiChuck-Spannfutter = WiiChuck(); //konst int PIEZO_PIN = 3; // setze den analogen Eingangspin für den Piezo

Jetzt müssen wir im Setup Folgendes hinzufügen:

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

und schließlich müssen wir ein paar Dinge in updateControl() ändern:

void updateControl(){

Chuck.update(); // neueste Nunchuck-Daten abrufen // Piezo lesen //int piezo_value = mozziAnalogRead (PIEZO_PIN); // Wert ist 0-1023 int piezo_value = map(Kommentieren Sie die Zeile, die piezo_value festlegt, aus und fügen Sie darunter Folgendes hinzu:

Void updateControl () { Chuck.update (); // neueste Nunchuck-Daten abrufen // Piezo lesen //int piezo_value = mozziAnalogRead (PIEZO_PIN); // Wert ist 0-1023 // Wir brauchen die obige Zeile nicht, aber warum nicht die Rolle dem gleichen Bereich zuordnen? int piezo_value = map(chuck.readRoll(), -180, 180, 0 1023);

Laden Sie den Code hoch und die Häufigkeit sollte Ihrer Nunchuck's Roll entsprechen. Versuchen Sie, es verschiedenen Frequenzbereichen zuzuordnen. Wenn Sie es nicht weiter unten in der Skizze bemerkt haben, wird der Wert vom Sensor mit 3 multipliziert, so dass wir derzeit Töne von 0 Hz bis etwa 3000 Hz spielen.

Schritt 4: Letzter Schliff

Letzter Schliff
Letzter Schliff

Jetzt sind Sie bereit, die endgültige Version des Codes hochzuladen, den ich aus dem vorherigen Schritt zusammengefügt habe, und einige weitere Beispiele von Mozzi (Phase_Mod_Envelope und Control_Gain, um genau zu sein). Um mir das Leben zu erleichtern, habe ich auch eine Datei namens pitches.h eingefügt, die einfach Frequenzwerte mit vertrauten Notennamen definiert (z. B. NOTE_A4).

Ich schlage vor, die Mozzi-Dokumentation zu lesen, da ein Großteil des Codes direkt aus den Beispielen stammt, mit Ausnahme des Codes für das Nunchuck.

Hier ist ein Link zu meinem Git-Repository. Alle wichtigen Dateien sind enthalten, mit Ausnahme der Mozzi-Bibliothek, die Sie von ihrer Website beziehen sollten, damit sie auf dem neuesten Stand ist. Laden Sie WiiMusic.ino herunter und laden Sie es auf Ihr Gerät hoch, um zu hören, wie es sich anhört. Ich schlage vor, Sie spielen mit den Parametern herum, die ich ändere (Ändern Sie die Map-Bereiche, teilen/multiplizieren Sie Zahlen usw…), da ich auf diese Weise den bestimmten Sound gefunden habe, nach dem ich gesucht habe.

Betrachtung

Ich fühle mich noch nicht ganz fertig. Das soll nicht heißen, dass ich mit dem Projekt oder dem Sound, den es macht, nicht zufrieden bin, aber ich habe das Gefühl, gerade meine Zehen in eine neue Welt eingetaucht zu haben, die ich weiter erkunden möchte, also werde ich im weiteren Verlauf einen neuen Zweig dieses Projekts hinzufügen arbeiten.

Trotzdem war dies meine erste echte Reise in die Welt der Mikrocontroller, daher bin ich sehr dankbar für die Lernerfahrung. Die ungefähr zwanzig Stunden, die ich damit verbracht habe, daran zu arbeiten, gaben mir Weihnachtsideen für mich und praktisch jedes Mitglied meiner Familie. Ich bereue es etwas, nicht mit jemand anderem an diesem Projekt gearbeitet zu haben, da ich auf dem Weg viele Ratschläge und Anleitungen hätte gebrauchen können. Ich persönlich habe jedoch durch meine Versuche viel gelernt, darunter drei Tage lang, in denen ich mir die Haare ausgerissen habe, um ein Softwareproblem zu beheben, das nie da war (ein interner Draht im Nunchuck war gebrochen).

Es gibt noch eine Reihe von Möglichkeiten, sich vorwärts zu bewegen. Zum Beispiel würde ich das Arduino gerne als eine Art MIDI-Interface zwischen einem MIDI-Controller und dem Kopfhörerausgang verwenden, um Parameter der MIDI-Note zu ändern, da es so viele zur Auswahl gibt (Lautstärke, Cutoff, Hüllkurvenfrequenz, Pitch Bend)., Modulation, Vibrato, was auch immer). Dies würde viel mehr Flexibilität ermöglichen, einschließlich des Umschaltens von Parametern mit den Schaltflächen und des einfachen Spielens eines Akkords, der nicht in einem C++-Array fest codiert ist.

Empfohlen: