Is there a complete step by step manual for building Z probe


I read almost two days long and still confused how to build a correct Z probe with Auto Bed Leveling for NON "delta" printer. 
In that connection, Is there a complete step by step manual for building Z probe (hardware; firmware and the process in RepetierHost) ? I mean with pictures, schematics, videos and so on. I found just THIS, but nothing more. Why I have to read 40-50 topics in a different forums to understood. 

Thank you in advance.


  • The page you found is also valid for cartesian printers. It is only easier for them as they do not have so much things to calibrate so endstop calibration can be skipped and distortion correction is not available.

    Regarding hardware you could check thingiverse and would find several solutions. Looks like everyone want's a different solution according to his preferences.

    If there is a great website, I'd also like to know just for reference.
  • Thank you for the reply. I read many of them, but as you told almost every one made self version. 

    By me it will be good if somewhere in the Repetier site are posted for example links with good working decisions with pictures and schematics for major controllers and major printer types. Some comments from advanced users will help others to take a decision what to do.

    The idea do not concerns only Z probe, it is good for all complicated problems.
  • I'm totally confused...

    Yesterday I made a "movable" Z probe, because I have no time now to make a version with servo. What I made:
    1. Switched OFF "Z min endstop";
    2. Connect the Z probe to "Z max endstop" pin and assigned it in a firmware.; (I have no other free pins)
    3. The Z probe is a switch with just 2 ware and is connected to signal and ground. It has NO and NC pin groups;
    4. Check / Uncheck "switch on high", because I tried with NC and NO connection of the switch;
    5. Send G31 and check what is the response from RepetierHost. In the first moment the respond is correct. But if I seng G31 continuously, I saw something strange: Without touching the probe, the result from G31 was different ?!?!? I disconnected  the probe and test again - the results was the same: L L L H L H L L H H .... I measured the resistance with and without the switch and saw that when the switch is triggered, the value is OK just when it connect "signal" to "ground". In every other cases the value was 600 Ohm...
    6. Send G30. The printer moves Z UP / Down (around 2 mm) and stops.
    7. Send G28 - X and Y moved to home position, Z runs Down and nothing couldn't stop it. 

    So I guess the problem is with the two wired connection. This evening I'll try with THIS
  • If you send G28 you need 3 endstops. Z should home to z max where the z endstop should be. 

    Put the zprobe on any free pin you have but do NOT set it in endstops. It is not a endstop it is a zprobe.

    Then set it in zprobe section with pullup enabled so it is drawn to high internally until you connect the pin with gnd. Then G31 should also be consistent. I guess you missed the pullup part making it a random result.
  • Unfortunately I haven't any other free pin, because I have LCD display :( I use Arduino Mega 2560 + RAMPS 1.4 + LCD 16*4)

    The only free pins are ENDSTOP pins, SERVO pins and Aux 1 to 3 (on the RAMPS 1.4)

    Any advice?
  • Not sure why this is a problem.
    You have 6 endstop pins and need 3 for endstops + 1 for zprobe = 4 pins. Still 2 endstop pins free.

    When I said not in endstops I meant not in the endstop configuration. There you only put switches that work as endstop.
  • I understood. Thanks.
  • Many thanks for help! Now it works, but.. how to find out the real high of thr Z probe?
    I tried this:
    1. Set in EEPROM the measured high of the Z probe. It can't be correct because I do not know where exactly the Z prove switch its state.
    2. Lift Z over the Z prob and homing X and Y
    3. Send G32S0 and move the Z probe under each of 3 points of measurement. At the last point in the host I receive a value for Z. I write this value on a paper.
    4. Do "Emergency Stop" - all coordinates becomes "red" 0.
    5. Lower Z and calculate its travel, until the nozzle touch the bed trough paper sheet (assume it is 0.1 mm thick).
    6. Then I calculate value: point "5" - point "3" = "Delta". If "Delta" is a positive value, I add it to the value from point 1. And reversal, if "Delta" is negative, I subtract it from the value from point 1. I set the new value in EEPROM.
    7. Send @isathome, to set all coordinates to a "black" 0.
    8 Lift Z around 10 mm over Z probe, and write on paper the value.
    9. Home X and Y
    10. Send G32S0 and move the Z probe under each of 3 points of measurement. 

    At the last point I have to receive for Z (in Repetier Host) the exact value from point 8.

    Am I right?

    I ask, because even after 4-5 times repeating this procedure, I received every time a difference between expected and and the value for Z shown in RepetirHost.

    What is wrong?
  • First make sure Z_PROBE_BED_DISTANCE is a high value. If you start higher then this it seems to create wrong results, need to investigate this. On delta it works but that has a different logic anyway.

    @isathome sets host to 0 but has no effect on firmware. Better is M114 to readout firmware coordinates instead. This can also have an impact on your difference in point 8. Also you use G32 S0 so all correction is lost after the emergency stop. Even with wrong z probe height the leveling is always ok, just at the wrong height. So all you need to do is change z length or z probe height and reprobe. When stored in in eeprom after homging + G1 Z10 you should always get the same heights when probing your points.
  • The info was VERY HELPFUL !!! Thank you very much !

    I made ~ 3 hours tests and finally I received just 0.013 mm error - I think for mechanical switch it is good enough.

    And of course arises some new questions:

    1. It is possible to add more measurement points in the firmware, but because in the EEPROM exists only 3, the host checks just first 3 and ignore others (after G32 S0). So how to add more measurement points it the host?

    2. When I made a map of the bed and saved it in EEPROM using G32 S2, I will have this map for the future. How to use it ? I mean, every time, when I start the printer, I have to take Z0. How to do this using the Z probe and use in the same time the map from EEPROM?


    The other questions are not connected to the previous:

    3. If for some reason I stop printing, the heaters switched off (and this is OK). And because the temperature of the extruder falls very fast, I have to switch ON the two heaters instantly. The problem occurs almost every time after that. The temperature falls fast enough to compensate rising from heating. That's why the firmware decides that there exists a problem with the thermistor and stops the heater. Even if I start the heater again, it do not works. I have torestart the host to gain an access. Meanwhile the temperatures of the bed and the extruder are very low and I have to wait a long time.

    In some cases the temperatures rises normally and all looks OK, but no more after 30 seconds after starting the print process, all heater goes off and I receive an extruder jam.

    This is extremely big problem but till now I do not know how to decide it. 

    Thanks in advance.

  • You do autoleveling once which is why you store it with S2 after that you only home to z-max and are done. It uses old transformation matrix right from the start.

    It is not possible to add more measuring points. You compute a rotation matrix with measured points and only for 3 points you get the right result. You could make a grid and then compute a regression plane for it which again reduces all points to 3, but that is not implemented.

    Your temperature problem is the decoupling test I guess. Your decouple test period is too low if it can not catch a cooling extruder and come to higher values in that time. So you would need to increase that value. Alternatively set it 0 with latest update to disable it (written in last 2 weeks I think).
  • I haven't Z max. My printer is not a Delta printer. If I understood correctly I have to send every time G32 S0 before printing.
  • Also cartesian printers can have zmax and with zprobe they even should as zmin makes no sense and does normally not work well. Without you are correct you need G32 S0 to replace the missing endstop.
  • Dear All,

    Could you please kindly help me to solve a problem with Z-probe (auto leveling)?

    I build a H-bot printer (X, Y on the top of machine; the bed moves from top to bottom so Z probe is located at min) with Z probe (Inductive Proximity Sensor Autonics PSN17-8DN). It means that the bed will go up until the probe turn on to set Z = 0. 

    The problem is when I send G32 S0 (after G28) the probe moves to three points, at each point the bed go down and up but the probe not measure (the light on the probe not turn on), the result shows:

    18:27:08.352 : Z correction disabled
    18:27:08.352 : Info:Autoleveling disabled
    18:27:10.383 : Z-probe:0.50 X:20.00 Y:20.00 zCorr:0.00
    18:27:14.506 : Z-probe:0.50 X:160.00 Y:20.00 zCorr:0.00
    18:27:18.710 : Z-probe:0.50 X:100.00 Y:160.00 zCorr:0.00
    18:27:20.587 : Transformation matrix: 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000
    18:27:20.587 : Info:Autoleveling enabled
    18:27:20.587 : X:100.00 Y:160.00 Z:0.500 E:0.0000

    Thank you very much for your help.
    Best Regards,
    Minh Hien BUI
  • Have you tested with G31 says. Shoudl say L when not triggered and H when triggered, Only after this works as expected try probing. That it immediately stops means it triggeres directly i guess.
Sign In or Register to comment.