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

Membuat Kit Drum MIDI Kompak dengan Pencetakan 3D

Komponen dan Perlengkapan

Alat dan Mesin yang Diperlukan

Aplikasi dan Layanan Online

Tentang Proyek Ini

Halo.

Ini adalah kit drum minimal menggunakan Arduino UNO.

Pertama, silakan periksa halaman instructables ini.

https://blog.arduino.cc/2017/01/19/a-3d-printed-e-drum-pad/

Sejak saya mulai membuatnya, saya terpesona dengan piezo dan drum elektronik.

Saya terkesan dengan mekanisme yang sangat sederhana dari drum elektronik dan penemuan hebat yang disebut MIDI.

Dengan kata lain, saya tidak puas hanya dengan membuat pad.

Kit drum ini secara kasar dibagi menjadi dua produksi.

  1. Pad yang dibuat dengan printer 3D dan kertas tebal.
  2. Konverter trigger MIDI dengan Arduino UNO.

Sinyal yang dikirim dari pad “1” diproses oleh Arduino “2” dan dikonversi menjadi sinyal MIDI. Dan sinyal MIDI ditransmisikan dari Arduino ke iPhone, laptop, dll, dan suara keluar.

Kamu tidak perlu menyiapkan sumber daya selain smartphone atau PC.

Apa yang Dibutuhkan

Alat

Bahan

Hardware Drum

Langkah 1 : Pencetakan 3D

Semua data ada di Thingiverse dan GitHub.

Gunakan Ver.2 untuk rim.

Saya mencetak bagian dengan infill 20%. Ketebalan lapis adalah 0.3 mm.

Juga, kamu dapat menggunakan pemotong laser untuk membuat pad.

https://github.com/RyoKosaka/drums/tree/master/vector

Langkah 2 : Merakit

Gunakan baut dan baut M3-10mm untuk menghubungkan bagian-bagian bersama.

Gunakan baut M3-15 mm atau M3-25 mm untuk bagian tengah untuk memasang bagian bawah satu sama lain.

Membuat Kit Drum MIDI Kompak dengan Pencetakan 3D

Langkah 3 : Membuat Shell

Pertama, tinggi shell adalah 55 mm.

Buat tiga pita dengan lebar 55 mm.

Panjangnya sedikit lebih panjang dari panjang yang menutupi pad.

Karena ada celah di bawah, coba masukkan satu pita ke dalam celah itu.

Potong pita sehingga akan menjadi panjang lingkaran sempurna.

Ulangi ini 3 kali dan lapiskan menggunakan perekat.

Setelah shell kering, dengan kop mesh dipasang, buat lubang dengan diameter 9 mm untuk soket.

Kamu dapat menggunakan baut kupu-kupu, tetapi saya juga membuat kunci penyesuaian yang dapat dikencangkan bahkan dengan baut biasa, jadi gunakanlah dengan sebaik-baiknya.

Untuk memasang kop mesh, gunakan baut M6-70 mm.

Setelah kamu membuat lubang, lepaskan kop mesh lagi untuk memasang piezo

Membuat Kit Drum MIDI Kompak dengan Pencetakan 3D

Langkah 4 : Memasang Piezo

SNARE

Dalam kasus snare, gunakan dua piezo seperti yang ditunjukkan dalam gambar.

Hubungkan kabel merah piezo ke masing-masing tip dan ring.

  • Kedua kabel hitam terhubung ke sleeve.
  • Jangan lupa untuk menaruh kabel melalui lubang di papan sensor saat mengelot.

    Piezo untuk kop (piezo yang terhubung ke tip) perlu dikencangkan dengan lem busa sponge tebal 10 mm seperti yang ditunjukkan dalam gambar.

    Satu di bawah, tiga di atas. Dan buat 3 kon di atas seperti gambar.

    Letakkan pada papan sensor.

    KICK

    Karena pad tenda hanya menggunakan satu piezo, hanya tip yang dapat digunakan.

  • Tidak diperlukan papan sensor.Dua lem busa sponge di bawah piezo
  • Letakkan sensor meleset dari tengah.

    Itu karena Arduino tidak dapat menilai kekuatan pukulan jika beater mengenai sensor secara langsung.

    HI-HAT

    Rangkaian sama seperti pad tenda.

  • Letakkan potongan lem busa sponge tebal 10 mm di bawah piezo.
  • Piezo mudah pecah. Hati-hati jangan membengkokkan atau melukai.

    Membuat Kit Drum MIDI Kompak dengan Pencetakan 3D

    Langkah 5 : Pad Snare 10 inci

    Pertama pasang sensor untuk rim.

  • Pasang papan sensor. Pasang dengan kuat. Buat ujung kon terlihat 2-3 mm ketika dilihat dari samping.
  • Tentu saja, prosedur yang sama juga digunakan ketika menggunakan pad 8 inci sebagai snare.

    Membuat Kit Drum MIDI Kompak dengan Pencetakan 3D

    Langkah 6 : Pad Tenda 8 inci

    Pertama, potong pipa baja tahan karat diameter 13 mm.

  • Buat dua 200 mm dan dua 365 mm.
  • Karena panjang dapat disesuaikan, meskipun ada beberapa kesalahan panjang, tidak apa-apa.

  • Rakit dengan merujuk pada gambar.
  • Untuk memasang pipa, dirancang sehingga baut M3 dapat dimuat di dalam bagian.

  • Pasang pipa dengan aman. Gunakan baut dan baut M3-15 mm.
  • Membuat Kit Drum MIDI Kompak dengan Pencetakan 3D

    Langkah 7 : Hi-Hat 12 inci

    Setelah membuat shell dengan kertas tebal, saya berpikir jika kamu menggunakan kertas tebal saya dapat membuat simbal.

    Pertama. Potong kertas tebal menjadi lingkaran dengan diameter 300 mm. Buat tiga dari ini.

  • Selanjutnya, buat entas dari tengah.
  • Terakhir, entas kedua dibuat dari titik 10 mm terpisah sejajar dari entas pertama.

    Dengan cara ini, tiga pac-man dengan mulut kecil terbuka dibuat.

  • Kemudian tutup mulut Pac Man dengan hati-hati dengan pita karet untuk membuat bentuk simbal.
  • Terapkan perekat dan lapiskan ini.Jangan lupa untuk memperpanjang perekat secara rapi dan tipis
  • Tegang dengan tangan, lalu letakkan beban di sekitar dan keringkan.
  • Untuk menenangkan, letakkan sponge tebal 5 mm dan bor lubang. Kamu tidak dapat membuka lubang dengan rapi, tetapi kamu dapat menyembunyikan lubang jadi tidak apa-apa.

  • Selesaikan dengan memasang pengganti sensor dan panduan kabel dengan pita dua sisi. Mungkin akan lebih mudah jika kamu menggunakan pistol lem.
  • Membuat Kit Drum MIDI Kompak dengan Pencetakan 3D

    Langkah 8 : Pengontrol Hi-Hat

    Pengontrol Hi-Hat mengirim pembukaan dan penutupan hi-hat ke Arduino.

    Rangkaiannya sangat sederhana.

  • Dibuat dengan menggabungkan tiga bagian.
  • Pasang FSR ke bagian bawah dan pasang soket. FSR dapat digunakan bahkan jika lubang dibuka.
  • Pasang sponge 10 mm ke FSR seperti foto.
  • Pasang tutup dengan baut M3 - 10 mm.
  • Meski hanya HIGH dan LOW, kamu mungkin bertanya-tanya mengapa saya menggunakan FSR.

    Saya menggunakan FSR untuk mencocokkan modul suara seperti Roland dan Yamaha.

    Dan dalam sumber suara eksklusif untuk drum seperti EZ DRUMMER 2, ada beberapa tahap dalam derajat pembukaan hi-hat.

    Jika FSR, mungkin dapat merespons hanya dengan memodifikasi kode. Namun, saya belum mencobanya.

    Membuat Kit Drum MIDI Kompak dengan Pencetakan 3D

    Langkah 9 : USB - MIDI

    Apa yang dapat kita lakukan dalam langkah ini?

    Dengan kabel USB saja, kamu dapat mengirim sinyal MIDI dari Arduino.

    Dengan kata lain, buat Arduino dikenali oleh iPhone dll. sebagai perangkat MIDI tanpa hardware tambahan.

  • Pertama, periksa halaman ini.
  • https://morecatlab.akiba.coocan.jp/lab/index.php/aruino/midi-firmware-for-arduino-uno-moco/

    https://github.com/kuwatay/mocolufa

    Jika kamu menghubungkan Arduino UNO biasa langsung ke iPhone, kamu akan mendapatkan pesan kesalahan seperti "Arduino UNO is not compatible".

    Jadi, kamu harus menulis ulang chip USB (ATmega16U2) yang digunakan di Arduino UNO.

    https://www.arduino.cc/en/Hacking/DFUProgramming8U2

    Instruksi ini adalah cara menulis ulang file hex.

    Lanjutkan sesuai dengan situs ini sampai dengan deskripsi di bawah ini.

    sudo dfu-programmer atmega16u2 flash Arduino-usbserial-uno.hex

    Cukup ganti "Arduino-usbserial-uno.hex" dengan "dualMoco.hex".

    Jadi,

    sudo dfu-programmer atmega16u2 flash dualMoco.hex

    Setelah menulis ulang, Arduino kamu akan dikenali sebagai perangkat MIDI.

    Jika kamu meringkaskan pin seperti yang ditunjukkan dalam gambar, itu akan dikenali sebagai Arduino biasa.

    Jika tidak (ketika tidak diringkaskan), Arduino UNO akan dikenali sebagai perangkat MIDI.

    Dengan kata lain, saat menulis kode menggunakan Arduino IDE, kamu harus meringkaskan pin seperti yang ditunjukkan dalam gambar.

    Membuat Kit Drum MIDI Kompak dengan Pencetakan 3D

    Langkah 10 : Konverter Trigger ke MIDI

    Ada Arduino UNO dan shield dalam kotak.

  • Lihat gambar fritzing untuk rangkaian shield.
  • Dioda adalah untuk perlindungan tetapi saya melihat informasi bahwa Arduino UNO memiliki rangkaian perlindungan, dioda mungkin tidak diperlukan. Apakah ada yang tahu tentang ini?

    Setelah mencetak model kotak dan tutup terlebih dahulu, baik untuk membuat shield sesuai dengan itu.

  • Ada juga model 3D dari tutup, tetapi saya membuat tutup dengan pemotong laser. Silakan pilih mana yang kamu sukai.
  • Membuat Kit Drum MIDI Kompak dengan Pencetakan 3D

    Langkah 11 : Bermain dengan GarageBand

    Cukup mulai garageband dan sambungkan. Tidak ada pengaturan yang sulit khusus.

    Ada sejumlah DAW untuk PC yang dapat digunakan pada set drum ini, termasuk GarageBand.

    Di antaranya, Hydrogen gratis dan kamu dapat menambahkan suara.

    Langkah 12 : Pengaturan

    Dalam pembuatan kode, merepotkan untuk menulis ulang kode setiap kali nilai berubah, jadi saya ingin dapat mengubah nilai dengan Arduino saja.

    Dengan kata lain, ini dibuat untuk men-debug kode, jadi ada item yang tidak perlu diubah.

    Namun demikian, pengaturan diperlukan tergantung pada ukuran piezo, ukuran pad, kekerasan lem busa sponge.

    Pilih instrumen dengan tombol INC / DEC dan pilih item pengaturan dengan tombol NEXT / BACK. Ketika tombol EDIT ditekan saat instrumen dan item yang ingin kamu atur ditampilkan, kamu dapat mengubah nilai dengan tombol INC / DEC. Kemudian, menekan tombol EDIT lagi mengonfirmasi perubahan.

    Jika kamu menonton bagian akhir video, kamu akan memahami cara mengoperasikannya.

    THRESHOLD

    Nilai terendah di mana suara keluar

    SENSITIVITY

    Sensitivitas sensor. Jika kamu menurunkannya, kamu akan mendapatkan kecepatan tinggi bahkan jika kamu memukul dengan lembut.

    NOTE

    Nomor nada. Dengan mengubahnya, kamu dapat mengubah instrumen. Silakan merujuk pada gambar.

    FLAG

    Nilai untuk menilai bahwa pukulan sudah selesai. Kamu tidak perlu mengubahnya terlalu banyak. Akan baik untuk mengatur nilai dari 1 hingga 10. Jika kamu meningkatkan nilai terlalu banyak, kamu akan mendapatkan suara dua kali dengan satu pukulan. Jika kamu menurunkannya terlalu rendah, kamu mungkin tidak mendapatkan suara saat memukul berulang kali.

    SCAN TIME

    Dalam mencari puncak, nilai diambil secara berurutan selama beberapa milidetik setelah melebihi ambang batas. Nilai tertinggi di antaranya akan menjadi puncak. Beberapa milidetik ini adalah SCANTIME. Tidak perlu mengubahnya.

    HEAD / RIM

    Atur kemudahan rim. Meningkatkannya membuatnya sulit untuk berbunyi. Jika kamu menurunkannya terlalu keras, rim akan berbunyi saat kamu memukul kop. Terkait penilaian kop dan rim, mungkin perlu untuk memperbaiki kode

    PEDAL VELO

    Tidak seperti pad lainnya, kecepatan pedal konstan. Nilai awal adalah 100. Silakan ubah ke nilai favoritmu.

    MASK TIME

    Ini adalah nilai yang terkait dengan FLAG. Tidak perlu mengubahnya. Jika kamu meningkatkannya, kamu mungkin tidak mendengar suara saat memukul berkelanjutan.

    Membuat Kit Drum MIDI Kompak dengan Pencetakan 3D

    Langkah 13 : Fusion 360

    Beberapa bagian mungkin tidak dapat digunakan kecuali ukurannya diubah. Sulit untuk mengedit data STL. Jadi saya mengunggah data Fusion 360. Namun, karena saya sedang mengedit data sambil mencoba dan kesalahan, lebih baik untuk tidak terlalu bergantung pada fungsi riwayat.

    https://github.com/RyoKosaka/drums/tree/master/Fusion360

    EXTRA

    Langkah tambahan ada di instructables.

    https://www.instructables.com/id/Arduino-Minimal-Drum-Kit/

    Dan, proses produksi detail dipublikasikan di blog ini.

    Periksa jika kamu tertarik.

    Silakan tanyakan apa saja.

    Have fun!

    Kode

    Hello Drum v2Arduino

    Modified: 05/12/2019 by George Brotherston

    /* Drum MIDI Controller Created: 28/06/2017 by Ryo Kosaka as " HELLO DRUM " Ver.1.0 Modified: 05/12/2019 by George Brotherston */ // Library Includes // #include <Arduino.h> // Arduino Library (automatically included) // LOW (Line 41) // HIGH (Line 40) // INPUT_PULLUP (Line 47) // digitalRead() (Line 177) // analogRead() (Line 178) #include <MIDI.h> // MIDI Library - Version: 4.3.1 // includes <midi_Namespace.h> // class MIDI (Line 30) // class method 'begin' (Line 55) #include <LiquidCrystal.h> // LiquidCrystal - Version: 1.0.7 // lcd object instantiatied (in Variables section below) from LiquidCrystal class (Line 45) // Variables - Declare and Initialize // Variables - Program boolean bSnareFlag = false; boolean bHihatFlag = false; boolean bKickFlag = false; boolean bPedalFlag = false; boolean bButtonState = true; boolean bButtonState_set = true; int iUPDOWN = 0; int iNEXTBACK = 0; // Arrays - Program // InstrumentSensor[6] = {threshold, sensitivity, note, flag, velocity, iPeakValue} // 'iPeakValue' and 'velocity' must be zero for all InstrumentSensor arrays // All 'aHIHAT[]' and 'aHIHAT_CLOSE[]' array elements should have the same value except for 'note' element. int aSNARE[6] = {150, 950, 38, 3, 0, 0}; int aSNARE_RIM[6] = {5, 500, 37, 3 , 0, 0}; int aHIHAT[6] = {100, 800, 46, 1, 0, 0}; int aHIHAT_CLOSE[6] = {100, 800, 42, 1, 0, 0}; int aKICK[6] = {200, 700, 36, 1, 0, 0}; // Instrument_ContinuousController[4] = {scantime, snare/rim, pedalVelocity , masktime} int aHIHAT_PEDAL[4] = {600, 0, 44, 0}; // InstrumentSensor_ParameterValue[4] = {threshold, sensitivity, note, flag} int aSETTING[4] = {4, 500 ,100 ,1}; // Libraries // LiquidCrystal.h // Constants (already defined in Library, still in scope? If not then define below) // const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; // lcd object instantiatiated from LiquidCrystal class (LiquidCrystal.h Line 45) LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // Associate LCD interface pins to associated Arduino pin number // MIDI.h // Initialize the library MIDI_CREATE_DEFAULT_INSTANCE(); // Program Code // Program Execution - Initial (program setup) void setup() { MIDI.begin(10); // begin (MIDI.h Line 55) lcd.begin(16, 2); // begin (LiquidCrystal.h Line 62) lcd.print("INITIALIZING..."); // print (LiquidCrystal.h Line 45) lcd.setCursor(0, 1); // setCursor (LiquidCrystal.h Line 82) lcd.print("DRUM MIDI CONTROLLER"); pinMode(6, INPUT_PULLUP); // pinMode (Arduino.h Line 175); INPUT_PULLUP (Arduino.h Line 47) pinMode(7, INPUT_PULLUP); pinMode(8, INPUT_PULLUP); pinMode(9, INPUT_PULLUP); pinMode(10, INPUT_PULLUP); } // Program Execution - Steadystate (continuous loop until power is lost) void loop() { // Drum MIDI Controller Circuit // Declare and Initialize Variables int iButton_set = digitalRead(6); // Set Button // digitalRead() (Arduino.h Line 177) int iButton_up = digitalRead(7); // Up Button int iButton_down = digitalRead(8); // Down Button int iButton_next = digitalRead(9); // Next Button int iButton_back = digitalRead(10); // Back Button int iPiezoValue_A0 = analogRead(A0); // Piezo - Snare Head // analogRead() (Arduino.h Line 178) int iPiezoValue_A1 = analogRead(A1); // Piezo - Snare Rim int iPiezoValue_A2 = analogRead(A2); // Hi-hat int iPiezoValue_A3 = analogRead(A3); // Kick Drum int iFSRValue_A4 = analogRead(A4); // Hi-hat Pedal // Edit Mode int aUP[4] = {5, 50, 1,1}; // {threshold, sensitivity, note, flag} int aUP_ADVANCE[4] = {1, 50, 1,1}; // {scantime, rim/head, pedal velocity, masktime} // Note: aINSTRUMENT[] array was not declared in 'Arrays' above char* aINSTRUMENT[] = { "SNARE HEAD", "SNARE RIM", "HIHAT OPEN", "HIHAT CLOSE", "HIHAT PEDAL", "KICK", "ADVANCED SETTING" }; // Note: aSETTING[] array WAS declared in 'Arrays' above char* aSETTING[] = { "THRESHOLD", "SENSITIVITY", "NOTE", "FLAG" }; // Note: aSETTING_ADVANCE[] was not declared in 'Arrays' above char* aSETTING_ADVANCE[] = { "SCAN TIME", "HEAD / RIM ","PEDAL VELO", "MASK TIME" }; if (iUPDOWN < 0) { iUPDOWN = 6; } if (iUPDOWN > 6) { iUPDOWN = 0; } if (iNEXTBACK < 0) { iNEXTBACK = 3; } if (iNEXTBACK > 3) { iNEXTBACK = 0; } // Pushbutton EDIT // LOW (Arduino.h Line 41) if (iButton_set == LOW && bButtonState == true && bButtonState_set == true) { lcd.clear(); lcd.print("EDIT"); bButtonState = false; bButtonState_set = false; delay(500); } if (iButton_set == LOW && bButtonState == true && bButtonState_set == false) { lcd.clear(); lcd.print("EDIT DONE"); bButtonState = false; bButtonState_set = true; delay(500); } if (iButton_up == LOW && bButtonState == true && bButtonState_set == false) { switch (iUPDOWN) { case 0: aSNARE[iNEXTBACK] = aSNARE[iNEXTBACK] + aUP[iNEXTBACK]; break; case 1: aSNARE_RIM[iNEXTBACK] = aSNARE_RIM[iNEXTBACK] + aUP[iNEXTBACK]; break; case 2: switch (iNEXTBACK) { case 2: aHIHAT[iNEXTBACK] = aHIHAT[iNEXTBACK] + aUP[iNEXTBACK]; break; default: aHIHAT_CLOSE[iNEXTBACK] = aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] = aHIHAT[iNEXTBACK] + aUP[iNEXTBACK]; } break; case 3: switch (iNEXTBACK) { case 2: aHIHAT_CLOSE[iNEXTBACK] = aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; break; default: aHIHAT_CLOSE[iNEXTBACK] = aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] = aHIHAT[iNEXTBACK] + aUP[iNEXTBACK]; } break; case 4: switch (iNEXTBACK) { case 0: aHIHAT_PEDAL[iNEXTBACK] = aHIHAT_PEDAL[iNEXTBACK] + aUP[iNEXTBACK]; break; case 2: aHIHAT_PEDAL[iNEXTBACK] = aHIHAT_PEDAL[iNEXTBACK] + aUP[iNEXTBACK]; break; } break; case 5: aKICK[iNEXTBACK] = aKICK[iNEXTBACK] + aUP[iNEXTBACK]; break; case 6: aSETTING[iNEXTBACK] = aSETTING[iNEXTBACK] + aUP_ADVANCE[iNEXTBACK]; break; } bButtonState = false; delay(30); } if (iButton_down == LOW && bButtonState == true && bButtonState_set == false) { switch (iUPDOWN) { case 0: aSNARE[iNEXTBACK] = aSNARE[iNEXTBACK] - aUP[iNEXTBACK]; break; case 1: aSNARE_RIM[iNEXTBACK] = aSNARE_RIM[iNEXTBACK] - aUP[iNEXTBACK]; break; case 2: switch (iNEXTBACK) { case 2: aHIHAT[iNEXTBACK] = aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; break; default: aHIHAT_CLOSE[iNEXTBACK] = aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] = aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; } break; case 3: switch (iNEXTBACK) { case 2: aHIHAT_CLOSE[iNEXTBACK] = aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; break; default: aHIHAT_CLOSE[iNEXTBACK] = aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] = aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; } break; case 4: switch (iNEXTBACK) { case 0: aHIHAT_PEDAL[iNEXTBACK] = aHIHAT_PEDAL[iNEXTBACK] - aUP[iNEXTBACK]; break; case 2: aHIHAT_PEDAL[iNEXTBACK] = aHIHAT_PEDAL[iNEXTBACK] - aUP[iNEXTBACK]; break; } break; case 5: aKICK[iNEXTBACK] = aKICK[iNEXTBACK] - aUP[iNEXTBACK]; break; case 6: aSETTING[iNEXTBACK] = aSETTING[iNEXTBACK] - aUP_ADVANCE[iNEXTBACK]; break; } bButtonState = false; delay(30); } // Pushbuttons UP; DOWN; NEXT; BACK if (iButton_up == LOW && bButtonState == true && bButtonState_set == true) { iUPDOWN = ++iUPDOWN; bButtonState = false; delay(30); } if (iButton_down == LOW && bButtonState == true && bButtonState_set == true) { iUPDOWN = --iUPDOWN; bButtonState = false; delay(30); } if (iButton_next == LOW && bButtonState == true && bButtonState_set == true) { iNEXTBACK = ++iNEXTBACK; bButtonState = false; delay(30); } if (iButton_back == LOW && bButtonState == true && bButtonState_set == true) { iNEXTBACK = --iNEXTBACK; bButtonState = false; delay(30); } if (bButtonState == false && iButton_up == HIGH && iButton_down == HIGH && iButton_next == HIGH && iButton_back == HIGH && iButton_set == HIGH) { // HIGH is defined in Arduino.h Line 40 switch (iUPDOWN) { case 0: lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aSNARE[iNEXTBACK]); break; case 1: lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aSNARE_RIM[iNEXTBACK]); break; case 2: lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aHIHAT[iNEXTBACK]); break; case 3: lcd.clear();lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aHIHAT_CLOSE[iNEXTBACK]); break; case 4: lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aHIHAT_PEDAL[iNEXTBACK]); break; case 5: lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aKICK[iNEXTBACK]); break; case 6: lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING_ADVANCE[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aSETTING[iNEXTBACK]); break; } bButtonState = true; } // Instrument Sensors // Snare Drum if (iPiezoValue_A0 > aSNARE[0] && bSnareFlag == false) { for (int i = 0; i < aSETTING[0]; i++) { int iPeak_A0 = analogRead(A0); int iPeak_A1 = analogRead(A1); delay(1); if (iPeak_A0 > aSNARE[4]) { aSNARE[4] = iPeak_A0; } if (iPeak_A1 > aSNARE_RIM[4]) { aSNARE_RIM[4] = iPeak_A1; } } aSNARE[5] = aSNARE[4]; aSNARE_RIM[5] = aSNARE_RIM[4]; aSNARE[4] = map(aSNARE[4], aSNARE[0], aSNARE[1], 0, 127); aSNARE_RIM[4] = map(aSNARE_RIM[4], aSNARE_RIM[0], aSNARE_RIM[1], 0, 127); aSNARE[4] = (aSNARE[4] * aSNARE[4]) / 127; // Curve setting //aSNARE_RIM[4] = (aSNARE_RIM[4] * aSNARE_RIM[4]) / 127; if (aSNARE[4] <= 1) { aSNARE[4] = 1; } if (aSNARE[4] > 127) { aSNARE[4] = 127; } if (aSNARE_RIM[4] <= 0) { aSNARE_RIM[4] = 0; } if (aSNARE_RIM[4] > 127) { aSNARE_RIM[4] = 127; } if (aSNARE_RIM[5] > aSETTING[1]) { MIDI.sendNoteOn(aSNARE_RIM[2], aSNARE_RIM[4], 1); //(note, velocity, channel) MIDI.sendNoteOn(aSNARE_RIM[2], 0, 1); lcd.clear(); lcd.print("SNARE RIM"); lcd.setCursor(0, 1); lcd.print(aSNARE_RIM[4]); bSnareFlag = true; } //else if (aSNARE[5] > aSNARE_RIM[5]) else { MIDI.sendNoteOn(aSNARE[2], aSNARE[4], 1); //(note, velocity, channel) MIDI.sendNoteOn(aSNARE[2], 0, 1); lcd.clear(); lcd.print("SNARE HEAD"); lcd.setCursor(0, 1); lcd.print(aSNARE[4]); //lcd.setCursor(10, 1); //lcd.print(aSNARE_RIM[5]); bSnareFlag = true; } } // Hi-Hat Cymbal if (iPiezoValue_A2 > aHIHAT[0] && bHihatFlag == false) { for (int i = 0; i < aSETTING[0]; i++) { int iPeak_A2 = analogRead(A2); delay(1); if (iPeak_A2 > aHIHAT[4]) { aHIHAT[4] = iPeak_A2; } } aHIHAT[5] = aHIHAT[4]; aHIHAT[4] = map(aHIHAT[4], aHIHAT[0], aHIHAT[1], 0, 127); aHIHAT[4] = (aHIHAT[4] * aHIHAT[4]) / 127; if (aHIHAT[4] <= 1) { aHIHAT[4] = 1; } if (aHIHAT[4] > 127) { aHIHAT[4] = 127; } if (iPiezoValue_A0 < aHIHAT_PEDAL[0]) { MIDI.sendNoteOn(aHIHAT[2], aHIHAT[4], 1); MIDI.sendNoteOn(aHIHAT[2], 0, 1); lcd.clear(); lcd.print("HIHAT OPEN"); lcd.setCursor(0, 1); lcd.print(aHIHAT[4]); bHihatFlag = true; } else if (iPiezoValue_A0 >= aHIHAT_PEDAL[0]) { MIDI.sendNoteOn(aHIHAT_CLOSE[2], aHIHAT[4], 1); MIDI.sendNoteOn(aHIHAT_CLOSE[2], 0, 1); lcd.clear(); lcd.print("HIHAT CLOSE"); lcd.setCursor(0, 1); lcd.print(aHIHAT[4]); bHihatFlag = true; } } // Hi-hat Pedal if (iPiezoValue_A0 > aHIHAT_PEDAL[0] && bPedalFlag == false) { MIDI.sendNoteOn(aHIHAT_PEDAL[2], aSETTING[2], 1); // (note, velocity, channel) MIDI.sendNoteOn(aHIHAT_PEDAL[2], 0, 1); lcd.clear(); lcd.print("HIHAT PEDAL"); lcd.setCursor(0, 1); lcd.print(aSETTING[2]); bPedalFlag = true; } // Kick Drum if (iPiezoValue_A3 > aKICK[0] && bKickFlag == false) { for (int i = 0; i < aSETTING[0]; i++) { int iPeak_A3 = analogRead(A3); delay(1); if (iPeak_A3 > aKICK[4]) { aKICK[4] = iPeak_A3; } } aKICK[5] = aKICK[4]; aKICK[4] = map(aKICK[4], aKICK[0], aKICK[1], 0, 127); aKICK[4] = (aKICK[4] * aKICK[4]) / 127; if (aKICK[4] <= 1) { aKICK[4] = 1; } if (aKICK[4] > 127) { aKICK[4] = 127; } MIDI.sendNoteOn(aKICK[2], aKICK[4], 1); MIDI.sendNoteOn(aKICK[2], 0, 1); lcd.clear(); lcd.print("KICK"); lcd.setCursor(0, 1); lcd.print(aKICK[4]); bKickFlag = true; } // --- BEGIN 'Code in Progress' --- // // --- I could be wrong, but this is what it appears to be --- and out of curiousity what is purpose of this sequence? -- // // I=(A0); // Previous Code // -- DOES iSensorValue_A0 need to be declared as an integer? How does this relate to iPiezoValue_A0? -- // if (iSensorValue_A0 < (aSNARE[5] * (0.01 * aSNARE[3]))) { bSnareFlag = false; } if (iPiezoValue_A0 <= aHIHAT_PEDAL[0] && iPiezoValue_A2 < (aHIHAT[5] * (0.01 * aHIHAT[3])) && bHihatFlag == true) { delay(aSETTING[3]); // iSensorValue_A1 is reading analogRead(A2), but this is aHIHAT_PEDAL (which is analogRead(A2) int iSensorValue_A1 = analogRead(A2); if (iSensorValue_A1 < (aHIHAT[5] * (0.01 * aHIHAT[3]))) { bHihatFlag = false; } } if (iPiezoValue_A0 >= aHIHAT_PEDAL[0] && iPiezoValue_A2 < (aHIHAT[5] *(0.01 * aHIHAT[3])) && bHihatFlag == true) { delay(aSETTING[3]); int iSensorValue_A2 = analogRead(A2); if (iSensorValue_A2 < (aHIHAT[5] * (0.01 * aHIHAT[3]))) { bHihatFlag = false; } } if (iPiezoValue_A3 < (aKICK[5] * (0.01 * aKICK[3])) && bKickFlag == true) { delay(aSETTING[3]); // -- Should declared iSensorValue_A3 be iPiezoValue_A3? iSensorValue_A3 is declared but not used anywhere?? int iSensorValue_A3 = analogRead(A3); if (iPiezoValue_A3 < (aKICK[5] * (0.01 * aKICK[3]))) { bKickFlag = false; } } if (iPiezoValue_A0 <= aHIHAT_PEDAL[0] && bPedalFlag == true) { bPedalFlag = false; } // --- END 'Code in Progress' --- // } 
    Hello Drum

    Skematik

    Membuat Kit Drum MIDI Kompak dengan Pencetakan 3Dcircuit_nZotR7rJMM.fzz

    Proses manufaktur

    1. Tabal: Panduan Komprehensif Sejarah, Konstruksi, dan Kerajinan
    2. Bedah Shanghai Cetak Implant Tulang Titanium Kustom untuk Pasien Kanker
    3. MAXREFDES220# – Pemantauan Tekanan Darah Tanpa Manset dengan Sensor Optik
    4. Menghubungkan GrabCAD Print ke Printer 3D Stratasys Anda – Panduan Langkah demi Langkah
    5. Di Luar Prototipe: Inovasi Nyata yang Dibuat dengan Cetak 3D
    6. Tampilan LED Gyroscope Interaktif dengan NeoPixel Ring dan Arduino
    7. Kostum Awan DIY: Strip LED, Arduino Nano & Bagian SparkFun
    8. Unopad: Pengontrol MIDI Arduino yang Mulus untuk Ableton Live
    9. Bangun Sensor Halangan Sederhana dengan Arduino – Tutorial Mudah LED IR & Fotodioda
    10. Menguasai Pengenalan dan Sintesis Ucapan pada Arduino Due