BLTouch

A BLTouch sensor will automate your 3D printer bed leveling. Read on to learn all you need to know about the BLTouch!

Automatic bed leveling is quite a common feature in consumer FDM 3D printers. Most machines with auto-leveling, however, use a contactless inductive sensor which is simple to install, operate, and configure. These inductive probes work well with a metal build plate, but build platforms made of other common materials, such as glass, are practically invisible to inductive sensors.

That might have been the way BLTouch sensors came onto your radar: If you use a non-metal bed but also want auto-leveling, these sensors are a great option. You also could have thought about adding one for its accuracy. After all, the original BLTouch readings have one of the lowest standard deviations of all auto-leveling sensor types.

Without further ado, let’s break down the BLTouch probe and show you all you need to know about this contact-based auto-leveling sensor.

BLTOUCH AUTO BED LEVELING SENSOR

The number one choice for aftermarket mechanical bed leveling sensors -- there are a raft of licensed (and unlicensed) versions out there, but this one directly from ANTCLABS in South Korea is the original.

What Is It?

Setting up your BL Touch is simple
Setting up your BLTouch is simple (Source: Creality via YouTube)

According to Antclabs, the original manufacturer of the probe, “BLTouch is an auto leveling sensor for 3D printers that can precisely measure the tilt of (sic) bed surface.” This sensor works on any type of bed surface, be it metal, glass, wood, or something else entirely.

The sensor itself is fairly complex as far as bed sensors go. It consists of a microcontroller, a solenoid switch, and a pushpin probe that comes into contact with the bed. The original BLTouch uses a Hall sensor for high accuracy, and this sensor, in conjunction with the physical pushpin, is what allows it to be used with many bed types.

In a way, this sensor is equivalent to a microswitch, mounted on a servo arm, controlled by a servo motor. When the tool head lowers to “home” the nozzle on the Z-axis, the bed pushes the pushpin slightly upwards, triggering the Hall sensor, at which point the pushpin retracts and the tool head raises.

The BLTouch is one of the most accurate and reliable sensors available, so it’s no surprise that a few manufacturers such as MakerGear and CraftBot use this device on their high-end machines.

Now that we know exactly what we’re dealing with, let’s take a look at how the BLTouch compares to two other types of sensors out there.

Types of Sensors

An inductive probe mounted to an FDM machine.
An inductive probe mounted to an FDM machine (Source: zkazka123 via YouTube)

Inductive Probe

The key difference between an inductive probe and the BLTouch is that the BLTouch sensor physically touches the bed in the leveling process. The inductive probe uses currents induced by magnetic fields to detect metal objects nearby, eliminating the need to physically touch the bed in order to sense it.

But therein lies the problem: Inductive sensors only work on metal beds, since they’re triggered only when in close proximity to metal. This might be a deal-breaker if glass is your preferred build surface.

Microswitch (Physical End Stop)

Let’s not discount the old-fashioned physical microswitch. Compared to the BLTouch, this option is less accurate and possibly less reliable in the long term, since the sensing depends on physical components that can wear over time (at least for the physical switches found on most FDM machines).

However, these physical switches give the other fancier sensors a run for their money when it comes to the cost and ease of configuration. Since physical switches are the simplest and earliest form of Z-homing sensors, they’re easy to obtain and set up.

Alternatives

Inductive bed leveling sensors are a new norm
Inductive bed leveling sensors are a new norm (Source: Simplify3D)

Pinda Probe 

The Pinda probe, developed by Prusa Research, is an inductive probe with the addition of a thermistor to account for variations in the bed temperature. The Pinda probe is specifically designed for the Prusa range of 3D printers, which are designed with special calibration points on the bed to help with leveling and skew correction.

The probe is said to be highly accurate for 3D printers, and though we couldn’t find any numbers, the reviews seem positive. This leads us to believe that this may be a good solution as well, at least if you have a metal bed.

Ezabl Pro

The Ezabl Pro is a custom manufactured capacitive sensor. It comes with a connector board that uses an optical isolator to prevent any high voltage damage to your mainboard in case of wiring mistakes.

With regards to precision, it’s been able to measure within a range of a thousandth of a millimeter, which is what 3D printers need. The Ezabl Pro also comes with helpful features like dual shielding, which prevents any interference with other signals.

The main downside with the Ezabl Pro would be the cost, which is about $65. On the bright side, it’ll work on glass beds.

Piezo Sensor

A Piezo sensor makes use of the Piezo-electric effect to capture changes in force, pressure, or strain, and convert these changes into electrical charge. Precision Piezo, a company in the UK, is one of the few companies making Piezo sensors for 3D printers. It has been said that these have close to 7-micron accuracy, which is quite precise for a 3D printer.

The advantage of the Piezo sensor is that the nozzle itself can be used as the sensing device, with no additional components needing to be mounted. Also, the Piezo sensor can be placed on the print head or below the print bed to sense the pressure. As far as price is concerned, it’s pretty much equivalent to the BLTouch.

Mounting the Probe

A mounted original BLTouch sensor
A mounted original BLTouch sensor (Source: voltlog via Instructables)

But back to the BLTouch. Before you get started with modifying your firmware for the BLTouch, you need to securely attach the device to your printhead. The BLTouch probe will need to be mounted as close to the printhead as possible. You can find many mount designs available for you to download directly, or if you’re in the mood to design your own, make sure to read the BLTouch documentation to get the correct measurements.

Some users run into an issue where the nozzle digs into the bed on one side and prints perfectly on the other. The reason that this happens is because the BLTouch is mounted at an angle with respect to the nozzle. So, when designing and mounting your hardware, make sure to have the BLTouch mounted perfectly square and aligned with the nozzle.

Once you’ve mounted the probe, make sure to note the distance between the probe of the BLTouch and the center of the nozzle in both the X and Y directions.

Configuring the Firmware

Microsoft VSCode is a good IDE for modifying Marlin
Microsoft VSCode is a good IDE for modifying Marlin (Source: Kay3D)

To get the BLTouch up and running, the printer’s firmware will need to be modified in a few places.

We’re using the latest stable version of Marlin 2.0 firmware, last updated in August 2021. Download and open the Marlin package in Visual Studio Code, the integrated development environment (IDE) from Microsoft. Once the marlin.ino file is uploaded to the IDE, navigate to the configuration.h tab.

The first step is to activate the BLTouch sensor by defining it. Remove the two forward slashes to uncomment the “define” statement:

#define BLTOUCH

The next step is to set the offset of the BLTouch using the X and Y distances you should have measured (from the nozzle) while mounting the probe. You also have to set the initial Z offset, which you can find by measuring the height difference between the tip of the fully extended probe and the nozzle. Of course, you can usually adjust this value later from your printer’s display, so if measuring proves a challenge, -2.5 is a safe value to start with.

When you’re sure of your measurements, insert the values into the corresponding lines below:

#define X_PROBE_OFFSET_FROM_EXTRUDER <X measurement>
// X offset: -left +right [of the nozzle]
#define Y_PROBE_OFFSET_FROM_EXTRUDER <Y measurement>
// Y offset: -front +behind 
#define Z_PROBE_OFFSET_FROM_EXTRUDER <Z measurement>
// Z offset: -below +above  

Although you can adjust the Z offset on most 3D printers directly (depending on the Marlin configuration), the change to your offset isn’t always applied. To fix this, you can uncomment the line below:

#define RESTORE_LEVELING_AFTER_G28

Once you’re done with the offset, you’ll need to choose the type of bed leveling you want. There are a few different leveling methods that you can choose from, but we’ll be using the Bilinear method because it’s easy to get started with.

To choose an option, uncomment it by removing the slashes. Note that only one option can be left uncommented. Your code should look something like this:

//#define AUTO_BED_LEVELING_3POINT
//#define AUTO_BED_LEVELING_LINEAR
#define AUTO_BED_LEVELING_BILINEAR
//#define AUTO_BED_LEVELING_UBL
//#define MESH_BED_LEVELING

You can also set the number of grid points you would like to probe; by default, it’s set to 9 points, which makes a 3 by 3 grid along the X- and Y-axes. The number of points can be increased for more accurate results, but keep in mind that the probing time will also increase as more are added. You can adjust the number of points in the grid in the lines below:

// Set the number of grid points per dimension.
#define GRID_MAX_POINTS_X 3
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X

Finally, some users have reported that the BLTouch suffers from interference from the current in the hot end heater wires. As an extra precaution, you can uncomment the relevant line in Marlin to turn off heaters while the sensor probes the bed:

#define PROBING_HEATERS_OFF

Testing

Once the firmware settings are dialed in, you’ll need to check if the BLTouch is working as intended by running a basic test. Once that’s completed, you can get started with adjusting your Z offset. There’s a great video by 3DMakerNoob that takes you through the entire process step-by-step.

Configuring the Slicer

Adding G29 to start Gcode
Add G29 to the start G-code if you want your bed to level before every print (Source: Hussain Bhavnagarwala via All3DP)

Once you’ve set up the device, you may want to configure your slicer (e.g. Cura) to automatically level your printer’s bed before every print. To do this, you can insert the “G29” G-code command into your slicer’s start G-code script after the “G28” command, which should already be included.

Adding in the “G29” command will tell your printer to conduct an automatic bed leveling sequence before every print. While this may yield a good first layer print-after-print, it also means your print’s starting time will be delayed by a few minutes. If you don’t want to wait, though, you can delete the “G29” command from your starting script and level the bed through your printer’s display when it’s most convenient.

Fakes & Issues

A genuine BLTouch has some clear markers
Avoid the fakes! A genuine BLTouch has some clear markers (Source: Amazon)

While the BLTouch is a great device that can improve your printing setup, there are a few things to be aware of before taking the plunge.

Spotting Fakes

The makers of the original BLTouch at Antclabs have mentioned that genuine sensors come with a QR code embedded in the PCB on the back. Also, it’s known that other manufacturers, including companies like TL Touch and 3D Touch, have made lower quality products, which results in poor customer experience. When buying online, make sure to purchase from an authorized reseller.

Disadvantages of the BLTouch

While the BLTouch is an extremely accurate leveling sensor, there are a few disadvantages to it as well.

When using the BLTouch, it’s important to keep the surface of the bed free of any debris. The mechanical probe senses the surface of the bed, and any damage or debris on the surface will result in inaccurate readings.

Another disadvantage of the BLTouch is that it takes up some memory on your printer’s mainboard. If you’re experiencing problems with your printer’s UI being slow or the printer is stalling, it may be due to the BLTouch.

Lastly, BLTouch devices can run into problems with some printers’ firmware. It’s critical that you wire your BLTouch correctly, and use compatible and up-to-date firmware. Also, it’s a good idea to update your firmware program regularly to avoid any problems and to get fixes as soon as they’re released.

Leave a comment

Please note, comments must be approved before they are published