- Bahan yang Diperlukan:
- Rajah Litar:
- Skematik dan Penjelasan:
- Memahami
- Memainkan nada piano di Arduino:
- Memprogram Arduino:
- Main, Rakam, Main semula dan Ulangi! :
Arduino telah memberi kebaikan kepada orang-orang yang bukan dari latar belakang elektronik untuk membina barang dengan mudah. Ini telah menjadi alat prototaip yang hebat atau untuk mencuba sesuatu yang keren, dalam projek ini kita akan membina Piano kecil namun menyeronokkan menggunakan Arduino. Piano ini cukup sederhana dengan hanya 8 butang tekan dan buzzer. Ia menggunakan fungsi nada () Arduino untuk membuat pelbagai jenis nota piano pada pembesar suara. Untuk menambahkannya, kami telah menambahkan ciri rakaman dalam projek ini, ini memungkinkan kami memainkan rakaman lagu dan memainkannya berulang kali apabila diperlukan. Bunyi menarik betul !! Oleh itu, mari kita bangun…
Bahan yang Diperlukan:
- Arduino Uno
- Paparan LCD 16 * 2
- Buzzer
- Perapi 10k
- Suis SPDT
- Butang tekan (8 Nos)
- Perintang (10k, 560R, 1.5k, 2.6k, 3.9, 5.6k, 6.8k, 8.2k, 10k)
- Papan roti
- Menyambung wayar
Rajah Litar:
Projek Arduino Piano yang lengkap boleh dibina di atas papan roti dengan beberapa wayar penghubung. Gambarajah litar yang dibuat menggunakan fritzing yang menunjukkan paparan papan roti projek ditunjukkan di bawah
Ikuti rajah litar dan sambungkan wayar dengan sewajarnya, butang tekan dan buzzer seperti yang digunakan dengan modul PCB tetapi dalam perkakasan sebenarnya kami hanya menggunakan suis dan buzzer, ia tidak akan membingungkan anda kerana mereka mempunyai jenis pin keluar yang sama. Anda juga boleh melihat gambar perkakasan di bawah ini untuk membuat sambungan anda.
Nilai perintang dari kiri adalah mengikut urutan berikut, 10k, 560R, 1.5k, 2.6k, 3.9, 5.6k, 6.8k, 8.2k dan 10k. Sekiranya anda tidak mempunyai suis DPST yang sama, anda boleh menggunakan suis togol biasa seperti yang ditunjukkan dalam rajah litar di atas. Sekarang mari kita lihat skema projek untuk memahami mengapa kita membuat sambungan berikut.
Skematik dan Penjelasan:
Skema untuk gambarajah litar yang ditunjukkan di atas diberikan di bawah, ini juga dibuat menggunakan Fritzing.
Satu hubungan utama yang harus kita fahami adalah bagaimana kita menghubungkan 8 butang tekan ke Arduino melalui pin Analog A0. Pada dasarnya kita memerlukan 8 pin input yang boleh disambungkan ke 8 butang tekan input, tetapi untuk projek seperti ini kita tidak boleh menggunakan 8 pin mikrokontroler hanya untuk butang tekan kerana kita mungkin memerlukannya untuk digunakan kemudian. Dalam kes kita, kita mempunyai paparan LCD untuk dihubungkan.
Oleh itu, kami menggunakan pin analog Arduino dan membentuk pembahagi berpotensi dengan nilai perintang yang berbeza-beza untuk menyelesaikan litar. Dengan cara ini apabila setiap butang ditekan voltan analog yang berbeza akan dibekalkan ke pin Analog. Litar sampel dengan hanya dua perintang dan dua butang tekan ditunjukkan di bawah.
Dalam kes ini, pin ADC akan menerima + 5V apabila butang tekan tidak ditekan, jika butang pertama ditekan maka pembahagi berpotensi selesai melalui perintang 560R dan jika butang kedua ditekan maka pembahagi berpotensi akan bersaing menggunakan 1.5 perintang k. Dengan cara ini voltan yang diterima oleh pin ADC akan berbeza berdasarkan formula pembahagi berpotensi. Sekiranya anda ingin mengetahui lebih lanjut mengenai bagaimana pembahagi berpotensi berfungsi dan bagaimana mengira nilai voltan yang diterima oleh pin ADC, maka anda boleh menggunakan halaman kalkulator pembahagi berpotensi ini.
Selain daripada ini semua sambungan lurus ke hadapan, LCD disambungkan ke pin 8, 9, 10, 11 dan 12. Buzzer disambungkan ke pin 7 dan suis SPDT disambungkan ke pin 6 Arduino. Projek lengkap digerakkan melalui port USB komputer riba. Anda juga boleh menyambungkan Arduino ke bekalan 9V atau 12V melalui bicu DC dan projek itu masih akan berfungsi sama.
Memahami
Arduino mempunyai fungsi nada berguna () yang dapat digunakan untuk menghasilkan isyarat frekuensi yang berbeza-beza yang dapat digunakan untuk menghasilkan bunyi yang berbeza menggunakan buzzer. Oleh itu mari kita fahami bagaimana fungsinya berfungsi dan bagaimana ia dapat digunakan dengan Arduino.
Sebelum itu kita harus mengetahui bagaimana alat pengeras suara Piezo berfungsi. Kita mungkin pernah belajar tentang kristal Piezo di sekolah kita, ia hanyalah kristal yang menukar getaran mekanikal menjadi elektrik atau sebaliknya. Di sini kita menggunakan arus berubah (frekuensi) di mana kristal bergetar sehingga menghasilkan bunyi. Oleh itu, untuk membuat pengeras suara Piezo membuat sedikit bunyi, kita harus menjadikan kristal elektrik Piezo bergetar, nada dan nada bunyi bergantung pada seberapa pantas kristal bergetar. Oleh itu nada dan nada dapat dikawal dengan mengubah frekuensi arus.
Baiklah, jadi bagaimana kita mendapatkan frekuensi berubah dari Arduino? Di sinilah fungsi nada () masuk. Nada () dapat menghasilkan frekuensi tertentu pada pin tertentu. Tempoh masa juga dapat disebut jika diperlukan. Sintaks untuk nada () adalah
Nada sintaks (pin, frekuensi) (pin, frekuensi, durasi) Pin parameter: pin yang akan menghasilkan frekuensi nada: frekuensi nada dalam hertz - durasi int yang tidak ditandatangani: jangka masa nada dalam milisaat (pilihan1) - tidak bertanda panjang
Nilai pin boleh menjadi pin digital anda. Saya telah menggunakan pin nombor 8 di sini. Kekerapan yang boleh dihasilkan bergantung pada ukuran pemasa di papan Arduino anda. Untuk UNO dan kebanyakan papan umum lain frekuensi minimum yang dapat dihasilkan ialah 31Hz dan frekuensi maksimum yang dapat dihasilkan ialah 65535Hz. Bagaimanapun kita manusia hanya dapat mendengar frekuensi antara 2000Hz dan 5000 Hz.
Memainkan nada piano di Arduino:
Baiklah, sebelum saya memulakan topik ini, izinkan saya menjelaskan bahawa saya adalah pemula dengan nota muzik atau piano, jadi maafkan saya jika ada perkara yang disebutkan di bawah tajuk ini adalah omong kosong.
Kami sekarang tahu bahawa kita dapat menggunakan fungsi nada di Arduino untuk menghasilkan beberapa suara, tetapi bagaimana kita dapat memainkan nada nada tertentu menggunakan yang sama. Beruntung bagi kami terdapat perpustakaan yang disebut "pitches.h" yang ditulis oleh Brett Hagman. Perpustakaan ini mengandungi semua maklumat mengenai frekuensi mana yang setara dengan nota di piano. Saya terkejut dengan seberapa baik perpustakaan ini dapat berfungsi dan memainkan hampir setiap nota di piano, saya menggunakan yang sama untuk memainkan nota piano Pirates of Caribbean, Crazy Frog, Mario dan juga titanic dan kedengarannya hebat. Alamak! Kami mendapat sedikit topik di sini, jadi jika anda berminat untuk melihat bermain melodi menggunakan projek Arduino. Anda juga akan mendapat lebih banyak penjelasan mengenai perpustakaan pitches.h dalam projek itu.
Projek kami hanya mempunyai 8 butang tekan sehingga setiap butang hanya dapat memainkan satu nota muzik tertentu dan dengan itu kami hanya dapat memainkan 8 nota sahaja. Saya memilih nota yang paling banyak digunakan di piano, tetapi bolehkah anda memilih 8 atau bahkan mengembangkan projek dengan lebih banyak butang tekan dan menambah lebih banyak nota.
Nota yang dipilih dalam projek ini adalah nota C4, D4, E4, F4, G4, A4, B4 dan C5 yang masing-masing dapat dimainkan menggunakan butang 1 hingga 8.
Memprogram Arduino:
Cukup teori, mari kita sampai ke bahagian yang menyeronokkan dalam memprogram Arduino. The Program Arduino lengkap diberikan pada akhir halaman ini, anda boleh melompat ke bawah jika anda tidak sabar-sabar atau membaca lagi untuk memahami bagaimana kerja-kerja kod.
Dalam program Arduino kita harus membaca voltan analog dari pin A0, kemudian meramalkan butang mana yang ditekan dan memainkan nada masing-masing untuk butang itu. Semasa melakukan ini, kita juga harus merakam butang mana yang telah ditekan oleh pengguna dan berapa lama dia menekan, sehingga kita dapat membuat nada yang dimainkan oleh pengguna nanti.
Sebelum pergi ke bahagian logik, kita harus menyatakan 8 nota mana yang akan kita mainkan. Frekuensi masing-masing untuk nota kemudian diambil dari perpustakaan pitches.h dan kemudian susunan dibentuk seperti yang ditunjukkan di bawah. Di sini frekuensi bermain nota C4 adalah 262 dan seterusnya.
int nota = {262, 294, 330, 349, 392, 440, 494, 523}; // Tetapkan frekuensi untuk C4, D4, E4, F4, G4, A4, B4,
Seterusnya kita harus menyebutkan pin mana paparan LCD disambungkan. Sekiranya anda mengikuti skema yang sama seperti yang dinyatakan di atas maka anda tidak perlu mengubah apa-apa di sini.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Pin ke mana LCD disambungkan LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Selanjutnya, di dalam fungsi persediaan kita hanya menginisialisasi modul LCD dan monitor bersiri untuk debug. Kami juga memaparkan mesej intro untuk memastikan semuanya berjalan seperti yang dirancang. Seterusnya , di dalam fungsi gelung utama kita mempunyai dua sementara gelung.
Gelung satu ketika akan dijalankan selagi suis SPDT diletakkan dalam rakaman lebih banyak. Dalam mod rakaman pengguna dapat membayar nada yang diperlukan dan pada masa yang sama nada yang dimainkan juga akan disimpan. Jadi gelung sementara kelihatan seperti di bawah ini
while (digitalRead (6) == 0) // Sekiranya suis togol ditetapkan dalam mod rakaman {lcd.setCursor (0, 0); lcd.print ("Rakaman.."); lcd.setCursor (0, 1); Butang mengesan (); Play_tone (); }
Seperti yang anda perhatikan, kita mempunyai dua fungsi di dalam loop sementara. Fungsi pertama Detect_button () digunakan mencari butang mana yang telah ditekan oleh pengguna dan fungsi kedua Play_tone () digunakan untuk memainkan nada masing-masing. Selain fungsi ini, fungsi Detect_button () juga merekodkan butang mana yang ditekan dan fungsi Play_tone () mencatat berapa lama butang itu ditekan.
Di dalam fungsi Detect_button () kita membaca voltan analog dari pin A0 dan membandingkannya dengan beberapa nilai yang telah ditentukan untuk mengetahui butang mana yang telah ditekan. Nilainya dapat ditentukan dengan menggunakan kalkulator pembahagi voltan di atas atau dengan menggunakan monitor bersiri untuk memeriksa nilai analog yang dibaca untuk setiap butang.
batal Detect_button () { analogVal = analogRead (A0); // baca voltag analog pada butang pin A0 pev_button =; // ingat butang sebelumnya yang ditekan oleh pengguna jika butang (analogVal <550) = 8; jika (analogVal <500) butang = 7; jika (analogVal <450) butang = 6; jika (analogVal <400) butang = 5; jika (analogVal <300) butang = 4; jika (analogVal <250) butang = 3; jika (analogVal <150) butang = 2; jika butang (analogVal <100) = 1; jika (analogVal> 1000) butang = 0; / **** Rekodkan butang yang ditekan dalam array *** / jika (butang! = pev_button && pev_button! = 0) { record_button = pev_button; butang_index ++; direkodkan_tombol = 0; butang_index ++; } / ** Program Rakaman Akhir ** / }
Seperti yang dikatakan, di dalam fungsi ini kita juga merekod urutan di mana butang ditekan. Nilai yang direkodkan disimpan dalam tatasusunan yang bernama record_button. Kami mula-mula memeriksa apakah ada butang baru yang ditekan, jika ditekan maka kami juga memeriksa apakah itu bukan butang 0. Di mana butang 0 tidak lain tetapi tidak ada butang yang ditekan. Di dalam if loop kita menyimpan nilai di lokasi indeks yang diberikan oleh pemboleh ubah button_index dan kemudian kita juga meningkatkan nilai indeks ini sehingga kita tidak menulis terlalu banyak di lokasi yang sama.
/ **** Rekodkan butang yang ditekan dalam array *** / if (butang! = Pev_button && pev_button! = 0) { Record_button = pev_button; butang_index ++; direkodkan_tombol = 0; butang_index ++; } / ** Akhir program Rakaman ** /
Di dalam fungsi Play_tone () kita akan memainkan nada masing-masing untuk butang yang ditekan dengan menggunakan beberapa jika keadaan. Kami juga akan menggunakan array yang bernama record_time di mana kami akan menjimatkan jangka masa di mana butang ditekan. Operasinya mirip dengan urutan butang rakaman dengan kita menggunakan fungsi milis () untuk menentukan berapa lama setiap butang ditekan, juga untuk mengurangkan ukuran pemboleh ubah kita membagi nilainya dengan 10. Untuk butang 0, yang bermaksud pengguna tidak menekan apa sahaja yang kita mainkan tanpa nada untuk jangka masa yang sama. Kod lengkap di dalam fungsi ditunjukkan di bawah.
batal Play_tone () { / **** Rakam kelewatan masa antara setiap butang tekan dalam array *** / if (butang! = pev_button) { lcd.clear (); // Kemudian bersihkan note_time = (milis () - start_time) / 10; direkodkan_waktu = nota_waktu; time_index ++; start_time = milis (); } / ** Akhir program Rakaman ** / if (butang == 0) { noTone (7); lcd.print ("0 -> Jeda.."); } jika (butang == 1) { nada (7, nota); lcd.print ("1 -> NOTE_C4"); } jika (butang == 2) { nada (7, nota); lcd.print ("2 -> NOTE_D4"); } jika (butang == 3) { nada (7, nota); lcd.print ("3 -> NOTE_E4"); } jika (butang == 4) { nada (7, nota); lcd.print ("4 -> NOTE_F4"); } jika (butang == 5) { nada (7, nota); lcd.print ("5 -> NOTE_G4"); } jika (butang == 6) { nada (7, nota); lcd.print ("6 -> NOTE_A4"); } jika (butang == 7) { nada (7, nota); lcd.print ("7 -> NOTE_B4"); } jika (butang == 8) { nada (7, nota); lcd.print ("8 -> NOTE_C5"); } }
Akhirnya setelah merakam pengguna harus menukar DPST ke arah lain untuk memainkan nada yang dirakam. Apabila ini selesai, program keluar dari loop sementara sebelumnya dan memasuki loop sementara kedua di mana kita memainkan nota mengikut urutan butang yang ditekan selama tempoh yang sebelumnya direkodkan. Kod untuk melakukan perkara yang sama ditunjukkan di bawah.
while (digitalRead (6) == 1) // Jika suis togol diatur dalam mod Main { lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Sekarang Dimainkan.."); untuk (int i = 0; i <sizeof (record_button) / 2; i ++) { delay ((direkodkan_waktu) * 10); // Tunggu sebelum membayar lagu seterusnya jika (direkodkan_tombol == 0) noTone (7); // pengguna tidak menyentuh nada butang lain (7, nota - 1)]); // mainkan suara yang sesuai dengan butang yang disentuh oleh pengguna } } }
Main, Rakam, Main semula dan Ulangi!:
Buat perkakasan seperti rajah litar yang ditunjukkan, dan muat naik kod ke papan Arduino dan waktu yang ditunjukkan. Posisikan SPDT dalam mod rakaman dan mula memainkan nada pilihan anda, menekan setiap butang akan menghasilkan nada yang berbeza. Semasa mod ini LCD akan memaparkan " Rakaman…" dan pada baris kedua anda akan melihat nama nota yang sedang ditekan seperti gambar di bawah
Setelah anda memainkan nada anda, beralih suis SPDT ke sisi lain dan LCD akan memaparkan " Sekarang Bermain.." dan kemudian mula memainkan nada yang baru sahaja anda mainkan. Nada yang sama akan dimainkan berulang kali selagi suis togol tetap berada pada kedudukan seperti yang ditunjukkan dalam gambar di bawah.
Penyelesaian projek yang lengkap dapat dilihat dalam video yang diberikan di bawah. Harap anda memahami projek ini dan seronok membinanya. Sekiranya anda mempunyai masalah dalam membina ini, hantarkannya di bahagian komen atau gunakan forum untuk bantuan teknikal pada projek anda. Jangan lupa untuk melihat video demonstrasi yang diberikan di bawah.