Bagaimana cara membuat mini-gitar digital

gambar



Pada artikel ini saya akan mencoba menjelaskan secara umum jalur pembuatan perangkat dari ide hingga implementasi prototipe yang dapat digunakan.



Nama saya Dmitry Dudarev. Saya terlibat dalam pengembangan elektronik dan sangat suka membuat berbagai perangkat portabel. Saya juga suka musik. Enam bulan lalu, saya meminjam gitar akustik dari seorang teman untuk mencoba dan belajar cara memainkannya dari pelajaran dan tabulasi YouTube. Itu sulit. Entah saya melakukan sesuatu yang salah, atau saya mencobanya dengan buruk, atau dalam masyarakat leluhur saya, keterampilan motorik halus merusak reproduksi. Bagaimanapun, tidak ada selain suara string yang berderak keluar untukku. Kemarahan saya diintensifkan dengan pelepasan string yang konstan. Dan orang-orang di sekitarku untuk yang keseribu kalinya tidak senang mendengarkan lekukku tentang Tidak ada hal lain yang penting.



Tetapi dalam penderitaan ini, saya tidak melupakan aturan utama insinyur elektronik. Jika ada sesuatu, maka mikrokontroler dapat dimasukkan ke sana. Atau minimal bikin modifikasi elektronik portabel.





Ide



Struktur gitar digital mulai muncul di kepala saya.



Pertama-tama, saya membuat daftar persyaratan untuk perangkat:



  1. Perangkat harus mensimulasikan gitar dengan 6 senar dan 12 fret di papan fret
  2. Harus ringkas, idealnya dapat dilipat sehingga Anda dapat membawanya ke mana pun Anda pergi
  3. Harus terhubung ke semua sumbu populer - Android, IOS, Windows, Linux, MacOS dan didefinisikan di sana sebagai perangkat MIDI tanpa driver apa pun
  4. Operasi baterai
  5. Koneksi harus dilakukan tanpa kabel (tetapi karena akan ada konektor USB untuk pengisian daya, maka biarkan juga terhubung melalui kabel)
  6. ,
  7. , ,
  8. : hummer on, pull off, slide, vibrato
  9. midi 10


Tentu saja, untuk platform seluler, Anda perlu menulis aplikasi di mana Anda dapat memilih tabulasi untuk mengajar dengan LED, memilih instrumen (akustik, klasik, gitar elektrik dengan berbagai preset filter, dll.), Dan memainkan suara.



Secara teori, Anda harus mendapatkan instrumen kompak yang bisa dimainkan seperti gitar, tanpa kekurangan analog dan dilengkapi dengan sistem pelatihan visual.

Kedengarannya bisa disadari.



Analog



Jadi, pertama-tama, dipersenjatai dengan pemikiran bahwa saat ini hampir tidak mungkin untuk menemukan sesuatu yang baru dan seseorang telah melakukannya, saya menggunakan Google. Memang, gitar digital pertama diciptakan pada tahun 1981, namun karena fungsinya yang terbatas, gitar ini tidak banyak digunakan.







Gitar midi kompak modern juga ada, tetapi dirancang untuk audiens target yang lebih profesional, mahal dan, yang terpenting, tanpa mode "push the light". Bahkan ada opsi eksotis dengan iPad alih-alih string, atau menyerupai kerang.







Jadi Anda bisa mulai.



Bukti dari konsep



Saya memutuskan untuk memulai dengan bukti konsep. Prototipe minimal terburu-buru.

Pertama, Anda perlu memutuskan basis elemen.



Kontroler



Dalam proyek saya, saya kebanyakan menggunakan STM32. Mereka kuat, murah, terjangkau. Pilih STM32F042. Ini memiliki USB (dan, dengan osilator internal 48MHz khusus agar tidak menggantung kuarsa eksternal), inti 32-bit, dan semua periferal yang diperlukan. Dan semua ini kurang dari satu dolar.



Saya memutuskan untuk meninggalkan koneksi nirkabel untuk iterasi berikutnya.



String di dek



Sebagai string, saya memutuskan untuk mencetak buluh plastik, memasangnya pada potensiometer dengan pegas dan mengukur sudut defleksi.



Dimodelkan secara padat dan dicetak untuk mengevaluasi ergonomi.











Ternyata cukup bagus untuk disentuh. Harus bekerja.



Sensor Leher



Gitar seharusnya memiliki 6 senar dan 12 fret. Ini adalah total 72 sensor di neck dan 6 lainnya di dek. Seseorang dapat menggunakan tombol centang pada setiap elemen, tetapi, pertama, mereka mengklik, dan kedua, tidak akan berfungsi untuk menerapkan teknik seperti slide atau vibrato. Saya juga ingin menentukan gaya tekan.



Tampaknya pengukur regangan paling cocok untuk tugas ini. Mereka mengubah resistensi tergantung pada tekanan di area kerja.







Ternyata sangat sulit untuk menemukannya diobral dalam jumlah yang tepat, dan harganya sangat mahal. Saya harus memesan Ali.



ADC



ADC diperlukan untuk membaca status setiap sensor. Hanya ada sedikit dari mereka di STM, jadi Anda memerlukan sesuatu yang lain untuk mengumpulkan 78 sensor. Chip ADC multisaluran eksternal dapat digunakan, tetapi harganya terlalu mahal. Oleh karena itu, saya memutuskan untuk memasang 5 multiplexer analog 16 saluran murah CD74HC4067 dan menghubungkan satu saluran ADC STM ke masing-masing saluran.



Biaya



Sampai pergi gages, mulai papan kabel. Kabel sensornya panjang, jadi kami harus tumpang tindih.















Sebelum memesan percetakan papan, saya memutuskan untuk menunggu strain gages. Dan ternyata, tidak sia-sia.



Dari 80 sensor, hanya sedikit yang berfungsi, kemudian dengan parameter berbeda.







Mereka berbeda dari gambar di situs web penjual yang terasa lebih buruk.



Dan apa yang saya harapkan saat membeli barang elektronik di Ali? ..



Dan kemudian saya sadar.



Bagaimanapun, Anda dapat menerapkan metode deteksi lain - mengukur kapasitansi seperti pada sensor sentuh. Ini jauh lebih murah dan lebih terjangkau. Dan jika Anda mendesain mekanik dengan benar, maka Anda dapat menentukan upayanya.



Baik. Saya menghapus semua yang telah dilakukan.







Mulai lagi dari awal



Dalam versi baru dari bukti konsep minimalis, saya memilih silinder yang digergaji dari batang tembaga 4 mm dan disolder ke papan sebagai elemen sensor.



Sekarang kita perlu memikirkan bagaimana mengukur 78 kontainer.



Survei sensor



Sedikit googling, saya menemukan bahwa ada banyak sirkuit mikro - pengontrol keyboard sentuh. Di antara mereka, kami berhasil menemukan pengukur kapasitansi tujuan umum 12 saluran yang murah. Ini mengukur kapasitansi pada skala unit picofarad, yang harus cukup untuk rangkaian pengukuran gaya yang saya rencanakan untuk diterapkan pada modifikasi berikutnya.

Selain itu, untuk berjaga-jaga, saya menggantungkan kursi untuk kancing atau semacamnya di setiap elemen leher. Dan dia membuat guntingan di papan sehingga Anda tidak hanya bisa menyentuh silindernya, tetapi juga memasukkannya ke dalam. Anda dapat bereksperimen dengan berbagai teknik bermain.



Sirkuit mikro terhubung melalui antarmuka I2C dan memiliki 2 pin konfigurasi yang mengatur alamat. Dengan demikian, maksimal 4 sirkuit mikro dapat digantung di satu bus. Dan saya butuh 12. Tidak masalah, saya mendistribusikannya menjadi tiga kelompok dan menghubungkannya ke bus STM melalui multiplexer.



Papan











Kali ini kami berhasil memesan papan dan bahkan menunggu produksinya.



Setelah menyegel kit, silinder tembaga, dan potensiometer, saya menyadari bahwa desain dengan string plastik terlalu rumit. Oleh karena itu, untuk saat ini, saya memutuskan untuk menggantung silinder sensor yang sama di dek, tetapi lebih otentik. Agar tidak mengulang seluruh papan, saya membuat overlay kecil dan menghubungkannya ke bus I2C STM kedua.







Sepotong besi sudah siap. Tugas selanjutnya adalah membuatnya bermain.



Perangkat lunak



Rencananya adalah sebagai berikut:



  1. Unduh synthesizer virtual yang dapat bekerja dengan perangkat MIDI dan menghasilkan suara gitar.
  2. Tulis firmware yang akan mengumpulkan sensor dan mentransfer hasilnya ke komputer melalui antarmuka HID khusus USB sekitar 100 kali per detik.
  3. Tulis program python yang akan menerima data ini, meniru perangkat MIDI virtual, menghasilkan paket MIDI, dan mengirimkannya ke synthesizer virtual.


Saya memutuskan untuk mencari cara untuk segera berpura-pura menjadi perangkat MIDI beberapa saat kemudian.



Bagaimana cara mereproduksi suara?



Ada cukup banyak virtual synthesizer untuk Windows dengan dukungan MIDI. Saya mencoba Ableton live, RealGuitar, FL studio, Kontakt. Saya berhenti di RealGuitar karena kesederhanaan dan ketepatannya hanya untuk gitar. Dia bahkan tahu bagaimana meniru ketidaksempurnaan permainan manusia - menggeser jari di atas senar, parameter acak dari nada.







Menghubungkan ke synthesizer virtual



Untuk python, kami berhasil menemukan pustaka mido yang dapat meniru port midi virtual, yang dapat dihubungkan ke input penyintesis virtual melalui emulator eksternal dari kabel midi “loopmidi”.







Di antarmuka program, saya membuat tampilan grafis dari tingkat kapasitansi yang diukur untuk setiap sensor untuk menyederhanakan penyesuaian filter. Selain itu, untuk masa depan, saya menambahkan kontrol untuk LED, motor getaran (saya belum tahu kenapa, tapi juga akan ada di gitar), visualisasi akselerometer, dan tingkat pengisian baterai.







Untuk memukul senar gitar untuk memicu nada yang benar, 72 sensor di papan fret harus dipetakan ke nada yang sesuai.



Ternyata dari 72 elemen di 12 fret, hanya 37 not unik. Mereka disusun menurut struktur tertentu, jadi alih-alih membangun meja besar, dimungkinkan untuk mendapatkan persamaan sederhana, yang memberikan nomor nada yang sesuai dengan nomor sensor.







Uji



Sepertinya semuanya sudah siap untuk ujian pertama. Saya terlalu malas untuk melihat batang dan menyolder semua 12 fret, jadi saya membatasi diri pada yang ke-8. Momen Kebenaran:





INI HIDUP! Kelangsungan konsep telah dikonfirmasi. Untungnya, tidak ada batasan! Tapi Anda tidak bisa santai.



Langkah selanjutnya adalah menambahkan LED, akselerometer, motor getaran, baterai, nirkabel, casing, dan kemampuan untuk bekerja tanpa driver atau program emulasi midi di semua platform populer.



LED



Untuk menghubungkan 84 LED, saya memilih rantai daisy paling sederhana dari 14 register geser 8-bit. Lebih mudah untuk menghubungkannya ke pin SPI MOSI pada STM dan mengirim larik data melalui DMA tanpa partisipasi kernel.



Akselerometer



Saya tidak memiliki persyaratan khusus untuk akselerometer, jadi saya menggunakan LIS3D yang paling sederhana. Dengannya, gitar akan menentukan kemiringannya relatif terhadap cakrawala, yang memungkinkan memodulasi berbagai filter suara saat Anda bermain dengan gerakan tangan.



Nirkabel



Untuk transmisi data nirkabel, saya memutuskan untuk menggunakan ESP32. Ini mendukung berbagai protokol Bluetooth dan WI-FI, akan ada sesuatu untuk bereksperimen (pada saat itu saya belum tahu bahwa dalam kasus saya hanya ada satu cara yang benar untuk terhubung).



Bak



Badan harus dapat dilipat, jadi bagian elektronik dari dek dan leher harus dipisah menjadi dua papan dan dihubungkan dengan kabel pita.



Power on akan terjadi ketika bodi dibuka dengan mendekatkan magnet di leher ke sensor Hall di papan dek.



Mulai



Banyak pekerjaan telah dilakukan untuk bereksperimen dengan berbagai desain leher taktil dan diffuser LED. Saya ingin seluruh permukaan elemen bersinar secara merata, sambil mempertahankan kemampuan untuk mendeteksi sentuhan dan menekan tombol.







Saya berpaling kepada seorang teman yang secara profesional bergerak di bidang desain industri. Kami datang dengan desain unit bending gitar lalu dia mendesain dan mencetak bodi prototipe.







Tampaknya semuanya sudah dipikirkan, Anda dapat mulai memasang kabel papan.























Perangkat MIDI



Di versi baru, pertama-tama, saya ingin gitar dideteksi sebagai perangkat MIDI tanpa program tambahan saat dihubungkan melalui USB.



Ternyata ini tidak terlalu sulit untuk dilakukan, semua spesifikasinya ada di situs web resmi usb.org. Tetapi semua algoritma yang dieksekusi di sisi aplikasi Python harus ditulis ulang dalam C di pengontrol.



Saya terkejut karena itu langsung berfungsi di semua perangkat. Windows 10, MacOS, Debian 9, Android (melalui adaptor USB). Cukup colokkan kabel dan perangkat MIDI bernama "Sensy" muncul di sistem dan dikenali oleh semua penyintesis. Saya belum bisa menguji dengan iPhone. tidak ada adaptor. Tapi itu harus bekerja dengan cara yang sama.







Antarmuka nirkabel



Tantangan berikutnya adalah menyelesaikan berbagai hal secara nirkabel.



Saya terlalu malas ke google saat itu juga, jadi saya menghabiskan beberapa hari menguji berbagai antarmuka nirkabel. Saya langsung membubarkan BLE, karena di kepala saya "Energi rendah" sangat terkait dengan tarif paket yang rendah. Mencoba WI-FI dalam mode klien, WI-FI dalam mode hotspot, Bluetooth dalam mode SPP, dll. Di mana-mana ada masalah yang sama - penundaan yang sangat besar (lebih dari 100ms per mata) dan kedatangan paket yang tidak merata tepat waktu. Ini membuat game itu tidak mungkin.



Saya akan menyerah dan membuat dongle terpisah yang akan menempel di USB ponsel atau komputer dan menerima data dari gitar melalui radio khusus.



Tetapi kemudian saya secara tidak sengaja menemukan spesifikasi versi baru dari protokol BLE dan melihat bahwa interval koneksi minimum adalah 7,5ms, yang sangat sesuai dengan kebutuhan saya.



Apalagi ternyata ada protokol BLE MIDI yang didukung oleh semua sistem operasi baru dan bekerja tanpa driver seperti USB MIDI.



Satu-satunya masalah adalah bahwa interval koneksi yang rendah dan BLE MIDI secara umum hanya didukung oleh platform yang relatif baru. Detailnya masih harus dilihat, tetapi pengujian dengan perangkat yang tersedia untuk saya berhasil.



Beberapa iPhone baru bahkan hadir dengan synthesizer Garage Band virtual pra-instal yang mampu menghasilkan suara gitar berkualitas (jika tidak, Anda dapat mengunduhnya dari App Store secara gratis).



Firmware



Setelah menulis semua fungsionalitas minimum yang diperlukan, saya bertumpu pada ukuran flash STM. Hanya 168 byte yang tetap gratis. Jelas, dewa silikon menyukai saya, jadi saya pergi ke arah yang benar.







Dimungkinkan untuk lebih jauh dalam mengoptimalkan kode dan secara signifikan mengurangi jumlah memori yang ditempati, tetapi akan lebih mudah di versi berikutnya untuk menggunakan pengontrol yang lebih tebal, yang harganya lebih mahal 5 sen dan tidak membuang waktu. Apalagi Anda tidak pernah tahu fitur lain apa yang ingin Anda tambahkan.

Tetapi fungsionalitas minimum tidak cukup, Anda masih perlu bekerja dengan teknik permainan. Pertama-tama, saya ingin menerapkan slide. Ini adalah saat Anda mulai memainkan nada dengan fret yang dijepit dan menggeser tangan Anda di sepanjang leher, melompat dari fret ke fret.



Saya sudah bersenang-senang dengan USB, jadi Anda dapat mengomentari semua kode yang terkait dengannya dan mengosongkan memori. Anda juga dapat menguji secara nirkabel:





Dengan semua LED menyala, gitar dapat digunakan jika Anda tersesat di gua yang gelap.







Apa kekurangan dari desain ini?



  1. Pada sensor, tekanan tidak diukur di mana pun. Ini memerlukan tiga masalah:

    • Ada pemogokan acak konstan dari string yang berdekatan di dek dan fretboard. Ini membuat game menjadi sangat menantang.
    • Semua not yang dimainkan dimainkan pada volume yang sama. Sebagian besar subjek tidak memperhatikan hal ini, tetapi saya ingin bermain lebih dekat dengan gitar asli.
    • Ketidakmampuan untuk menggunakan teknik hammer on, pull off, dan vibrato
  2. LED warna tunggal. Ini membatasi kejelasan saat memainkan tabulasi. Saya ingin dapat menunjukkan metode permainan yang berbeda dengan warna yang berbeda.
  3. . – . , , , .
  4. . , , , .
  5. . , .


.



Saya pindah ke pengontrol seri STM32F07. Ini sudah memiliki flash 128KB - itu cukup untuk fungsionalitas apa pun. Dan bahkan untuk telur Paskah.



Menggunakan ESP32 di versi terakhir gitar akan terlalu berani, jadi saya mencari sesuatu yang lebih Ortodoks. Pilihan jatuh pada NRF52 dalam hal aksesibilitas, ketersediaan dokumentasi, dan kecukupan situs.



Tentu saja, tiga inovasi besar juga akan diterapkan:



  • LED sekarang RGB,
  • akan ada pengukuran gaya pada setiap sensor bilah (tombol kebijaksanaan tidak lagi diperlukan),
  • senar di papan suara akan bergerak.


Saat ini, papan dek terlihat seperti ini (Saya meninggalkan jejak ESP untuk berjaga-jaga):





Proyek ini disebut Sensy dan saat ini sedang dalam pengembangan aktif. Sudah ada keyakinan penuh bahwa semua fungsi yang direncanakan akan diimplementasikan, jadi keputusan dibuat untuk pengembangan lebih lanjut.



Kami berada di St. Petersburg, sekarang tim terdiri dari dua orang: Saya menangani bagian teknis, mitra saya - pemasaran, keuangan, masalah hukum.



Jika di antara pembaca ada Jedi di bidang desain lambung atau pengembangan seluler yang ingin bergabung dengan proyek - tolong kirimkan surat kepada saya di mana pun dan kapan pun Anda mau.



Siapa yang tertarik mengikuti berita proyek - tinggalkan surat dalam formulir di situs dan berlangganan jejaring sosial.



Saya sangat mengharapkan tanggapan dari Habrasocommunity dengan komentar dan saran!



Episode lucu dari proses pengembangan
NRF52, UART. . , , , .



– «N» ascii. 0x4E, . – «O». . baud rate? , – «N». , «NON GENUINE DEVICE FOUND».



NRF- ? . , ? - . , NON GENUINE DEVICE?



, , ftdi , USB-UART , . , . , .



.



Terima kasih atas perhatian Anda!



All Articles