Dalam Guide ini, kami akan tunjukkan, bagaimana membuat DIY Electric-Drum dengan menggunakan Piezo-Ceramic dan Arduino.
PIEZO-CERAMIC

Piezo-Ceramic adalah sejenis device yang mempunyai Dwi-Fungsi:
- Menghasilkan Bunyi buzzer apabila diberi Current/Voltage
- Menghasilkan Current apabila diberi Getaran Mechanical
Dalam konsep Drum Electric ini, Piezo ini boleh dilekatkan dengan Tape pada apa-apa permukaan yang akan diketuk. Getaran akan menyebabkan Piezo-Ceramic ini menghasilkan Current-Signal dalam lingkungan 0.000001A sehingga 0.000005A.
WIRING-DIAGRAM
Dengan penambahan Resistor 1M Ohm secara SELARI dengan Piezo, Signal Current akan diubah kepada Signal Voltage 0~5V yang boleh terus diterima oleh Input Analog Arduino.
Dalam masa yang sama, anda boleh menambahkan 5.1V Zener Diode sebagai komponen tambahan untuk melindungi Arduino daripada OVERVOLTAGE yang mungkin berlaku apabila Piezo diketuk terlalu kuat yang menghasilkan Voltage LEBIH-BESAR dari 5V.
Sambungkan semua Piezo pada Input Analog Arduino dan juga pada Pin Ground.

STEP #1 – LIBRARY MIDI
Library MIDI diperlukan untuk Project ini.
Anda boleh terus download Library MIDI dari URL berikut:
Arduino MIDI Library by FortySevenEffects

Disebabkan Library ini dalam bentuk file .zip , gunakan fungsi Add .ZIP Library dalam Arduino IDE, untuk install/tambahkan library ini dalam computer.
STEP #2 – SETUP ARDUINO UNO SEBAGAI MIDI DEVICE
JENIS BOARD ARDUINO UNO
Untuk Step ini, anda TIDAK boleh menggunakan Board Arduino yang menggunakan chip CH340.
PASTIKAN, anda menggunakan Arduino UNO yang mempunyai chip Atmega8U2 atau Atmega16U2, kerana dalam proses ini, FIRMWARE Atmega16U yang akan diubah untuk menjadi MIDI Device.


BY-DEFAULT, Atmega16U2 bertindak sebagai USB-to-Serial TTL converter dengan Firmware sedia ada. Firmware asal, membolehkan Arduino UNO dikenali oleh PC sebagai device COMX (Arduino UNO).
FLASH FIRMWARE ATMEGA16U2 jenis mocuLUFA
Bagi membolehkan PC mengenali Arduino UNO ini sebagai sebuah MIDI-DEVICE, Firware di dalam Atmega16U2 perlu ditukar baru.
Rujuk link URL berikut (di bahagian USB MIDI Setup) untuk maklumat berkenaan cara flash mocuLUFA Firmware:
USB MIDI Setup – mocuLUFA Firmware
Dalam kaedah di link ini, kita akan flash Atmega16U2 dengan Dual-Firmware, yang membolehkan kita menukar MODE Arduino UNO samada kepada Arduino UNO Serial, ataupun MIDI DEVICE.
PROCEDURE JUMPER SEMASA UPLOAD PROGRAM

Merujuk pada gambar di atas, satu JUMPER PERLU dipasang di bahagian berpetak HIJAU, jika mode Arduino UNO Serial ingin digunakan selepas proses Flash Firmware.
Bagi menggunakan Arduino UNO sebagai MIDI DEVICE, hanya perlu tanggalkan jumper (semasa Arduino OFF), dan pasang USB semula. PC akan terus kenali Arduino UNO sebagai MIDI DEVICE dan anda boleh semak dalam Device Manager.
CODING #1 – CHECK INPUT ANALOG
int input0; int input1; int input2; int input3; int input4; int input5; void setup() { // put your setup code here, to run once: Serial.begin(9600); }//END VOID SETUP void loop() { // put your main code here, to run repeatedly: input0 = analogRead(A0); input1 = analogRead(A1); input2 = analogRead(A2); input3 = analogRead(A3); input4 = analogRead(A4); input5 = analogRead(A5); Serial.print(" A0:"); Serial.print(analogRead(A0)); Serial.print(" A1:"); Serial.print(analogRead(A1)); Serial.print(" A2:"); Serial.print(analogRead(A2)); Serial.print(" A3:"); Serial.print(analogRead(A3)); Serial.print(" A4:"); Serial.print(analogRead(A4)); Serial.print(" A5:"); Serial.print(analogRead(A5)); Serial.println(); }//END VOID LOOP
ABLETON LIVE – INSTALLATION
Software MIDI Sythetizer yang digunakan untuk project ini adalah Ableton Live 11 (trial Version).
Ia adalah software berbayar. Walaubagaimanapun, tempoh trial version adalah selama 90 hari atau 3 bulan, yang agak cukup memadai untuk membuat beberapap Project atau Experiment.
Anda boleh dapatkan dan download software Ableton Live 11 (Trial Version) di URL berikut:
Ableton Live 11 (Trial Version)
ABLETON LIVE – DRUM RACK SETUP
(Refer Video)
ABLETON LIVE – MIDI INPUT SETUP
(Refer Video)
CODING #2 – FINAL MIDI CODING
#include <MIDI.h> int inputHiHat; int inputSnare; int inputTomHi; int inputTomMid; int inputTomLow; int inputKick; MIDI_CREATE_DEFAULT_INSTANCE(); //use default MIDI settings bool KickX = false; bool SnareX = false; bool HihatX = false; bool TomLX = false; bool TomMX = false; bool TomHX = false; long timerA,timerB,timerC,timerD,timerE,timerF; //UBAH DI SINI IKUT STARTING SENSITIVY int KickStartSens = 200; int SnareStartSens = 80; int HiHatStartSens = 80; int TomHStartSens = 80; int TomMStartSens = 80; int TomLStartSens = 80; //UBAH DI SINI IKUT STOP SENSITIVY int KickStopSens = 50; int SnareStopSens = 30; int HiHatStopSens = 30; int TomHStopSens = 30; int TomMStopSens = 30; int TomLStopSens = 30; void setup() { // put your setup code here, to run once: MIDI.begin(); }//END VOID SETUP void loop() { //INPUT SIGNAL ANALOG inputHiHat = analogRead(A0); inputSnare = analogRead(A4); inputTomHi = analogRead(A1); inputTomMid = analogRead(A2); inputTomLow = analogRead(A3); inputKick = analogRead(A5); //SNARE - D1 if(inputSnare > SnareStartSens && SnareX == false){ timerA = millis(); MIDI.sendNoteOn(38, 110, 1); //F#1 SnareX = true; } if(inputSnare < SnareStopSens && SnareX == true && (millis()-timerA)>80){ timerA = 0; MIDI.sendNoteOff(38, 0, 1); SnareX = false; } //HIHAT - F#1 if(inputHiHat > HiHatStartSens && HihatX == false){ timerB = millis(); MIDI.sendNoteOn(42, 110, 1); //F#1 HihatX = true; } if(inputHiHat < HiHatStopSens && HihatX == true && (millis()-timerB)>110){ timerB = 0; MIDI.sendNoteOff(42, 0, 1); HihatX = false; } //TOM HI - A1 if(inputTomHi > TomHStartSens && TomHX == false){ timerC = millis(); MIDI.sendNoteOn(45, 110, 1); //F#1 TomHX = true; } if(inputTomHi < TomHStopSens && TomHX == true && (millis()-timerC)>100){ timerC = 0; MIDI.sendNoteOff(45, 0, 1); TomHX = false; } //TOM MID - G1 if(inputTomMid > TomMStartSens && TomMX == false){ timerD = millis(); MIDI.sendNoteOn(43, 110, 1); //F#1 TomMX = true; } if(inputTomMid < TomMStopSens && TomMX == true && (millis()-timerD)>100){ timerD = 0; MIDI.sendNoteOff(43, 0, 1); TomMX = false; } //TOM LOW - F1 if(inputTomLow > TomLStartSens && TomLX == false){ timerE = millis(); MIDI.sendNoteOn(41, 110, 1); //F#1 TomLX = true; } if(inputTomLow < TomLStopSens && TomLX == true && (millis()-timerE)>100){ timerE = 0; MIDI.sendNoteOff(41, 0, 1); TomLX = false; } //KICK - C1 if(inputKick > KickStartSens && KickX == false){ timerF = millis(); MIDI.sendNoteOn(36, 110, 1); //F#1 KickX = true; } if(inputKick < KickStopSens && KickX == true && (millis()-timerF)>150){ timerF = 0; MIDI.sendNoteOff(36, 0, 1); KickX = false; } }//END VOID LOOP
MIDI NOTES REFERENCE

PERSEDIAAN UNTUK KE CODING ARDUINO
Jika anda menghadapi kesukaran dalam menggunakan atau memahamkan Arduino dan Coding, kami sarankan anda ikuti E-Learning E-Kursus Pemantapan Asas Arduino MatGyver ini.
Sebelum membuat sebarang Project Arduino, kita perlu tahu dahulu Fundamental Hardware dan juga Fundamental C++ Coding supaya kita dapat kenal-pasti sebarang masalah atau error-error basic yang bakal terjadi ketika membuat project ini.
Jika anda mempunyai sebarang PERTANYAAN berkenaan artikel ini, anda boleh maklumkan dalam bahagian COMMENT.
Selamat Membuat Project Electric-Drum!
Jika anda menyukai artikel-artikel keluaran MatGyver.my, kami mohon jasa baik tuan/cikpuan untuk sumbangkan like pada page FaceBook kami,
dan juga Subscribe ke YouTube Channel kami !
