Isi kandungan:

Membuat Lagu Dengan Arduino dan Motor DC: 6 Langkah
Membuat Lagu Dengan Arduino dan Motor DC: 6 Langkah

Video: Membuat Lagu Dengan Arduino dan Motor DC: 6 Langkah

Video: Membuat Lagu Dengan Arduino dan Motor DC: 6 Langkah
Video: Tinkercad | Arduino basic : Mengatur kecepatan dan arah putaran motor DC | simulator 2024, November
Anonim
Membuat Lagu Dengan Arduino dan Motor DC
Membuat Lagu Dengan Arduino dan Motor DC

Pada hari yang lain, ketika meneliti beberapa artikel mengenai Arduino, saya melihat projek menarik yang menggunakan motor stepper yang dikendalikan Arduino untuk membuat melodi pendek. Arduino menggunakan pin PWM (Pulse Width Modulation) untuk menjalankan motor stepper pada frekuensi tertentu, sesuai dengan nota muzik. Dengan menentukan frekuensi yang dimainkan ketika, melodi yang jelas dapat didengar dari motor stepper.

Namun, semasa saya mencubanya sendiri, saya dapati motor stepper yang saya miliki tidak dapat berpusing dengan cukup pantas untuk menghasilkan nada. Sebagai gantinya, saya menggunakan motor DC, yang agak mudah untuk diprogramkan dan disambungkan ke Arduino. IC L293D biasa boleh digunakan untuk menggerakkan motor dengan mudah dari pin Arduino PWM, dan fungsi nada asli () di Arduino dapat menghasilkan frekuensi yang diperlukan. Yang mengejutkan saya, saya tidak menemui sebarang contoh atau projek menggunakan motor DC secara dalam talian, jadi Instructables ini adalah tindak balas saya untuk membetulkannya. Mari kita mulakan!

P. S. Saya menganggap bahawa anda sudah mempunyai pengalaman dengan Arduino dan sudah biasa dengan bahasa dan perkakasan pengaturcaraannya. Anda harus tahu apa susunan, apa itu PWM dan bagaimana menggunakannya, dan bagaimana voltan dan arus berfungsi, hanya untuk menamakan beberapa perkara. Sekiranya anda belum tiba atau baru memulakan Arduino, jangan risau: cubalah halaman permulaan ini dari laman web rasmi Arduino dan kembali bila-bila masa anda sudah bersedia.:)

Bekalan

  • Arduino (Saya menggunakan UNO tetapi anda boleh menggunakan Arduino lain jika anda mahu)
  • Motor DC 5V standard, sebaiknya dipasang kipas (lihat gambar dalam "Memasang Litar"
  • L293D IC
  • Sebilangan besar butang tekan seperti nota dalam lagu yang ingin anda mainkan
  • Papan roti
  • Wayar Pelompat

Langkah 1: Gambaran keseluruhan

Inilah cara projek ini berfungsi: Arduino akan menghasilkan gelombang persegi pada frekuensi tertentu, yang dihasilkan ke L293D. L293D disambungkan ke bekalan kuasa luaran yang digunakannya untuk menyalakan motor pada frekuensi yang diberikan oleh Arduino. Dengan mengelakkan poros motor DC berputar, motor dapat didengar mematikan dan menyala pada frekuensi, yang menghasilkan nada, atau nada. Kita dapat memprogram Arduino untuk memainkan nota apabila butang ditekan, atau untuk memainkannya secara automatik.

Langkah 2: Memasang Litar

Memasang Litar
Memasang Litar
Memasang Litar
Memasang Litar

Untuk memasang litar, ikuti rajah Fritzing di atas.

Petua: Nota dari motor paling baik didengar apabila poros tidak berputar. Saya meletakkan kipas pada batang motor saya dan menggunakan beberapa pita saluran untuk menahan kipas ketika motor berjalan (lihat gambar). Ini mengelakkan poros berpusing dan menghasilkan nada yang jelas dan dapat didengar. Anda mungkin perlu melakukan tweak untuk mendapatkan nada bersih dari motor anda.

Langkah 3: Bagaimana Litar Berfungsi

Bagaimana Litar Berfungsi
Bagaimana Litar Berfungsi

L293D adalah IC yang digunakan untuk memandu voltan tinggi, peranti arus tinggi seperti relay dan motor. Arduino tidak dapat menggerakkan kebanyakan motor secara langsung dari outputnya (dan EMF belakang dari motor boleh merosakkan litar digital sensitif Arduino), jadi IC seperti L293D dapat digunakan dengan bekalan kuasa luaran untuk menggerakkan motor DC dengan mudah. Memasukkan isyarat ke L293D akan mengeluarkan isyarat yang sama ke motor DC tanpa mengambil risiko kerosakan pada Arduino.

Di atas adalah skema pinout / fungsional L293D dari lembaran datanya. Oleh kerana kita hanya memandu 1 motor (L293D dapat memandu 2), kita hanya memerlukan satu sisi IC. Pin 8 adalah kuasa, pin 4 dan 5 adalah GND, pin 1 adalah output PWM dari Arduino, dan pin 2 dan 7 mengawal arah motor. Apabila pin 2 TINGGI dan pin 7 RENDAH, motor berputar sehala, dan apabila pin 2 rendah dan pin 7 TINGGI, motor berputar ke arah lain. Oleh kerana kita tidak peduli dengan cara motor berputar, tidak menjadi masalah sama ada pin 2 dan 7 RENDAH atau TINGGI, selagi ia berbeza antara satu sama lain. Pin 3 dan 6 menyambung ke motor. Anda boleh menghubungkan semuanya ke sisi lain (pin 9-16) jika anda mahu, tetapi sedar bahawa pin kuasa dan PWM bertukar tempat.

Catatan: Sekiranya anda menggunakan Arduino yang tidak mempunyai pin yang cukup untuk setiap butang, anda boleh menggunakan rangkaian perintang untuk menyambungkan semua suis ke satu pin analog, seperti dalam instruksi ini. Cara kerjanya berada di luar ruang lingkup projek ini, tetapi jika anda pernah menggunakan D-R-2R, anda pasti sudah biasa. Perhatikan bahawa menggunakan pin analog akan memerlukan sebahagian besar kod untuk ditulis semula, kerana perpustakaan Butang tidak dapat digunakan dengan pin analog.

Langkah 4: Bagaimana Kod Berfungsi

Untuk mempermudah menangani semua butang, saya menggunakan perpustakaan bernama "Button" oleh madleech. Saya memasukkan perkara pertama di perpustakaan. Seterusnya, pada baris 8-22, saya menentukan frekuensi untuk nota yang diperlukan untuk memainkan Twinkle, Twinkle, Little Star (contoh lagu), pin yang akan saya gunakan untuk menggerakkan L293D, dan butang.

Dalam fungsi penyediaan, saya menginisialisasi Serial, butang, dan menetapkan pin pemacu untuk mod keluaran L293D ke output.

Akhirnya, dalam gelung utama saya memeriksa untuk melihat apakah butang telah ditekan. Sekiranya ada, Arduino memainkan nota yang sesuai dan mencetak nama nota ke Serial Monitor (berguna untuk mengetahui nota mana yang ada di papan roti anda). Sekiranya nota dikeluarkan, arduino menghentikan sebarang bunyi dengan noTone ().

Malangnya, kerana cara perpustakaan disusun, saya tidak dapat mencari cara untuk memeriksa apakah butang telah ditekan atau dilepaskan dengan cara yang kurang verbose daripada menggunakan 2 syarat untuk setiap nota. Kelemahan lain dengan kod ini adalah bahawa jika anda menekan dua butang secara serentak dan melepaskan salah satu daripadanya, kedua-dua nota akan dihentikan, kerana noTone () menghentikan sebarang nota yang dihasilkan tanpa mengira nota yang mencetuskannya.

Langkah 5: Memprogram Lagu

Daripada menggunakan butang untuk memainkan nota, anda juga dapat memprogram Arduino untuk memainkan melodi untuk anda secara automatik. Berikut adalah versi sketsa pertama yang dimodifikasi yang memainkan Twinkle, Twinkle, Little Star di motor. Bahagian pertama lakaran adalah sama - menentukan frekuensi nota dan tonePin. Kami sampai ke bahagian baru pada bpm = "100". Saya menetapkan rentak per minit (bpm), dan kemudian menggunakan beberapa matematik untuk mengetahui bilangan milisaat setiap rentak yang disamakan bpm. Untuk melakukan ini, saya menggunakan teknik yang disebut analisis dimensi (jangan bimbang - ini tidak sekeras kedengarannya). Sekiranya anda pernah mengikuti kursus kimia sekolah menengah, anda pasti menggunakan analisis dimensi untuk menukar antara unit. Float () ada untuk memastikan bahawa tiada apa-apa dalam persamaan yang dibulatkan sehingga akhir untuk ketepatan.

Setelah kami mendapat bilangan ms / beat, saya membahagikan atau menggandakannya dengan tepat untuk mencari nilai milidetik dari jangka masa nota yang berbeza yang terdapat dalam muzik. Saya kemudian membuat susunan setiap nota mengikut urutan kronologi, dan satu lagi dengan setiap catatan. Sangat penting bahawa indeks setiap nota sesuai dengan indeks lamanya, jika tidak, melodi anda akan berbunyi. Saya memasukkan nota untuk Twinkle, Twinkle, Little Star di sini sebagai contoh tetapi anda boleh mencuba lagu atau urutan nota yang anda mahukan.

Keajaiban sebenar berlaku dalam fungsi gelung. Untuk setiap nota, saya memainkan nada untuk masa yang saya nyatakan dalam array beat_values. Daripada menggunakan kelewatan di sini, yang menyebabkan nada tidak dapat dimainkan, saya mencatat masa sejak program dimulakan dengan fungsi milis (), dan mengurangkannya dari waktu sekarang. Apabila masa melebihi masa yang saya nyatakan nota bertahan dalam array beat_values, saya menghentikan nota. Kelewatan selepas loop for ada untuk menambahkan jurang antara nota, memastikan bahawa nota berikutnya dengan frekuensi yang sama tidak akan bergabung.

Langkah 6: Maklum balas

Itu sahaja untuk projek ini. Sekiranya ada sesuatu yang anda tidak faham, atau jika anda mempunyai cadangan, jangan ragu untuk menghubungi saya. Oleh kerana ini adalah Instructables pertama saya, saya sangat menghargai komen dan cadangan mengenai cara meningkatkan kandungan ini. Jumpa awak lain kali!

Disyorkan: