- Bahan yang Dibutuhkan:
- Diagram Sirkuit:
- Skema dan Penjelasan:
- Memahami
- Memainkan nada piano di Arduino:
- Memprogram Arduino:
- Mainkan, Rekam, Putar Ulang, dan Ulangi! :
Arduino telah menjadi anugerah bagi orang-orang yang bukan dari latar belakang elektronik untuk membuat barang dengan mudah. Ini telah menjadi alat pembuatan prototipe yang bagus atau untuk mencoba sesuatu yang keren, dalam proyek ini kita akan membuat Piano kecil namun menyenangkan menggunakan Arduino. Piano ini cukup polos dengan hanya 8 tombol tekan dan bel. Ini menggunakan fungsi tone () dari Arduino untuk membuat berbagai jenis not piano di speaker. Untuk membumbuinya sedikit, kami telah menambahkan fitur perekaman dalam proyek, ini memungkinkan kami untuk memutar rekaman lagu dan memutarnya lagi berulang kali saat diperlukan. Kedengarannya menarik bukan !! Jadi mari kita membangun….
Bahan yang Dibutuhkan:
- Arduino Uno
- 16 * 2 Layar LCD
- Bel
- Pemangkas 10k
- Sakelar SPDT
- Tombol tekan (8 Tidak)
- Resistor (10k, 560R, 1.5k, 2.6k, 3.9, 5.6k, 6.8k, 8.2k, 10k)
- Papan tempat memotong roti
- Menghubungkan kabel
Diagram Sirkuit:
Proyek Piano Arduino lengkap dapat dibangun di atas papan tempat memotong roti dengan beberapa kabel penghubung. Diagram rangkaian dibuat menggunakan fritzing yang menunjukkan tampilan papan tempat memotong roti dari proyek ditunjukkan di bawah ini
Ikuti saja diagram sirkuit dan sambungkan kabel yang sesuai, tombol tekan dan bel seperti yang digunakan dengan modul PCB tetapi dalam perangkat keras sebenarnya kami hanya menggunakan sakelar dan bel, itu seharusnya tidak terlalu membingungkan Anda karena mereka memiliki jenis pin out yang sama. Anda juga dapat merujuk ke gambar perangkat keras di bawah ini untuk membuat koneksi Anda.
Nilai resistor dari kiri ada dalam urutan berikut, 10k, 560R, 1.5k, 2.6k, 3.9, 5.6k, 6.8k, 8.2k dan 10k. Jika Anda tidak memiliki sakelar DPST yang sama, Anda dapat menggunakan sakelar sakelar normal seperti yang ditunjukkan pada diagram rangkaian di atas. Sekarang mari kita lihat skema proyek untuk memahami mengapa kami membuat koneksi berikut.
Skema dan Penjelasan:
Skema diagram rangkaian yang ditunjukkan di atas diberikan di bawah ini, juga dibuat dengan menggunakan Fritzing.
Satu koneksi utama yang harus kita pahami adalah bagaimana kita telah menghubungkan 8 tombol push ke Arduino melalui pin Analog A0. Pada dasarnya kita membutuhkan 8 pin input yang dapat dihubungkan ke 8 input push button, tetapi untuk proyek seperti ini kita tidak dapat menggunakan 8 pin mikrokontroler hanya untuk push button karena mungkin diperlukan untuk digunakan nanti. Dalam kasus kami, kami memiliki layar LCD untuk dihubungkan.
Jadi kami menggunakan pin analog dari Arduino dan membentuk pembagi potensial dengan nilai resistor yang bervariasi untuk menyelesaikan rangkaian. Dengan cara ini ketika setiap tombol ditekan, tegangan analog yang berbeda akan disuplai ke pin Analog. Rangkaian sampel dengan hanya dua resistor dan dua tombol tekan ditunjukkan di bawah ini.
Dalam hal ini pin ADC akan menerima + 5V ketika push button tidak ditekan, jika tombol pertama ditekan maka pembagi potensial selesai melalui resistor 560R dan jika tombol kedua ditekan maka pembagi potensial akan bersaing menggunakan 1,5 k resistor. Dengan cara ini tegangan yang diterima oleh pin ADC akan bervariasi berdasarkan rumus pembagi potensial. Jika Anda ingin mengetahui lebih jauh tentang cara kerja pembagi potensial dan cara menghitung nilai tegangan yang diterima oleh pin ADC maka Anda dapat menggunakan halaman kalkulator pembagi potensial ini.
Selain ini semua koneksi lurus ke depan, LCD dihubungkan ke pin 8, 9, 10, 11 dan 12. Bel terhubung ke pin 7 dan sakelar SPDT terhubung ke pin 6 Arduino. Proyek lengkap ini didukung melalui port USB laptop. Anda juga dapat menghubungkan Arduino ke suplai 9V atau 12V melalui jack DC dan proyek akan tetap bekerja sama.
Memahami
Arduino memiliki fungsi tone () yang dapat digunakan untuk menghasilkan sinyal frekuensi yang bervariasi yang dapat digunakan untuk menghasilkan suara yang berbeda menggunakan buzzer. Jadi mari kita pahami bagaimana fungsinya bekerja dan bagaimana itu bisa digunakan dengan Arduino.
Sebelum itu kita harus mengetahui cara kerja Piezo buzzer. Kita mungkin pernah belajar tentang kristal Piezo di sekolah kita, itu tidak lain adalah kristal yang mengubah getaran mekanis menjadi listrik atau sebaliknya. Di sini kami menerapkan arus variabel (frekuensi) yang dengannya kristal bergetar sehingga menghasilkan suara. Oleh karena itu untuk membuat bel Piezo mengeluarkan suara kita harus membuat kristal listrik Piezo bergetar, nada dan nada suara tergantung pada seberapa cepat kristal bergetar. Oleh karena itu nada dan nada dapat dikontrol dengan memvariasikan frekuensi arus.
Oke, jadi bagaimana kita mendapatkan frekuensi variabel dari Arduino? Di sinilah fungsi tone () berperan. Tone () dapat menghasilkan frekuensi tertentu pada pin tertentu. Durasi waktu juga dapat disebutkan jika diperlukan. Sintaks untuk tone () adalah
Nada sintaks (pin, frekuensi) nada (pin, frekuensi, durasi) Pin parameter: pin untuk menghasilkan frekuensi nada: frekuensi nada dalam hertz - durasi int unsigned: durasi nada dalam milidetik (opsional1) - panjang tak bertanda tangan
Nilai pin dapat berupa pin digital Anda. Saya telah menggunakan pin nomor 8 di sini. Frekuensi yang dapat dihasilkan tergantung pada ukuran timer di papan Arduino Anda. Untuk UNO dan kebanyakan papan umum lainnya frekuensi minimum yang dapat dihasilkan adalah 31Hz dan frekuensi maksimum yang dapat dihasilkan adalah 65535Hz. Namun kita manusia hanya dapat mendengar frekuensi antara 2000Hz dan 5000 Hz.
Memainkan nada piano di Arduino:
Oke, bahkan sebelum saya memulai topik ini, izinkan saya menjelaskan bahwa saya adalah pemula dengan not musik atau piano, jadi mohon maafkan saya jika ada yang disebutkan di bawah judul ini adalah omong kosong.
Kita sekarang tahu bahwa kita dapat menggunakan fungsi nada di Arduino untuk menghasilkan beberapa suara, tetapi bagaimana kita bisa memainkan nada dari nada tertentu menggunakan yang sama. Beruntung bagi kami ada perpustakaan yang disebut "pitches.h" yang ditulis oleh Brett Hagman. Perpustakaan ini berisi semua informasi tentang frekuensi mana yang setara dengan nada mana pada piano. Saya terkejut dengan seberapa baik perpustakaan ini benar-benar dapat bekerja dan memainkan hampir setiap nada pada piano, saya menggunakan yang sama untuk memainkan nada piano Pirates of Caribbean, Crazy Frog, Mario dan bahkan titanic dan mereka terdengar luar biasa. Ups! Kami sedikit keluar dari topik di sini, jadi jika Anda tertarik untuk melihatnya, periksa memainkan melodi menggunakan proyek Arduino. Anda juga akan menemukan penjelasan lebih lanjut tentang perpustakaan pitches.h di proyek itu.
Proyek kami hanya memiliki 8 tombol tekan sehingga setiap tombol hanya dapat memainkan satu not musik tertentu dan dengan demikian secara total kami hanya dapat memainkan 8 not. Saya memilih nada yang paling sering digunakan pada piano, tetapi dapatkah Anda memilih 8 atau bahkan memperluas proyek dengan lebih banyak tombol tekan dan menambahkan lebih banyak nada.
Not yang dipilih dalam proyek ini adalah not C4, D4, E4, F4, G4, A4, B4, dan C5 yang masing-masing dapat dimainkan menggunakan tombol 1 hingga 8.
Memprogram Arduino:
Cukup teori mari kita ke bagian menyenangkan dari pemrograman Arduino. The Program Arduino lengkap diberikan pada akhir halaman ini Anda dapat melompat ke bawah jika Anda ingin atau membaca lebih lanjut untuk memahami cara kerja kode.
Dalam program Arduino kami, kami harus membaca tegangan analog dari pin A0, kemudian memprediksi tombol mana yang ditekan dan memainkan nada masing-masing untuk tombol itu. Saat melakukan ini kita juga harus merekam tombol mana yang telah ditekan pengguna dan berapa lama dia menekan, sehingga kita dapat membuat ulang nada yang dimainkan oleh pengguna nanti.
Sebelum masuk ke bagian logika, kita harus menyatakan 8 not mana yang akan kita mainkan. Frekuensi masing-masing untuk nada tersebut kemudian diambil dari pustaka pitches.h dan kemudian sebuah array dibentuk seperti yang ditunjukkan di bawah ini. Disini frekuensi untuk memainkan note C4 adalah 262 dan seterusnya.
catatan int = {262, 294, 330, 349, 392, 440, 494, 523}; // Atur frekuensi untuk C4, D4, E4, F4, G4, A4, B4,
Selanjutnya kita harus menyebutkan ke pin mana layar LCD terhubung. Jika Anda mengikuti skema yang sama persis yang diberikan di atas, maka Anda tidak perlu mengubah apa pun di sini.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Pin yang dihubungkan ke LCD LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Selanjutnya, di dalam fungsi pengaturan kami, kami hanya menginisialisasi modul LCD dan monitor serial untuk debugging. Kami juga menampilkan pesan intro hanya untuk memastikan semuanya berjalan sesuai rencana. Selanjutnya , di dalam fungsi loop utama kita memiliki dua while loop.
One while loop akan dijalankan selama SPDT switch ditempatkan di recording lebih banyak. Dalam mode perekaman pengguna dapat membayar nada-nada yang dibutuhkan dan pada saat yang sama nada yang sedang dimainkan juga akan disimpan. Jadi loop sementara terlihat seperti ini di bawah
while (digitalRead (6) == 0) // Jika sakelar sakelar disetel dalam mode perekaman {lcd.setCursor (0, 0); lcd.print ("Rekaman.."); lcd.setCursor (0, 1); Detect_button (); Play_tone (); }
Seperti yang mungkin telah Anda perhatikan, kami memiliki dua fungsi di dalam while loop. Fungsi pertama Detect_button () digunakan untuk mencari tombol mana yang telah ditekan pengguna dan fungsi kedua Play_tone () digunakan untuk memainkan nada masing-masing. Selain fungsi ini, fungsi Detect_button () juga mencatat tombol mana yang sedang ditekan dan fungsi Play_tone () mencatat berapa lama tombol tersebut ditekan.
Di dalam fungsi Detect_button () kita membaca tegangan analog dari pin A0 dan membandingkannya dengan beberapa nilai yang telah ditentukan untuk mengetahui tombol mana yang telah ditekan. Nilai dapat ditentukan dengan menggunakan kalkulator pembagi tegangan di atas atau dengan menggunakan monitor serial untuk memeriksa nilai analog yang dibaca untuk setiap tombol.
batal Detect_button () { analogVal = analogRead (A0); // baca voltag analog pada pin A0 pev_button = button; // ingat tombol sebelumnya yang ditekan oleh pengguna jika (analogVal <550) button = 8; jika (analogVal <500) tombol = 7; jika (analogVal <450) tombol = 6; jika (analogVal <400) tombol = 5; jika (analogVal <300) tombol = 4; jika (analogVal <250) tombol = 3; jika (analogVal <150) tombol = 2; jika (analogVal <100) tombol = 1; jika tombol (analogVal> 1000) = 0; / **** Rekam tombol yang ditekan dalam larik *** / if (button! = pev_button && pev_button! = 0) { record_button = pev_button; button_index ++; record_button = 0; button_index ++; } / ** Program Akhir Perekaman ** / }
Seperti yang dikatakan, di dalam fungsi ini kami juga merekam urutan penekanan tombol. Nilai yang terekam disimpan dalam larik bernama record_button. Kita cek dulu apakah ada tombol baru yang ditekan, jika ditekan maka kita periksa juga apakah bukan tombol 0. Dimana tombol 0 tidak lain adalah tidak ada tombol yang ditekan. Di dalam loop if kami menyimpan nilai pada lokasi indeks yang diberikan oleh variabel button_index dan kemudian kami juga meningkatkan nilai indeks ini sehingga kami tidak menulis berlebihan di lokasi yang sama.
/ **** Rekam tombol yang ditekan dalam larik *** / if (button! = Pev_button && pev_button! = 0) { recording_button = pev_button; button_index ++; tombol_catat = 0; button_index ++; } / ** Program Akhir Perekaman ** /
Di dalam fungsi Play_tone () kita akan memainkan nada masing-masing untuk tombol yang ditekan dengan menggunakan beberapa kondisi if . Juga kita akan menggunakan array bernama record_time di dalamnya yang akan kita simpan durasi waktu tombolnya ditekan. Pengoperasiannya mirip dengan urutan tombol pencatatan dengan kita menggunakan fungsi millis () untuk menentukan berapa lama setiap tombol ditekan, juga untuk memperkecil ukuran variabel kita membagi nilainya dengan 10. Untuk tombol 0, yang berarti pengguna tidak menekan apapun kita memainkan nada untuk durasi yang sama. Kode lengkap di dalam fungsi ditampilkan di bawah ini.
void Play_tone () { / **** Catat waktu tunda antara setiap tombol yang ditekan dalam larik *** / if (button! = pev_button) { lcd.clear (); // Kemudian bersihkan note_time = (millis () - start_time) / 10; record_time = note_time; time_index ++; start_time = millis (); } / ** Akhir dari program Perekaman ** / jika (tombol == 0) { noTone (7); lcd.print ("0 -> Jeda.."); } if (button == 1) { tone (7, notes); lcd.print ("1 -> NOTE_C4"); } if (button == 2) { tone (7, notes); lcd.print ("2 -> NOTE_D4"); } jika (tombol == 3) { nada (7, catatan); lcd.print ("3 -> NOTE_E4"); } if (button == 4) { tone (7, notes); lcd.print ("4 -> NOTE_F4"); } if (button == 5) { tone (7, notes); lcd.print ("5 -> NOTE_G4"); } if (button == 6) { tone (7, notes); lcd.print ("6 -> NOTE_A4"); } if (button == 7) { tone (7, notes); lcd.print ("7 -> NOTE_B4"); } if (button == 8) { tone (7, notes); lcd.print ("8 -> NOTE_C5"); } }
Akhirnya setelah merekam pengguna harus mengalihkan DPST ke arah lain untuk memutar nada yang direkam. Ketika ini dilakukan, program keluar dari loop sementara sebelumnya dan memasuki loop sementara kedua di mana kita memainkan not-not dalam urutan tombol yang ditekan untuk durasi yang telah direkam sebelumnya. Kode untuk melakukan hal yang sama ditunjukkan di bawah ini.
while (digitalRead (6) == 1) // Jika sakelar sakelar disetel dalam mode Pemutaran { lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Now Playing.."); untuk (int i = 0; i <sizeof (record_button) / 2; i ++) { delay ((record_time) * 10); // Tunggu sebelum membayar lagu berikutnya if ( record_button == 0) noTone (7); // pengguna tidak menyentuh tombol lain nada (7, catatan - 1)]); // putar suara yang sesuai dengan tombol yang disentuh oleh pengguna } } }
Mainkan, Rekam, Putar Ulang, dan Ulangi!:
Buat perangkat keras sesuai diagram sirkuit yang ditunjukkan, dan unggah kode ke papan Arduino dan waktu yang ditunjukkan. Posisikan SPDT dalam mode perekaman dan mulai mainkan nada pilihan Anda, menekan setiap tombol akan menghasilkan nada yang berbeda. Selama mode ini LCD akan menampilkan " Recording…" dan pada baris kedua Anda akan melihat nama note yang sedang ditekan seperti yang ditunjukkan di bawah ini
Setelah Anda memainkan nada Anda, alihkan tombol SPDT ke sisi lain dan LCD akan menampilkan " Now Playing.." dan kemudian mulai mainkan nada yang baru saja Anda mainkan. Nada yang sama akan dimainkan lagi dan lagi selama sakelar sakelar tetap pada posisi seperti yang ditunjukkan pada gambar di bawah ini.
Pekerjaan lengkap proyek dapat ditemukan di video yang diberikan di bawah ini. Harap Anda memahami proyek tersebut dan menikmati membangunnya. Jika Anda memiliki masalah dalam membangun posting ini di bagian komentar atau gunakan forum untuk bantuan teknis pada proyek Anda. Juga jangan lupa untuk melihat video demonstrasi yang diberikan di bawah ini.