Let's Make Robots!

How to make a Yellow Drum Machine

Now available as a kit!
YDM_code_with_instructions.zip21.15 KB
YDMhookup.pdf34.46 KB

Update: Solarbotics has made this kit, were you will get all the vital parts needed for this project, at the best total price available out there :)

Welcome, funky friend :)

I have tried to make this project so easy that you should have fun doing it, even if you have never made a robot before, and do not know anything about electronics or programming.

However, if you have never made a robot before, I strongly recommend, that you first do the Start Here project :)

Apart from this, the skills that are needed are:
    •    Soldering
    •    Gluing, cutting, wire stripping, general assembling

Background: This is my "original draft" for an article on Make Magazine. The publiced article was edited, which may have made it better in many ways. However, unfortunately some errors occurred in the editing, and I am of course terribly sorry for that. This is my original tutorial on how to make a Yellow Drum Machine, published here in agreement with the nice people over at Make.

My YDM has released a single on iTunes :D



The materials used for this project, is a blend of things you can find for free, standard electronics components, and some components that can be a little hard to find.

Flat wooden sticks

You can be very creative, and quickly make surprisingly strong robot bodywork out of flat sticks and hot glue, because they are so easy to work with.

The sticks can be drilled, cut, combined, shaped, and mounted in any angle, just how you want them, enabeling you to build any custom chassis and small robot body that you can imagine.

And you can often find them for free in shops that sell paint, in cheese cradles, ice creams and the like :)

Plenty of hot glue

The way I build, is I hold up components where I think they’ll look good. Then I cut a piece of wood, place that in the air between the component and the rest of the robot, and hot glue it all right there.
1 x Set of belt tracks and geared motors

You can buy pre-made robot tracks, including geared motors and chassis.

I like to buy individual parts, because as I will show you, it is fun to create designs that cannot be found in the shops, and it is really easy and fast to do.

Also, I like asymetry, and things to be a little out of angle. Specially when I am making a funky robot.

1 x Wheel axle

A belt track setup of the kind we are building here uses 2 geared motors to hold 2 wheels in back, and an axle to let 2 wheels in front drive freely.

The axle can be anything that will fit into the holes, and let the wheels drive freely.

I like to use old radio antennaes for this part, as it is always easy to find a piece with a fitting diameter that way.

Perhaps also get a few metal washers that will fit over the axle.

Here is a nice tip on how to cut brass tubes: letsmakerobots.com/node/9266

4 x Spring-mounted geared motors

These can only turn some 40 degrees to one side, and some 50 to the other. And when they are powered off, they jump back to where they started, because of the little spring.

They are also quite strong for their small size, and I use them to drive the 3 drum sticks, and to turn the robots head to the sides.

3 x Light weight drum sticks

Even though the little motors are quite strong, it is absolutely essential that you only use very, very light weight material for the 3 drum sticks.

Thin fiber glass rods can be used, as well as the thin hollow aluminium that one can find on many old TV antennaes.

You can not use something like the chrome-covered brass from an old radio antennae, like we did for the axle - it is too heavy.

1 x Brains in board

The microcontroller I am using for this project, is a PICAXE 28X1, in a 28pin project board (AXE 020). The board comes with both a Darlinton output buffer, and a place for one L293D motor driver.

If you do not have one already, you will also need an AXE027 download cable.

2 x L293D motor driver

A microcontroller can only turn power on or off. With a motor driver as this, you can turn motors either way. We need to be able to drive both wheels and the head of the robot in both directions.

1 x Long battery holder

While the AXE20 board for the microcontroller comes with a battery holder, the one I am using, is a little different in the design.

With it’s set of 2 by 2 batteries, it is long, and makes a nice little rear for the robot.

1 x Sampler board

It is simply a little board with a microphone, a speaker, and 2 buttons.

The intended use is to press the red button, and record a message of up to 20 seconds, and then play it back over and again, by pressing the white button.

As I will show you, it is very easy to hack, so that the microcontroller controls the record and playback of the device.

1 x Cool looking speaker

Speakers can be found in most old electronics. Find one that has a cool look to it, or combine a couple of old parts into a speaker in a case.

1 x Distance sensor

I am using SRF05 ultra sound distance sensors from Devantech, because they are extremely reliable, and give a completely rock stable reading, even at extremely close distances.

As a bonus, they look cute as eyes.

15 x Female-to-female jumper wires

Get some nice with colours to match your robot.

- And get a good piece of wire (without female jumpers in the ends), and just use that, when I am not specifically mentioning female headers on the wire.

4 x Snap off male header pins

To be soldered into the main board.

1 x bundle of heat shrink tubing

Get some nice colours, that match your design.

Cable ties

These comes in many fancy colours and sizes. Get a grab bag, or chose some that will look good in matching colours.
4 rechargable AA type batteries

It is important that you use rechargables, as these provides approximately 1.2V each. Using something like standard alkaline batteries might fry your robot.

2 component glue

Not to be confused with “Zap-a-gap” or similar “contact glue”, as we need glue with a body for support, not something that only holds two parts where they touch each other.

Double sided adhesive tape

Either the foamy type (shown) or thin type will do fine.

It is nice to mount things with temporarely, while checking that everything is OK, before securing the part with hot glue.

Parts you will find around

I like to decorate my robots with little things and bits I find around; A cool little ring, pin, hat etc.

You will need
    •    Soldering equipment.
    •    Cutting tools.
    •    A lighter or a heatgun.
    •    A screwdriver.
    •    A hot glue gun.
    •    A computer running Windows, OSX, or Linux.



Step 1 - Assemble tracks and motors

Belt tracks usually comes in individual pieces. Assemble the 2 belt tracks, solder 4 approximately 10 centimeters wires to the 2 geared motors, and put wheels on them.

Place it all in front of you, as shown on the picture, to get a good idea of the overall size of the robot.

Step 2 - Create the basic chassis

Cut 4 pieces of flat wood; 2 longer, 2 shorter, and glue them together as shown.

The length should be so that the wooden square sticks a little out in front and back of the belt tracks. The dimensions of mine is 13.5 CM times 5.5 CM.

It does not matter if there is a wider or smaller gap in the middle of the plate that you create, or if you use more sticks. You can even use a single large flat piece, if you have a drill to make holes for wires in the board.

Step 3 - Mount tracks and motors on chassis

If you have some double sided adhesive tape, it can come in handy here. Simply use it to mount the motors, and later reinforce them with hot glue.

Hot glue one thing at a time. Hold it, till it is cooled down completely, and then secure it with more glue. Let that cool down and harden before you mount the next part.


Mount the 2 motors, so that

    •    The belt tracks do not touch the chassis
    •    The belt tracks run paralel along the sides of the chassis
    •    The belt tracks are not sticking out behind or in front of the chassis
    •    The motors has as much flat surface to the wood as possible


Prepare your front axle with what ever means you have. I used a metal screw, stuck into a blob of hot glue.

I placed a couple of washers to hold the 2 front wheels in same distance from each other as the rear wheels, while enabeling the front wheels to turn freely, without touching the chassis. Use what ever parts at hand, to enable a mount of the axle, so the wheels can turn freely.

You should try to get the belt tracks quite tight, as they always end up loser than planned. So press the axle away from the motors when you are mounting it.

You can’t buy that kind of chassis in the shops :)

Step 4 - Mount the battery holder

A single line of hot glue should hold it well.

Step 5 - Mount the speaker that came with the sampler board

First, test how your sampler board works: Insert batteries into the attached holder, and play about with recording your voice and play it back.

Solder off the original wires from the sampler board, and solder on 2 wires with female headers.

Mount the speaker underneath the robot as shown, with the wires sticking up to the top side.

Step 6 - mount the “face”

6.A - Solder wires on the SRF05

Solder 4 times approximately 10 centimeter thin / easy bendable wires to the SRF05, see the picture. Make sure to solder in the right holes of the print, as shown.

6.B - Mount the SRF05 to the neck motor

Take one of the 4 little spring-mounted geared motors, and the SRF05. Mix a blob of 2 component glue, and mount with the aid of an improvised holder like shown on the picture.

Make sure the SRF05 can turn freely without touching the little pin that sticks up, and that the SRF05 is right angled on the motor.

6.C - Mount the head on the chassis

If you are new to using a hot glue gun, make sure first to practice on something else first. You can also read some tips here.

When you are about to mount a component on the robot, you can cut one or more pieces of wood, and hot glue it on to support that component. It is often a good idea to wait with extra supporting pieces till later, when you know the spot is right.

You will have to use as much supporting wood and hot glue as needed. But try and make the mount take up as little space as possible. You can always reinforce it later.

Mount the head on the front of the robot, with these guidelines:

    •    The head should be vertical (or leaning only a tiny bit forward, not as much as the tilted chassis)
    •    The SRF05’s “eyes” should end up a couple of milimeters behind the front edge of the chassis.

When done, you can try and turn the head to each side. You may notice that it can look more to one side than the other.
If this is the case, place a little piece of wood or stick that will stop it to move more to one side than the other. It should be looking right ahead when not touched, and be able to look just as much to the left as to the right.
This does not need to be extremely accurate.

Step 7 - Mount the drumsticks

The finished robot will have 3 drumsticks in total. I refer to them as:

    •    Bass Drum: The little “tail” on the rear of the robot.
    •    Snare Drum: The right (from robots perspective) front stick.
    •    Hi Hat: The left (from robots perspective) front stick.
It does not matter if you should mix up Hi Hat and Snare Drum. Basically they are just 2 front drum sticks.
The sticks should be mounted on the motors, and the motors should be mounted on the chassis.
The order in which I do this is
    •    Mount long sticks on motors
    •    Mount motors on robot
    •    Cut the length of the sticks while mounted (because then I know the length needed)
    •    Balance and decorate the sticks

7.A - Mounting drum sticks on motors
Each stick is directly mounted on 3 of the little spring-mounted geared motors. These can turn more to one side than the other.
When estimating lengths of the sticks, observe which way you turn the motors, and make sure that you are mounting the motors in the same direction as you used when working out the appropriate lenght of the stick.

First pre-mount the sticks, to make gluing easier. The pre-mounting can be done with a small piece of wire, hot glue, or by drilling a hole in the stick, to fit the little pin on the geared motors. Then mix some 2 component glue, and mount it.

7.B - Mount the motors on the chassis

Mount them where you think they’ll look good; 2 in front, one in back.

Make sure to thoroughly test that the sticks can move uninterupted, also when the head and other sticks are moving.

No, I am not sponsored by a hot glue company ;)

7.C - Find the right lenght of the drum sticks

The length of the Bass Drum should be, so that just when touching the ground, the stick is in an approximatetely “8 ‘o'clock” angle.
The length of the 2 front sticks should be so that they can reach to drum on things a couple of centimeters in front of the robots chassis, when facing a wall.
A rule of thumb is that shorter sticks are better performing - but look less cool, so you will have to find a balance.

7.D - Weight balancing and decorating the sticks

After cutting the right lenghts, the sticks can be ajusted in weight, and be decorated.
The weight should be so that the motors can easily move the sticks, but if you are using something like fiber glass, or at the short Bass Drum, you may want to add something like a bolt or screw at the end, to make sure the sticks hitting is audible.
You can wait with the fine tuning till when you come to running the test program for the sticks.

Step 8 - Mount the remaing electronics

The 3 remaing larger parts are
    •    The main board (AXE020)
    •    The sampler board
    •    The cool looking speaker
Around on the bodywork that holds these parts, you can decorate with the remaining, parts one by one, after you solder wires on them (Step 10).

First mount a couple of sticks to hold and seperate the 2 boards.

Note that the little jack slot on the main board needs to be easily accessible on the finished robot.
You can cut off the battery clip from the sampler board (cut them close to the bettery clip).

You are now done with my instructions for the design of the body. With these boards in place, you can see how long wires to the connecting parts should be.

From now on, I will leave you to mount each part that you solder with wires in the next steps. So after soldering a part, you can mount it.

It is up to your personal design where to mount what. Remember that you can place anything anywhere: Just cut a piece of wood, and hot glue it on.
This is also the time where you can be creative with extra little parts that you find around. I found a little shiny round piece of plastic, that I think will work well to hold my microphone.
Just be aware, that you may have to acces wires plugged into the main board later.

Step 9 - Prepare the main board (AXE020)

    •    The board may come with some red plasctic on the back, that just needs to be pieled off.
    •    Place one L293D into the board, where there is an empty slot. Note that the chip has a marking in one end, that should match the marking on the board. You will have to bend the pins on the L293D before it will fit into the slot. This is done easily by pressing it down against a table.
    •    Snap off, and solder 2 times 2 male header pins into the holes marked A and B on the board
    •    Temporary mount, or place the board where it should be, because from now on, you will have to adjust lengths of wires according to this.

Step 10 - Solder wires

Below are pictures of some components, with names to wires and pins.
See the attached file (top of this page: YDMHookup.pdf) for information on what should be connected to what.

Converting “normal wires” to “wires with female headers in the ends”:

When ever possible, you should use female headers that will fit onto the main board. Most of the times, you will have to cut a female-to-female-header wire in 2, and use the ends to extend existing wires.

You may have to replace wires later - keep that in mind.

This is how I recommend you to solder 2 wires together:

    •    Remove a small piece of insulation on both ends to be connected
    •    Cut off a piece of heat shrink tubing, and slide it over one end
    •    Twist the 2 ends of bare wire
    •    Solder the twisted wires together
    •    Slide over the heat shrink tubing, and heat it up, with a litghter or similar, till it shrinks around the soldered part.

The SRF05

You may already have soldered 4 wires to this (or you should do so noe ;) This is how I reference to these wires.

The spare L293D

You simply solder wires on to the pins. You can bend them outwards first, to make access easier.


The main board

When a wire is indicated to be connected to either V or G, each time you can just pick any of these points marked as being V or G on the main board.

O0-O7,  MA-MB, I0-I7:
The main board

What to connect to what

Please see the atached file: YDMHookup.pdf

Take one item at a time from this list, and connect that with the corrosponding part (written as Wire A & Wire B). For now, if an item has 2 wires, it does not matter which wire goes to A and which goes to B.

The “Tech notes” is only for your information, you do not need to understand them.

Connecting V1 and V2 on the L293D

Step 11 - Hack the sampler board

The sampler board has these pepherials, each connected with 2 wires:

    •    Battery clip (you just have 2 wires - black and red - as you already cut off the battery clip)
    •    Speaker (you just have 2 wires, as you already cut off the speaker)
    •    Microphone
    •    LED
    •    Record button
    •    Playback button

    -    And earlier you have already tested the board.
Mount female headers on the black and red wires that was connected to the battery clip. Plug the red onto V on the main board. Plug black onto G on the main board.

    •    Mount the cool looking speaker. I mounted mine on top of the robot. Solder the 2 wires from the sampler board to the speaker.
    •    Insert batteries in your robot. Your sampler board should now work as before, if you press the record / playback buttons.
    •    Cut the playback button wires close to the button. Now let one of them touch G on the main board. Does it play back? If yes, this is the wire we will need, and you can cut off the other close to the sampler board. If not, try the other.
    •    Note which was the playback, and do the same with the record button.
    •    Mount female headers on both wires, and connect Record to I2, and Playback to I3.
    •    Mount the LED somewhere nice on your robot.

Step 12 - You are done building

You should now have a nice little robot :)

If you have left things to be mounted better for later, just wait a little longer, till you have downloaded the test programs, and seen that everything works. When done, cable ties and hot glue will do wonders :)

It is time to give the robot its program.

Enter picaxe.co.uk to get help on how to upload programs to the PICAXE, driver to your AXE027 cable, and to download the free editor. (I would love to help you more on this, but they update with new instructions, drivers etc, so this has to be the place to learn how to upload programs)

When ready, see the top of this page for code and further instructions. (YDM_code_with_instructions.zip)

I'll see you in your PICAXE editor :D

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

If you are using a L293D motor driver chip anywhere, make sure that you don't leave pin 8 floating!  I followed the instructions to wire a L293D external to the PICAXE board, to drive the neck motor for a YDM, as per the instructions, but there was no mention of tying pin 8 to V+.  If pin 8 floats you only get a bit of current through the motor, enough to swivel the head just a few degrees to either side.  The YDM will still navigate, but doesn't snake in properly.  With pin 8 tied to V+ you get the proper, rapid "glances" side to side, at least 45 degrees each way.

Interesting, thank you!

Anyone know whether or not the Picaxe code can be ported to the Arduino platform?  I'm still quite new to this, and am trying to learn on my own,  but I think it's way over my head to try to convert the original code to something that would be compatible with the Arduino Uno

This is quite a challenge of a robot to build in the first place. And the programming is quite 'untraditional' in order to make the robot do what appears like multi tasking and beat syncing.

Translating to Arduino will be very hard. You'd have to be experienced enough with Arduino, and in general talented enough to start from scratch and make your own.

That being said, it can be done, Dan ('TheCowGod' at LMR) did a nice Arduino version of the project.

But it's NOT a beginners project. Not!!

Hi all - thanx maker!

After 80+ hours of reading, reading; doing and redoing, following one set of plans, then the next and still switching around the wires; checking and rechecking solder points; and testing points with the multimeter - I have finally got all tests working except the HC-SR04 (the rest of the parts are from the Solarbotics kit).

So tired and frustrated BUT not defeated. Haha. I've Googled and read dozens (maybe hundreds?) of posts and have come here as a last resort. Didn't want to bother any of you pros without first doing my screen time.

This is how I have the HC-SR04:

VCC to V
TRIG to I0
ECHO to I1
GRD to G

Help? Thanx :)

Thanx for the super fast reply! Love LMR.

I'm using the Picaxe-28 board and the Picaxe 28x1 IC. The plans for the YDM call for the HC-SRF05 sensor using this as the test code:

symbol trig = 0 ' Define output pin for Trigger pulse
symbol echo = 1 ' Define input pin for Echo pulse
symbol range = w6 ' 16 bit word variable for range
Symbol pinSC_beep = 0

high portc trig
pause 10
low  portc trig
pulsin echo,1,range ' measures the range in 10uS steps

if range < 128 then
    sound pinSC_beep,(range,1) low pinSC_beep
goto puls

I was trying to use the HC-SR04 with that code. No worky. However, when I changed the symbol range to =w1 I was able to get some numbers scrolling in the debug window.

I tested the HR-SR04 using code written for it (changing the trig and echo to 0 and 1) and the speaker started giving me single, consistant beeps but no scrolling numbers in the debug window:

symbol trig = 3 ‘ Define output pin for Trigger pulse
symbol echo = 6 ‘ Define input pin for Echo pulse
symbol range = w1 ‘ 16 bit word variable for range

pulsout trig,2 ‘ produce 20uS trigger pulse (must be minimum of 10uS)
pulsin echo,1,range ‘ measures the range in 10uS steps
pause 10 ‘ recharge period after ranging completes
‘ now convert range to cm (divide by 5.8) or inches (divide by 14.8)
‘ as picaxe cannot use 5.8, multiply by 10 then divide by 58 instead
let range = range * 10 / 58 ‘ multiply by 10 then divide by 58
debug range ‘ display range via debug command
goto main ‘ and around forever

I finally ordered the HC-SRF05 but I sure would like to figure this out. Call me stubborn. :P

I read the page about HIGH portc, and, it was mentioned that if you are using a newer chip, you should instead use HIGH C.2 (or what ever pin number you want to make HIGH).

I still maintain a stand alone forum post will get you more eyes on your problem than posting this problem here. I am one guy and there are 10000+ visitors here daily. There are many active members that might be able to help you get this sorted otherwise. :)

I notice in your first batch of code you have a debug statement, and, you mention when you change w6 to w1 you get numbers. What numbers do you get? How close to the sensor do you have to be to get a 127 or less to show up?

I agree, the portc 'bit' is not needed unless you are controlling more pins than one at a time.

Try birdmuns advice and just use the port/pin notation.

high c.1

low c.1

or in your case

high trig

low trig


I played around a bit with the code as written above and didn't get far. Haha. However, when I hooked up what the original plans suggested - bam, all working.

I'd still like to get the other sensor working but I guess it's no panic now. Thank you guys for the input. Love the LMR bunch.

Making a new forum post will probably get more eyes on your question. You don't mention what microcontroller you are using. From the Solarbotics mention I am guessing you are using a PICAXE board. Which one? You have tried getting a response from your sensor. Can we see the code? I am not fluent in PICAXE BASIC, but, I know enough to be dangerous. :D It is good you tried to solve this on your own. It sounds like you could have stopped in sooner to ask though. :) Most of us don't advocate sadism or masochism. :P