You are currently browsing articles tagged toys.

I built a framework for robot wheels a while back using OpenSCAD and used it to create a few different wheel styles. I recently decided to combine them all into one massively configurable wheel model, and add a number of new features as well. The result is an OpenSCAD file with 46 parameters that provides a limitless set of combinations and wheel designs. I call it One Wheel To Rule Them All.

It includes twelve tread patterns (all configurable in often surprising ways), eight core spoke patterns (also highly customizable), configurable support for o-rings, bands, and even optical encoder timing slots (directional and non-directional), and a lot more. Plus, I’m still adding features as I think of them.

First, here are a few images of the types of the various basic elements, as well as a few variations that show the flexibility of the designs. For example, as shown in these images, the Spiral style can be used to create a variety of interesting designs that you might not think of when you think “spiral.” After the images you’ll find full details on the parameters.

It’s important to note that you can configure this wheel to such an extend that it may not be printable at home with extruded plastic printers. In these cases, services such as Shapeways could come in handy.

The source file is available at, or on github at

Tire Parameters

Often wheels are built around the tires. In this section, specify the properties of the tires you’re using, and this will define the diameter of the wheel. If you’re using o-rings, the tireCSDiameter should be the cross-section diameter of the o-ring, or if you’re using some other flat tire material (such as rubber bands), jsut specify the its thickness. If you’re not using any tire at all, set the tireCSDiameter to zero.

  • wheelWidth: The width (or thickness) of the the wheel
  • tireCSDiameter: Cross-sectional diameter (CS) — How thick is the tire rubber?
  • tireID: Internal diameter (ID) — How wide is the inside opening?
  • tireStretch: Circumferential stretch percentage (usually 1 + 0-5%) — How much to you want to stretch it to get it on?

Rim properties

The rim sits at at the outside of the spokes and supports the tires or added treads. Installed tires (such as o-rings, rubber bands, etc) are set into grooves carved out of therim, while trads are added onto it. Keep this in mind when you’re using tires — as an example, the rim height should not be smaller than the radius of o-ring tires.

The rim also supports rotary encoder timing holes for wheel feedback. Use the padding parameters to adjust the location of those holes. See the compiler output for helpful information about the distance indicated by each timing hole. Directional timing holes will produce a second set of holes that are 90 degrees out of phase with the first. This allows you to stack sensors at the same location over the wheel instead of trying to position them along the circumference. Directional timing holes essentially double the resolution. You can also double resolution by looking for both rising and falling edges.

  • rimHeight: The height of the rim portion of the wheel
  • timingHoles: The number of timing holes to carve into the rim
  • timingHoleInPad: The inside padding for the timing holes
  • timingHoleMidPad: The middle padding if direction timing holes is selected
  • timingHoleOutPad: The outside padding for the timing holes
  • directional: A directional encoder renders two sets of slots, 90 deg out of phase

Tread Parameters

In this section, specify the properties of the tire tread you want to render. If you’re using a wheel (e.g. o-ring, rubber bands, etc), then use either the “o-rings” or “slots” settings, which will cut a groove (or grooves) in the wheel rim to fit the tires. The othertreat styles will render a tread pattern protruding out from the tire surface by the amount you specify in third part of “knobSize”.

Imagine the tire is mounted on a robot and facing straight at you. The “knobSize” parameter defines the size and shape of knobs in an [x,y,z] format, where x goes across the rim, y goes up and down along the perimeter of the wheel, and z protrudes out from the wheel toward you.

The “staggerOffset” parameter allows you to stagger knobs across the tire by an amount you specify. Set this to zero if you want all the knobs lined up along the perimeter and aligned with the edges of the rim.

“numberOfKnobs” specifies how many knobs there are across the tire, and “lineThickness” specifies how thick the lines are from “drawn” tire styles, such as “x”, “cross”, and “zigX”. You can use these pameters together in creative ways — for example to extend a single tread profile across the width of the tire, or to create a contiguous zig-zag.

Finally, “radialTreadSets” defines how many sets of treads are rendered around the wheel. Each set contains two rows in order to create the staggered effect.

Tread styles are:

    • none: No tread is rendered
    • cross: Each knob is the shape of a plus sign with the specified lineThickness
    • o-rings: Grooves are cut into the rim to accept o-ring tires
    • squares: Each knob is a rectangle, whose size is specified by knobSize
    • spheres: Each knob is a smooth bump, whose size is specified by knobSize
    • cylindersX: Each knob is a cylindrical shape running across the wheel, whose size is specified by knobSize
    • cylindersY: Each knob is a cylindrical shape running along the perimiter of the wheel, whose size is specified by knobSize
    • cylindersZ: Each knob is a cylindrical shape protruding from the surface of the wheel, whose size is specified by knobSize
    • spikes: Each knob is a cone or spike protruding from the surface of the wheel, whose size is specified by knobSize
    • slots: Grooves are cut into the rim to accept flat tires, defined by numberOfKnobs (number of grooves), the first and third numbers in knobSize to define the width of the slots and the depth, and spaceBetweenTires for the distance between the tires and also from the outside edges to the first slots.
    • x: Each knob is in the shape of an “x” protruding from the surface of the wheel, whose size is specified by knobSize
    • zigX: Each knob is in the shape of a zig-zag protruding from the surface of the wheel, whose size is specified by knobSize
    • v: Each knob is in the shape of a “v” protruding from the surface of the wheel, whose size is specified by knobSize
  • treadStyle: none, cross, o-rings, squares, spheres, cylindersX, cylindersY, cylindersZ, spikes, slots, x, zigX, v
  • knobSize: The size of each knob [across wheel, along the perimeter, prodruding]
  • radialTreadSets: How many sets of treads to render around the wheel (2 rows per set).
  • numberOfKnobs: The number of knobs to render per row.
  • staggerOffset: A distance to offset the staggered rows.
  • lineThickness: The line thickness for “drawn” styles, such as “x” and “zigX”
  • maxTires: For o-rings, the maximum number of tires per wheel
  • spaceBetweenTires: For o-rings, the space between each tire, if there are more than one

Spoke-related Parameters

This section is used to define the spoke style of the wheel. Some of the properties are only applicable to certain wheel types, and these properties can be used together in creative ways to create a wide range of tire designs.

The “proportion” property affects how some spokes are rendered. The first number is the proportion of the design from the center of the wheel to the inside of the rim, and the second number is the proportion of the width inside of the wheel. For example, to create spokes that are roughly in the shape of a “U”, you can use a “circle” style, and set the proportion to [1.5, 1.0], for cirle spokes that are 150% as long as the distance from the center to the inside of the rim, 100% as wide.

Use spokeInset to specify the inner and outer inset of the spoke area from the inner and outer faces of the wheel. You can use a negative number to make the spoke area stick out further than than the rim. The hub position will be based on the inner surface resulting from this inset.

The spoke styles are:

    • biohazard: A biohazard logo-inspired design. Set numberOfSpokes to 3 to mimic the logo.
    • circle: Spokes in a circlar or oval form, defined by spokeWidth and proportion.
    • circlefit: The maximum number of circles that will fit between the center and the rim, with a set of smaller outer circles specified by outerHoleDiameter.
    • diamond: Spokes in the shape of a diamond (rhombus), defined by spokeWidth and proportion.
    • fill: Fills in the spoke area with a solid cylinder.
    • line: Straight line spokes, like you would see on a typical wagon wheel.
    • none: Leaves the spoke area empty and does not make for a very useful wheel.
    • rectangle: Spokes in the shape of a rectangle, defined by spokeWidth and proportion.
    • spiral: Spokes in the shape of a semicircle, defined by curvature, reverse, spokeWidth.
  • spokeStyle: none, biohazard, circle, circlefit, diamond, line, rectangle, spiral, fill
  • spokeInset: The [inner,outer] inset of the spoke area from the surface
  • numberOfSpokes: Number of “spokes.” Set this to three if you’re doing the biohazard design
  • spokeWidth: This is how wide each spoke is.
  • proportion: proportion to rim, proportion of width
  • curvature: For “spiral”, this is how curvey the spokes are. >0, but
  • reverse: For “spiral”, setting this to “true” reverses the direction of the spirals
  • outerHoleDiameter: For “circlefit”, the diameter of the outer holes, or zero for non
  • concavity: Concavity distance of spoke area for [inside, outside] of wheel

Hub Parameters

These properties define the hub — or how the wheel connects to the motor. The default values for the captive nut are precise for a M3 nut and will make the nut a very tight (if not impossible) fit. I prefer this because it allows you to “melt” the nut into place with a soldering iron. However, if you don’t have a solder iron or prefer a looser fit, then just adjust the nut diameter and thickness. (M3 hardware is, by default, set to 3mm screw diameter, 5.4mm nut diameter, and 2.3mm nut thickness.) Similarly, the holes for the motor shaft and grub screw are also precise. This allows the holes to be drilled out for a more precise fit. Again, you can adjust these to suit your needs.

The hubZOffset can be used to “sink” the hub into the wheel, and it defaults to half the wheel thickness. For example, when the hubHeight is 10 and the hubZOffset is -2, then the hub will protrude 8mm from the wheel, but the shaft hole will be 10mm deep. The set screw will still be positioned in the middle of the exposed vertical height, and the fillet/chamfer will also be rendered in the correct position. This property is also useful if you want to poke a hole entirely through the wheel. (e.g. If the wheel is 6mm thick, set the hub height to 16 and the hubZOffset to -6, and you’ll get a hub that protrudes 10mm from the wheel surface with a hole that extends all the way through the wheel.)

To mount a servo motor, set includeHub to false, set shaftDiameter so that the hole will accommodate the servo horn screw and any bit that protrudes from the top of the servo horn. Then set the servoHoleDiameter to the size of your mounting hardware, and set servoHoleDistance1 and servoHoleDistance2 to the total distance between mounting holes on your servo (not the distance from the center). These sets of mounting holes will be rendered at 90 degree angles from one another. If you only want one set of holes, set one of the values to zero. Adjust the angle of all the holes to avoid openings in your wheel design if necessary using servoArmRotation.

Use innerCircleDiameter to specify a solid inner circle to use as a base for the hub. This can be useful if you need a a solid surface for servo mounting hardware or for the base hub fillet/chamfer.

Use outerNutTrap to create a nut or bolt head trap on the outside (bottom) of the hub area. Used in conjunction with shaftDiameter and false for includeHub, this will create a wheel that can drive a bolt much like the large gear on Wade’s Extruder. (This feature is inspired by that design.)

Use servoNutTrap to create nut traps for bolts used to mount the wheel onto servo arms. This feature was suggested by AUGuru.

  • includeHub: Set to false to remove the hub and only include the shaft diameter hole.
  • hubDiameter: The diameter of the hub portion of the wheel
  • hubHeight: The total height of the hub
  • hubZOffset: The Z position of the hub, negative numbers from the surface of the wheel
  • shaftDiameter: The diameter of the motor shaft
  • innerCircleDiameter: The diameter of the solid inner circle under the hub, or zero for none.
  • setScrewCount: The number of set screws/nuts to render, spaced evenly around the shaft
  • setScrewDiameter: The diameter of the set screw. 3 is the default for an M3 screw.
  • setScrewNutDiameter: The “diameter” of the captive nut, from flat to flat (the “in-diameter”)
  • setScrewNutThickness: The thickness of the captive nut
  • baseFilletRadius: The radius of the fillet (rounded part) between the hub and wheel.
  • topFilletRadius: The radius of the fillet (rounded part) at the top of the hub.
  • chamferOnly: Set to true to use chamfers (straight 45-degree angles) instead of fillets.
  • servoHoleDiameter: The diameter of servo arm hounting holes, or zero if no holes
  • servoHoleDistance1: Distance across servo horn from hole to hole (0 to ignore)
  • servoHoleDistance2: Distance across servo horn from hole to hole, rotated 90 degrees (0 to ignore)
  • servoArmRotation: The total rotation of all servo holes
  • servoNutTrap: Size [indiameter, depth] of servo arm captive nut, or 0 (any) for none.
  • outerNutTrap: Size [indiameter, depth] of a captive nut, or 0 (any) for none.

Quality Parameters

  • $fn: Default quality for most circle parts.

He we’re test-driving the our latest robot creation for the first time. It’s the boy’s design and made mostly of wood. The tires are o-rings, and there’s a 12V AA batter pack sandwiched between the two pieces of plywood. The system right now consists of a drive controller using a Modern Device‘s RBBB (small Arduino-compatible) and the Pololu TB6612FNG Dual Motor Driver Carrier, a robot controller, which is a standard Arduino Uno (which doesn’t do a whole lot right now expect forward messages from the remote), and a remote controller, which is another RBBB, joystick and display.

Right now there are two driving modes. The first is a tank drive, where, for example, if the joystick is moved far left, the right wheel moves forward at full speed and the left week backward at full speed. The second mode is what I call “target drive,” in which you set the target speed and direction of each wheel. Soft starting and stopping is built in to the controller, and the jerkiness you see sometimes is a bug in the keep-alive timer — if the robot stops getting messages in target drive mode, then it will stop.

Music is “Don’t you” by stefsax (CC BY 2.5).

We finished up PopsicleBot StickBot with a couple of 555 timer circuits to allow it to roam freely and untethered. It was a lot of fun to build, and even though it’s not the fastest walker or the simplest design, it feels very organic, partly because it’s entirely analog. (As another reader noted, it would have been a lot easier to just use a Microchip PIC12F683 — or PICAXE-08M or 08M2 — but that wouldn’t have been quite as fun, and I was really looking forward to making “eyes” out of the circuits.) See the original post here: StickBot: A Simple 6-Legged Walker. You can click on any of the photos to see larger versions.

StickBot v2 - Untethered

StickBot v2 - Untethered

There’s a 9V battery now attached to its belly with a cable tie. The power feeds into a 7805 voltage regulator, which is fastened with a drop of glue and another cable tie under its nose. 5V and GND are fed up to it’s right eye, where a 555 timer is set up to oscillate between 0 and 4.25 volts with a frequency of 1Hz — so a half second for the left step, then a half second for the right, and so on. The green wire is the 1Hz square wave output.

StickBot v2 - Power

StickBot v2 - Power

The soldering work is far from beautiful, but it is functional, and of course wrapping it up in tape makes it look a little cleaner. You can see where I slipped in little pieces of electrical tape where needed to avoid unwanted connections. There’s a video of soldering up one of the eyes here: StickBot - Building the Right Eye

5V and GND are also fed up to the left eye, where the inner green wire carries the 1Hz square wave generated by the right eye, and the outer green wire carries the servo control signal. The 555 circuit that makes up the left eye creates this control signal, using (in part) a resistor (R3) that I bundled with the other eye. I did this to keep the number of components in each eye balanced. Nobody wants to see a PopsicleBot StickBot with one eye that’s much bigger than the other!

To simplify the soldering work, I left pin 4 (reset) empty on both circuits, as well as pin 5 (the control voltage pin) on the 1Hz oscillator. Ideally, you’d tie both reset pins up to 5V, and tie the empty pin 5 to ground through a 10nF capacitor. This keeps unwanted noise from potentially affecting the circuit.

Here’s the schematic: (Click for a larger version.)

PopsicleBot v2.0 Schematic

StickBot v2.0 Schematic, with two 555 timer circuits sweeping a servo motor from right to left.

…and here’s the video:


Here are some helpful resources if you’re working with 555 timer circuits.

Updated Name

I realized that Popsicle was actually a registered brand name and not just a common word, so in order to avoid any confusion or trouble, I changed this little guy’s name to StickBot. This project does not (and never did) have anything to do with Popsicle brand ice pops. In fact, I’m not even sure the craft sticks I uses were actually from Popsicle brand ice pops. So my sincere apologies to the Popsicle people; I hope you continue to let me eat your ice pops because life would simply not be the same without them!

The goal was to crawl on the cheap, and what’s cheaper than popsicle sticks craft sticks and fishing line? Next we’ll wire up a 555 circuit so it can roam untethered, but until then, here’s how to make one of your own. But first the video! :) (UPDATE: Details about the untethered “version 2” with the 555 timer circuits can be found at StickBot V2.0 - Untethered!.)


  • 4 Popsicle craft sticks (like Popsicle brand ice pop sticks)
  • 3 small eye screws
  • A few feet of mono-filament (fishing line). We used 10 lb test.
  • 3 pipe cleaners (one is just decorative)
  • 1 small cable tie
  • A bit of masking tape
  • 1 mini micro hobby servo

How to Make It

  1. Body: Stack four popsicle craft sticks, and drill three pilot holes through all of them — one in the center and one at each end. Three of the sticks will be the legs, and one will be the body.
  2. Joints: Arrange the legs on top of the body, and fasten them together with three small eye screws. On most eye screws, the threads will not go all the way to the top, so the legs should be free to move back and forth.
  3. Muscle: With a small cable tie (and possibly a dab of glue), fasten a 3.7g mini micro hobby servo to the body stick, centered between the middle and hind legs, with the motor shaft at the rear. Attach a servo arm so that it points out like the legs when the motor is in its center position. (You can get these motors on ebay for a couple bucks.)
  4. Tendons:Cut six lengths of monofilament, each about 9 inches long. For each line, tie a knot into one end, and thread it from the bottom through the hole at the end of the leg. The knot should be big enough that it won’t slip through the hole. Thread the mono-filament from the legs as follows (in this order):
    • Front left: Left to right, though the center eye, and through the right end of the servo horn.
    • Front right: Right to left, though the center eye, and through the left end of the servo horn.
    • Back left: Left to right, though the center eye, and through the left end of the servo horn.
    • Back right: Right to left, though the center eye, and through the right end of the servo horn.
    • Middle left: Left to right, though the front eye, and through the right end of the servo horn.
    • Middle right: Right to left, though the front eye, and through the left end of the servo horn.
  5. Adjustment: Carefully pull each line snug so that the legs are all perpendicular to the body, and tape them down to the servo horn. Trim off the ends, leaving an inch or so for later adjustment or tightening.
  6. Legs: Cut some pipe cleaners into six 3-inch lengths and wrap each one around the end of a leg. Bend the legs so that they all touch the surface, and are angled toward the back of the crawler. It can take a little time to get it just right, and you’ll probably want to adjust it when you get the motor hooked up.
  7. Antennae: Add some antennae if you wish by wrapping a couple 5-inch lengths of pipe cleaner to the front legs.
  8. Brain: Power the servo with an Arduino, Basic Stamp, or other micro controller, and program it to turn left and right continuously. There’s a sample sketch below.

A Simple Arduino Sketch


#define SERVO_PIN       9    // what pin is the servo on?
#define LEFT_EXTENT     0    // how far left should the servo go?
#define RIGHT_EXTENT    180  // how far right?
#define PAUSE           500  // how many milliseconds between steps?

Servo myservo;

void setup() {

void loop() {
  myservo.write( LEFT_EXTENT );
  myservo.write( RIGHT_EXTENT );

Video Music Credits

The music in the video is by Morusque (CC BY-NC):

Updated Name

I realized that Popsicle was actually a registered brand name and not just a common word, so in order to avoid any confusion or trouble, I changed this little guy’s name to StickBot. This project does not (and never did) have anything to do with Popsicle brand ice pops. In fact, I’m not even sure the craft sticks I uses were actually from Popsicle brand ice pops. So my sincere apologies to the Popsicle people; I hope you continue to let me eat your ice pops because life would simply not be the same without them!

We ran across a picture of a little pig online and my little girl fell in love with it, so we grabbed a sheet of paper and tried to make it. Here’s how it turned out.

Below the photo is the template we drew up to cut out the pieces; it should be pretty obvious what to cut and how many. Enjoy!

Wooden Pig Craft

Wooden Pig Craft

Wooden Pig Template

Wooden Pig Template

Okay, let’s get some parenting concerns out of the way first: I believe that a rubber band gun is probably one of the safest ways to teach a kid a bit about gun safety, partly because it actually shoots something that can sting. It’s a good excuse to explain that bringing a weapon (even a toy one) to school will likely get him kicked out, and it’s also a good way to learn how to be conscious of where it’s pointing — loaded or not. Plus it’s fun for target practice.

That said, here’s a single-shooter rubber band gun that we threw together today using scrap wood. The rubber band is loaded from the front onto the top of the trigger lever, which is also the rear sight. It’s alarmingly accurate; I can hit a quarter-sized bull’s eye from across the room.

(Click on the pictures to view larger versions.)

Rubber Band Gun

Rubber Band Gun

It started off as a bamboo flooring plank cut-off, but it wasn’t very accurate or attractive. It was also very difficult to hold and aim.

Rubber Band Gun Loaded

Rubber Band Gun Loaded

The blue rubber band provides enough tension to hold the trigger in place when loaded. The trigger lever pivots on a brad nail inside of the groove. It took some chisel work to get the slot just right.

Rubber Band Gun Trigger Mechanism

Rubber Band Gun Trigger Mechanism

My son got a set of plastic baseball players and a mat in the shape of a baseball diamond for Christmas. We had a 6-sided die on hand, and he wanted to make a game out of it. Here’s what we ended up with:

Batter rolls die:

  1. Ball
  2. Ball
  3. Strike
  4. Strike
  5. Foul
  6. Hit – Roll again

If batter rolled a 6, the second roll follows these rules. Rolling a 1-4 forces other runners along if necessary. If a runner is not forced, player much decide if that runner is attempting to advance before the team in the field gets to roll.

  1. Runs to 1
  2. Runs to 2
  3. Runs to 3
  4. Runs to home
  5. Roll again, with same rules.
  6. Home Run (out of park; cannot be caught; all runners score)

Runners are moved into position (either advancing between or on base), and die is handed to fielding team, who gets one roll.

  1. Out on first – if a runner is advancing to first, he is out. Otherwise, ignore.
  2. Out on second – if a runner is advancing to second, he is out. Otherwise, ignore.
  3. Out on third – if a runner is advancing to third, he is out. Otherwise, ignore.
  4. Out at home – if a runner is advancing to home, he is out. Otherwise, ignore.
  5. Fly out. Runners don’t advance.
  6. Wildcard out – any single advancing runner may be taken out.


If a runner is on third, and batter rolls a 6 (Hit – Roll again), then a 2 (Runs to 2), then the batter may either

  • place batter between 1 and 2, and leave runner on third. Fielder must roll a 2, 5, or 6 to get the runner out.
  • place batter between 1 and 2, and advance runner on third toward home. Fielder must roll a 2, 4, 5, or 6. A 2, 5, or 6 can take the batter out. (With a 5, the runner advancing to home would go back to third.) A 4 or 6 can take out the runner advancing to home.

If a runner is on second and third, and batter rolls a 6 + 6, he scores three points.

If a runner is on second and third, and batter rolls a 6 + 4, he scores two points (runners forced to advance), and fielder may roll a 4, 5, or 6 to get the batter out. If he rolls a 5, then the runners must return to second and third.

There is an excellent tutorial posted by bethany at the Vermillion Rules blog that describes precisely how to make a little girl’s tutu with only some elastic strap, a few yards of inexpensive and easy-to-find tulle, and no sewing. (I didn’t sew the elastic together as the author suggested; I just tied it into a knot instead.)

Check out the full tutorial here: An Extremely Detailed Tutu Tutorial.

The end result: A very happy little girl!



I came home today and my son had created a suit of armor and a sword out of cardboard and paper bags. But his sword was badly damaged — dented and bent — by the kid down the street who had a fancy plastic sword. Well, that cardboard sword just wasn’t going to cut it (pun intended ) so I grabbed some scrap hard maple and sharpened it up nicely. The rematch is tomorrow… MOOA-HAHAHA!

Next came the shield — with peep holes so he can keep an eye on the enemy, and emblazoned with the family coat of arms! I love that he’s able to see how quick and easy it can be to create cool wooden toys. (Click for a larger view.)

And after it’s painted, plus the other side so you can see the handle… (Click for larger views.)

I was working on another rocking horse in the shop today and my son kept picking up a horse leg and pretending it was a violin. I didn’t want the leg to get damaged, but I also wanted him to be able to “play” violin so I banged out this little toy.

He loves it — even took it to bed with him! So I thought I’d share it. (He gets the hair from me.) Click for a larger picture.

And no, I did not glue the bridge on. :)

« Older entries