Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Piano Sentuh Kapasitif Portabel

Komponen dan persediaan

Enklosur ProtoStax untuk Arduino
ProtoStax untuk Arduino - Enklosur Modular yang Dapat Ditumpuk
× 1
Adafruit 12 x Capacitive Touch Shield untuk Arduino - MPR121
× 1
Adafruit Piezo Buzzer - PS1240
× 1
Arduino UNO
× 1
Pita Foil Tembaga dengan Perekat Konduktif
× 1
Kit Kawat Penghubung, 22 AWG
× 1

Tentang proyek ini

Dalam proyek ini, saya menjelaskan cara membuat piano sentuh kapasitif portabel dengan

  • sebuah Arduino,
  • Perisai Sentuh Kapasitif untuk Arduino menggunakan MPR121,
  • buzzer piezo,
  • pita foil tembaga dengan perekat konduktif (dipotong dalam bentuk tuts piano),

semua tertutup dalam wadah akrilik bening (ProtoStax untuk Arduino) dengan tombol sentuh kapasitif menempel di permukaan atasnya. Ini membuatnya menjadi piano kecil kompak yang bagus yang dapat Anda bawa dan mainkan dengan serta mengkodekan nada baru!

Untuk penginderaan sentuh kapasitif, saya menggunakan 12 x Capacitive Touch Shield dari Adafruit untuk Arduino menggunakan MPR121, ditambah dengan pustaka Adafruit_MPR121 yang memudahkan untuk mendeteksi dan merespons sentuhan hingga 12 permukaan konduktif yang berbeda.

Tunggu sebentar! Ada 12 semitone dalam Oktaf - C, C#, D, D#, E, E#, F, G, G#, A, A#, B! Sempurna! Nah, akan sangat bagus jika MPR121 menangani 13 input - itu akan memungkinkan kita untuk beralih dari C ke C dengan oktaf yang lebih tinggi, tetapi masih ada banyak nada yang bisa didapat! (dan saya juga menawarkan saran di bawah tentang bagaimana Anda dapat membawa proyek ini lebih jauh dengan memperluas rentang oktaf)

Selain itu, Anda juga dapat memprogram dalam urutan sentuhan Anda sendiri ("Tombol Rahasia" atau kombinasi tombol) untuk memainkan nada acak apa pun yang dapat menyertakan oktaf sebanyak yang Anda suka (hanya dibatasi oleh kekuatan telinga Anda untuk mendengar nada, atau piezo/speaker untuk memainkannya!).

Untuk outputnya, saya menggunakan tone library Arduino untuk memutar suara melalui buzzer Piezo. Anda juga dapat menggunakan speaker - ingatlah untuk menggunakan resistor untuk membatasi arus yang dapat disediakan oleh pin Arduino!

Untuk tuts piano, saya menggunakan pita foil tembaga dengan perekat konduktif. Penting untuk mendapatkannya dengan perekat konduktif karena Anda akan menempelkan selotip ke kawat yang terhubung ke pelindung.

Terakhir datang kandang. Beberapa dari Anda mungkin mengetahui bahwa saya telah membuat sistem enklosur modular baru yang dapat ditumpuk yang disebut ProtoStax. Itu adalah rasa gatal pribadi yang harus saya garuk - saya menginginkan enklosur yang mendukung berbagai tahap pembuatan prototipe, menawarkan perlindungan dan akses terbuka saat memulai, dengan kemampuan untuk menambahkan dinding samping dan bagian atas nanti, tetapi juga memiliki kemampuan untuk menumpuk beberapa unit baik berdampingan atau satu di atas yang lain, sehingga memiliki kemampuan untuk berkembang dengan kebutuhan prototipe dan penambahan papan dan komponen lainnya.

Dalam contoh ini saya menggunakan ProtoStax untuk Arduino, penutup akrilik bening untuk Arduino -- cocok dengan jejak Uno/Leonardo serta jejak Mega/Due yang lebih besar -- yang juga dapat ditumpuk dan modular dan memiliki ruang yang nyaman untuk keduanya Perisai (dengan beberapa modifikasi kecil, yang akan saya uraikan). Jelas dan kokoh dan juga memiliki kaki karet untuk sedikit mengangkatnya dan melindungi permukaan meja Anda. Permukaan atas penutup juga berfungsi sebagai papan tombol untuk piano sentuh Anda - di sinilah Anda akan menempelkan pita foil tembaga konduktif Anda! Pada akhirnya, Anda akan memiliki piano sentuhan kecil yang bagus yang dapat Anda bawa dengan mudah dan dipajang dan dijejalkan bersama! 😊

Oke, mari kita mulai, ya? 😊

Langkah 1 - Pasang Arduino ke Pelat Dasar Enklosur

Mari kita pertama-tama memasang Arduino (Uno dalam contoh kita) ke pelat dasar enklosur. Ini memberikan perlindungan sambil menawarkan akses terbuka penuh untuk mengonfigurasi dan mengatur Arduino dan bermain-main dengannya. Saat Anda siap untuk menutupnya, Anda dapat dengan mudah menambahkan dinding samping dan pelat atas dan mengamankan semuanya dengan sekrup.

Pasang Arduino ke pelat dasar, dan tambahkan kaki dan perangkat keras lainnya untuk menyiapkan enklosur di Konfigurasi Platform . Lihat langkah-langkah di bawah ini dalam tayangan slide - keterangan untuk setiap gambar diberi nomor dan memberikan penjelasan tambahan untuk setiap langkah.

Berikut adalah semua langkah sebagai gif animasi:

Langkah 2 - Siapkan MPR121 Shield untuk Arduino

Saya memotong panjang 12 buah kawat untai 22 AWG. Saya kemudian menyoldernya ke MPR121 Shield. Adafruit Shield memiliki dua lubang besar untuk masing-masing dari 12 input untuk mencengkeram klip buaya. Di antara dua lubang ini ada lubang biasa yang lebih kecil yang akan menampung kabel 22 AWG.

MPR121 Shield juga memperlihatkan semua pin melalui lubang di sebelah header. Saya juga menyolder di Piezo Buzzer PS1240, dengan satu kaki dimasukkan ke pin 12 dan yang lainnya ke GND.

Saya memastikan untuk melepaskan ujung lainnya (bebas) dari masing-masing kabel. Saya menggunakan pola berulang dari 6 warna berbeda untuk 12 input, untuk memberi kode warna, sehingga urutannya dapat dipertahankan nanti saat dirakit.

Langkah 3 - Siapkan Kandang

Selanjutnya, kita perlu menyiapkan kandang. Kita mulai dengan memasukkan shield ke Arduino yang terpasang di Base Plate. Kami kemudian memasukkan Elemen Penguat Atas, dan Dinding Samping ke dalam slot dinding.

Saya telah mengambil bagian atas kandang ProtoStax untuk Arduino dan menambahkan 12 lubang untuk memasukkan kabel dari input perisai. Saya menggunakan pemotong laser untuk memotong lubang yang cocok dengan template kunci piano, tetapi Anda dapat dengan mudah menggunakan bor (pastikan untuk menggunakan beberapa selotip pada pelat akrilik sebelum mengebor). Lubang kecil 1/8" sudah cukup,.

Saya kemudian dengan hati-hati memasukkan kabel dari pelindung ke dalam lubang di Pelat Atas - Saya memastikan untuk memasukkan kabel dari lubang 0 ke lubang paling kiri, dan memasukkan kabel bernomor secara bertahap (mereka diberi nomor pada pelindung) ke dalam lubang dari kiri ke kanan. Saya kemudian menambahkan Spacer atas di bawah Pelat Atas, dan sekrup di bagian atas sekrup melengkapi enklosur.

Selanjutnya, saya mendorong kembali kabel sampai hanya bagian logam yang menempel di luar.

Saya kemudian memotong potongan dari gulungan Foil Tembaga dengan Perekat Konduktif dalam bentuk Piano Keys dari template (lihat di bawah untuk template). Saya kemudian dengan hati-hati mengupas kertas tembaga dan menempelkannya pada posisinya masing-masing di Pelat Atas penutup, memastikan pita tembaga menempel di atas kawat yang sesuai yang menonjol keluar dari lubang.

Berikut adalah template untuk Piano Keys dan lubangnya. Anda seharusnya dapat mencetak ini pada kertas berukuran 8.5x11 Letter dan memiliki ukuran yang benar (beri tahu saya jika Anda mengalami masalah!)

Pada akhirnya, terlihat seperti ini:(Saya bisa melakukan pekerjaan yang lebih baik dengan pita foil tembaga, tetapi ini adalah pertama kalinya saya menggunakannya, jadi semoga saya akan menjadi lebih baik dalam menanganinya di masa depan! 😊)

Langkah 4 - Kode Demo

Anda harus menginstal pustaka Adafruit_MPR121 terlebih dahulu. Setelah itu, Anda dapat mengkompilasi dan mengunggah sketsa contoh, yang mengubah kreasi Anda menjadi piano sentuh, dan menyertakan kombinasi kunci rahasia untuk memainkan beberapa jingle.

  • Tekan C E G B untuk memainkan "Twinkle Twinkle Little Stars"
  • Tekan C D E F G untuk memainkan skala naik dan turun
  • Tekan C D A B untuk memainkan "Oh Susanna!"
  • Tekan C C# A# B untuk memainkan "Frere Jacques/Brother John"

Saya juga telah memudahkan Anda untuk menyalin lagu pilihan Anda sendiri dari skor lagu Anda.

Jika Anda tertarik untuk membaca lebih lanjut tentang kode (dan saya tahu Anda!), baca terus!

Mari kita cepat melalui bagian utama dari kode. Anda dapat dengan cepat mereferensikan kode demo di sini - https://github.com/protostax/ProtoStax_CapacitiveTouch_Piano_Demo/blob/master/ProtoStax_CapacitiveTouch_Piano_Demo.ino

Kode dapat dibagi menjadi 3 bagian:

  • Mendapatkan data sentuh dari MPR121 menggunakan pustaka Adafruit_MRP121.
  • Memutuskan apa yang harus dilakukan dengan data sentuh - yaitu memainkan nada yang sesuai seperti piano, atau mendeteksi multi-sentuh lalu memainkan jingle rahasia, keduanya menggunakan perpustakaan nada bawaan.
  • Memrogram lagu, termasuk cara menambahkan lagu Anda sendiri

Berikut ini sekilas bagian sentuh kapasitif dari kode. Seperti biasanya, Anda mendeklarasikan objek dari kelas Adafruit_MPR121. Di setup(), Anda memanggil metode begin() untuk menginisialisasinya, dan Anda bisa mendapatkan pad yang saat ini disentuh di loop() menggunakan metode cap.touched(). Sederhana!

Adafruit_MPR121 cap =Adafruit_MPR121();void setup() {... // Alamat default adalah 0x5A, jika diikat ke 3.3V, 0x5B // Jika diikat ke SDA, 0x5C dan jika SCL maka 0x5D jika ( !cap.begin(0x5A)) { Serial.println("MPR121 tidak ditemukan, periksa kabel?"); sementara (1); }...}void loop() { // Dapatkan bantalan yang saat ini disentuh currtouched =cap.touched();} 

Dengan data sentuh, Anda dapat merespons sentuhan dengan memainkan nada yang sesuai, dan menghentikan nada saat tombol tidak ditekan:

 // jika *sudah* disentuh dan *belum* disentuh sebelumnya, mainkan nada yang sesuai! if ((currtouched &_BV(i)) &&!(lasttouched &_BV(i)) ) { // Serial.print("currtouched ="); Serial.print(currtouched); Serial.print(" lasttouched ="); Serial.print(terakhir disentuh); Serial.print(""); Serial.print(i); Serial.println("sentuh"); nada(TONE_PIN, skala[i]); } // jika *telah* disentuh dan sekarang *tidak*, dan selain itu, tidak ada tombol yang ditekan, maka hentikan nadanya // Ini memungkinkan transisi yang mulus antar not saat Anda menggeser jari Anda di atas tombol // Ini juga memungkinkan untuk mempertahankan nada yang diberikan, dengan menyentuh tombol apa saja dan tetap menyentuhnya - Anda dapat menekan tombol lain dan itu akan memainkan kunci itu, tetapi tidak akan berhenti memainkannya // sampai Anda melepaskan kunci pertama Anda - seperti mempertahankan pedal piano! if (!(sentuhan &_BV(i)) &&(sentuhan terakhir &_BV(i)) &&!currtouched) { //if (!(currtouched &_BV(i)) &&(sentuhan terakhir &_BV(i))) { / / Serial.print("currtouched ="); Serial.print(currtouched); Serial.print(" lasttouched ="); Serial.print(terakhir disentuh); Serial.print(""); Serial.print(i); Serial.println("dilepas"); tidakNada(TONE_PIN); } 

Kami menangani multi-sentuhan tombol khusus dengan memainkan nada yang sesuai:

 // Mainkan lagu jika kombinasi tombol 'rahasia' kita ditekan! if (currtouched ==2193) { // C E G B playTune(melodi, MELODY_LENGTH(melodi), 2); // Mainkan Twinkle Twinkle Little Star } else if (currtouched ==181) { // C D E F G playTune(melody2, MELODY_LENGTH(melody2), 48); // Mainkan tangga nada geser ke atas dan ke bawah } else if (currtouched ==2565) { // C D A B playTune(melody3, MELODY_LENGTH(melody3), 1); // Mainkan Oh Susanna! } else if (currtouched ==3075) { // C C# A# B playTune(melodi4, MELODY_LENGTH(melodi4), 1); // Mainkan Frere Jacques } else {... 

playTune() digunakan untuk memainkan nada tertentu, yang merupakan larik dari "Note"

void playTune(Catatan *m, int mSize, int speedUp) { noTone(TONE_PIN); // Mulai dengan awal yang bersih untuk (int thisNote =0; thisNote  

Mari kita lihat melodi - itu terdiri dari serangkaian Catatan. Setiap Catatan memiliki frekuensi dan durasi. =

typedef struct Catatan { int frekuensi; durasi mengambang; } Catatan; // Melodi ini memainkan semua nada oktaf dari C hingga B dan kembali ke CNote melody2[] ={ {NOTE_C, NOTE_WhoLE}, {NOTE_CS, NOTE_WhoLE}, {NOTE_D, NOTE_WhoLE}, {NOTE_DS, NOTE_WhoLE} , {CATATAN_E, CATATAN_SELURUH}, {NOTE_F, CATATAN_SELURUH}, {NOTE_FS, CATATAN_SELURUH}, {NOTE_G, CATATAN_SELURUH}, {NOTE_GS, CATATAN_SELURUH}, {NOTE_A, CATATAN_SELURUH}, {NOTE_AS, CATATAN_SELURUH}, {NOTE_B, { CATATAN_SELURUH} CATATAN_AS, CATATAN_SELURUH}, {NOTE_A, CATATAN_SELURUH}, {NOTE_GS, CATATAN_SELURUH}, {NOTE_G, CATATAN_SELURUH}, {NOTE_FS, CATATAN_SELURUH}, {NOTE_F, CATATAN_SELURUH}, {NOTE_E, CATATAN_SELURUH}, {NOTE_DS, CATATAN_SELURUH}, {CATATAN_SELURUH} CATATAN_SELURUH}, {NOTE_CS, CATATAN_SELURUH}, {NOTE_C, CATATAN_SELURUH}}; 

Di sinilah #defines di pitches.h dan noteDurations.h berguna. Anda dapat menggunakan ini sebagai ganti frekuensi dan durasi sebenarnya. Misalnya, gunakan NOTE_C untuk memainkan nada C, dan gunakan NOTE_Whole untuk memainkannya sebagai satu nada utuh (NOTE_HALF, NOTE_QUARTER, NOTE_EIGHTH adalah beberapa durasi nada lainnya). Anda juga dapat menggunakan makro DOTTED() untuk menentukan catatan "bertitik" - seperti DOTTED(NOTE_QUARTER).

[Catatan:Catatan bertitik adalah nada yang durasinya diperpanjang dengan nada lain yang setengah durasinya - misalnya, nada setengah putus-putus setara dengan 3/4 nada penuh (1/2 nada ditambah 1/2 dari 1/2 catatan). ]

Ini akan memungkinkan Anda untuk mengambil lembaran musik dan menyalinnya ke susunan melodi Anda!

Dalam demo, saya telah menyalin "Twinkle Twinkle Little Star", "Frere Jacques/Brother John" dan "Oh Susanna!" jadi Anda punya sesuatu untuk dimainkan (tidak ada permainan kata-kata?! ) - semua lagu ini masuk dalam satu oktaf, yang merupakan batasan keyboard kami yang saya coba pertahankan. Tentu saja, saat memainkan nada rahasia, Anda tidak terikat oleh batasan ini dan dapat menggunakan beberapa oktaf. "Oh Susanna!" juga sedikit lebih rumit, menggunakan not setengah, seperempat, dan delapan dan juga not seperempat setengah "bertitik" - semoga ini akan membantu Anda memahami cara menyalin nada lain dengan mudah.

Mari kita lihat aksinya, ya? 😊

Langkah 5 - Melangkah Lebih Jauh!

Berikut adalah beberapa ide untuk membawa proyek ini lebih jauh!

1. Buat jingle/tune Anda sendiri (atau transkripsikan yang sudah ada) dan tetapkan "Kunci Rahasia" Anda sendiri untuk mengaktifkannya!

2. Tambahkan Piezo kedua untuk mendapatkan suara polifonik 2 tingkat! Pustaka nada menggunakan Timer2 untuk mengirim gelombang persegi ke buzzer piezo untuk memainkan nada. Arduino Uno memiliki 3 timer, meskipun Timer 0 khusus dan digunakan untuk hal-hal seperti milis() dan pwm. Itu masih membuat kita menggunakan Timer1. Pustaka NewTone adalah penulisan ulang pustaka nada yang lebih optimal, yang menggunakan Timer1. Dengan demikian, Anda dapat memiliki dua nada sekaligus, satu menggunakan nada dan yang lainnya menggunakan NewTone, misalnya.

3. Tambahkan satu atau dua tombol tambahan untuk menambahkan fungsionalitas tambahan - seperti menggunakan tombol tekan untuk memperpanjang oktaf ke yang lebih tinggi atau lebih rendah. Dengan menekan tombol-tombol ini bersama dengan tombol sentuh kapasitif Anda, Anda dapat memiliki jangkauan yang lebih luas pada keyboard Anda!

Bisakah Anda memikirkannya lagi? Tulis komentar di bawah untuk memberi tahu kami! 😊 Jangan ragu untuk juga mengajukan pertanyaan apa pun yang Anda miliki! 😊

Selamat membuat! 😊

Kode

ProtoStax_CapacitiveTouch_Piano_Demo
Demo untuk ProtoStax Piano dengan ProtoStax untuk Arduino Enclosure, Adafruit 12 x Capacitive Touch Shield untuk Arduino - MPR121, Piezo Buzzer, dan Arduino https://github.com/protostax/ProtoStax_CapacitiveTouch_Piano_Demo.git

Suku cadang dan penutup khusus

Template untuk memotong tuts piano untuk ProtoStax Capacitive Touch Piano dan untuk mengebor lubang di Pelat Atas

Skema


Proses manufaktur

  1. Piano
  2. Toilet Portabel
  3. Pemain Piano
  4. Arduino Spybot
  5. FlickMote
  6. TV Buatan Sendiri B-Gone
  7. Jam Master
  8. Game Breakout Arduino Touch
  9. Arduino + LED + Keyboard MIDI + MuseScore =Tutor Piano
  10. Sensor Sidik Jari Kapasitif dengan Arduino atau ESP8266