Prusa i3 Z-probe Sled Mount

by oliasmage, published

Prusa i3 Z-probe Sled Mount by oliasmage Jul 16, 2014
1 Share
Download All Files

Thing Apps Enabled

Order This Printed View All Apps


Use This Project

Give a Shout Out

If you print this Thing and display it in public proudly give attribution by printing and displaying this tag.

Print Thing Tag


Thing Statistics

23461Views 1251Downloads Found in 3D Printer Accessories


This is a sled designed to carry the Z-axis endstop via an
arm with an adjuster for Z-height. The sled uses printable
LM8UU bearings to reduce weight.
The sled works via an electromagnet. When the X-axis moves
to MAX position, the electromagnet can be engaged to capture
the sled and thus tow it into position for Z-probing, or
disengage the electromagnet to dock the sled.
The electromagnet is engaged via a relay a pin on the Arduino (RAMPS).
The endstop mounts to the arm that mounts to the sled
using M3 bolts.
This sled requires updates to the firmware (Marlin). I am working on the code updates. Check back later for updates on the firmware changes.
You can see it in action here: https://www.youtube.com/watch?v=iPLJ0FUKZiM&feature=youtu.be


UPDATE: The repository for the code has changed names. The correct path is: https://github.com/ChuckBell/Marlin

UPDATE: Here are the specifications for the relay and electromagnet used. Both were sourced on eBay.

Relay: 1 Channel Isolated 5V Relay Module Coupling For Arduino PIC AVR DSP ARM

Electromagnet: 5.5 LB (2.5kg) Electric Lifting Magnet Electromagnet Solenoid Lift Holding 20mm

UPDATE: 12v for the relay was taken directly from the 12V 30A power supply (not from the RAMPS).

UPDATE: Code is now complete. You can find it at https://github.com/ChuckBell/Marlin. I have some ideas for an alternate sled design so watch this space if you don't like the current design. I'm thinking of using a mechanical latching system to do away with the electromagnet. Suggestions welcome!

UPDATE: Prototype code complete and tested. Seems to work but only have tested this about 100 times. ;)

CAUTION: this is still not refined. I have had much success but I cannot say for certain you will have the same. Use at your own risk.

You will need my fork of the Marlin code: https://github.com/oliasmage/Marlin
You may need to adjust the height of the Z probe in Configuration.h. Here are my settings. Depending on how you adjust the arm on the sled, what type of X-ends, carriage, and hot end you use, this may work for you. In other words, measure it yourself. ;)




You also need to connect the wiring as shown in the image. Be sure to connect to the first servo pins on the RAMPS. Google for this if you are not sure.

You will need a 12V electromagnet. The one I used is 20mm in diameter and 15mm tall.
You will also need a 12V relay board similar to the one shown in the photos. Wire the board, RAMPS, and relay as shown in the photo.

Add the following 2 lines to Configuration.h to enable the sled code:

define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell

define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.

Tip: just copy your Configuration.h file from your existing Marlin code. That is easier than trying to update the file all over again.
Once your configuration has modified, compile it and upload it to your printer.

  • You can use the G31 command to dock the sled
  • You can use the G32 command to undock the sled (engages magnet)
  • You can use the G30 command to perform Z probing with the new sled.

    Be sure your Z axis is positioned so that the endstop is above the level of the print bed before you begin the z probing procedure. You can also use the adjustment for raising the Z axis when probing to help.
    I welcome all feedback. It is my desire that, should this prove to be a viable, this solution be an alternative to those noisy and sometimes fickle servos. :P

More from 3D Printer Accessories

view more

All Apps

3D Print your file with 3D Hubs, the world’s largest online marketplace for 3D printing services.

App Info Launch App

Auto-magically prepare your 3D models for 3D printing. A cloud based 3D models Preparing and Healing solution for 3D Printing, MakePrintable provides features for model repairing, wall thickness...

App Info Launch App

Kiri:Moto is an integrated cloud-based slicer and tool-path generator for 3D Printing, CAM / CNC and Laser cutting. *** 3D printing mode provides model slicing and GCode output using built-in...

App Info Launch App
KiriMoto Thing App

With 3D Slash, you can edit 3d models like a stonecutter. A unique interface: as fun as a building game! The perfect tool for non-designers and children to create in 3D.

App Info Launch App

Print through a distributed network of 3D printing enthusiasts from across the US, at a fraction of the cost of the competitors. We want to change the world for the better through technology, an...

App Info Launch App

Quickly Scale, Mirror or Cut your 3D Models

App Info Launch App

3D Print a wide range of designs with Treatstock. Easy to use tools to get the perfect result. The global 3D printing network that connects you with high-quality and fast working print services nea...

App Info Launch App

I am using a RAMPS 1.4 board. Where are you connecting your relay board to get it to turn on? I am using this one -> http://www.lctech-inc.com/Hardware/Detail.aspx?id=0e238f80-b37b-4303-ac71-41ee7c169b09 .Thanks!

I use the servo pins on the RAMPS board. These are located to the right of the reset button. You will see a row of (4) 3-pin connectors. These map to pins on the Arduino. See http://forums.reprap.org/read.php?344,369563 but scroll down a bit to see the photo.

OK that's the plug I'm using but nothing is happening on the signal pins when I do G32 or G31. Do you have to have a servo enabled with angles defined?

I have this in my code:

define SERVO_ENDSTOPS {-1, -1, 0} // Servo index for X, Y, Z. Disable with -1

define SERVO_ENDSTOP_ANGLES {0,0, 0,0, 70,0} // X,Y,Z Axis Extend and Retract angles

Are you using the code repo I created? https://github.com/oliasmage/Marlin

I am using 1.1.0-RC2 which I believe has your changes in it. How is your relay board connected and jumpered?

It is jumpered "high". Effectively, this means is is normally open on the relay side. Thus, sending 5V on signal closes the relay sending 12V to the magnet.

I have it wired as shown in the wiring diagram with the exception I have the Arduino side plugged into the first servo connector on the RAMPS board. I will add photos in a moment.

Nov 14, 2015 - Modified Nov 14, 2015
AtariJeff - in reply to oliasmage

Looking at the latest code I can see that SLED_PIN never gets assigned in any of the pin header files. In fact it is purposely set to -1 to disable it. Perhaps it is placeholder code. As an experiment I add the line commented with JH to Marlin_main.cpp. It complains about redefines but it does compile and now will turn on the relay. If I have time perhaps I'll do an official github pull and request the changes be merged (not the hack below but a proper fix)


#define SLED_PIN SERVO0_PIN     //JH
digitalWrite(SLED_PIN, LOW); // turn it off

endif // Z_PROBE_SLED

Glad you got it working. Yes, check github to see if there is something missing there. Looking at the code I pushed to github, I set SERVO0_PIN mode in Marlin_main.cpp in setup() as follows:


digitalWrite(SERVO0_PIN, LOW); // turn it off

endif // Z_PROBE_SLED

(at the end of the method)

Is there not something like that in your code?

I would recommend searching for Z_PROBE_SLED to see if this bit was removed or ended up on the diff resolve cutting floor.

Can you share source for your "touch latch" (vs a cabinet latch)? How well does it work? I'd love to see a YouTube of it in action. (all mechanical solution) since I have a MKS_Base_v1.1 board, not sure where to wire up a relay to (A11,A12? Z-Max?) to drive the relay and a mechanical solution would require no additional wiring except the Z-Axis Min to the sled... Thanks!

May 24, 2015 - Modified May 24, 2015
oliasmage - in reply to legozebra

Hi. I've not gotten the design to work well enough to share. The latch requires way too much force to activate, but I hope to get it sorted out eventually.

For the relay, you need only find a pin that produces 5v when triggered. You can sense the z-probe on z-max.

Great idea, I have already order a solenoid and the relay module. I'll check it with a Fotek as probe.

I've added some of the data you've requested. As for the design considerations, the answer is quite simple. I tried 5 combinations of RAMPS and Arduino boards, power supplies, and even noise suppression circuits to solve noise and random movement of the servo. I've gone through about a dozen servos too. Some are better than others (price isn't always an indication of quality).

I originally used the relay board to turn the servo on/off but that caused a noticeable delay in the auto probing code and I didn't like that. Plus, the noise was still there while the probing was underway.

I then decided I wanted a stationary Z probe that could be stowed when not in use. Hence the sled. Note: some have (correctly) suggested I call it a carriage but sled seems to have stuck so, well, it's a sled! :)

As for the mount on the carriage for the magnet to cling to, just use any piece of metal bent to attach to the extruder body or convenient location. Make sure it comes into contact with the center portion of the electromagnet.

To recap, the answers to your queries are:

1a) eBay: 5.5 LB (2.5kg) Electric Lifting Magnet Electromagnet Solenoid Lift Holding 20mm
1b) directly from unused terminals on the 12V 30A LED power supply (not from RAMPS)
2) metal tab attached to the extruder body
3) eBay: 1 Channel Isolated 5V Relay Module Coupling For Arduino PIC AVR DSP ARM

Awesome. Thank you for the prompt response!

Jan 5, 2015 - Modified Jan 5, 2015

I like the concept of keeping the leveling apparatus as a separate entity entirely. Can you perhaps edit your 'thing' description to detail

1) The electromagenet used, feasibly where you sourced your 12v safely from
2) What/where you added to the extruder or carriage to engage the magnet
3) The relay board you used, perhaps design decisions why you selected that piece


I see now your repo.
I believe that your corrections are already implemented.
See you soon :)

Nov 12, 2014 - Modified Nov 12, 2014

A good upgrade for a good old Prusa i2 is always appreciated!!:)
Many makers have the Prusa i2.
I use the latest version of ErickZalm Marlin 1.4
Thank you for your interest.

I saw your thing. Nice! I may use that for my older Prusa i2's! :)

I will look at the code a bit later and comment on that separately. In the meantime, which version of Marlin are you using? The one from my repo? There were some bug fixes so if you have an older version it may be that. Regardless, I will look at it and let you know what I find.

I designed and printed a carriage and Slade accessory for Prusa I2 . Mounted around the system I noticed the software bugs . The G28 command is not working properly . It should not be to engage the magnet. When you turn on the reading plan with 3 or 4 points at the end of the cycle the second carriage is not repositioned to x max. It only works with 2 point reading. The G30 command not working.

Thanks. I am working on a purely mechanical version without an electro-magnet. So far, the results are promising.

Oh, this is absolutely genius! I love it, I'll implement it soon. I've looking for ways to replace the servo, they've caused me so many headaches. Thanks!

I'm not sure what you mean by precise. Can you elaborate? I have not tested with the z-probe-repeat.

Hi Oliasmage,
Could you please tell us how precise your deisgn is? There's a #define in Marlin to enable z-robe-repeat, so you can multiple test the z-probe on a given point, and check its accuracy.

I love your solution, thank you!

The idea I am working on is a purely mechanical solution - no magnets! It's called a touch latch and works like a retractable pen. Push the latch and it opens (releases), press it again and it latches. But the force required to compress the springs is a bit much. I plan to test it more thoroughly once I rig up a sensor to test how much force the stepper motor can, er, produce. If it is insufficient, I may take the latch apart and use softer springs. More to come....

Yes, it is possible but not with magnets I think. I have a design underway that uses a mechanical cabinet latch. However, the problem is it will put a lot of strain on the stepper motor. You can always add a stronger stepper motor but who wants to do that? I am not certain it is a good design for retrofitting (one of my primary goals). Thus, I am still searching for a good mechanical latching mechanism. If you find one before me, post it here! :)

I found a type of electromagnet called a latching type, which gets triggered by pulses. A + pulse triggers it in one direction, a - pulse in another direction. The latch holds the position, until the next trigger.

You can use neodymium magnets to hold the sled in both spots. A servo motor can be commanded to move in such a way that it prevents the sled from moving by creating an obstruction. Ofcourse, one of the magnets has to be stronger than the other. I am eliminating the servo from the fine calibration process to the thing it does well. Obstruct!

Maybe, you do not require a strong motor. the forces that a magnet extends are huge in the direction perpendicular to the joined surface, but the forces preventing sliding of two magnets are relatively small. We do have the advantage of the XY movement which can help slide magnets with relative ease.

I have been racking my brain to figure out if this can be done without a relay or a solenoid, maybe just using magnets. Any tips?

Code in https://github.com/oliasmage/Marlin.git has been updated to fix a small bug.

Code in the Github repository was modified today. Changes to Configuration.h (added the #defines) and README.md updated with instructions for using the sled.

I've uploaded my code. Try it out.

Great idea! If I get some time, I'll try to incorporate that alternative.

Instead of an electromagnet, have you considered using a bistable latching mechanism to dock the probe to the carriage and the idler end? That way, the most exotic component you would need to add would be a spring, rather than an electromagnet.

I cant picture to well, what you intend to suggest. There is a eureka idea there, but I am not able to figure it out.

This one (or similar):
DC 12V 2.5Kg/25N Sucked Type Electric Solenoid Electromagnet 20mm x 15mm

Sorry. Try it now.

It works, thanks.
I like your design, your idea is novel. What kind of electromagnet are you using ?

It seems that the video is private. I can not watch it.