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

Minimal MIDI Drum Kit dengan Printer 3D

Komponen dan persediaan

Arduino UNO
× 1
Adafruit LCD Standar - 16x2 Putih di Atas Biru
× 1
SparkFun Piezo
× 1
Adafruit Force Sensitive Resistor (FSR)
× 1
Resistor 10k ohm
× 1
Resistor 1M ohm
× 1
Dioda SparkFun Zener - 5.1V 1W
× 1
Sakelar Tombol Tekan SparkFun 12mm
× 1
Sakelar Geser
× 1
Soket TRS
× 1
Kabel USB-A ke B
× 1
Adaptor Kamera Apple Lightning ke USB
× 1

Alat dan mesin yang diperlukan

Printer 3D (generik)
Pemotong laser (generik)
tidak perlu,tambahan
Besi solder (generik)
pemotong lingkaran

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Hai.

Ini adalah drum kit minimal menggunakan arduino UNO.

Pertama-tama, silakan periksa halaman instruksi ini.

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

Sejak saya mulai membuat ini, saya terpikat oleh piezo dan drum elektronik.

Saya terpesona oleh mekanisme drum elektronik yang sangat sederhana dan penemuan hebat yang disebut MIDI.

Dengan kata lain, saya tidak bisa puas hanya dengan membuat pembalut.

Drum kit ini secara kasar dibagi menjadi dua produksi.

1.Pad dibuat dengan printer 3d dan kertas tebal.

2.Trigger midi converter dengan arduino UNO .

Sinyal yang dikirim dari pad " 1 " diproses oleh arduino " 2 " dan diubah menjadi sinyal MIDI. Dan sinyal MIDI ditransmisikan dari arduino ke iPhone, laptop, dll, dan suara keluar.

Anda tidak perlu menyiapkan power supply selain smartphone atau PC.

Yang Anda Butuhkan

Alat

Pencetak 3D

Pemotong Laser (Ekstra)

kunci pas hex

pisau pemotong

pemotong lingkaran

Solder Besi

Pemotong Pipa

latihan pengemudi

mata bor 9mm / 10mm

Bahan

Kertas setebal 1mm

Filamen PLA

Lembar Busa Spons 5mm / 10mm

MDF 2.5mm / 5.5mm (Ekstra)

M6 - baut dan mur 70mm

M6 - baut dan mur 50mm

M3 - baut dan mur 10mm

M3 - baut dan mur 15mm

M3 - baut dan mur 25mm

Sekrup M2

Pipa baja tahan karat berdiameter 13 mm

Perangkat Keras Drum

Kepala jaring 10 inci / 8 inci

Snare stand (Semuanya OK. Saya menggunakan YAMAHA SS662.)

Hi-hat stand (Semuanya OK. Saya menggunakan YAMAHA HS650A)

Kick pedal (Semuanya OK. Saya menggunakan YAMAHA FP7210A)

Stik drum

Langkah 1:Pencetakan 3D

Semua data ada di Thingiverse dan GitHub.

Silakan gunakan Ver.2 untuk pelek.

Saya mencetak bagian dengan pengisi pada 20%. Ketebalan lapisan adalah 0,3 mm.

Anda juga dapat menggunakan pemotong laser untuk membuat bantalan.

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

Langkah 2:Merakit

Gunakan baut dan mur M3-10mm untuk menyambungkan bagian-bagian tersebut bersama-sama.

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

Langkah 3:Membuat Shell

Pertama, tinggi cangkang adalah 55 mm.

Silakan buat tiga pita dengan lebar 55 mm.

Panjangnya sedikit lebih panjang dari panjang yang menutupi pad.

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

Potong pita sehingga menjadi panjang lingkaran yang sempurna.

Ulangi ini 3 kali dan overlay menggunakan perekat.

Saat cangkang mengering, dengan kepala jala tetap, buat lubang berdiameter 9 mm untuk soket.

Anda dapat menggunakan mur kupu-kupu, tetapi saya juga membuat kunci penyetelan yang dapat dikencangkan bahkan dengan mur biasa, jadi silakan gunakan dengan segala cara.

Untuk memasang kepala jala, gunakan baut M6-70 mm.

Setelah Anda membuat lubang, lepaskan kepala jala lagi untuk meletakkan piezo

Langkah 4:Memasang Piezo

SNARE

Dalam kasus jerat, gunakan dua piezo seperti yang ditunjukkan pada gambar.

Hubungkan kabel merah piezo ke masing-masing ujung dan cincin.

Kedua kabel hitam terhubung ke selongsong.

Jangan lupa untuk memasang kabel melalui lubang di pelat sensor saat menyolder.

Piezo untuk bagian kepala (piezo terhubung ke ujung) perlu diapit dengan busa spon setebal 10 mm seperti pada gambar.

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

Kemudian letakkan di pelat sensor.

Tendang

Karena kick pad hanya menggunakan satu piezo, hanya ujung yang dapat digunakan.

Tidak diperlukan pelat sensor. Dua busa spons di bawah piezo

Tempatkan sensor offset dari tengah.

Karena arduino tidak bisa menilai kekuatan pukulan jika beater mengenai sensor secara langsung.

HI-HAT

Sirkuitnya sama dengan kick pad.

Letakkan sepotong busa spons setebal 10 mm di bawah piezo.

Piezo lembut. Berhati-hatilah agar tidak tertekuk atau terluka.

Langkah 5:Snare Pad 10 inci

Pertama pasang sensor untuk pelek.

Perbaiki pelat sensor. Perbaiki dengan tegas. Buat ujung kerucut terlihat 2-3 mm jika dilihat dari samping.

Tentu saja, prosedur yang sama juga digunakan saat menggunakan pad 8 inci sebagai snare.

Langkah 6:PAD Tendangan 8 inci

Pertama, potong pipa baja tahan karat berdiameter 13 mm.

Buat dua 200 mm dan dua 365 mm.

Karena panjangnya dapat disesuaikan, meskipun ada beberapa kesalahan dalam panjangnya, tidak apa-apa.

Kumpulkan dengan mengacu pada gambar.

Untuk memperbaiki pipa, itu dirancang agar mur M3 dapat dimuat di dalam bagian.

Perbaiki pipa dengan aman. Gunakan baut dan mur M3-15 mm.

Langkah 7:Hi-Hat 12 inci

Setelah membuat cangkang dengan kertas tebal, saya pikir jika Anda menggunakan kertas tebal saya bisa membuat simbal.

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

Selanjutnya, buat takik dari tengah.

Terakhir, takik kedua dibuat dari titik yang berjarak 10 mm sejajar dengan takik pertama.

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

Kemudian tutup mulut Pac Man dengan hati-hati dengan selotip untuk membuatnya menjadi bentuk simbal.

Oleskan perekat dan lapisi ini. Jangan lupa untuk memperpanjang perekat dengan bersih dan tipis

Pegang dengan kuat dengan tangan Anda, lalu letakkan beban di sekitar dan keringkan.

Untuk membungkam, letakkan spons setebal 5 mm dan bor lubang. Anda tidak dapat membuka lubang dengan rapi, tetapi Anda dapat menyembunyikan lubangnya sehingga tidak apa-apa.

Lengkapi dengan memasang sensor mount dan cable guide dengan double tape. Mungkin akan lebih mudah jika Anda menggunakan lem tembak.

Langkah 8 :Pengontrol Hi-Hat

Hi-Hat Controller mengirimkan pembukaan dan penutupan hi-hat ke arduino.

Sirkuitnya sangat sederhana.

Itu dibuat dengan menggabungkan tiga bagian.

Pasang FSR ke bagian bawah dan perbaiki soket. FSR dapat digunakan bahkan jika lubang dibuka.

Pasang spons 10 mm ke FSR seperti foto.

Pasang penutup dengan baut M3 - 10 mm.

Meskipun hanya TINGGI dan RENDAH, Anda mungkin bertanya-tanya mengapa saya menggunakan FSR.

Saya menggunakan FSR untuk menyesuaikan dengan modul suara seperti Roland dan Yamaha.

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

Jika FSR, dimungkinkan untuk merespons hanya dengan memodifikasi kode. Namun, saya belum mencobanya.

Langkah 9 :USB - MIDI

Apa yang bisa kita lakukan dalam langkah ini?

Dengan kabel usb saja, Anda dapat mengirim sinyal midi dari arduino.

Dengan kata lain, buat arduino dikenali oleh iPhone dll. sebagai perangkat midi tanpa perangkat keras tambahan.

Pertama-tama, periksa halaman ini.

http://morecatlab.akiba.coocan.jp/lab/index.php/aruino/midi-firmware-for-arduino-uno-moco/

https://github.com/kuwatay/mocolufa

Jika Anda menghubungkan arduino UNO normal langsung ke iPhone, Anda akan mendapatkan pesan kesalahan seperti "Arduino UNO tidak kompatibel".

Jadi, Anda 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.

Silakan lanjutkan menurut situs ini sampai deskripsi di bawah ini.

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

Ganti saja "Arduino-usbserial-uno.hex" dengan "dualMoco.hex".

Oleh karena itu,

sudo dfu-programmer atmega16u2 flash dualMoco.hex

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

Jika Anda melakukan hubungan pendek pada pin seperti yang ditunjukkan pada gambar, itu akan dikenali sebagai Arduino normal.

Jika tidak (bila tidak dihubung singkat), arduino UNO akan dikenali sebagai perangkat MIDI.

Dengan kata lain, ketika menulis kode menggunakan IDE arduino, Anda harus melakukan hubungan pendek pada pin seperti yang ditunjukkan pada gambar.

Langkah 10 :Pemicu ke Konverter MIDI

Ada arduino UNO dan perisai di dalam kotak.

Lihat gambar fritzing untuk sirkuit pelindung.

Dioda adalah untuk perlindungan tetapi saya melihat informasi bahwa arduino UNO memiliki sirkuit perlindungan, dioda mungkin tidak diperlukan. Apakah ada yang tahu tentang ini?

Setelah mencetak model casing dan covernya terlebih dahulu, ada baiknya membuat shield yang sesuai dengannya.

Cover model 3D juga ada, tapi saya buat covernya dengan laser cutter. Silakan pilih mana yang Anda suka.

Langkah 11:Mainkan dengan GarageBand

Mulai garageband dan hubungkan. Tidak ada pengaturan yang terlalu sulit.

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

Diantaranya, Hidrogen gratis dan Anda dapat menambahkan suara.

Langkah 12 :Menyetel

Dalam membuat kodenya, setiap kali mengubah nilainya, saya kesulitan untuk menulis ulang kode, jadi saya ingin mengubah nilainya 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 bantalan, kekerasan busa spons.

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

Jika Anda menonton di bagian akhir video, Anda akan memahami cara mengoperasikannya.

BATAS

Nilai terendah yang mengeluarkan suara

SENSITIVITAS

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

CATATAN

Nomor catatan. Dengan mengubah, Anda dapat mengubah instrumen. Silakan lihat gambar.

BENDERA

Nilai untuk menilai bahwa pemukulan sudah berakhir. Anda tidak perlu mengubahnya terlalu banyak. Akan lebih baik untuk mengatur nilainya dari 1 hingga 10. Jika Anda menaikkan nilainya terlalu banyak, Anda akan mendapatkan suara dua kali dengan satu pukulan. Jika Anda menurunkannya terlalu banyak, Anda mungkin akan kehilangan suara saat Anda menekannya berulang kali.

WAKTU PINDAI

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

HEAD / RIM

Atur kemudahan pelek. Menaikkannya membuatnya sulit untuk terdengar. Jika Anda menurunkannya terlalu keras, pelek akan berbunyi saat Anda memukul kepala. Mengenai penilaian kepala dan pelek, mungkin perlu untuk memperbaiki kode

PEDAL VELO

Tidak seperti bantalan lainnya, kecepatan pedal konstan. Nilai awal adalah 100. Silakan ubah ke nilai favorit Anda.

WAKTU MASKER

Ini adalah nilai yang terkait dengan FLAG. Tidak perlu mengubahnya. Jika Anda menaikkannya, Anda mungkin tidak mendengar suara saat Anda menekan terus menerus.

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 mengedit data saat coba-coba, lebih baik tidak terlalu bergantung pada fungsi riwayat.

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

TAMBAHAN

Langkah ekstra ada di instruksi.

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

Dan, proses produksi terperinci dipublikasikan di blog ini.

Periksa jika Anda tertarik.

Silakan bertanya apa saja.

Selamat bersenang-senang!

Kode

  • Halo Drum v2
Halo Drum v2Arduino
Dimodifikasi:05/12/2019 oleh George Brotherston
/* Drum MIDI Controller Dibuat:28/06/2017 oleh Ryo Kosaka sebagai " HELLO DRUM " Ver.1.0 Dimodifikasi:05/12/2019 oleh George Brotherston*/// Library Termasuk// #include  // Arduino Library (termasuk secara otomatis) // LOW (Baris 41) // HIGH (Baris 40) // INPUT_PULLUP (Baris 47) // digitalRead() (Baris 177) / / analogRead() (Baris 178) #include  // Perpustakaan MIDI - Versi:4.3.1 // termasuk  // class MIDI (Baris 30) // metode kelas 'mulai' (Baris 55) #include  // LiquidCrystal - Versi:1.0.7 // objek lcd dipakai (di bagian Variabel di bawah) dari kelas LiquidCrystal (Baris 45)// Variabel - Deklarasikan dan Inisialisasi // Variabel - Program boolean bSnareFlag =salah; boolean bHihatFlag =salah; boolean bKickFlag =salah; boolean bPedalFlag =salah; boolean bButtonState =benar; boolean bButtonState_set =benar; int iUPDOWN =0; int iNEXTBACK =0; // Array - Program // InstrumentSensor[6] ={threshold, sensitivity, note, flag, velocity, iPeakValue} // 'iPeakValue' dan 'velocity' harus nol untuk semua array InstrumentSensor // Semua 'aHIHAT[]' dan Elemen array 'aHIHAT_CLOSE[]' harus memiliki nilai yang sama kecuali untuk elemen 'note'. 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] ={ambang batas, sensitivitas, nada, tanda} int aSETTING[4] ={4, 500 ,100 ,1}; // Libraries // LiquidCrystal.h // Konstanta (sudah didefinisikan di Library, masih dalam cakupan? Jika tidak maka tentukan di bawah) // const int rs =12, en =11, d4 =5, d5 =4, d6 =3 , d7 =2; // objek lcd diinstansiasi dari kelas LiquidCrystal (LiquidCrystal.h Baris 45) LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // Kaitkan pin antarmuka LCD ke nomor pin Arduino terkait // MIDI.h // Inisialisasi perpustakaan MIDI_CREATE_DEFAULT_INSTANCE();// Kode Program // Eksekusi Program - Awal (pengaturan program) void setup() { MIDI.begin(10); // mulai (MIDI.h Baris 55) lcd.begin(16, 2); // mulai (LiquidCrystal.h Baris 62) lcd.print("INISIALISASI..."); // print (LiquidCrystal.h Baris 45) lcd.setCursor(0, 1); // setCursor (LiquidCrystal.h Line 82) lcd.print("DRUM MIDI CONTROLLER"); pinMode(6, INPUT_PULLUP); // pinMode (Arduino.h Baris 175); INPUT_PULLUP (Arduino.h Baris 47) pinMode(7, INPUT_PULLUP); pinMode(8, INPUT_PULLUP); pinMode(9, INPUT_PULLUP); pinMode(10, INPUT_PULLUP); } // Eksekusi Program - Steadystate (loop terus menerus sampai daya hilang) void loop() { // Rangkaian Kontroler MIDI Drum // Deklarasi dan Inisialisasi Variabel int iButton_set =digitalRead(6); // Atur Tombol // digitalRead() (Arduino.h Baris 177) int iButton_up =digitalRead(7); // Tombol Atas int iButton_down =digitalRead(8); // Tombol Bawah int iButton_next =digitalRead(9); // Tombol Berikutnya int iButton_back =digitalRead(10); // Tombol Kembali int iPiezoValue_A0 =analogRead(A0); // Piezo - Snare Head // analogRead() (Arduino.h Baris 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}; // {ambang batas, sensitivitas, nada, tanda} int aUP_ADVANCE[4] ={1, 50, 1,1}; // {scantime, rim/head, pedal velocity, masktime} // Catatan:array aINSTRUMENT[] tidak dideklarasikan dalam 'Arrays' di atas char* aINSTRUMENT[] ={ "SNARE HEAD", "SNARE RIM", "HIHAT OPEN ", "HIHAT TUTUP", "HIHAT PEDAL", "KICK", "SETTING LANJUTAN" }; // Catatan:aSETTING[] array DIdeklarasikan dalam 'Array' di atas char* aSETTING[] ={ "THRESHOLD", "SENSITIVITY", "CATATAN", "FLAG" }; // Catatan:aSETTING_ADVANCE[] tidak dideklarasikan dalam 'Array' di atas char* aSETTING_ADVANCE[] ={ "SCAN TIME", "HEAD / RIM ","PEDAL VELO", "MASK TIME" }; if (iUPDOWN <0) { iUPDOWN =6; } jika (iUPDOWN> 6) { iUPDOWN =0; } jika (iNEXTBACK <0) { iNEXTBACK =3; } jika (iNEXTBACK> 3) { iNEXTBACK =0; } // Tombol Tekan EDIT // LOW (Arduino.h Baris 41) if (iButton_set ==LOW &&bButtonState ==true &&bButtonState_set ==true) { lcd.clear(); lcd.print("EDIT"); bButtonState =salah; bButtonState_set =salah; penundaan (500); } if (iButton_set ==LOW &&bButtonState ==true &&bButtonState_set ==false) { lcd.clear(); lcd.print("EDIT SELESAI"); bButtonState =salah; bButtonState_set =benar; penundaan (500); } if (iButton_up ==LOW &&bButtonState ==true &&bButtonState_set ==false) { switch (iUPDOWN) { case 0:aSNARE[iNEXTBACK] =aSNARE[iNEXTBACK] + aUP[iNEXTBACK]; merusak; kasus 1:aSNARE_RIM[iNEXTBACK] =aSNARE_RIM[iNEXTBACK] + aUP[iNEXTBACK]; merusak; kasus 2:sakelar (iNEXTBACK) { kasus 2:aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] + aUP[iNEXTBACK]; merusak; default:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] + aUP[iNEXTBACK]; } merusak; kasus 3:sakelar (iNEXTBACK) { kasus 2:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; merusak; default:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] + aUP[iNEXTBACK]; } merusak; kasus 4:sakelar (iNEXTBACK) { kasus 0:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] + aUP[iNEXTBACK]; merusak; kasus 2:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] + aUP[iNEXTBACK]; merusak; } merusak; kasus 5:aKICK[iNEXTBACK] =aKICK[iNEXTBACK] + aUP[iNEXTBACK]; merusak; case 6:aSETTING[iNEXTBACK] =aSETTING[iNEXTBACK] + aUP_ADVANCE[iNEXTBACK]; merusak; } bButtonState =false; delay(30); } if (iButton_down ==LOW &&bButtonState ==true &&bButtonState_set ==false) { switch (iUPDOWN) { case 0:aSNARE[iNEXTBACK] =aSNARE[iNEXTBACK] - aUP[iNEXTBACK]; merusak; case 1:aSNARE_RIM[iNEXTBACK] =aSNARE_RIM[iNEXTBACK] - aUP[iNEXTBACK]; merusak; case 2:switch (iNEXTBACK) { case 2:aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; merusak; default:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; } merusak; case 3:switch (iNEXTBACK) { case 2:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; merusak; default:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; } merusak; case 4:switch (iNEXTBACK) { case 0:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] - aUP[iNEXTBACK]; merusak; case 2:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] - aUP[iNEXTBACK]; merusak; } merusak; case 5:aKICK[iNEXTBACK] =aKICK[iNEXTBACK] - aUP[iNEXTBACK]; merusak; case 6:aSETTING[iNEXTBACK] =aSETTING[iNEXTBACK] - aUP_ADVANCE[iNEXTBACK]; merusak; } 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]); merusak; 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]); merusak; case 2:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aHIHAT[iNEXTBACK]); merusak; 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]); merusak; 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]); merusak; case 5:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aKICK[iNEXTBACK]); merusak; 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]); merusak; } bButtonState =true; } // Instrument Sensors // Snare Drum if (iPiezoValue_A0> aSNARE[0] &&bSnareFlag ==false) { for (int i =0; i  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  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_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  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

Skema

circuit_nZotR7rJMM.fzz

Proses manufaktur

  1. Drum
  2. Ahli bedah Cina membuat tulang titanium dengan printer 3D
  3. Kit desain mengukur tekanan darah dengan sensor optik
  4. Cara Menghubungkan Cetak GrabCAD Dengan Printer 3D Stratasys Anda
  5. Apa yang Dapat Anda Buat dengan Printer 3D?
  6. Giroskop Menyenangkan dengan NeoPixel Ring
  7. Kostum Cloud
  8. Unopad - Pengontrol MIDI Arduino dengan Ableton
  9. Sensor Kendala Sederhana dengan Arduino
  10. Pengenalan dan Sintesis Ucapan dengan Arduino