Near Nozzle Probe
Near Nozzle Probe
Published 2021-03-26T14:21:12+00:00
The ideal position for an ABL probe is obviously at the nozzle. But probing with the nozzle has its own problems: when hot, the nozzle could damage the bed and when cold, there might be plastic offsetting the position triggering the probe ...
So, the next best thing would be a probe as close as possible to the nozzle, but that's easier said than done ... or is it?
Presenting the Near Nozzle Probe. The idea is simple: use a metal "needle" to get as close as possible to the nozzle, but move out of the way during printing (and away from the heat). The "detection-unit" is an optical end-stop and is moved sufficiently up - away from the rotation axis - to avoid too much loss of accuracy with the long distance from the needle point to the rotation axis. That axis uses 2 MR115 bearings, but more on that below.
To move the needle up and down a 3.7g SG37 servo is used and the needle used to be a paper-clip, now bent into the position wanted. It is fixated into the arm by heating it up using a soldering iron - ideally including a 90° angle touching the arm side to prevent it from rotating (see youtube movie). And everything is bolted shut using M3 20mm and one M3 30mm bolts (as those is what I had around).
Now, despite the bearings, gravity was not enough to "deploy" the probe reliably, which is why the servo doesn't just have a deploy and stow position, but also a measure position, i.e. the deploy angle pushes the needle down, then the servo moves back so that the needle has room to be pushed back up when pressing against the bed.
But as far as I could tell, Marlin only supported 2 states for a servo probe, so I had to add some support for the extra "measuring angle" and because I want to have the needle retracted while moving (to avoid hitting something), also added a Z_SERVO_INTERMEDIATE_STOW setting for that. The changes I had to made can be found on github.
With everything put together, we get a pretty decent standard deviation of 0.002693 mm without moving X and Y as seen in this Youtube movie and the `M48 S1 P20 V4` test results in a decent:
Mean: 0.003375 Min: -0.005 Max: 0.013 Range: 0.018
Standard Deviation: 0.005550
This was with the needle bent so it ends behind the nozzle, giving me an offset of:
#define NOZZLE_TO_PROBE_OFFSET { -4, +12, -2.8 }
So, using Pythagoras, this means we're probing at 12.6mm from the nozzle, not too bad, right?
So, is this probe better than others? Time will tell, but it's definitely good to have options and to allow everyone to build on this and try to improve it, I have included the Fusion 3D design. Feel free to analyze, modify, extend and otherwise use it, but when you do publish something based on it, please just gimme a bit of credit ;-)
I've included the PrusaSlicer 3MF file with the paint-on-support for the main body.
Putting it all together:
- Put the two MR115 bearing into the ARM and insert the BUSHING.
- Ensure the SG37 is set to 0 degrees (yeah, this likely requires an Arduino or other uP - if someone knows of a way without that, please share). Then put the shortest arm delivered with your SG37 on it (without screw) so that it points in the length direction of the SG37 towards the shortest side (in mounted position that would be down).
- Now is a good time to already fit the SERVO CAP on the SG37 arm, just to ensure it fits. When it does, remove it again as the next step won't work when it's on.
- Place the SG37 servo into the main BODY so the arm fits in the opening and cover it with the DOOR - stick in the bottom of the door first and then close it and insert a 3mm bolt to keep it closed. It should be possible to have the wire of the SG37 exit via the top of the door.
- Now put the SERVO CAP over the arm of the SG37 and fix it in place with one of the small screws delivered with the SG37 (there is a hole in the body to pass a screwdriver for this).
- Insert the needle (as said, I used a straightened paperclip) into the ARM. There is a small hole foreseen for this, but ideally the needle is slightly bigger and is heated up with ex. a soldering iron to fix it in place. Ideally the needle should get two 90° bends near the ARM so that no only the inserted part of the needle is melted to the ARM, but also the part between the two bends. The rest of the needle can just be straight at this point.
- Now insert the ARM from the bottom into the BODY and in between the 2 taps of the SERVO CAP. Move the ARM so that the bearings get aligned with the bolt holes of the body. Then insert a 30mm M3 bolt through the BODY, the BUSHING and the other side of the BODY. Fix it in place with a nut, but don't tighten it too much.
- Now insert the end stop into the top of the BODY and then mount the MOUNT INTERFACE with 2 M3 20mm bolts on top.
- Finally you can then use 2 bolts to connect the MOUNT INTERFACE to the MOUNT. The delivered MOUNT should fit an Ender 3 (Pro).
- Now that the probe is mounted, you can bend and shorten the needle so that its tip ends up as close to the nozzle as possible, but without risk of heating up (a silicon sock really helps for that) and so that in this (stowed) state the needle tip is sufficiently higher up than the nozzle tip.
- Update the firmware with the changes mentioned in the description and then measure your nozzle to probe offset. For this, first test whether homing actually works (first trigger higher up with your hand) and if so, then home, deploy the probe with M401 and now manually move the z-axis down slowly until the led of the endstop lights up. Now you have the X and Y position where the probe triggers. Because the needle rotates, the X (and depending on how you bend it also the Y) position changes slightly as it is pushed up. Hence the need to find the correct X/Y in this way. If you mark this point, you can then see how much you need to move the nozzle to get to the same position. Z-offset is measure as with any other probe.
Date published | 26/03/2021 |