Proses manufaktur
| × | 1 | ||||
| × | 4 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 4 |
|
Tonton aksinya di sini.
Saya melakukan seperti biasa, menjelajahi YouTube ketika saya melihat beberapa musik floppy drive. Setelah mengetahui bahwa floppy drive dikendalikan oleh motor stepper, saya memutuskan untuk membuat generator suara motor stepper saya sendiri.
Saya telah melihat bahwa orang telah melakukan ini sebelumnya, tetapi setiap contoh tidak membagikan kode atau kode mereka sangat cacat dan/atau terbatas.
Setelah belajar C++ di sekolah, saya memutuskan untuk menggunakan keterampilan saya.
Yang benar-benar ingin saya lakukan adalah membuat kode yang sederhana dan mudah digunakan dan dimodifikasi. Dan itulah yang saya lakukan!
Yang Secara keseluruhan Proses
Untuk memulai, saya memikirkan apa yang perlu dilakukan. Dalam istilah yang paling dasar, saya perlu mengekstrak data MIDI dan mengubahnya menjadi kecepatan yang membuat motor stepper membuat nada yang sesuai.
Mengekstrak Data MIDI
Bagian ini agak mudah. Dengan memanfaatkan perpustakaan MIDI, saya dapat menafsirkan data MIDI, dan mengirimkannya ke fungsi lain untuk mengontrol kecepatan.
Mengontrol Stepper
Driver motor stepper A4988 memiliki dua pin yang secara langsung mengontrol gerakan stepper; LANGKAH dan DIR. DIR mengontrol apakah motor berputar searah jarum jam atau berlawanan arah jarum jam tergantung pada keadaan, dan STEP menggerakkan stepper satu langkah setiap kali ditarik tinggi (berapa banyak tergantung pada resolusi microstepping). Karena suara tidak terpengaruh oleh arah, saya cukup menyetelnya ke rendah (atau cukup sambungkan ke ground). Sekarang saya tinggal menginjak motor menggunakan perintah digitalWrite.
Tantangan
Tantangan utama dalam menangani proyek ini adalah saya ingin menggerakkan beberapa motor stepper sekaligus, jadi menggunakan perintah delay() tidak mungkin (jika tidak, motor tidak akan berjalan secara bersamaan). Sebagai gantinya, saya menggunakan perintah micros() untuk menghitung durasi untuk menggerakkan steppers. Karena akan ada nilai kecepatan yang berbeda untuk setiap motor stepper, saya mengubah variabel kecepatan menjadi array, dengan indeksnya sesuai dengan nomor motor dan saluran MIDI. Saya awalnya menggunakan perintah millis(), tetapi ternyata tidak memiliki resolusi untuk menghasilkan nada yang berbeda.
Menggunakan larik untuk mengontrol kecepatan motor stepper berarti saya dapat menggunakan satu variabel untuk semua motor, dan ini memberikan kemampuan agar arduino mengontrol sejumlah stepper, hanya dengan mengubah ukuran larik!
Perhitungan Kecepatan
Dalam sebuah pengujian, saya mengirim gelombang persegi 440 Hz (menggunakan perintah nada) ke pin langkah dan menemukan bahwa motor langkah menciptakan nada A440. Karena nilai kecepatan yang dikirim ke fungsi stepper adalah periode dalam mikrodetik, saya hanya mengubah frekuensi nada menjadi periode. Saya menempatkan nilai-nilai ini di array lain yang disebut pitchValues, dengan indeksnya sesuai dengan nilai catatan MIDI. Menggunakan array juga memungkinkan saya untuk mengontrol rentang stepper yang dapat dimainkan. Saya membuatnya sehingga nilai kecepatan nol dianggap berhenti.
Menggunakan array alih-alih perhitungan berarti ada kontrol penuh atas kecepatan setiap not, yang secara efektif mengatur rentang untuk instrumen. Juga, ketika motor stepper berada di dekat frekuensi resonansinya, ia menghasilkan suara yang sangat mengerikan (sepertinya berhenti). Anda dapat mengidentifikasi apa itu dan mengubah nilai nada dengan satu oktaf untuk menyelesaikannya. Bagi saya, frekuensi resonansinya sekitar F3, jadi saya harus mengubah E3, F3, dan F#3 satu oktaf untuk memperbaikinya. (Anda dapat memeriksa ini menggunakan kode "Tune Stepper.ino")
Membuat Perangkat MIDI USB
Saya ingin membuat perangkat terlihat sebagai perangkat MIDI jadi saya melakukan sedikit penggalian dan menemukan bahwa Anda dapat mengubah firmware chip AVR di papan. Firmwarenya bisa berupa HIDUINO atau mocuLUFA. Saya memutuskan untuk menggunakan mocuLUFA, karena memiliki opsi dual boot, sehingga saya dapat dengan mudah memprogram ulang Arduino tanpa harus mem-flash ulang chip AVR. Saya cukup menghubungkan jumper pada header ICSP untuk beralih antara USB MIDI dan USB Serial.
Proses manufaktur
Komponen dan persediaan Arduino Nano 33 BLE Sense × 1 Motor Stepper Rajin × 1 Driver Theremino DRV8825 untuk Motor Stepper untuk Sistem Theremino × 1 Alat dan mesin yang diperlukan Printer 3D (generik) Besi solder (generik) Aplikasi
Komponen dan persediaan Arduino Nano R3 Saya menggunakan Nano tetapi harus bekerja dengan Arduino apa pun × 1 LCD alfanumerik, 16 x 2 Tampilan apa pun akan berfungsi, saya menggunakan yang ini https://www.amazon.co.uk/ gp/product/B00N8K2BYM/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&p
Komponen dan persediaan Arduino UNO × 1 motor stepper sparkfun dengan kabel × 1 SparkFun Easydriver - Driver motor stepper × 1 Modul Bluetooth HC-05 × 1 Kabel USB-A ke B × 1 Breadboard (generik) × 1 Suplai daya adaptor SparkFun Wall
Komponen dan persediaan Arduino Nano R3 × 1 Potensiometer putar (generik) × 7 Sakelar Tombol Tekan SparkFun 12mm × 7 port MIDI × 1 Resistor 221 ohm × 4 LED (generik) × 2 Tentang proyek ini Pembaruan 11.03.2019 Hai, Saya