Πίνακας περιεχομένων:

Wii Nunchuck Synthesizer: 4 Βήματα
Wii Nunchuck Synthesizer: 4 Βήματα

Βίντεο: Wii Nunchuck Synthesizer: 4 Βήματα

Βίντεο: Wii Nunchuck Synthesizer: 4 Βήματα
Βίντεο: [ $9 ] DIY modular synth Wii nunchuck controller and Multi LFO / Joystic , Acceleration sensor 2024, Νοέμβριος
Anonim
Wii Nunchuck Synthesizer
Wii Nunchuck Synthesizer

Ο κόσμος της μουσικής Wii:

Αποφάσισα να συνδυάσω επιτέλους την αγάπη μου για τη μουσική με τη μικρή εμπειρία προγραμματισμού που έχω αποκτήσει τα τελευταία χρόνια. Ενδιαφέρομαι να δημιουργήσω ένα δικό μου όργανο από τότε που είδα μια ομιλία του Tod Machover στο σχολείο μου. Εάν δεν είστε εξοικειωμένοι με τη δουλειά του, δώστε του ένα Google, καθώς ξεπερνά τα όρια της μουσικής, της τεχνολογίας, καθώς και τη διασταύρωσή τους εδώ και αρκετά χρόνια (εργαστήρια πολυμέσων του MIT, Rock Band, Guitar Hero κ.λπ.).).

Έχω συνδέσει το Nunchuck μου με ένα Arduino Uno που λειτουργεί στη βιβλιοθήκη σύνθεσης ήχου Mozzi λόγω της καλά τεκμηριωμένης χρήσης και των δύο διαδικτυακά. Για ευκολία, χρησιμοποιώ έναν προσαρμογέα ψωμιού WiiChuck που συνδέεται απευθείας στο Arduino. Αυτό το σχετικά απλό έργο παίζει μια σειρά από γήπεδα ανάλογα με το βήμα (YZ-Plane) που μετράται από το επιταχυνσιόμετρο του Nunchuck. Η τιμή Υ του χειριστηρίου αντιστοιχεί στο κέρδος για να κάνει το βήμα πιο δυνατό ή πιο μαλακό. Αλλάζει επίσης συγχορδίες ανάλογα με το κουμπί Z και ενεργοποιεί ένα φάκελο διαμόρφωσης φάσης όταν πατηθεί το κουμπί C. Στη συνέχεια, η συχνότητα του φακέλου τροποποιείται με το Roll να μετριέται από το Nunchuck (η εικόνα γυρίζει το κουμπί).

Πόροι:

  • 1 x Arduino Uno
  • 1 x Wii Nunchuck
  • 1 x Προσαρμογέας WiiChuck
  • 1 x θηλυκό στερεοφωνικό βύσμα 3.5mm συμβατό με breadboard
  • 1 x καλώδιο ήχου 3,5 mm
  • 1 x ηχείου κάποιου είδους (Μπορείτε να συνδέσετε ένα βομβητή στην αρχή για να το δοκιμάσετε
  • 4-5 Σύρματα διαφόρων χρωμάτων

Προαιρετικό αλλά συνιστάται:

  • 1 x 330 Ohm αντίσταση
  • Πυκνωτής 1 x 0,1 uF

Βήμα 1: Συνδέστε το NunChuck σας

Συνδέοντας το NunChuck σας
Συνδέοντας το NunChuck σας
Συνδέοντας το NunChuck σας
Συνδέοντας το NunChuck σας
Συνδέοντας το NunChuck σας
Συνδέοντας το NunChuck σας

Αντιγράψτε/Επικολλήστε την τάξη WiiChuck από την παιδική χαρά Arduino. Θα χρειαστούμε την έκδοση με τη δήλωση των ακίδων PWR και GND. Αποθηκεύστε το ως WiiChuck.h και κρατήστε το στον ίδιο κατάλογο με το έργο σας.

Τώρα αντιγράψτε/επικολλήστε τα παρακάτω στο Arduino IDE και ανεβάστε το.

#include "Wire.h" //#include "WiiChuckClass.h" // πιθανότατα το WiiChuck.h για εμάς τους υπόλοιπους. #include "WiiChuck.h" WiiChuck chuck = WiiChuck ();

void setup () {

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

void loop () {

καθυστέρηση (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 (",");

αν (chuck.buttonZ) {

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

Serial.print (",");

// δεν είναι συνάρτηση // if (chuck.buttonC ()) {

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

Serial.println ();

}

Αποσυνδέστε το Arduino από την τροφοδοσία και συνδέστε τον προσαρμογέα WiiChuck σε Analog Pins 2-5 στο Arduino σας.

Συνδεθείτε ξανά στην τροφοδοσία και βεβαιωθείτε ότι οι τιμές του Nunchuck αποστέλλονται στο Arduino σας και εκτυπώνονται στο Serial Monitor. Εάν δεν βλέπετε καμία αλλαγή στους αριθμούς, βεβαιωθείτε ότι οι συνδέσεις σας είναι καλές και ότι το Nunchuck λειτουργεί. Πέρασα μερικές ημέρες προσπαθώντας να διορθώσω το λογισμικό πριν συνειδητοποιήσω ότι το καλώδιο του Nunchuck μου ήταν εσωτερικά σπασμένο!

Στη συνέχεια, θα συνδέσουμε τα πάντα με τον Mozzi. Το Το

Βήμα 2: Γνωριμία με τον Mozzi

Γνωριμία με τον Mozzi
Γνωριμία με τον Mozzi

Πρώτον, θα χρειαστεί να κατεβάσετε την τελευταία έκδοση του Mozzi. Τροφοδοτούνται από δωρεές, γι 'αυτό δωρίστε εάν αισθάνεστε τόσο διατεθειμένοι και κατεβάστε τη βιβλιοθήκη. Μπορείτε να το προσθέσετε εύκολα στις βιβλιοθήκες σας επιλέγοντας Sketch> Libraries> Add. ZIP Library… από το Arduino IDE.

Τώρα θα συνδέσουμε την υποδοχή ακουστικών 3,5 mm στο breadboard και το Arduino, ώστε να μπορούμε εύκολα να συνδεθούμε αργότερα (μπορείτε να αποσυνδέσετε το Nunchuck και τον προσαρμογέα προς το παρόν).

  1. Συνδέστε το Jack σας στην κάτω δεξιά γωνία του πίνακα για να δημιουργήσετε χώρο για τα υπόλοιπα. Το βύσμα πρέπει να έχει πλάτος 5 ακίδες.
  2. Συνδέστε τη μεσαία σειρά με τη γείωση με ένα καλώδιο βραχυκυκλωτήρα.
  3. Συνδέστε την κορυφαία σειρά του γρύλου σε μια κενή σειρά πάνω (Σειρά 10 στην εικόνα). Αυτό είναι το καλώδιο που μεταφέρει το ηχητικό σήμα.
  4. Συνδέστε το Digital Pin ~ 9 στη σειρά 10 επίσης.
  5. Συνδέστε το Ground στο Arduino σας με τη ράγα στο έδαφος στο breadboard.
  6. Δεν χρειάζεται απαραίτητα να χρησιμοποιήσετε ακόμα την αντίσταση και τον πυκνωτή, αλλά μπορεί να παρατηρήσετε ένα υψηλό τρίξιμο αν δεν το κάνετε. Λειτουργεί ως φίλτρο χαμηλής διέλευσης για την εξάλειψη συχνοτήτων άνω των ~ 15 kHz.

Ανοίξτε το σκίτσο του Mozzi's Sinewave στο Arduino IDE επιλέγοντας Αρχείο> Παραδείγματα> Mozzi> Βασικά> Sinewave. Αυτό είναι ουσιαστικά το αντίστοιχο του Mozzi με το "Hello World".

Ανεβάστε το σκίτσο και συνδέστε ένα ηχείο στο breadboard. Μπορείτε επίσης να χρησιμοποιήσετε ένα βομβητή, εάν δεν έχετε συνδέσει ακόμα το breadboard στην υποδοχή ήχου.

Εάν δεν ακούτε ένα σταθερό A4 (440Hz) που προέρχεται από το ηχείο σας, βεβαιωθείτε ότι όλες οι συνδέσεις σας είναι καλές και δοκιμάστε ξανά.

Στη συνέχεια, θα συνδέσουμε το Nunchuck με το Arduino!

Βήμα 3: Το βάζουμε όλα μαζί

Το βάζουμε όλα μαζί
Το βάζουμε όλα μαζί

Τώρα θα χρησιμοποιήσουμε την τιμή ρολού από το Nunchuck για να αλλάξουμε τη συχνότητα ενός Sinewave.

Από το Arduino IDE Επιλέξτε Αρχείο> Παραδείγματα> Mozzi> Αισθητήρες> Συχνότητα πιέζο

Θα χρειαστεί να προσθέσουμε μερικές γραμμές σε αυτόν τον κώδικα για να λειτουργήσει με το Nunchuck. Προσθέστε ένα περιεχόμενο στη βιβλιοθήκη WiiChuck και δημιουργήστε ένα αντικείμενο WiiChuck που ονομάζεται τσοκ. Μπορείτε επίσης να σχολιάσετε τη δήλωση PIEZO_PIN ή απλώς να τη διαγράψετε καθώς δεν θα τη χρησιμοποιήσουμε.

#include "WiiChuck. H"

WiiChuck chuck = WiiChuck (); // const int PIEZO_PIN = 3; // ορίστε τον αναλογικό πείρο εισόδου για το πιεζό

Τώρα κατά τη ρύθμιση, θα πρέπει να προσθέσουμε τα ακόλουθα:

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

και τέλος θα χρειαστεί να αλλάξουμε μερικά πράγματα στο updateControl ():

void updateControl () {

chuck.update (); // λάβετε τα τελευταία δεδομένα nunchuck // διαβάστε το piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // η τιμή είναι 0-1023 int piezo_value = map (Σχολιάστε τη γραμμή που ορίζει piezo_value και προσθέστε την παρακάτω παρακάτω:

void updateControl () {chuck.update (); // λάβετε τα τελευταία δεδομένα nunchuck // διαβάστε το piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // η τιμή είναι 0-1023 // Δεν χρειαζόμαστε την παραπάνω γραμμή, αλλά γιατί να μην αντιστοιχίσουμε το ρολό στο ίδιο εύρος; int piezo_value = χάρτης (chuck.readRoll (), -180, 180, 0 1023);

Ανεβάστε τον κωδικό και η συχνότητα θα πρέπει να αντιστοιχεί στο Nunchuck's Roll. Δοκιμάστε να το αντιστοιχίσετε σε διαφορετικά εύρη συχνοτήτων. Εάν δεν έχετε παρατηρήσει παρακάτω στο σκίτσο, η τιμή από τον αισθητήρα πολλαπλασιάζεται με 3, οπότε αυτή τη στιγμή παίζουμε τόνους από 0 Hz έως περίπου 3000 Hz.

Βήμα 4: Τελικές πινελιές

Τελικές πινελιές
Τελικές πινελιές

Τώρα είστε έτοιμοι να ανεβάσετε την τελική έκδοση του κώδικα που έχω συγκεντρώσει από το προηγούμενο βήμα και μερικά ακόμη παραδείγματα του Mozzi (Phase_Mod_Envelope και Control_Gain για την ακρίβεια). Για να διευκολύνω τη ζωή μου, συμπεριέλαβα επίσης ένα αρχείο που ονομάζεται pitches.h, το οποίο απλώς καθορίζει τις τιμές συχνότητας με γνωστά ονόματα σημειώσεων (δηλ. NOTE_A4).

Προτείνω να διαβάσετε την τεκμηρίωση Mozzi, καθώς μεγάλο μέρος του κώδικα είναι απευθείας από τα παραδείγματα, εκτός από τον κώδικα για το Nunchuck.

Εδώ είναι ένας σύνδεσμος προς το αποθετήριο Git μου. Όλα τα σημαντικά αρχεία περιλαμβάνονται εκτός από τη βιβλιοθήκη Mozzi την οποία πρέπει να λάβετε από την ιστοσελίδα τους, ώστε να είναι ενημερωμένη. Κατεβάστε το WiiMusic.ino και ανεβάστε το στη συσκευή σας για να ακούσετε πώς ακούγεται. Σας προτείνω να παίξετε με τις παραμέτρους που αλλάζω (αλλάξτε το εύρος χάρτη, διαιρέστε/πολλαπλασιάστε αριθμούς κλπ…) Καθώς έτσι βρήκα τον συγκεκριμένο ήχο που έψαχνα.

Αντανάκλαση

Δεν νιώθω ότι έχω τελειώσει. Αυτό δεν σημαίνει ότι δεν είμαι ικανοποιημένος με το έργο ή τον ήχο που κάνει, αλλά αισθάνομαι ότι μόλις βούτηξα τα δάχτυλα των ποδιών μου σε έναν νέο κόσμο που θέλω να συνεχίσω να εξερευνώ, οπότε θα προσθέσω έναν νέο κλάδο από αυτό το έργο καθώς συνεχίζω να δουλέψω.

Παρ 'όλα αυτά, αυτό ήταν το πρώτο μου αληθινό ταξίδι στον κόσμο των μικροελεγκτών, οπότε είμαι πολύ ευγνώμων για τη μαθησιακή εμπειρία. Οι είκοσι περίπου ώρες που πέρασα δουλεύοντας σε αυτό μου έδωσαν χριστουγεννιάτικες ιδέες για μένα και σχεδόν κάθε μέλος της οικογένειάς μου. Λυπάμαι κάπως που δεν δούλεψα σε αυτό το έργο με κάποιον άλλο καθώς θα μπορούσα να είχα χρησιμοποιήσει πολλές συμβουλές και καθοδήγηση στην πορεία. Ωστόσο, προσωπικά έμαθα πολλά μέσα από τις δοκιμές μου, συμπεριλαμβανομένων τριών ημερών που έβγαλα τα μαλλιά μου προσπαθώντας να διορθώσω ένα πρόβλημα λογισμικού που δεν υπήρχε ποτέ (ένα εσωτερικό καλώδιο στο Nunchuck είχε σπάσει).

Υπάρχουν ακόμη πολλές δυνατότητες να προχωρήσουμε. Για παράδειγμα, θα ήθελα πολύ να χρησιμοποιήσω το Arduino ως έναν τύπο διεπαφής MIDI μεταξύ ενός ελεγκτή MIDI και των ακουστικών για να αλλάξω τις παραμέτρους της σημείωσης MIDI, καθώς υπάρχουν τόσες πολλές επιλογές (ένταση, αποκοπή, συχνότητα φακέλου, κάμψη, διαμόρφωση, vibrato, το ονομάζετε). Αυτό θα επέτρεπε πολύ μεγαλύτερη ευελιξία, συμπεριλαμβανομένης της εναλλαγής παραμέτρων με τα κουμπιά και απλώς την αναπαραγωγή μιας χορδής που δεν είναι κωδικοποιημένη σε πίνακα C ++.

Συνιστάται: