Daftar Isi:

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, Juli
Anonim
Membuat Lagu Dengan Arduino dan Motor DC
Membuat Lagu Dengan Arduino dan Motor DC

Suatu hari, saat menelusuri beberapa artikel tentang Arduino, saya melihat sebuah proyek 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 not musik. Dengan mengatur waktu frekuensi mana yang dimainkan, melodi yang jelas dapat terdengar dari motor stepper.

Namun, ketika saya mencobanya sendiri, saya menemukan bahwa motor stepper yang saya miliki tidak dapat berputar cukup cepat untuk menghasilkan nada. Sebagai gantinya, saya menggunakan motor DC, yang relatif sederhana untuk diprogram dan dihubungkan ke Arduino. IC L293D yang umum dapat digunakan untuk menggerakkan motor dengan mudah dari pin PWM Arduino, dan fungsi tone() asli di Arduino dapat menghasilkan frekuensi yang diperlukan. Yang mengejutkan saya, saya tidak menemukan contoh atau proyek apa pun menggunakan motor DC secara online, jadi Instruksi ini adalah tanggapan saya untuk memperbaikinya. Mari kita mulai!

P. S. Saya berasumsi bahwa Anda sudah memiliki pengalaman dengan Arduino dan akrab dengan bahasa pemrograman dan perangkat kerasnya. Anda harus tahu apa itu array, apa itu PWM dan bagaimana menggunakannya, dan bagaimana tegangan dan arus bekerja, hanya untuk menyebutkan beberapa hal. Jika Anda belum atau baru memulai Arduino, jangan khawatir: coba halaman memulai ini dari situs web resmi Arduino dan kembalilah kapan pun Anda siap.:)

Perlengkapan

  • Arduino (Saya menggunakan UNO tetapi Anda dapat menggunakan Arduino yang berbeda jika Anda mau)
  • Motor DC 5V standar, lebih disukai yang memiliki kipas terpasang (lihat gambar di "Merakit Sirkuit"
  • IC L293D
  • Tombol tekan sebanyak nada dalam lagu yang ingin Anda mainkan
  • Papan tempat memotong roti
  • Kabel Jumper

Langkah 1: Ikhtisar

Begini cara kerja proyek: Arduino akan menghasilkan gelombang persegi pada frekuensi tertentu, yang dikeluarkan ke L293D. L293D dihubungkan ke catu daya eksternal yang digunakan untuk memberi daya pada motor pada frekuensi yang diberikan oleh Arduino. Dengan mencegah poros motor DC berputar, motor dapat terdengar mati dan hidup pada frekuensi yang menghasilkan nada, atau nada. Kita dapat memprogram Arduino untuk memainkan not saat tombol ditekan, atau untuk memutarnya secara otomatis.

Langkah 2: Merakit Sirkuit

Merakit Sirkuit
Merakit Sirkuit
Merakit Sirkuit
Merakit Sirkuit

Untuk merakit sirkuit, cukup ikuti diagram Fritzing di atas.

Tip: Nada dari motor paling baik didengar saat poros tidak berputar. Saya memasang kipas di poros motor saya dan menggunakan selotip untuk menahan kipas saat motor berjalan (lihat gambar). Ini mencegah poros berputar dan menghasilkan nada yang jelas dan terdengar. Anda mungkin harus melakukan beberapa penyesuaian untuk mendapatkan nada yang bersih dari motor Anda.

Langkah 3: Bagaimana Sirkuit Bekerja

Bagaimana Sirkuit Bekerja
Bagaimana Sirkuit Bekerja

L293D adalah IC yang digunakan untuk menggerakkan perangkat tegangan tinggi dan arus tinggi seperti relai dan motor. Arduino tidak dapat menggerakkan sebagian besar motor secara langsung dari outputnya (dan EMF belakang dari motor dapat merusak sirkuit digital sensitif Arduino), sehingga IC seperti L293D dapat digunakan dengan catu daya eksternal untuk menggerakkan motor DC dengan mudah. Memasukkan sinyal ke L293D akan mengeluarkan sinyal yang sama ke motor DC tanpa risiko kerusakan pada Arduino.

Di atas adalah skema pinout/fungsional L293D dari lembar datanya. Karena kita hanya menggerakkan 1 motor (L293D dapat menggerakkan 2), kita hanya membutuhkan satu sisi IC. Pin 8 adalah daya, pin 4 dan 5 adalah GND, pin 1 adalah output PWM dari Arduino, dan pin 2 dan 7 mengontrol arah motor. Ketika pin 2 HIGH dan pin 7 LOW, motor berputar satu arah, dan ketika pin 2 LOW dan pin 7 HIGH, motor berputar ke arah lain. Karena kita tidak peduli ke arah mana motor berputar, tidak masalah jika pin 2 dan 7 LOW atau HIGH, asalkan berbeda satu sama lain. Pin 3 dan 6 terhubung ke motor. Anda dapat menghubungkan semuanya ke sisi lain (pin 9-16) jika diinginkan, tetapi perlu diketahui bahwa pin daya dan PWM bertukar tempat.

Catatan: Jika Anda menggunakan Arduino yang tidak memiliki cukup pin untuk setiap tombol, Anda dapat menggunakan jaringan resistor untuk menghubungkan semua sakelar ke satu pin analog, seperti dalam instruksi ini. Cara kerjanya berada di luar cakupan proyek ini, tetapi jika Anda pernah menggunakan R-2R DAC, Anda akan merasa familiar. Perhatikan bahwa menggunakan pin analog akan memerlukan sebagian besar kode untuk ditulis ulang, karena pustaka Tombol tidak dapat digunakan dengan pin analog.

Langkah 4: Cara Kerja Kode

Untuk mempermudah menangani semua tombol, saya menggunakan perpustakaan yang disebut "Tombol" oleh madleech. Saya memasukkan perpustakaan hal pertama. Selanjutnya, di baris 8-22, saya mendefinisikan frekuensi untuk not yang diperlukan untuk memainkan Twinkle, Twinkle, Little Star (contoh lagu), pin yang akan saya gunakan untuk menggerakkan L293D, dan tombol-tombolnya.

Dalam fungsi pengaturan, saya menginisialisasi Serial, tombol, dan mengatur pin driver untuk L293D ke mode output.

Akhirnya, di loop utama saya memeriksa untuk melihat apakah sebuah tombol telah ditekan. Jika sudah, Arduino memainkan not yang sesuai dan mencetak nama not ke Serial Monitor (berguna untuk mengetahui not mana yang ada di papan tempat memotong roti Anda). Jika sebuah not dilepaskan, arduino menghentikan suara apa pun dengan noTone().

Sayangnya, karena cara perpustakaan terstruktur, saya tidak dapat menemukan cara untuk memeriksa apakah tombol telah ditekan atau dilepaskan dengan cara yang tidak terlalu bertele-tele daripada menggunakan 2 kondisional per catatan. Kelemahan lain dengan kode ini adalah jika Anda menekan dua tombol secara bersamaan dan kemudian melepaskan salah satunya, kedua nada akan dihentikan, karena noTone() menghentikan nada apa pun yang dihasilkan terlepas dari nada mana yang memicunya.

Langkah 5: Memprogram Lagu

Alih-alih menggunakan tombol untuk memainkan not, Anda juga dapat memprogram Arduino untuk memainkan melodi untuk Anda secara otomatis. Berikut adalah versi modifikasi dari sketsa pertama yang memainkan Twinkle, Twinkle, Little Star di motor. Bagian pertama dari sketsa adalah sama - menentukan frekuensi nada dan tonePin. Kita sampai ke bagian baru di bpm="100". Saya mengatur ketukan per menit (bpm), dan kemudian menggunakan beberapa matematika untuk mengetahui jumlah milidetik per ketukan yang setara dengan bpm. Untuk melakukan ini, saya menggunakan teknik yang disebut analisis dimensi (jangan khawatir - ini tidak sesulit kedengarannya). Jika Anda pernah mengambil kursus kimia sekolah menengah, Anda pasti menggunakan analisis dimensi untuk mengkonversi antar unit. Float() ada di sana untuk memastikan bahwa tidak ada dalam persamaan yang dibulatkan sampai akhir untuk akurasi.

Setelah kita mendapatkan jumlah ms/beat, saya membagi atau mengalikannya dengan tepat untuk menemukan nilai milidetik dari durasi nada yang berbeda yang ditemukan dalam musik. Saya kemudian membuat larik dari setiap nada dalam urutan kronologis, dan satu lagi dengan durasi setiap nada. Sangat penting bahwa indeks setiap nada cocok dengan indeks durasinya, jika tidak, melodi Anda akan berbunyi. Saya memasukkan catatan untuk Twinkle, Twinkle, Little Star di sini sebagai contoh, tetapi Anda dapat mencoba lagu atau urutan nada apa pun yang Anda suka.

Keajaiban nyata terjadi dalam fungsi loop. Untuk setiap nada, saya memainkan nada selama waktu yang saya tentukan dalam larik beat_values. Alih-alih menggunakan penundaan di sini, yang akan menyebabkan nada tidak dimainkan, saya mencatat waktu sejak program dimulai dengan fungsi milis(), dan menguranginya dari waktu saat ini. Ketika waktu melebihi waktu yang saya tentukan agar catatan bertahan di array beat_values, saya menghentikan catatan tersebut. Penundaan setelah loop for ada untuk menambah celah di antara nada, memastikan bahwa nada berikutnya dengan frekuensi yang sama tidak akan menyatu.

Langkah 6: Umpan Balik

Itu saja untuk proyek ini. Jika ada sesuatu yang Anda tidak mengerti, atau jika Anda memiliki saran, jangan ragu untuk menghubungi saya. Karena ini adalah Instructables pertama saya, saya akan sangat menghargai komentar dan saran tentang cara meningkatkan konten ini. Sampai jumpa lain waktu!

Direkomendasikan: