After trying to figure out a few different mechanical possibilities for transmitting forces through the bus stop machine I’m working on, I decided that ball chain was a good bet. It’s a relatively strong material, I can cut it to size easily, it’s reasonably low-cost, and I like that it’s legible to many people as a way to move force from one place to another: people use it all the time to do exactly that when they raise and lower their blinds.

Having settled on #10 ball chain1 as what seemed like the sweet spot between price, strength, and function at my scale of interest, I bought a spool of 50 feet of the stuff. It’s delightfully fun to play with. It doesn’t kink, is very slippery, and holds no torque so it has all sorts of interesting properties to explore, not least of which is the bizarre and beautiful way it flies out of containers given the opportunity. (Relevant video if you don’t know what I’m talking about).

All well and good that it can fly, but I need this chain to go around bends under tension with minimal friction—I need pulleys for it. If a pulley is going to handle a regular rope, it will be smooth, probably with a U-shaped profile so that the rope stays put. If a pulley is going to handle regular chain, it’s got to have a special profile to match the chain, which looks like this:

image from

A ball chain, likewise, will need a special profile to exactly match the shape of the chain, which consists of a bunch of spheres connected by cylindrical pins. Though of course it’s possible to run ball chain around a smooth circular surface as the pulley, it’s likely to introduce a bunch of unnecessary friction and noise.

The solution is to make a pulley that has cutouts to accommodate exactly the shape and size of the ball chain. Rather than taking a while to draw this sort of thing in CAD software, which could be a bit of a pain, I decided to write a script to generate the pulley form parametrically. I used OpenSCAD, open-source cross-platform software that is used for parametric design in 2D and 3D.

By specifying parameters including the number of chain links of circumference, the radius of the sphere of the ball chain, and the distance between the links joining the balls, this OpenSCAD script will generate the geometry for a ball chain pulley. I also posted this same script to Thingiverse as a “Customizer” script, though unfortunately the Customizer does not appear to export DXF files, only STL. Using OpenSCAD on the desktop will look like this:

using OpenSCAD

Of course, the planning-on-screen process doesn’t capture the physical complexity that the real world contains. Consider that when the ball chain is going around a smaller-radius turn, the balls pivot around their connection points to each other, and sort of get closer together. This means that effectively the length of the links between them shortens. I could write a function into the parametric generator to accommodate this change, but since I don’t know exactly how it’s happening physically, the function would be wrong.

This means I’m left with the old empirical method of cutting things, trying them out, and seeing what works. I tried many interations of link length, first in cardboard as a test material, and then in 1/4” white acrylic since that’s what I’m going to use for the final iteration and I have plenty on hand.

ball chain tests I scribbled key parameters on some of the parts as I was going. Note the leftmost white pulley—its teeth are too close together and as a result the chain always hops halfway out.

Eventually, I was adjusting the link length in increments of 0.1mm, which seems ridiculous, but it turns out it matters. Even though the ball chain might look like it fits just fine into all three of these pulleys, under tension it might hop out of its track. I settled on the one I wrote all the final parameters on. For #10 ball chain, I use a 4.76mm ball diameter; 1.3mm link length between the balls; and cut the plastic at 8mm/s at 60% cutting power.

ball chain final possibilities we have a winner (it’s the one with all the writing on it)

Here is my final 20-tooth pulley design file for your enjoyment and use. Or, grab the OpenSCAD code (linked above) and play with it to make a ball chain pulley that matches your own needs!

  1. Sourced from McMaster—where else, after all? Number 10 in nickel-plated steel is rated to 40 pounds tensile strength, though if you spring for the stainless it’ll give you 100 pounds of tensile strength (for twice the cost).