Inhoudsopgave:

Wii Nunchuck-synthesizer: 4 stappen
Wii Nunchuck-synthesizer: 4 stappen

Video: Wii Nunchuck-synthesizer: 4 stappen

Video: Wii Nunchuck-synthesizer: 4 stappen
Video: [ $9 ] DIY modular synth Wii nunchuck controller and Multi LFO / Joystic , Acceleration sensor 2024, December
Anonim
Wii Nunchuck-synthesizer
Wii Nunchuck-synthesizer

De wereld van Wii-muziek:

Ik besloot eindelijk mijn liefde voor muziek te combineren met het beetje programmeerervaring dat ik de afgelopen jaren heb opgedaan. Ik ben geïnteresseerd in het maken van een eigen instrument sinds ik een lezing van Tod Machover op mijn school zag. Als je niet bekend bent met zijn werk, geef hem dan een Google, want hij verlegt al een aantal jaren de grenzen van muziek, technologie en hun kruising (MIT-medialabs, Rock Band, Guitar Hero enz…).

Ik heb mijn Nunchuck aangesloten op een Arduino Uno die draait op de Mozzi-geluidssynthesebibliotheek vanwege het goed gedocumenteerde gebruik van beide online. Voor het gemak gebruik ik een WiiChuck breadboard-adapter die rechtstreeks op de Arduino wordt aangesloten. Dit relatief eenvoudige project speelt een reeks toonhoogtes af, afhankelijk van de Pitch (YZ-Plane) gemeten vanaf de versnellingsmeter van de Nunchuck. De Y-waarde van de joystick wordt toegewezen aan de versterking om de toonhoogte luider of zachter te maken. Het verandert ook akkoorden afhankelijk van de Z-knop en zet een fasemodulatie-envelope aan wanneer de C-knop wordt ingedrukt. De frequentie van de envelop wordt vervolgens aangepast met de Roll gemeten vanaf de Nunchuck (afbeelding die aan een knop draait).

Bronnen:

  • 1 x Arduino Uno
  • 1 x Wii Nunchuck
  • 1 x WiiChuck-adapter
  • 1 x breadboard-compatibele 3,5 mm vrouwelijke stereo-aansluiting
  • 1 x 3,5 mm audiokabel
  • 1 x een soort luidspreker (u kunt eerst een zoemer aansluiten om deze uit te testen)
  • 4-5 draden van verschillende kleuren

Optioneel maar aanbevolen:

  • 1 x 330 Ohm weerstand
  • 1 x 0,1 uF condensator

Stap 1: Uw NunChuck aansluiten

Uw NunChuck aansluiten
Uw NunChuck aansluiten
Uw NunChuck aansluiten
Uw NunChuck aansluiten
Uw NunChuck aansluiten
Uw NunChuck aansluiten

Kopieer/plak de WiiChuck-klasse van Arduino Playground. We hebben de versie nodig met de verklaring van PWR- en GND-pinnen. Sla het op als WiiChuck.h en bewaar het in dezelfde map als je project.

Kopieer/plak nu het volgende in Arduino IDE en upload het.

#include "Wire.h"//#include "WiiChuckClass.h" //waarschijnlijk zijn WiiChuck.h voor de rest van ons. #include "WiiChuck.h" WiiChuck chuck = WiiChuck();

ongeldige setup() {

//nunchuck_init(); Serieel.begin(115200); chuck.begin(); chuck.update(); //chuck.kalibrerenJoy(); }

lege lus() {

vertraging(20); chuck.update();

Serial.print(chuck.readPitch());

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

Serial.print(chuck.readJoyX());

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

if (chuck.buttonZ) {

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

Serieel.print(", ");

// geen functie// if (chuck.buttonC()) {

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

Serieel.println();

}

Koppel uw Arduino los van de stroom en sluit uw WiiChuck-adapter aan op analoge pinnen 2-5 op uw Arduino.

Sluit opnieuw aan op de stroom en zorg ervoor dat de waarden van de Nunchuck naar uw Arduino worden verzonden en naar de seriële monitor worden afgedrukt. Als je geen verandering in de cijfers ziet, zorg er dan voor dat je connecties goed zijn en dat je Nunchuck functioneert. Ik heb een paar dagen geprobeerd om software te repareren voordat ik me realiseerde dat de draad van mijn Nunchuck intern kapot was!

Vervolgens zullen we alles aansluiten op Mozzi…

Stap 2: Mozzi. leren kennen

Mozzi. leren kennen
Mozzi. leren kennen

Eerst moet u de nieuwste versie van Mozzi downloaden. Ze worden gevoed door donaties, dus doneer als je daar zin in hebt en download de bibliotheek. U kunt het eenvoudig aan uw bibliotheken toevoegen door Sketch > Libraries > Add. ZIP Library… from Arduino IDE te kiezen.

Nu zullen we de 3,5 mm koptelefoonaansluiting verbinden met het breadboard en Arduino, zodat we er later gemakkelijk verbinding mee kunnen maken (je kunt de Nunchuck en adapter voorlopig loskoppelen).

  1. Sluit je Jack aan op de rechterbenedenhoek van het bord om ruimte te maken voor de rest. De aansluiting moet 5 pinnen breed zijn.
  2. Verbind de middelste rij met aarde met een jumperdraad.
  3. Sluit de bovenste rij van de aansluiting aan op een lege rij erboven (rij 10 op de afbeelding). Dit is de draad die het audiosignaal draagt.
  4. Sluit Digital Pin ~9 ook aan op rij 10.
  5. Verbind Ground op uw Arduino met de grondrail op het breadboard.
  6. U hoeft de weerstand en condensator nog niet per se te gebruiken, maar u kunt een hoog piepend geluid horen als u dat niet doet. Het werkt als een laagdoorlaatfilter om frequenties boven ~ 15 kHz te elimineren.

Open Mozzi's Sinewave-schets in Arduino IDE door Bestand > Voorbeelden > Mozzi > Basis > Sinewave te kiezen. Dit is in wezen Mozzi's equivalent van "Hello World".

Upload de schets en sluit een luidspreker aan op het breadboard. Je kunt ook een zoemer gebruiken als je het breadboard nog niet op de audio-aansluiting hebt aangesloten.

Als je geen constante A4 (440 Hz) uit je luidspreker hoort, zorg er dan voor dat al je verbindingen goed zijn en probeer het opnieuw.

Vervolgens verbinden we de Nunchuck met de Arduino!

Stap 3: Alles samenbrengen

Alles bij elkaar zetten
Alles bij elkaar zetten

Nu gaan we de rolwaarde van de Nunchuck gebruiken om de frequentie van een sinusgolf te wijzigen.

Vanuit Arduino IDE Kies Bestand > Voorbeelden > Mozzi > Sensoren > Piëzofrequentie

We zullen een paar regels aan deze code moeten toevoegen om deze met de Nunchuck te laten werken. Voeg een include toe aan de WiiChuck-bibliotheek en maak een WiiChuck-object met de naam chuck. U kunt ook commentaar geven op de verklaring van PIEZO_PIN of deze gewoon verwijderen omdat we deze niet zullen gebruiken.

#include "WiiChuck. H"

WiiChuck chuck = WiiChuck(); //const int PIEZO_PIN = 3; // stel de analoge ingangspin in voor de piëzo

Nu in de setup, zullen we het volgende moeten toevoegen:

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

en tot slot zullen we een paar dingen moeten veranderen in updateControl():

ongeldige updateControl(){

chuck.update(); // haal de laatste nunchuck-gegevens op // lees de piezo //int piezo_value = mozziAnalogRead (PIEZO_PIN); // waarde is 0-1023 int piezo_value = map (Geef commentaar op de regel die piezo_value instelt en voeg het volgende toe:

ongeldig updateControl(){ chuck.update(); // haal de laatste nunchuck-gegevens op // lees de piezo //int piezo_value = mozziAnalogRead (PIEZO_PIN); // waarde is 0-1023 // We hebben de bovenstaande regel niet nodig, maar waarom zou u de rol niet toewijzen aan hetzelfde bereik? int piezo_value = map(chuck.readRoll(), -180, 180, 0 1023);

Upload de code en de frequentie moet overeenkomen met je Nunchuck's Roll. Probeer het toe te wijzen aan verschillende frequentiebereiken. Als het je niet is opgevallen verderop in de schets, wordt de waarde van de sensor vermenigvuldigd met 3, dus we spelen momenteel tonen van 0 Hz tot ongeveer 3000 Hz.

Stap 4: Laatste details

Laatste puntjes op de i
Laatste puntjes op de i

Nu ben je klaar om de definitieve versie van de code te uploaden die ik uit de vorige stap heb samengesteld en nog een paar voorbeelden van Mozzi (Phase_Mod_Envelope en Control_Gain om precies te zijn). Om mijn leven gemakkelijker te maken, heb ik ook een bestand met de naam pitches.h toegevoegd dat eenvoudig frequentiewaarden definieert met bekende nootnamen (bijv. NOTE_A4).

Ik raad aan om de Mozzi-documentatie te lezen, aangezien veel van de code rechtstreeks uit de voorbeelden komt, behalve de code voor de Nunchuck.

Hier is een link naar mijn Git-repository. Alle belangrijke bestanden zijn inbegrepen, behalve de Mozzi-bibliotheek die u van hun website zou moeten halen, zodat deze up-to-date is. Download WiiMusic.ino en upload het naar je apparaat om te horen hoe het klinkt. Ik stel voor dat je wat speelt met de parameters die ik aan het veranderen ben (de kaartbereiken wijzigen, getallen delen/vermenigvuldigen, enz…), want zo vond ik het specifieke geluid dat ik zocht.

Reflectie

Ik heb niet het gevoel dat ik helemaal klaar ben. Dat wil niet zeggen dat ik niet tevreden ben met het project of het geluid dat het maakt, maar ik heb het gevoel dat ik net mijn tenen heb ondergedompeld in een nieuwe wereld die ik wil blijven verkennen, dus ik zal een nieuwe tak van dit project toevoegen terwijl ik verder ga werken.

Toch was dit mijn eerste echte reis in de wereld van microcontrollers, dus ik ben erg dankbaar voor de leerervaring. De ongeveer twintig uur die ik eraan besteedde, gaven me kerstideeën voor mezelf en praktisch elk lid van mijn familie. Ik heb er een beetje spijt van dat ik niet met iemand anders aan dit project heb gewerkt, omdat ik onderweg veel advies en begeleiding had kunnen gebruiken. Ik heb echter persoonlijk veel geleerd door mijn beproevingen, waaronder drie dagen lang mijn haren eruit trekken om een softwareprobleem op te lossen dat er nooit was (een interne draad in de Nunchuck was gebroken).

Er zijn nog een aantal mogelijkheden om vooruit te komen. Ik zou bijvoorbeeld graag de Arduino gebruiken als een soort MIDI-interface tussen een MIDI-controller en de koptelefoonuitgang om de parameters van de MIDI-noot te wijzigen, aangezien er zo veel zijn om uit te kiezen (volume, cutoff, envelopfrequentie, pitch bend, modulatie, vibrato, noem maar op). Dit zou veel meer flexibiliteit mogelijk maken, inclusief het wisselen van parameters met de knoppen, en gewoon een akkoord spelen dat niet hardgecodeerd is in een C++-array.

Aanbevolen: