Სარჩევი:

Wii Nunchuck სინთეზატორი: 4 ნაბიჯი
Wii Nunchuck სინთეზატორი: 4 ნაბიჯი

ვიდეო: Wii Nunchuck სინთეზატორი: 4 ნაბიჯი

ვიდეო: Wii Nunchuck სინთეზატორი: 4 ნაბიჯი
ვიდეო: Nunchuk module prototype 2024, ნოემბერი
Anonim
Wii Nunchuck სინთეზატორი
Wii Nunchuck სინთეზატორი

Wii მუსიკის სამყარო:

მე გადავწყვიტე, რომ საბოლოოდ გავაერთიანო ჩემი სიყვარული მუსიკისადმი იმ მცირე პროგრამულ გამოცდილებასთან, რომელიც მე მივიღე ბოლო რამდენიმე წლის განმავლობაში. მას შემდეგ, რაც ჩემს სკოლაში ვნახე თოდ მაჩოვერის გამოსვლა, დაინტერესებული ვარ საკუთარი ინსტრუმენტის შექმნით. თუ თქვენ არ იცნობთ მის მუშაობას, მიეცით მას Google, რადგან ის უკვე რამდენიმე წელია იჭერს მუსიკის, ტექნოლოგიის საზღვრებს და მათ კვეთს (MIT მედია ლაბორატორიები, როკ ბენდი, გიტარის გმირი და ა.).

მე ჩემი ნუნჩუკი დავუკავშირე Arduino Uno– ს, რომელიც მუშაობს Mozzi ხმის სინთეზის ბიბლიოთეკაში, რადგან ორივე კარგად არის დოკუმენტირებული. სიმარტივისთვის, მე ვიყენებ WiiChuck პურის დაფის ადაპტერს, რომელიც პირდაპირ ჩართულია არდუინოში. ეს შედარებით მარტივი პროექტი ასრულებს რიგ მოედნებს, რომლებიც დამოკიდებულია ნუნჩუკის ამაჩქარებელიდან გაზომილ სიმაღლეზე (YZ-Plane). ჯოისტიკის Y მნიშვნელობა აისახება მოგებაზე, რათა მოედანი ხმამაღალი ან რბილი გახდეს. ის ასევე ცვლის აკორდებს Z- ღილაკის მიხედვით და ჩართავს ფაზის მოდულაციის კონვერტს C- ღილაკზე დაჭერისას. კონვერტის სიხშირე შემდეგ შეიცვლება რულეტით, რომელიც იზომება ნუნჩუკიდან (სურათი გადადის ღილაკზე).

რესურსები:

  • 1 x Arduino Uno
  • 1 x Wii Nunchuck
  • 1 x WiiChuck ადაპტერი
  • 1 x breadboard თავსებადი 3.5 მმ ქალის სტერეო ბუდე
  • 1 x 3.5 მმ აუდიო კაბელი
  • 1 x რაიმე სახის სპიკერი (თქვენ შეგიძლიათ თავიდან შეაერთოთ ზუზერი მის შესამოწმებლად
  • 4-5 ფერის მავთულები სხვადასხვა ფერის

სურვილისამებრ, მაგრამ რეკომენდირებულია:

  • 1 x 330 Ohm რეზისტორი
  • 1 x.1 uF კონდენსატორი

ნაბიჯი 1: ჩართეთ თქვენი NunChuck

თქვენი ნუნჩუკის შეერთება
თქვენი ნუნჩუკის შეერთება
თქვენი ნუნჩუკის შეერთება
თქვენი ნუნჩუკის შეერთება
თქვენი ნუნჩუკის შეერთება
თქვენი ნუნჩუკის შეერთება

დააკოპირეთ/ჩასვით WiiChuck კლასი Arduino Playground– დან. ჩვენ დაგვჭირდება ვერსია PWR და GND ქინძისთავების დეკლარაციით. შეინახეთ როგორც WiiChuck.h და შეინახეთ იგი იმავე დირექტორიაში, როგორც თქვენი პროექტი.

ახლა დააკოპირეთ/ჩასვით შემდეგი Arduino IDE– ში და ატვირთეთ იგი.

#მოიცავს "Wire.h" //#მოიცავს "WiiChuckClass.h" // დიდი ალბათობით მისი WiiChuck.h დანარჩენებისთვის. #მოიცავს "WiiChuck.h" WiiChuck chuck = WiiChuck ();

void setup () {

// nunchuck_init (); Serial.begin (115200); ჩაკ. დაიწყე (); chuck.update (); //chuck.calibrateJoy (); }

ბათილი მარყუჟი () {

დაგვიანება (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 ადაპტერი ანალოგიურ ქინძისთავებთან 2-5 თქვენს Arduino– ზე.

ისევ დაუკავშირდით დენს და დარწმუნდით, რომ ნუნჩუკის ღირებულებები იგზავნება თქვენს არდუინოში და იბეჭდება სერიულ მონიტორზე. თუ თქვენ ვერ ხედავთ რაიმე ცვლილებას ნომრებში, დარწმუნდით, რომ თქვენი კავშირები კარგია და თქვენ Nunchuck ფუნქციონირებს. მე რამდენიმე დღე ვცდილობდი პროგრამული უზრუნველყოფის დაფიქსირებას, სანამ მივხვდებოდი, რომ ჩემი ნუნჩუკის მავთული შინაგანად იყო გატეხილი!

შემდეგი, ჩვენ ყველაფერს ვუერთებთ Mozzi– ს. რა რა

ნაბიჯი 2: მოზის გაცნობა

მოზის გაცნობა
მოზის გაცნობა

პირველ რიგში, თქვენ უნდა ჩამოტვირთოთ Mozzi– ს უახლესი ვერსია. ისინი იკვებება შემოწირულობებით, ასე რომ გააკეთეთ შემოწირულობა, თუკი ასე ფიქრობთ და გადმოწერეთ ბიბლიოთეკა. თქვენ შეგიძლიათ მარტივად დაამატოთ ის თქვენს ბიბლიოთეკებში Sketch> Libraries> Add. ZIP Library… Arduino IDE– დან.

ახლა ჩვენ დავაკავშირებთ 3.5 მმ ყურსასმენის ჯეკს პურის დაფაზე და არდუინოზე, რათა მოგვიანებით ადვილად შევუერთდეთ მას (შეგიძლიათ გათიშოთ Nunchuck და ადაპტერი ახლავე).

  1. შეაერთეთ თქვენი ჯეკი დაფის ქვედა მარჯვენა კუთხეში, რათა დარჩეს ადგილი დანარჩენებისთვის. ჯეკი უნდა იყოს 5 ქინძისთავის სიგანე.
  2. შეაერთეთ შუა რიგი მიწასთან ჯუმბერის მავთულით.
  3. შეაერთეთ ბუდის ზედა მწკრივი ცარიელ მწკრივზე ზემოთ (სურათი 10 რიგი). ეს არის მავთული, რომელიც ატარებს აუდიო სიგნალს.
  4. შეაერთეთ ციფრული პინი ~ 9 ასევე მწკრივზე 10.
  5. შეაერთეთ გრუნტი თქვენს არდუინოზე რკინიგზაზე პურის დაფაზე.
  6. თქვენ ჯერ კიდევ არ გჭირდებათ რეზისტორის და კონდენსატორის გამოყენება, მაგრამ შეიძლება არ შეამჩნიოთ მაღალი ხმაური. ის მოქმედებს როგორც დაბალი გამავლობის ფილტრი, რომ აღმოფხვრას სიხშირეები ~ 15 კჰც -ზე ზემოთ.

გახსენით Mozzi's Sinewave ესკიზი Arduino IDE– ში ფაილი> მაგალითები> Mozzi> საფუძვლები> Sinewave არჩევით. ეს არსებითად Mozzi- ს ექვივალენტია "Hello World".

ატვირთეთ ესკიზი და შეაერთეთ სპიკერი პურის დაფაზე. თქვენ ასევე შეგიძლიათ გამოიყენოთ ზუზუნი, თუ ჯერ არ გაქვთ მიერთებული პურის დაფა აუდიო ჯეკზე.

თუ თქვენი დინამიკიდან არ ისმის მუდმივი A4 (440Hz), დარწმუნდით, რომ თქვენი ყველა კავშირი კარგია და სცადეთ ხელახლა.

შემდეგი, ჩვენ დავაკავშირებთ ნუნჩუკს არდუინოსთან!

ნაბიჯი 3: ყველაფერი ერთად ააწყვეთ

აყენებს ყველაფერს ერთად
აყენებს ყველაფერს ერთად

ახლა ჩვენ გამოვიყენებთ Nunchuck– ის როლის მნიშვნელობას Sinewave– ის სიხშირის შესაცვლელად.

Arduino IDE– დან აირჩიეთ ფაილი> მაგალითები> Mozzi> სენსორები> პიეზო სიხშირე

ჩვენ დაგვჭირდება რამოდენიმე სტრიქონის დამატება ამ კოდში, რათა ის ნუნჩუკთან იმუშაოს. დაამატეთ ჩართვა WiiChuck ბიბლიოთეკაში და დააინსტალირეთ WiiChuck ობიექტი სახელწოდებით chuck. თქვენ ასევე შეგიძლიათ დატოვოთ კომენტარი PIEZO_PIN დეკლარაციის შესახებ ან უბრალოდ წაშალოთ ის, რადგან ჩვენ არ ვიყენებთ მას.

#მოიცავს "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 = რუკა (დაწერეთ კომენტარი ხაზზე, რომელიც ადგენს 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: საბოლოო შეხება

საბოლოო შეხებები
საბოლოო შეხებები

ახლა თქვენ მზად ხართ ატვირთოთ კოდის საბოლოო ვერსია, რომელიც მე შევაჯამეთ წინა საფეხურიდან და მოზის კიდევ რამდენიმე მაგალითი (Phase_Mod_Envelope და Control_Gain უფრო ზუსტად). ჩემი ცხოვრების გასაადვილებლად მე ასევე ჩავრთე ფაილი სახელწოდებით pitches.h რომელიც უბრალოდ განსაზღვრავს სიხშირის მნიშვნელობებს ნაცნობი სახელების სახელებით (მაგ. NOTE_A4).

მე გირჩევთ წაიკითხოთ Mozzi– ს დოკუმენტაცია, რადგან კოდის უმეტესობა პირდაპირ არის მაგალითებიდან, გარდა Nunchuck– ის კოდისა.

აქ არის ბმული ჩემი Git საცავისთვის. ყველა მნიშვნელოვანი ფაილი შედის Mozzi ბიბლიოთეკის გარდა, რომელიც უნდა მიიღოთ მათი ვებგვერდიდან ასე რომ ის განახლდეს. ჩამოტვირთეთ WiiMusic.ino და ატვირთეთ იგი თქვენს მოწყობილობაზე, რომ გაიგოთ როგორ ჟღერს. მე გირჩევთ ვითამაშო იმ პარამეტრებით, რომელსაც მე ვცვლი (შეცვალე რუქის დიაპაზონი, გაყავი/გაამრავლე რიცხვები და ა.

ასახვა

არ ვგრძნობ, რომ საკმაოდ დასრულებული ვარ. ეს არ ნიშნავს იმას, რომ მე არ ვარ კმაყოფილი პროექტით და მისი ხმით, მაგრამ ვგრძნობ, რომ მე უბრალოდ თითები ჩავრგე ახალ სამყაროში, რომლის შესწავლაც მსურს, ასე რომ მე გავაგრძელებ ამ პროექტის ახალ ფილიალს, როგორც გავაგრძელებ მუშაობა.

მიუხედავად ამისა, როგორც ითქვა, ეს იყო ჩემი პირველი ნამდვილი მოგზაურობა მიკროკონტროლერების სამყაროში, ამიტომ ძალიან მადლობელი ვარ სწავლის გამოცდილებისთვის. ოცდაათმა საათმა, რაც მასზე გავატარე, საშობაო იდეები მომცა ჩემთვის და პრაქტიკულად ჩემი ოჯახის ყველა წევრისთვის. მე გარკვეულწილად ვნანობ, რომ არ ვიმუშავე ამ პროექტზე სხვასთან ერთად, რადგან შემეძლო ბევრი რჩევა და მითითება გამომეყენებინა გზაზე. თუმცა, მე პირადად ბევრი რამ ვისწავლე ჩემი გამოცდების ჩათვლით, მათ შორის სამდღიანი თმის მოშორებით, პროგრამული პრობლემის გამოსწორების მცდელობისას, რომელიც არასოდეს ყოფილა (ნუნჩუკში შიდა მავთული გატეხილი იყო).

ჯერ კიდევ არსებობს მრავალი შესაძლებლობა წინსვლისთვის. მაგალითად, მე სიამოვნებით გამოვიყენებ Arduino– ს, როგორც MIDI ინტერფეისის ტიპს MIDI კონტროლერსა და ყურსასმენს შორის MIDI შენიშვნის პარამეტრების შესაცვლელად, რადგან ამდენი არჩევანის გაკეთებაა შესაძლებელი (მოცულობა, გათიშვა, კონვერტის სიხშირე, მოედანზე მოხრა), მოდულაცია, ვიბრატო, თქვენ დაასახელეთ). ეს საშუალებას მისცემს უფრო მეტ მოქნილობას, მათ შორის პარამეტრების ღილაკებით გადართვას და უბრალოდ აკორდის დაკვრას, რომელიც არ არის მყარად კოდირებული C ++ მასივში.

გირჩევთ: