Two piece drum set, servo motors, wooden chair, and Cow Baby doll
What do you do for your niece at Christmas if her interests are non-traditional and she does not subscribe to typical holiday commercialism?
How about building something that incorporates her favorite:
- Musical instrument
- Cow Baby doll
- Uncle’s favorite hobby
That’s what the Cow Baby Drum Set is all about.
- Wooden chair built to Cow Baby’s dimensions
- 2 piece drum set
- Integrated electronics compartment
- Controller face plate with buttons and knobs
- Servo motors actuate the drum sticks:
- push buttons on the face plate for direct control
- MIDI IN interface for external control
- Some NeoPixels thrown in for good measure
The project of the year!
The project delivered on so many levels. The journey to get there was a roller coaster ride. Numerous obstacles that seemed fatal at first but overcame in the end. A great concert for the family. Most importantly, my niece’s smile was genuine as she was thrilled to explore, discover, and play with her present.
The basic usage of Cow Baby Drum Set is pretty simple, but no electronic toy is complete without a user manual.
The Arduino source code, Eagle schematic, and design artwork for the chair are available in the GitHub repository.
The construction of this project was exciting right from the start. The most ambitious construction I’ve undertaken so far. The idea is to provide something that is attractive to look at, entertaining to play with, rugged enough to survive light rough housing, custom sized for Cow Baby, and neatly houses electronics.
First step is to make a proof of concept out of cardboard to visualize the interconnects and dimensions. Fortunately I have a continuous stream of prototyping supplies arriving in the mail in the form of cardboard shipping boxes. With a utility knife and some glue, anything is possible!
Wood Cutting and Carving
Once satisfied with the overall dimensions, time to build the real pieces. 1/2 inch thick Poplar boards are readily available and easy to work with.
The butt plate was cut on the band saw. The seat back started as a simple rectangle. The lettering and musical art was designed in Inkscape, converted to G Code in F-Engrave, and then carved on the CNC. The corners were sanded round on the belt sander.
The sides are more complex for three reasons.
- The sides have the pockets that all other components fit into.
- Various electronics sit in the sides, each a custom size and shape.
- The shape is curved for visual appeal.
Design was done in Easel, carving done on the CNC. Happily all the cuts were possible with a 1/8 inch down cut straight endmill. Special attention was paid to the layout and dimensions of the electronic components that interface to the outside world through the side panels. Each one has a different shape, size, and attachment method. Rectangular holes were filed square by hand.
The convex curves were sanded on the belt sander. The concave curve was cut on the band saw until I realized it was too aggressive angle and had to do part by hand with the dullest coping saw on Earth.
Now that the wood is shaped and sanded smooth, time for some finishing. Sanding sealer is the first step. Then some acrylic craft paint in bold colors. Cow Baby has an affinity for orange, so her favorite aunt customized the perfect shade for her. The acrylic paints are water soluble until cured (which takes forever), which means they are also glue permeable. We still paid special attention to leave raw wood in places destined for gluing. Three coats of paint for nice even coverage.
Some scalpel work was required to shave the thick layers of paint down where it dripped into the holes for electronics. Finally, some Gorilla wood glue and we’re all set!
Once the glue was dry, 4 coats of Polycrylic to protect. A label was applied to the power switch, indicating the three positions. Laser printed (important, not inkjet, anything water soluble would fail) on normal paper, cut to size and shape with scissors, normal Elmer’s poster glue stick to hold in position, and then layers of Polycrylic to entomb the label forever.
Control Face Plate
The face plate is made of Lexan, and slides into a groove carved in the sides. A cardboard template made the sizing just right. Onto the drill press for holes for the potentiometer knobs and push buttons. Hand files to widen the holes ever so slightly, a consequence of using the calipers on the wrong part of the button body (doh, gotta remember the little ridge just at the base of these pretty round buttons).
Then back to the drill press to get the 3mm knub that prevents the potentiometer body from rotating as you twist the knob. The knob knub, if you will. Very easy to locate the position through the clear Lexan.
This project was a continuous stream of adapt-improvise-overcome. After all the paint and sealer coats were dry and the lexan faceplate was cut to size, time to test fit it all together.
The tailgate simply slides into a vertical groove milled in the sides and gravity holds it down. In turn, the tailgate prevents the face plate from sliding out of its own horizontal slot.
When I test fit the tailgate early in the process, it was raw wood. Fit like a glove. Not tight, but also no wiggle room.
Add 3 coats of paint and 4 coats of sealer, now we’re really wishing for some wiggle room. She doesn’t fit anymore. Sand it down and repaint and seal. Fits like a champ.
Drum stands were needed to:
- Mount the motors rigidly so the drum sticks can hit near center.
- Lift the drums off the ground to allow for better acoustics.
Each of the drums is a slightly different build, most notably one has an open bottom and the other is closed. The leads to two different styles of mount.
For the smaller one with an open bottom, I can reach in the body to fasten a screw through the wall of the drum. With the wood grain running parallel to the drum wall, we get a nice strong mounting point for the servo motor.
For the larger one with closed bottom, it needed a more complex mount to secure the motor and also lift the drum off the floor. Band saw to the rescue.
When drilling the holes for the servo mounting screws I quickly discovered the inherent weakness of the wood grain in this direction. Time for some thin plywood and glue. In the typical game of one-thing-leads-to-another, now the width of the mount is too big for my longest 3MM screws, so this one ends up mounting with 4-40 imperial machine screws and nuts. So much for keeping parts standard.
Fixing the dead motor
After Cow Baby Drum Set present box was unwrapped and then all set up, we had a nice brief jam session. Both motors work nicely, Cow Baby fits just right in the seat, the lights all work as designed.
The next morning, we hook up MIDI Mud and do some step sequencing. Everything working.
Fast forward through the afternoon and the whole thing is acting funny. Green NeoPixel is giving a double flash rather than a single clean pulse. Right motor is slowly degrading in performance, finally becoming non-responsive in any way what-so-ever.
Lots of “fun” to whip out the digital multimeter in the middle of the family party and begin tracing the circuit. Swapping the motors shows that it is the right servo motor. She’s dead.
Take it apart to see if there’s a readily obvious fix like a dangling solder connection. Nothing visible to my untrained servo eye.
Time to raid the other kid’s Arduino beginner set. There’s a micro SG90 servo in there. Quick and dirty motor mount out of cardboard. Good thing I anticipated there would be at least SOME kind of issue and had my mounting tape and zip ties with me.
AND WE’RE BACK!!!!! Such relief to get it back up and running, saving the day for Cow Baby’s big concert later that day.
The Eagle schematic .sch file is available in the GitHub repository.
Cow Baby Drum Set motherboard is built on permanent prototype breadboard. The solder job went in two phases on purpose, and a third phase by surprise.
Phase 1 installed all components that are purely on the circuit board itself (Arduino Nano, optocoupler, passive components, etc.). This phase is nice and relaxed, lots of space to move around, nice lighting, rigid holder to secure the board and components as I solder.
Phase 2 installed the peripheral components (switches, buttons, potentiometers, programming connectors, etc.). This phase got steadily more tricky as more and more pieces were secured to the body. Space was cramped, holding was tough, lighting was limited. Go slow, take deep breaths, maintain attention to detail.
And it works! Time to move on to programming the software.
But first, surprise Phase 3. On the day we were packing to leave to deliver the Cow Baby Drum Set present, something I did during programming bricked the whole thing. Arduino non-responsive. Pretty sure I tried programming it over ICSP while it was unpowered, and this somehow messed up the fuses for the clock setting. That’s just a theory though.
After a few hours of trying to bring it back to life, I decided to rebuild the whole motherboard. Quick and dirty solder job, but in the end it worked. Only problem is I ate up about 6 hours I was planning on using for programming, leaving a few planned features unimplemented.
When creating the motherboard, very simple to leave the NeoPixel connection as a JST connector providing power, ground, and data in. I can figure out the specifics of the lighting later.
The form of NeoPixels used for this project come in a long strip and you cut with scissors to separate individual pixels. Once cut, they need to be soldered together. Using some scrap wood, painter’s tape, and solid core wire, I was able to lay out the LEDs how I want them in the final setup.
Silicone adhesive glops form diffusers on these very bright lights, and cyanoacrylate glue to hold them on the Cow Baby Drum Set body.
Source code is available in the GitHub repository.
The Arduino bootloader is removed, Cow Baby Drum Set must be programmed via the 6-pin ICSP header and an external programmer (such as Arduino as ISP).
Here’s an overview of the sketch:
- Normal mode simply waits for push buttons and then moves a servo in response.
- Normal mode also listens for MIDI Note On messages.
- If the red button is held for 5 seconds, we enter MIDI channel select mode.
- In channel select mode:
- Read the red potentiometer and map the analogRead() to 0-16
- Update the MIDI channel to the mapping
- Update the color of the utility LED to show the change
LIES! Pure Lies! It was supposed to do the fancy EEPROM config, but I ran out of time :-(
Cow Baby Drum Set uses the Grumpenspiel standard EEPROM configuration over serial.
Startup string : “HC Cow Baby”
- Left - note midi value
- Right - note midi value
- LED1 note midi value
- LED2 note midi value
- Left - servo strike
- Left - servo rest
- Right - servo strike
- Right - servo rest
- Servo strike delay millis
- Button Hold Down Seconds to enter tuning mode
- Potentiometer value change threshold
- LED1 Red
- LED1 Green
- LED1 Blue
- LED2 Red
- LED2 Green
- LED2 Blue
- LED_LEFT Red
- LED_LEFT Green
- LED_LEFT Blue
- LED_RIGHT Red
- LED_RIGHT Green
- LED_RIGHT Blue