Daftar Isi:

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

Video: Synthesizer Wii Nunchuck: 4 Langkah

Video: Synthesizer Wii Nunchuck: 4 Langkah
Video: Arduino Wii Nunchuck Tutorial 2024, Juli
Anonim
Sintesis Wii Nunchuck
Sintesis Wii Nunchuck

Dunia Musik Wii:

Saya akhirnya memutuskan untuk menggabungkan kecintaan saya pada musik dengan sedikit pengalaman pemrograman yang saya peroleh selama beberapa tahun terakhir. Saya tertarik untuk membuat alat musik sendiri sejak saya melihat ceramah Tod Machover di sekolah saya. Jika Anda tidak terbiasa dengan karyanya, beri dia Google, karena ia telah mendorong batas-batas musik, teknologi, serta persimpangan mereka selama beberapa tahun sekarang (laboratorium media MIT, Band Rock, Guitar Hero, dll…).

Saya telah menghubungkan Nunchuck saya ke Arduino Uno yang berjalan di perpustakaan sintesis suara Mozzi karena penggunaan keduanya yang terdokumentasi dengan baik secara online. Untuk kemudahan, saya menggunakan adaptor papan tempat memotong roti WiiChuck yang langsung dihubungkan ke Arduino. Proyek yang relatif sederhana ini memainkan serangkaian nada tergantung pada Pitch (YZ-Plane) yang diukur dari akselerometer Nunchuck. Nilai Y joystick dipetakan ke penguatan untuk membuat nada lebih keras atau lebih lembut. Ini juga mengubah akor tergantung pada Tombol-Z dan mengaktifkan amplop modulasi fase saat Tombol-C ditekan. Frekuensi amplop kemudian dimodifikasi dengan Roll diukur dari Nunchuck (gambar memutar kenop).

Sumber daya:

  • 1 x Arduino Uno
  • 1 x Wii Nunchuck
  • 1 x Adaptor WiiChuck
  • 1 x papan tempat memotong roti kompatibel 3.5mm stereo jack perempuan
  • 1x3.5mm kabel audio
  • 1 x speaker (Anda dapat memasang bel terlebih dahulu untuk mengujinya)
  • 4-5 Kabel berbagai warna

Opsional tetapi disarankan:

  • 1x330 Ohm resistor
  • 1 x.1 uF kapasitor

Langkah 1: Memasukkan NunChuck Anda

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

Copy/Paste kelas WiiChuck dari Arduino Playground. Kita akan membutuhkan versi dengan deklarasi pin PWR dan GND. Simpan sebagai WiiChuck.h dan simpan di direktori yang sama dengan proyek Anda.

Sekarang salin / tempel yang berikut ke Arduino IDE dan unggah.

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

batalkan pengaturan() {

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

lingkaran kosong() {

penundaan (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(", ");

if (chuck.buttonZ) {

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

Serial.print(", ");

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

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

Serial.println();

}

Putuskan sambungan Arduino Anda dari daya dan sambungkan adaptor WiiChuck Anda ke Pin Analog 2-5 di Arduino Anda.

Sambungkan ke daya lagi dan pastikan bahwa nilai Nunchuck sedang dikirim ke Arduino Anda dan dicetak ke Serial Monitor. Jika Anda tidak melihat adanya perubahan dalam angka, pastikan koneksi Anda baik, dan Nunchuck Anda berfungsi. Saya menghabiskan beberapa hari mencoba memperbaiki perangkat lunak sebelum menyadari bahwa kabel Nunchuck saya rusak secara internal!

Selanjutnya, kita akan menghubungkan semuanya ke Mozzi…

Langkah 2: Mengenal Mozzi

Mengenal Mozzi
Mengenal Mozzi

Pertama, Anda perlu mengunduh Mozzi versi terbaru. Mereka didorong oleh donasi, jadi donasikan jika Anda ingin dan unduh perpustakaan. Anda dapat menambahkannya ke perpustakaan Anda dengan mudah dengan memilih Sketch > Libraries > Add. ZIP Library… dari Arduino IDE.

Sekarang kita akan menghubungkan jack headphone 3.5mm ke papan tempat memotong roti dan Arduino sehingga kita dapat dengan mudah menghubungkannya nanti (Anda dapat mencabut Nunchuck dan adaptor untuk saat ini).

  1. Colokkan Jack Anda ke sudut kanan bawah papan untuk memberi ruang bagi sisanya. Jack harus memiliki lebar 5 pin.
  2. Hubungkan baris tengah ke ground dengan kabel jumper.
  3. Hubungkan baris paling atas dari jack ke baris kosong di atas (Baris 10 pada gambar). Ini adalah kabel yang membawa sinyal audio.
  4. Hubungkan Pin Digital ~9 ke baris 10 juga.
  5. Hubungkan Ground di Arduino Anda ke ground rail di breadboard.
  6. Anda belum tentu perlu menggunakan resistor dan kapasitor, tetapi Anda mungkin melihat jeritan bernada tinggi jika tidak. Ini bertindak sebagai filter lolos rendah untuk menghilangkan frekuensi di atas ~ 15 kHz.

Buka sketsa Sinewave Mozzi di Arduino IDE dengan memilih File > Contoh > Mozzi > Dasar > Sinewave. Ini pada dasarnya setara dengan "Hello World" milik Mozzi.

Unggah sketsa dan colokkan speaker ke papan tempat memotong roti. Anda juga dapat menggunakan bel jika Anda belum menghubungkan papan tempat memotong roti ke jack audio.

Jika Anda tidak mendengar suara A4 (440Hz) konstan dari speaker Anda, pastikan semua koneksi Anda baik dan coba lagi.

Selanjutnya, kita akan menghubungkan Nunchuck ke Arduino!

Langkah 3: Menyatukan Semuanya

Menyatukan Semuanya
Menyatukan Semuanya

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

Dari Arduino IDE Pilih File > Contoh > Mozzi > Sensor > Frekuensi Piezo

Kita perlu menambahkan beberapa baris ke kode ini untuk membuatnya bekerja dengan Nunchuck. Tambahkan sertakan ke perpustakaan WiiChuck dan buat instance objek WiiChuck yang disebut chuck. Anda juga dapat mengomentari deklarasi PIEZO_PIN atau menghapusnya karena kami tidak akan menggunakannya.

#sertakan "WiiChuck. H"

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

Sekarang dalam pengaturan, kita perlu menambahkan yang berikut:

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

dan akhirnya kita perlu mengubah beberapa hal di updateControl():

batalkan updateControl(){

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

void updateControl(){ chuck.update(); // dapatkan data nunchuck terbaru // baca piezo //int piezo_value = mozziAnalogRead(PIEZO_PIN); // nilainya 0-1023 // Kita tidak membutuhkan garis di atas tetapi mengapa tidak memetakan gulungan ke kisaran yang sama? int piezo_nilai = peta(chuck.readRoll(), -180, 180, 0 1023);

Unggah kode dan frekuensinya harus sesuai dengan Nunchuck's Roll Anda. Coba pemetaan ke rentang frekuensi yang berbeda. Jika Anda belum melihat lebih jauh di bawah dalam sketsa, nilai dari sensor dikalikan dengan 3 jadi kami saat ini memainkan nada dari 0 Hz hingga sekitar 3000 Hz.

Langkah 4: Sentuhan Akhir

Sentuhan Akhir
Sentuhan Akhir

Sekarang Anda siap untuk mengunggah versi terakhir dari kode yang telah saya kumpulkan dari langkah sebelumnya dan beberapa contoh Mozzi (Phase_Mod_Envelope, dan Control_Gain tepatnya). Untuk mempermudah hidup saya, saya juga menyertakan file bernama pitches.h yang hanya mendefinisikan nilai frekuensi dengan nama not yang sudah dikenal (yaitu NOTE_A4).

Saya sarankan membaca dokumentasi Mozzi karena sebagian besar kode langsung dari contoh kecuali kode untuk Nunchuck.

Berikut ini tautan ke repositori Git saya. Semua file penting disertakan kecuali perpustakaan Mozzi yang harus Anda dapatkan dari situs web mereka sehingga selalu mutakhir. Unduh WiiMusic.ino dan unggah ke perangkat Anda untuk mendengar seperti apa suaranya. Saya sarankan Anda bermain-main dengan parameter yang saya ubah (mengubah rentang peta, membagi/menggandakan angka, dll…) karena itulah cara saya menemukan suara tertentu yang saya cari.

Cerminan

Saya tidak merasa saya benar-benar selesai. Itu tidak berarti saya tidak puas dengan proyek atau suara yang dihasilkannya, tetapi saya merasa seperti baru saja mencelupkan kaki saya ke dunia baru yang ingin terus saya jelajahi jadi saya akan menambahkan cabang baru dari proyek ini saat saya melanjutkan bekerja.

Meski begitu, ini adalah perjalanan nyata pertama saya ke dunia mikrokontroler, jadi saya sangat berterima kasih atas pengalaman belajarnya. Sekitar dua puluh jam yang saya habiskan untuk mengerjakannya memberi saya ide-ide Natal untuk diri saya sendiri dan hampir setiap anggota keluarga saya. Saya agak menyesal tidak mengerjakan proyek ini dengan orang lain karena saya dapat menggunakan banyak saran dan bimbingan selama ini. Namun, saya pribadi belajar banyak melalui uji coba saya termasuk tiga hari mencabut rambut saya mencoba men-debug masalah perangkat lunak yang tidak pernah ada (kabel internal di Nunchuck telah rusak).

Masih ada beberapa kemungkinan ke depan. Misalnya, saya ingin menggunakan Arduino sebagai jenis antarmuka MIDI di antara pengontrol MIDI dan headphone keluar untuk mengubah parameter catatan MIDI karena ada begitu banyak pilihan (volume, cutoff, frekuensi envelope, pitch bend, modulasi, vibrato, apa saja). Ini akan memungkinkan lebih banyak fleksibilitas termasuk beralih parameter dengan tombol, dan hanya memainkan akord yang tidak di-hardcode ke dalam array C++.

Direkomendasikan: