3D Printer Z Sensor Claims 0.01 Mm Resolution

Early 3D printers usually had a microswitch that let you know when the Z axis was at the zero point. There was usually an adjustment screw so you could tune for just the right layer height. But these days, you most often see some sort of sensor. There are inductive sensors that work with a metal bed and a few other styles, as well. However, the most common is the “BL touch” style sensor that drops a probe below the nozzle level, measures, and then retracts the probe. However, nearly all of these sensors work by detecting a certain height over the bed and that’s it.

A new probe called BDsensor is inductive but can read the height over the bed in real time. According to information from the developer, it achieves a resolution of 0.01 mm and a repeatability of +/- 0.005mm. We don’t know if that’s true or not, but being able to take real-time soundings of the nozzle height leads to some interesting possibilities such as real-time adjustments of Z height, as seen in the video below.

The device does require calibration. You essentially touch the nozzle down to the bed and the machine measures 7 mm, building a calibration curve as it goes. Recent versions of Marlin support the probe and provides a real-time display of the measured height on the LCD. You do need two free I/O pins, but since the BL Touch does too, you probably have a port you could use.

In use, you can watch the real-time display to help you manually level, or use the device as a traditional probe to autolevel. You can also set up for dynamic leveling as seen in the video. Bed sensors don’t have to be expensive, but there’s something attractive about constantly measuring the bed height that seems mostly unique to this probe.

These are some pretty big claims for a fairly inexpensive device. Have you used it? If so, let us know in the comments how it is working out for you.

54 thoughts on “3D Printer Z Sensor Claims 0.01 Mm Resolution

    1. The English is terrible but I think they are trying to compare their sensor to a $500 one. Which is ridiculous, Prusa has been doing almost exactly the same thing with their PINDA for years now

      1. PINDA is not real time sensor. It can’t adjust the height on the fly – this looks like magic to me.
        On the other hand, this kind of sensor can only save you a few minutes that PINDA would have spent calculating the curvature of the bed, and that’s it.

    1. Yeah I don’t think you can really beat “poke printbed with the nozzle” as a way of hassle free z-homing and mesh leveling. The *only* issue it has is the potential for filament stuck to the nozzle to interfere with your readings.

  1. probe accuracy results: maximum 0.758187, minimum 0.757719, range 0.000469, average 0.757922, median 0.757875, standard deviation 0.000122

    Just right optical endstop and a 3mm rod from old CD drive.

  2. My printer is equipped with load cells, so it can measure any force applied to the hotend. With that it can measure the position when the nozzle touches the bed with a few micrometer resolution. This is an absolute measurement, so no calibration necessary. I have written a Klipper module for this:

    https://github.com/RF1000community/klipper/blob/master/klippy/extras/load_cell_probe.py

    My plan is to integrate this into mainline Klipper, but it seems there is some more work required for this…

    The downside of this approach is that it’s slow, but I prefer precise and calibration-free over speed. In most cases, a single point measurement is sufficient anyway (which is reasonable fast to be done even before every print), since the shape of the bed doesn’t change every day…

    1. Yours seems like a better approach to me as the bed surface won’t matter (unless it’s something soft, like silicone), it shouldn’t be affected by temperature changes, and you know exactly where it’s measuring.

      I saw something about a lidar sensor claiming 1 um resolution a week ago and thought it was overkill, but the person posting about it needed to lay down a single layer of accurate thickness over a large bed surface area. For “normal” 3D printing it’s overkill.

      I still use manual leveling and zero with a piece of paper. Neither the zero position nor the leveling change in my printer so I do the leveling and zeroing once then don’t touch it again until I decide to change something the requires resetting (changing a nozzle, modifying the Z axis, etc., which happens very rarely). This stability is achieved by using a cast aluminum tooling plate bed with a layer of PEI on a kinematic mount. The bed heater is the same size as the bed plate (300×300 mm) so there’s no “cold” border around it to cause it to warp as it heats. The Z axis is lifted by two belts driven by one motor. The Z=0 sensor is a $3 opto interruptor with a comparator. I use a differential screw to set the position of the flag that blocks the light beam. It’s not good for youtube videos but it’s great for 3D printing because it just works, every time.

      1. I guess the few micrometer resolution of my sensor is already overkill as well, but it’s not specifically tuned for that, at least the hardware – I took some care in software to crank up the precision a bit compared to the original implementation from the manufacturer, but this mostly helps when the surface is not rigid. E.g. I have a printing plate on top of the original surface for better adhesion, which is merely screwed in the 4 corners and hence there might be a small gap between the original heat bed and the plate in some areas. With my new algorithm I will find the proper contact point in those cases, while the original algorithm might have applied too much force and pushed the surface down a bit.

      1. I can do a single point measurenent with the hotend heatet to some temperature slightly below printing temperature. That works pretty well, since the oozing does not yet take place so much and any material sticking to the nozzle is soft and hence has little influence on the measurement.

        I used to do that as part of my start code, but I found it a tad too unreliable and hence do it now manually when necessary. I don’t really know the absolute preision in that context, but it is perfectly sufficient.

      1. I guess you have never printed on glass, right? If you want a smooth, almost mirror-like finish then printing on glass is your only option unless you want to mess with acetone or limonene to chemically “smooth” (well ,more like melt) the surface.

        Also, unlike the spring steel sheets, the glass doesn’t deform and remains flat. The steel sheets bend and warp *as you are printing* because of the uneven heating and various stresses in the steel. Few printers have magnets in the bed strong enough to clamp the sheet down in such way that this isn’t a problem.

        I have both glass and spring steel sheets – and use mostly glass anyway. The sheets can be a major pain unless the printer has been designed with them in mind from start – and even then. Literally the only thing that goes for them is the ease of peeling the print off by flexing the sheet (and hopefully not warping it even more than it is already).

        And re leveling/probes – there are some good reasons why people prefer the contact probes to the various contactless designs.

        Contact probe like BLTouch will sense *the actual height*, including any coating you may have on the print plate (e.g. PEI on the sheet metal). Inductive probe has no way to sense that – and if the coating isn’t even and flat (none of them are, esp. not the cheap sheets), you will get uneven first layer.

        Another aspect is temperature – contactless probes (inductive, capacitive, etc.) are notorious for their temperature sensitivity. I.e. they drift with temperature. Which is not a big deal if you use them for what they have been intended for – as an endstop of some industrial machinery. But it is a problem in a 3D printer when looking for repeatability/accuracy in microns.

          1. Glass bed warped? I have never heard about something like that. I haven’t seen the Creality ones, though. How thick is that glass?

            I am using 2-3mm thick borosilicate (“pyrex”) glass, cracked it a few times (usually by crashing the hotend into it) or had a print stick so well that it ripped off the top layer of the glass a few times but never had a glass sheet warp.

            Lot of people print literally on window glass or pieces of mirror with no issues at all either.

      2. Glass has never failed me. I regularly print ASA, PLA, Nylon, PA-CF and have never had bed adhesion issues, and it’s stiffness compensates a bit for the slight warping in my cheap heated bed. If it ain’t broke…

  3. Pretty cool. I design eddy current sensors for a living. Thought about doing this with one of my sensors, but just never have. The thermal problem is real which is why we put an NTC on board right next to the sensor. The performance is very repeatable across temperature, so we can easily compensate across temperature. Works pretty good. Our sensors are only for automotive, but we charge our customers about $12 for them. Of course that’s in the hundreds of thousands quantity. The parts cost is less than $12. I’d sell my own for 3D printing, but if I made any money off it, my company might have something to say to me.

    Also, I would not rely on the adhesive to maintain position. When it heats up, the sensor will probably start to droop. It needs to be screw down in some way. Even a rubber band would be better (compliant mechanism).

  4. There is a science to the humble microswitch that most printers come with, to set the Z height. Most of the printers I have use a non-precision switch and don’t even use the lever on the switch the way it was designed. Microswitches are used on almost every piece of equipment that has moving parts. Not too many of them are asked to do the precision job the 3D printer Z Axis requires. Even the limit switches on the other axes are used as simple limit switches, not precision ones.
    If your printer won’t stay adjusted and has inconsistent height issues, look at the Z microswitch. The switch actuation lever should be making contact at the very end of the lever to get the most mechanical advantage from the switch.
    I don’t have to adjust anything on my Ender 3, haven’t had to for months. Great prints with a glass bed.

  5. Is there anything specific preventing this from being used with any other inductive or capacitive probe? I love the idea of measuring Z as you go, but it looks like a (nice) software solution rather than a hardware innovation. Also, you can only use it with metallic beds, so printing nylon on glass or garolite is a no go. I do wish there was a way to combine the reading off a piezo with the flow-rate of the filament to determine the on-the-fly optimal Z-offset.

    1. I have been doing something similar: I have a load cell sensor on my printer (Renkforce RF1000 from 2015) which can measure any force applied to the hotend, including the extrusion force. With a small firmware modification I can setup a force threshold, above the z offset is increased in small steps until the extrusion force is low enough again. That works pretty well to conpensate e.g. for the themal expansion of the hotend.
      The original hotend of my printer had a huge themal expansion. I switched it to a full metal hotend some time ago, and now this seems no longer necessary… It can also be used though to correct for slightly wrong z homing as well, but I prefer to get that just right in the first place instead.

      You can find my Klipper module implementing this here:
      https://github.com/RF1000community/klipper/blob/master/klippy/extras/z_sense_offset.py

  6. So when you paste the title text unformatted into something it comes up as “3D Printer Z Sensor Claims 0.01 Mm Resolution” (also how it appears in news feeds) which honestly makes my eyes twitch looking at the title knowing someone typed Mm… But more to the point when I thought about it, it sounded like the most AMAZING sensor ever!! A Z sensor with a 10 KILOMETER resolution… assuming the printer is to scale, the nozzle would be something in the order of 200 kilometers, not quite enough resolution to print a planet but certainly enough to print a solar system. I totally want one.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.