Isi kandungan:

Wii Nunchuck Synthesizer: 4 Langkah
Wii Nunchuck Synthesizer: 4 Langkah

Video: Wii Nunchuck Synthesizer: 4 Langkah

Video: Wii Nunchuck Synthesizer: 4 Langkah
Video: Nintendo BANNED these Wii accessories 2024, November
Anonim
Wii Nunchuck Synthesizer
Wii Nunchuck Synthesizer

Dunia Muzik Wii:

Saya akhirnya memutuskan untuk menggabungkan minat saya terhadap muzik dengan sedikit pengalaman pengaturcaraan yang saya peroleh sejak beberapa tahun kebelakangan ini. Saya berminat untuk mencipta alat muzik saya sendiri sejak saya melihat ceramah oleh Tod Machover di sekolah saya. Sekiranya anda tidak terbiasa dengan karyanya, beri dia Google, kerana dia telah memasuki batas muzik, teknologi, dan persilangan mereka selama beberapa tahun sekarang (makmal media MIT, Rock Band, Guitar Hero dll.).).

Saya telah menghubungkan Nunchuck saya ke Arduino Uno yang berjalan di perpustakaan sintesis bunyi Mozzi kerana penggunaan kedua-duanya dalam talian dengan baik. Untuk kemudahan, saya menggunakan penyesuai papan roti WiiChuck yang dipasang terus ke Arduino. Projek yang agak sederhana ini memainkan siri nada bergantung pada Pitch (YZ-Plane) yang diukur dari accelerometer Nunchuck. Nilai Y joystick dipetakan ke keuntungan untuk membuat nada lebih kuat atau lebih lembut. Ia juga mengubah kord bergantung pada Z-Button dan menghidupkan sampul modulasi fasa apabila Butang C ditekan. Kekerapan sampul kemudian diubah dengan Roll yang diukur dari Nunchuck (gambar memutar tombol).

Sumber:

  • 1 x Arduino Uno
  • 1 x Wii Nunchuck
  • 1 x Penyesuai WiiChuck
  • 1 x bicu stereo wanita serasi dengan papan roti
  • Kabel audio 1 x 3.5mm
  • 1 x pembesar suara semacam (Anda boleh memasang buzzer pada awalnya untuk mengujinya
  • 4-5 Wayar pelbagai warna

Pilihan tetapi disyorkan:

  • Perintang 1 x 330 Ohm
  • Kapasitor 1 x.1 uF

Langkah 1: Memasukkan NunChuck Anda

Memasukkan NunChuck Anda
Memasukkan NunChuck Anda
Memasukkan NunChuck Anda
Memasukkan NunChuck Anda
Memasukkan NunChuck Anda
Memasukkan NunChuck Anda

Salin / Tampal kelas WiiChuck dari Arduino Playground. Kami memerlukan versi dengan pengisytiharan pin PWR dan GND. Simpan sebagai WiiChuck.h dan simpan dalam direktori yang sama dengan projek anda.

Sekarang salin / tampal yang berikut ke dalam Arduino IDE dan muat naik.

#include "Wire.h" // # include "WiiChuckClass.h" // kemungkinan besar WiiChuck.h untuk kita semua. #masuk "WiiChuck.h" WiiChuck chuck = WiiChuck ();

batal persediaan () {

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

gelung kosong () {

kelewatan (20); chuck.update ();

Serial.print (chuck.readPitch ());

Cetakan bersiri (","); Serial.print (chuck.readRoll ()); Cetakan bersiri (",");

Serial.print (chuck.readJoyX ());

Cetakan bersiri (","); Serial.print (chuck.readJoyY ()); Cetakan bersiri (",");

jika (chuck.buttonZ) {

Cetakan bersiri ("Z"); } lain {Serial.print ("-"); }

Cetakan bersiri (",");

// bukan fungsi // if (chuck.buttonC ()) {

jika (chuck.buttonC) {Serial.print ("C"); } lain {Serial.print ("-"); }

Bersiri.println ();

}

Putuskan sambungan Arduino anda dari kuasa dan sambungkan penyesuai WiiChuck anda ke Analog Pins 2-5 pada Arduino anda.

Sambung semula ke kuasa dan pastikan bahawa nilai Nunchuck dihantar ke Arduino anda dan dicetak ke Monitor Serial. Sekiranya anda tidak melihat perubahan nombor, pastikan hubungan anda baik, dan anda Nunchuck berfungsi. Saya menghabiskan beberapa hari untuk memperbaiki perisian sebelum menyedari wayar Nunchuck saya rosak secara dalaman!

Seterusnya, kami akan menghubungkan semuanya ke Mozzi…

Langkah 2: Mengenal Mozzi

Mengenal Mozzi
Mengenal Mozzi

Pertama, anda perlu memuat turun versi terbaru Mozzi. Mereka didorong oleh sumbangan, jadi dermakan jika anda merasa sangat berminat dan muat turun perpustakaan. Anda boleh menambahkannya ke perpustakaan anda dengan mudah dengan memilih Sketsa> Perpustakaan> Tambah. ZIP Library… dari Arduino IDE.

Sekarang kita akan menyambungkan bicu fon kepala 3.5mm ke papan roti dan Arduino supaya kita dapat menyambungnya dengan mudah kemudian (anda boleh mencabut Nunchuck dan penyesuai buat masa ini).

  1. Pasang Jack anda ke sudut kanan bawah papan untuk memberi ruang untuk yang lain. Jack hendaklah lebar 5 pin.
  2. Sambungkan barisan tengah ke tanah dengan wayar pelompat.
  3. Sambungkan baris paling atas jack ke baris kosong di atas (Baris 10 dalam gambar). Ini adalah wayar yang membawa isyarat audio.
  4. Sambungkan Pin Digital ~ 9 ke baris 10 juga.
  5. Sambungkan Ground di Arduino anda ke landasan tanah di papan roti.
  6. Anda tidak semestinya perlu menggunakan perintang dan kapasitor, tetapi anda mungkin akan merasakan bunyi pekik yang tinggi jika tidak. Ia berfungsi sebagai penapis lulus rendah untuk menghilangkan frekuensi di atas ~ 15 kHz.

Buka lakaran Moewi Sinewave di Arduino IDE dengan memilih Fail> Contoh> Mozzi> Asas> Sinewave. Ini pada dasarnya adalah setaraf Mozzi dengan "Hello World".

Muat naik lakaran dan pasangkan pembesar suara ke papan roti. Anda juga boleh menggunakan bel jika anda belum memasang papan roti ke bicu audio.

Sekiranya anda tidak mendengar bunyi berterusan A4 (440Hz) dari pembesar suara anda pastikan semua sambungan anda baik dan cuba lagi.

Seterusnya, kami akan menghubungkan Nunchuck ke Arduino!

Langkah 3: Menggabungkan Semuanya

Menggabungkan Semuanya
Menggabungkan Semuanya

Sekarang kita akan menggunakan nilai roll dari Nunchuck untuk mengubah frekuensi Sinewave.

Dari Arduino IDE Pilih Fail> Contoh> Mozzi> Sensor> Piezo Frequency

Kita perlu menambahkan beberapa baris pada kod ini agar dapat berfungsi dengan Nunchuck. Tambahkan termasuk ke perpustakaan WiiChuck dan buat objek WiiChuck yang disebut chuck. Anda juga boleh mengulas pernyataan PIEZO_PIN atau menghapusnya kerana kami tidak akan menggunakannya.

#sertakan "WiiChuck. H"

WiiChuck chuck = WiiChuck (); // const int PIEZO_PIN = 3; // tetapkan pin input analog untuk piezo

Sekarang dalam persediaan, kita perlu menambahkan yang berikut:

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

dan akhirnya kita perlu mengubah beberapa perkara dalam updateControl ():

batal kemas kiniControl () {

chuck.update (); // dapatkan data nunchuck terkini // baca piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // nilai adalah 0-1023 int piezo_value = peta (Komen garis yang menetapkan piezo_value dan tambahkan yang berikut di bawahnya:

batal updateControl () {chuck.update (); // dapatkan data nunchuck terkini // baca piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // nilai 0-1023 // Kami tidak memerlukan garis di atas tetapi mengapa tidak memetakan gulungan ke julat yang sama? int piezo_value = peta (chuck.readRoll (), -180, 180, 0 1023);

Muat naik kod dan frekuensi harus sesuai dengan Nunchuck's Roll anda. Cuba memetakannya ke julat frekuensi yang berbeza. Sekiranya anda tidak melihat lebih jauh di bawah dalam lakaran, nilai dari sensor didarabkan dengan 3 jadi kami sedang memainkan nada dari 0 Hz hingga sekitar 3000 Hz.

Langkah 4: Sentuhan Akhir

Sentuhan Akhir
Sentuhan Akhir

Sekarang anda sudah bersedia untuk memuat naik versi terakhir kod yang telah saya kumpulkan dari langkah sebelumnya dan beberapa lagi contoh Mozzi (Phase_Mod_Envelope, dan Control_Gain tepat). Untuk menjadikan hidup saya lebih mudah, saya juga memasukkan fail yang disebut pitches.h yang hanya menentukan nilai frekuensi dengan nama nota yang biasa (iaitu NOTE_A4).

Saya cadangkan membaca dokumentasi Mozzi kerana banyak kodnya langsung dari contoh kecuali kod untuk Nunchuck.

Berikut adalah pautan ke repositori Git saya. Semua fail penting disertakan kecuali untuk perpustakaan Mozzi yang harus anda dapatkan dari laman web mereka sehingga terkini. Muat turun WiiMusic.ino dan muat naik ke peranti anda untuk mendengar bunyinya. Saya cadangkan anda bermain-main dengan parameter yang saya ubah (ubah rentang peta, bahagi / darabkan nombor, dll.) Kerana itulah saya dapati suara tertentu yang saya cari.

Refleksi

Saya tidak berasa seperti saya sudah selesai. Itu bukan untuk mengatakan bahawa saya tidak berpuas hati dengan projek atau suara yang dihasilkannya, tetapi saya merasa seperti baru saja mencubit jari kaki saya ke dunia baru yang ingin saya terus meneroka sehingga saya akan menambah cabang baru dari projek ini semasa saya meneruskan bekerja.

Namun, yang dikatakan ini adalah perjalanan pertama saya yang benar ke dunia mikrokontroler jadi saya sangat bersyukur dengan pengalaman belajar. Dua puluh jam yang saya habiskan untuk mengusahakannya memberi saya idea Krismas untuk diri saya dan hampir setiap ahli keluarga saya. Saya agak menyesal kerana tidak mengerjakan projek ini dengan orang lain kerana saya boleh menggunakan banyak nasihat dan bimbingan sepanjang perjalanan. Namun, saya sendiri banyak belajar melalui percubaan saya termasuk tiga hari mencabut rambut saya untuk mencuba masalah perisian yang tidak pernah ada (wayar dalaman di Nunchuck telah rosak).

Masih terdapat beberapa kemungkinan untuk terus maju. Sebagai contoh, saya ingin menggunakan Arduino sebagai jenis antara muka MIDI di antara pengawal MIDI dan fon kepala untuk menukar parameter nota MIDI kerana terdapat banyak yang boleh dipilih (kelantangan, potongan, frekuensi sampul surat, selekoh nada, modulasi, vibrato, anda namakannya). Ini akan memungkinkan lebih banyak fleksibiliti termasuk menukar parameter dengan butang, dan hanya memainkan akord yang tidak dikodkan keras menjadi array C ++.

Disyorkan: