3D Printer Lead Screw Upgrade

I built my 3D printer more than a year ago and I think it’s time for an upgrade.

This upgrade was long due and delayed because of lack of time (I worked full time in the summer) and the crawling pace in which the local postage service here works, but enough excuses – let the fun begin!

This upgrade will concentrate on the Z axis movement only, and the replacement of the threaded rods with proper lead screws.

Lead Screw? But Why?

After a year of printing, it can clearly be seen that threaded rods are not meant for this kind of application. The rod itself is not straight (which is not that big of a deal because there are straight rods keeping the movement straight), it squeaks pretty loudly during movement and its threads get full of black goo that consists of dust, oil and metal shavings from the friction with the nut.

A threaded rod is meant to be tightened with a nut and not move, the whole principal of its operation is based on friction – a thing we don’t really want in a moving mechanism.
A lead screw is much more rigid, it’s very hard so it doesn’t bend, it has a very smooth surface and its shape is specifically designed for moving inside a nut.

Made from scratch

I searched for a premade model so I wouldn’t have to model everything from scratch, but with all the different variations and sub-models of the Prusa i3, I couldn’t find one that I was sure would fit without further alterations. Eventually, I decided to design them myself and share for everyone with a similar printer to mine.
I had some big plans and special designs for this project, but It would take a lot of time and I couldn’t stand the threaded rods any more, so I decided to take the current design and improve on it. After the printer is functional with the threaded rods installed, I could take my time and experiment.
This project took two days total over the weekend, including modeling, printing and installing.

To keep the nut in place, I embedded M3 knurl nuts in holes in the plastic about 0.5 mm smaller in diameter than the outside of the nuts. The nuts are inserted by heating them with a soldering iron and pushing them in. A screw helps keep the nut straight while it’s inserted.
The linear bearings are held in place by the plastic itself.

At first, I thought I could get away with replacing only the X axis mounts, but I didn’t account for the lead screw’s center that had to move to make room for the big nut. eventually (after disassembling the printer, swapping the mounts, reassembling and realizing the mistake) I remodeled the mounts, printed them again and reassembled everything.

The old top bracket only supported the straight rod, the threaded rod’s top was floating, which didn’t help with it not being straight.
I improved on the design by including support for the new lead screw, which barely needs it thanks to it’s rigidity.
Instead of letting the lead screw move inside a hole in the plastic, I included bearings that hold the lead screw securely in place while letting it rotate freely.

The bottom brackets are basically the same, I just had to move the straight rod’s hole further out to follow the center dictated by the X axis carriage and the bigger lead screw nut.

All parts were printed in blue PLA @ 0.2 mm layer height and 200 degrees C with no support and no heated bed.
All models are available for Free download on Thinginverse.


The lead screw and threaded rod have different thread counts (the amount of turns per length unit) so the steps per millimeter value for the Z axis needs to be changed in the firmware. This is easily done by simply moving the Z axis 100 mm (direction doesn’t matter), measuring the actual movement and multiplying the current steps per millimeter value by the actual movement measured divided by 100 (watch your units). Repeat this process a few times, each time gets you closer until you reach the accuracy wanted.
Note that the error will be more apparent with longer movements. If you move your axis 1 mm and measure you might not see the error. A 1% error would translate to 0.01 mm with a 1 mm movement (which is something my analog caliper can’t measure), but with a 100 mm movement it would be much clearer at 1 mm.


That’s it. All done. No more squeaking Z axis and wobbly rods. I don’t expect a real improvement in printing quality, although that would be nice, but an improvement in the printing experience.

Final Thoughts

I’ve had some comments about losing resolution with lead screws because of the lower thread count, so lets see if that’s true (spoiler – it’s not):
The threaded rod I had measured at about 1 mm per turn (if I turn it inside a nut once, it will move 1 mm through the nut) and the lead screw measures at around 7.5 mm.
This means that my lead screw is 7.5 times faster than my threaded rod. If I want them to move the same distance, I need to turn the lead screw 7.5 times less than the threaded rod.
If I had a continuously rotating motor, I could, theoretically, have the same resolution (infinite) but the motors used in my printer are stepper motors, these motors move in steps and not continuously. My motors take 200 steps to make a full turn, this is the maximum resolution we can reach (well, there’s microstepping but the idea is the same, there still is a step to be made that determines the maximum resolution and amount of error to be expected).
With 200 steps per turn and 1 mm per turn, we get 200 steps per millimeter. That’s 0.005 mm per step. That’s the smallest increment in length we can make without microstepping.
At 7.5 mm per turn we get 0.0375 mm per step. While this is a larger number, the smallest increment you would expect to make while printing is still even larger. So what does this mean?
This means that the Maximum resolution your axle can reach will go down, but because the actual maximum resolution a 3D printer can reach is even lower, this doesn’t matter.
The maximum resolution I reached with my printer is 0.1 mm layer height and I don’t print at that resolution often. Even if I try to reach 0.05 mm, the lead screw would still be enough. Moreover, my firmware has microstepping enabled so the maximum resolution is much higher (microstepping can go down to 1/32 or even 1/64 of a step) and if I really want to go crazy, I could get geared motors to reduce the ratio to 1:14, 1:30 or even slower.


3D Printed Headphone Pad Adapter

I own two pairs of over-ear closed headphones, Audio-Technica M50 and SHURE SRH-440, they are both great.
The SRH-440’s are really comfortable, especially after changing the the pads to the SRH-840’s pads, but they are a little heavy and the pads are a little too shallow for my ears (my ears touch the inner plastic and it hurts after a while, a problem a lot of people seem to have). the shallowness of the pads is easily fixed with some bungee cord cut to length and shoved underneath the pads all around to give it a little more height.
The ATH-M50’s sound a little better, but their pads are a little small for me and not very soft. They are lighter than the SRH-440 so I can wear them for longer periods of time without feeling the band on top of my head, but the pads start to be uncomfortable after a while.

I decided to mount the 440’s pads onto the M50s, that way I could enjoy superior sound quality and prolonged comfort.
Luckily, the 440’s cups are a little larger than the M50’s, making the 440’s pads fit loosely on the M50’s. This was a big improvement, but the pads are a little too big, they slide all over the place and they could easily be knocked off the cups.
If only there was a way to make an adapter to make them fit… wait, I have a 3d printer!


The 440’s cups are elliptical while the M50’s are shaped like two distant halves of a circle with the tangents connecting them on the top and bottom.
After some quick measuring, sketching, and modeling I came up with a 3d model ready to be printed.
A few iterations later, we have the right scale and everything fits!
Now I can really enjoy my headphones.

This can be easily implemented for virtually any model of headphones (providing that the cups of the headphone that donated the pads are larger than those of the headphones on which they will be mounted)

The 3D printed model can be found on thingiverse

Measuring a Spring’s Constant

As part of a new project I’m working on, I need to replace a spring with other means of force application, for that I need to measure how much force a certain spring applies. I devised a plan.

Hooke’s law dictates that the force applied by a spring is proportionate to its change in length (either stretched or compressed) relatively to its idle length.
F=-kX , where F is the force applied, k is the spring’s stiffness constant and X is the difference in length (the “-” sign indicates that the force is applied in the opposite direction of the change in length).
This makes our life very easy. All we need to do is apply a known amount of force to the spring, measure the difference in length and calculate the the k constant.

Conveniently, I had a 2kg scale weight just lying around (we know that gravity pulls the weight with approx. 19.6N of force), a threaded hook, vice grips and a caliper.

First, I needed to know the idle length of the spring, for that I measured it’s length while not applying any pressure on the spring (important). Next, I put the spring on a hook’s stem between a nut and a washer (for bigger diameter springs use a washer on either side of the spring) and hung the 2Kg weight from it. Notice that the threads are covered with a smooth plastic sleeve to prevent friction from messing with the measurements.
Now I could measure the length of the spring while applying about 2Kg of force (total accuracy is not important), compare it to the idle length and calculate the spring’s constant. After that, I could measure the spring’s length in working configuration and measure the amount of force it applies.
These are my measurements:
Idle length: 2.49cm
Length compressed by 2Kg: 1.53cm
Length in working configuration: 1.37cm

From the above measurements I can derive k: 19.6=k*(0.0249-0.0153) => k=2041.66N/m. And finally, find the force of the spring in working configuration: F=2041.66*(0.0249-0.0137)=22.87N (~2.33Kg).
I have two springs so if I want to replace them, I need to apply about 45.74N or 4.66Kg.