DIY Electric MiDi Drum – Piezo-Electric

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.

Ini adalah jenis Arduino UNO yang mempunyai chip Atmega16U2
Ini adalah chip Atmega16U2 yang berada atas Board Arduino UNO

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 !

Dapatkan Tips-tips DIY dan Arduino dari FB Page Kami.
Konten Video Tips DIY Hobby MatGyver Official Channel.


Published by Mat Gyver

Peneraju Komuniti Digital Maker Malaysia. Pembangunan Komuniti diUtamakan.

Tinggalkan Jawapan

Masukkan butiran anda dibawah atau klik ikon untuk log masuk akaun:

WordPress.com Logo

Anda sedang menulis komen melalui akaun WordPress.com anda. Log Out /  Tukar )

Twitter picture

Anda sedang menulis komen melalui akaun Twitter anda. Log Out /  Tukar )

Facebook photo

Anda sedang menulis komen melalui akaun Facebook anda. Log Out /  Tukar )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: