Servo-assisted drum kit modification

Project  / Project number: 2163  /  Status:

IMG_20200218_135702

0

The challenge

Young client with cerebral palsy is a keen drummer, however has limited use of this legs, so experiences difficulties with using the high hat and bass drum, which are both pedal operated. The traditional way of dealing with this issue is to use an electronic drum kit, however this would require a complete new set up, and does not allow existing drum kits to be used (currently there is one at home and one at school).

The solution would have to be removable and transferable so it can be used with different drum kits. The client has no problem with hitting the other parts of the drum kit, so the solution must not impede these. Initial idea was to create some kind of button or pad that can be operated by hand, which in turn actuates the high hat/bass drum.

Since most likely using electronics the appropriate safety features must be include, i.e. thermal cutouts, fuses, quality components.

0

The solution

Using commercially available drum pads, modify to add a piezo sensor. Signal is picked up by Arduino in the main control box. When piezo generates a voltage over a given threshold this sends a command to actuate a servo motor which operates the high hat / bass drum.

All harness is shrouded in colour-coded braid. Piezo is housed in a 3D printed clamp, to make good contact with the MDF drum pad and provide strain relief to harness. Harness is terminated with female aviation-style connectors with built-in straight relief. Main control box is 3D printed, with aluminium base to provide weight and to provide threads for the screws. It houses the Arduino and the voltage regulator, which are clamped into place with small 3D printed fingers. It also includes power input, fuse, male aviation connectors, upgrade port, on/off LED, and footswitch. Servos are mounted and enclosed with 3D printed parts, which also provide harness strain relief, and includes thermal cutout inside the housing. Aluminium servo horns provide interface to the drum kit. All foot pedal components and any related components made redundant by this system have been removed.

The high hat servo horn attaches directly to the chain used in the high hat, normally pulled downwards by the pedal. The bass drum servo horn attaches to an off-centre lug previously used for attaching the return spring (original pedal mount point is now redundant). This allowed use of a custom 3D printed Nylon linkage. The linkage has a passive feature halfway along its length that provides enough stiffness to allow the beater to travel without any give (thereby creating no adverse effect towards response time), but during impact allows the linkage to flex and dampen the shock. This is to avoid over-straining the servo motor.

Everything has a small amount of mechanical adjustment, but adjustments to range and travel can also be made directly in the software.

3D printed parts are printed in PETG (for strength and long-term stability), except for the bass drum linkage which was printed in pure Nylon for very high strength, flexibility, and self-lubrication properties. Control box base is aerospace-grade 6xxx series aluminium alloy. Stainless 304 fasteners used throughout, and TurboGold woodscrews were used for piezo clamp.

The device completely negates the need to use one’s feet to operate the high hat and bass drum, and only a minimal amount of impact on the drum pad is required in order to actuate the servos (the sensitivity of this can be adjusted in software).

As a mechanical engineer, learning Arduino from scratch was the hardest part of the project. The software used is basic and could definitely be improved upon, but unfortunately time and skill is lacking. The program I wrote is fine for now, but the delay command used means that one servo is able to “block” the other.

#include <Servo.h>

Servo myservoHH; // create servo object to control a servo
Servo myservoBD; // create servo object to control a servo

const int PiezoPinHH = A0; // piezo pin (analog)
const int PiezoPinBD = A1; // piezo pin (analog)
const int ThresholdHH = 10; // piezo threshold (out of 1023)
const int ThresholdBD = 10; // piezo threshold (out of 1023)
const int InitialPosnHH = 91; // servo initial position
const int InitialPosnBD = 100; // servo initial position

void setup() {
myservoHH.attach(5); // attaches the servo on pin 9 to the servo object
myservoBD.attach(6); // attaches the servo on pin 9 to the servo object
pinMode(PiezoPinHH, INPUT); // make the pin an input
pinMode(PiezoPinBD, INPUT); // make the pin an input
myservoHH.write(InitialPosnHH); // initial position
myservoBD.write(InitialPosnBD); // initial position

}

void loop() {

int valHH=analogRead(PiezoPinHH);

if ( valHH >= ThresholdHH )
{
myservoHH.write(125); // position to go to when button is pressed
delay(150);} // delay for servo to reach position

else {
myservoHH.write(InitialPosnHH);} // position to be in when button is not pressed

int valBD=analogRead(PiezoPinBD);

if ( valBD >= ThresholdBD )
{
myservoBD.write(70); // position to go to when button is pressed
delay(200);} // delay for servo to reach position

else {
myservoBD.write(InitialPosnBD);} // position to be in when button is not pressed

}

The benefit

The client has described the modification as “amazing”. It has helped consolidate his aspirations to become a drummer.

Leave a Reply

Your email address will not be published. Required fields are marked *