Table des matières:

Synthétiseur Wii Nunchuck : 4 étapes
Synthétiseur Wii Nunchuck : 4 étapes

Vidéo: Synthétiseur Wii Nunchuck : 4 étapes

Vidéo: Synthétiseur Wii Nunchuck : 4 étapes
Vidéo: [ $9 ] DIY modular synth Wii nunchuck controller and Multi LFO / Joystic , Acceleration sensor 2024, Juillet
Anonim
Synthétiseur Wii Nunchuck
Synthétiseur Wii Nunchuck

Le monde de la musique Wii:

J'ai décidé de combiner enfin mon amour de la musique avec le peu d'expérience en programmation que j'ai acquise au cours des dernières années. J'ai été intéressé par la création d'un instrument de mon propre depuis que j'ai vu une conférence de Tod Machover à mon école. Si vous n'êtes pas familier avec son travail, offrez-lui un Google, car il repousse les limites de la musique, de la technologie, ainsi que leur intersection depuis plusieurs années (MIT Media Labs, Rock Band, Guitar Hero etc…).

J'ai connecté mon Nunchuck à un Arduino Uno fonctionnant sur la bibliothèque de synthèse sonore Mozzi en raison de l'utilisation bien documentée des deux en ligne. Pour plus de facilité, j'utilise un adaptateur de planche à pain WiiChuck qui se branche directement sur l'Arduino. Ce projet relativement simple joue une série de hauteurs en fonction de la hauteur (YZ-Plane) mesurée à partir de l'accéléromètre du Nunchuck. La valeur Y du joystick est mappée sur le gain pour rendre le pitch plus fort ou plus doux. Il change également les accords en fonction du bouton Z et active une enveloppe de modulation de phase lorsque le bouton C est enfoncé. La fréquence de l'enveloppe est ensuite modifiée avec le Roll mesuré depuis le Nunchuck (image tournant un bouton).

Ressources:

  • 1 x Arduino Uno
  • 1 x Nunchuck Wii
  • 1 x adaptateur WiiChuck
  • 1 x prise stéréo femelle 3,5 mm compatible planche à pain
  • 1 câble audio 3,5 mm
  • 1 x haut-parleur quelconque (vous pouvez d'abord brancher un buzzer pour le tester
  • 4-5 fils de différentes couleurs

Facultatif mais recommandé:

  • 1 résistance de 330 Ohms
  • 1 condensateur de 0,1 uF

Étape 1: Branchement de votre NunChuck

Brancher votre NunChuck
Brancher votre NunChuck
Brancher votre NunChuck
Brancher votre NunChuck
Brancher votre NunChuck
Brancher votre NunChuck

Copiez/collez la classe WiiChuck depuis Arduino Playground. Nous aurons besoin de la version avec la déclaration des broches PWR et GND. Enregistrez-le sous WiiChuck.h et conservez-le dans le même répertoire que votre projet.

Maintenant, copiez/collez ce qui suit dans Arduino IDE et téléchargez-le.

#include "Wire.h"//#include "WiiChuckClass.h" //probablement son WiiChuck.h pour le reste d'entre nous. #include "WiiChuck.h" mandrin WiiChuck = WiiChuck();

void setup() {

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

boucle vide() {

retard(20); mandrin.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 (mandrin.boutonZ) {

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

Serial.print(", ");

//pas une fonction // si (chuck.buttonC()) {

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

Serial.println();

}

Débranchez votre Arduino de l'alimentation et connectez votre adaptateur WiiChuck aux broches analogiques 2 à 5 de votre Arduino.

Connectez-vous à nouveau à l'alimentation et assurez-vous que les valeurs du Nunchuck sont envoyées à votre Arduino et imprimées sur le moniteur série. Si vous ne voyez aucun changement dans les chiffres, assurez-vous que vos connexions sont bonnes et que votre Nunchuck fonctionne. J'ai passé quelques jours à essayer de réparer le logiciel avant de réaliser que le fil de mon Nunchuck était cassé en interne !

Ensuite, nous allons tout connecter à Mozzi…

Étape 2: Apprendre à connaître Mozzi

Apprendre à connaître Mozzi
Apprendre à connaître Mozzi

Tout d'abord, vous devrez télécharger la dernière version de Mozzi. Ils sont alimentés par des dons, alors faites un don si vous le souhaitez et téléchargez la bibliothèque. Vous pouvez l'ajouter facilement à vos bibliothèques en choisissant Sketch > Bibliothèques > Ajouter une bibliothèque. ZIP… depuis Arduino IDE.

Nous allons maintenant connecter la prise casque 3,5 mm à la maquette et à l'Arduino afin que nous puissions nous y connecter facilement plus tard (vous pouvez débrancher le Nunchuck et l'adaptateur pour le moment).

  1. Branchez votre prise Jack dans le coin inférieur droit de la carte pour faire de la place pour le reste. La prise doit avoir 5 broches de large.
  2. Connectez la rangée du milieu à la terre avec un cavalier.
  3. Connectez la rangée supérieure de la prise à une rangée vide au-dessus (rangée 10 sur l'image). C'est le fil qui transporte le signal audio.
  4. Connectez également la broche numérique ~ 9 à la rangée 10.
  5. Connectez la masse de votre Arduino au rail de masse de la planche à pain.
  6. Vous n'avez pas encore nécessairement besoin d'utiliser la résistance et le condensateur, mais vous remarquerez peut-être un cri aigu si vous ne le faites pas. Il agit comme un filtre passe-bas pour éliminer les fréquences supérieures à ~ 15 kHz.

Ouvrez l'esquisse Sinewave de Mozzi dans Arduino IDE en choisissant Fichier > Exemples > Mozzi > Notions de base > Sinewave. C'est essentiellement l'équivalent de "Hello World" de Mozzi.

Téléchargez le croquis et branchez un haut-parleur sur la maquette. Vous pouvez également utiliser un buzzer si vous n'avez pas encore connecté la maquette à la prise audio.

Si vous n'entendez pas un A4 constant (440 Hz) provenant de votre enceinte, assurez-vous que toutes vos connexions sont bonnes et réessayez.

Ensuite, nous allons connecter le Nunchuck à l'Arduino !

Étape 3: Tout assembler

Mettre tous ensemble
Mettre tous ensemble

Nous allons maintenant utiliser la valeur de roulis du Nunchuck pour changer la fréquence d'une onde sinusoïdale.

Depuis Arduino IDE, choisissez Fichier > Exemples > Mozzi > Capteurs > Fréquence piézo

Nous devrons ajouter quelques lignes à ce code afin de le faire fonctionner avec le Nunchuck. Ajoutez une inclusion à la bibliothèque WiiChuck et instanciez un objet WiiChuck appelé chuck. Vous pouvez également commenter la déclaration de PIEZO_PIN ou simplement la supprimer car nous ne l'utiliserons pas.

#include "WiiChuck. H"

Mandrin WiiChuck = WiiChuck(); //const int PIEZO_PIN = 3; // définit la broche d'entrée analogique pour le piézo

Maintenant, dans la configuration, nous devrons ajouter les éléments suivants:

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

et enfin nous devrons changer quelques choses dans updateControl():

void updateControl(){

mandrin.update(); // obtenir les dernières données du nunchuck // lire le piezo //int piezo_value = mozziAnalogRead(PIEZO_PIN); // la valeur est 0-1023 int piezo_value = map(Commentez la ligne qui définit piezo_value et ajoutez ce qui suit en dessous:

void updateControl(){ chuck.update(); // obtenir les dernières données du nunchuck // lire le piezo //int piezo_value = mozziAnalogRead(PIEZO_PIN); // la valeur est 0-1023 // Nous n'avons pas besoin de la ligne ci-dessus, mais pourquoi ne pas mapper le rouleau sur la même plage ? int piezo_value = map(chuck.readRoll(), -180, 180, 0 1023);

Téléchargez le code et la fréquence doit correspondre à votre Nunchuck's Roll. Essayez de le mapper sur différentes plages de fréquences. Si vous n'avez pas remarqué plus loin dans le croquis, la valeur du capteur est multipliée par 3, nous jouons donc actuellement des tons de 0 Hz à environ 3000 Hz.

Étape 4: Touches finales

Touches finales
Touches finales

Vous êtes maintenant prêt à télécharger la version finale du code que j'ai reconstitué à partir de l'étape précédente et quelques autres exemples de Mozzi (Phase_Mod_Envelope et Control_Gain pour être exact). Pour me faciliter la vie, j'ai également inclus un fichier appelé pitches.h qui définit simplement les valeurs de fréquence avec des noms de notes familiers (c'est-à-dire NOTE_A4).

Je suggère de lire la documentation de Mozzi car une grande partie du code provient directement des exemples, à l'exception du code du Nunchuck.

Voici un lien vers mon dépôt Git. Tous les fichiers importants sont inclus, à l'exception de la bibliothèque Mozzi que vous devriez obtenir sur leur site Web pour qu'elle soit à jour. Téléchargez WiiMusic.ino et chargez-le sur votre appareil pour entendre à quoi cela ressemble. Je vous suggère de jouer avec les paramètres que je modifie (changer les plages de la carte, diviser/multiplier les nombres, etc…) car c'est ainsi que j'ai trouvé le son particulier que je cherchais.

Réflexion

Je n'ai pas l'impression d'avoir tout à fait fini. Cela ne veut pas dire que je ne suis pas satisfait du projet ou du son qu'il produit, mais j'ai l'impression de plonger mes orteils dans un nouveau monde que je veux continuer à explorer, alors j'ajouterai une nouvelle branche de ce projet au fur et à mesure que je continue travailler.

Néanmoins, cela étant dit, c'était mon premier véritable voyage dans le monde des microcontrôleurs, je suis donc très reconnaissant pour l'expérience d'apprentissage. La vingtaine d'heures que j'ai passées à travailler dessus m'a donné des idées de Noël pour moi et pratiquement tous les membres de ma famille. Je regrette un peu de ne pas avoir travaillé sur ce projet avec quelqu'un d'autre car j'aurais pu bénéficier de nombreux conseils et orientations en cours de route. Cependant, j'ai personnellement beaucoup appris au cours de mes essais, y compris trois jours à m'arracher les cheveux pour essayer de déboguer un problème logiciel qui n'était jamais là (un fil interne du Nunchuck s'était cassé).

Il y a encore un certain nombre de possibilités pour aller de l'avant. Par exemple, j'aimerais utiliser l'Arduino comme un type d'interface MIDI entre un contrôleur MIDI et la sortie casque pour modifier les paramètres de la note MIDI car il y a tellement de choix (volume, coupure, fréquence d'enveloppe, pitch bend, modulation, vibrato, etc.). Cela permettrait beaucoup plus de flexibilité, y compris le changement de paramètres avec les boutons et le simple fait de jouer un accord qui n'est pas codé en dur dans un tableau C++.

Conseillé: