Auto Bed Leveling With Electrical Contacts For The TAZ 4 / 5

Auto Bed Leveling is the process of utilizing a printer’s hardware and software to define a good virtual print plane that approximates the print beds true surface so the printer knows where to create the all-important first layer.
Here’s a video of my TAZ 4 that I modified for electronic corner tap auto bed leveling. Parts of the vid are sped up for brevity:

Here’s a video showing how clean the first layer is going down:
To create this auto bed leveling feature I took the two wires leading to the z-endstop micro switch (1st pic below) and extended one to the heat sink block of my Chimera dual extruder hot end, fastening it there into one of the stock mounting holes with a screw (2nd pic below). I extended the other wire to the aluminum bed mounting plate and fastened it there driving a screw into a hole that I drilled into it (3rd pic below):
Pic 1: Original Manual Bed Leveling Microswitch

Pic 2: Z-Endstop Wire Now Fastened To Heatsink Block On Chimera

Pic 3: Z-Endstop Wire Now On Aluminum Bed Mounting Plate

Next I cut 4 squares of copper tape that I bought from McMaster ( and applied them to the four corners of the glass build plate. Probably a 1 inch wide roll or less would do for a single extruder, but I also plan on modifying my setup for both extruders. Next I soldered a new wire to each piece of copper tape. The copper tape could be applied to any build surface, for example PEI, etc; however I primarily use this printer to print PLA on glass with liquid PVA mold release brushed onto the glass because that’s how I obtain the shiny smooth surface required for some of my prints.
Pic 4: Copper Tape Corner with Wire Soldered To It

I collected the wires under the glass build plate (Pic 5) and screwed them down onto the aluminum bed mounting plate with the same screw that I used to fasten one of the z-endstop wires (Pic 6).
Pic 5: Copper Tape Wires Collected Under The Glass Build Plate

Pic 6: Copper Tape Wires Screwed Down to Aluminum Bed Mounting Plate

I set the Marlin Bed Auto Level Script to tap the four copper lined corners of my glass build plate at coordinates I defined. Then I ran the G29 gcode to start the auto bed leveling that’s shown in the video above.
Before I run the G29 code I pre-heat the Chimera hotends to 160 C and wipe them with a green Scotch Brite scouring pad to make sure they are clean for electrical contact with the copper tape. I’m printing with Hatchbox PLA and 160 C is working out really well for cleaning the nozzle without creating drips. Other suppliers and materials may require a different nozzle cleaning temperature.
When the hotends contact the copper tape a complete circuit is made indicating the z-endstop has been reached the same as if using the stock manually dialed in microswitch; except now the correct nozzle height is found automatically with electrical contact instead of manual trial and error.
Stay tuned for separate auto bed leveling with each individual hot end of the Chimera Dual Extruder

1 Like

Here’s a dual extrusion print I made with my modified TAZ 4:

If you’ve got any lulzbot printer, my part should fit right onto your stepper motor, no tools required. Thanks so much for figuring this out Bam!


If you could be so kind to share exactly what modifications or config you made to the firmware, I’d be forever grateful!

I’ve been working on a Marlin 1.1 version for the Taz 6 and can’t get the leveling code worked out for the life of me.

Here’s the Marlin code in configuration.h. Is this what you want?:

//============================= Bed Auto Leveling ===========================

#define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line)


// these are the positions on the bed to do the probing
#define LEFT_PROBE_BED_POSITION 3 //5 //0
#define RIGHT_PROBE_BED_POSITION 300 //304 //298
#define BACK_PROBE_BED_POSITION 319 //297 //297
#define FRONT_PROBE_BED_POSITION 22 //0 //0

// these are the offsets to the prob relative to the extruder tip (Hotend - Probe)
#define Z_PROBE_OFFSET_FROM_EXTRUDER 1.5 //-12.35

#define Z_RAISE_BEFORE_HOMING 5 // (in mm) Raise Z before homing (G28) for Probe Clearance.
// Be sure you have this distance over your Z_MAX_POS in case

#define XY_TRAVEL_SPEED 6000 // X and Y axis travel speed between probes, in mm/min

#define Z_RAISE_BEFORE_PROBING 5 //How much the extruder will be raised before traveling to the first probing point.
#define Z_RAISE_BETWEEN_PROBINGS 5 //How much the extruder will be raised when traveling from between next probing points

//If defined, the Probe servo will be turned on only during movement and then turned off to avoid jerk
//The value is the delay to turn the servo off after powered on - depends on the servo speed; 300ms is good value, but you can try lower it.
// You MUST HAVE the SERVO_ENDSTOPS defined to use here a value higher than zero otherwise your code will not compile.


//If you have enabled the Bed Auto Levelling and are using the same Z Probe for Z Homing,
//it is highly recommended you let this Z_SAFE_HOMING enabled!!!

#define Z_SAFE_HOMING // This feature is meant to avoid Z homing with probe outside the bed area.
// When defined, it will:
// - Allow Z homing only after X and Y homing AND stepper drivers still enabled
// - If stepper drivers timeout, it will need X and Y homing again before Z homing
// - Position the probe in a defined XY point before Z Homing when homing all axis (G28)
// - Block Z homing only when the probe is outside bed area.


#define Z_SAFE_HOMING_X_POINT (X_MAX_LENGTH/2) // X point for Z homing when homing all axis (G28)
#define Z_SAFE_HOMING_Y_POINT (Y_MAX_LENGTH/2) // Y point for Z homing when homing all axis (G28)


// with accurate bed leveling, the bed is sampled in a ACCURATE_BED_LEVELING_POINTSxACCURATE_BED_LEVELING_POINTS grid and least squares solution is calculated
// Note: this feature occupies 10’206 byte

// I wouldn’t see a reason to go above 3 (=9 probing points on the bed)


I am rather confused. You wrote the following:

" I set the Marlin Bed Auto Level Script to tap the four copper lined corners of my glass build plate at coordinates I defined. Then I ran the G29 gcode to start the auto bed leveling that’s shown in the video above."

How do you change the Marlin script? Where is this located? I am using cura version 21.08.
You mention a h file “configuration.h”. I cannot find this file…it is not accessible…how do I use this code?

I think the general steps needed are as follows:

  1. position the hotend at each corner and lower it until you get the z height.
  2. Save these four points in some kind of file.
  3. Apply an z offset on the x-y plane and compensate the print instructions.

I assume the command G29 does most of this. But I do not know how to get from hardware modifications to printing my first print with a z height compensated 3d print.

A detailed instruction would be very nice.


If you have to ask this question, this is probably not the mod for you. The Marlin “script” needs to be compiled into a hex file that you then flash on to your printer firmware. It is the program that runs the printer, and the “script” you’re looking at is the source code.

I know it’s a couple of years later but this is what I’ve been looking for to add to my taz 5 to make it more like Taz 6. Are these offsets and coordinates for single hotend or dual? I never thought about taking the wires from the ends top and completing the circuit like that. It’s so easy once you find out how to do something that you’re like why didn’t I think of that since it’s basically the only easiest and most rational choice. But if you don’t know the answer it’s like trying to do rocket science. I could easily add a bl touch which I’ve had on my Taz but I really want this way of doing a bed level before every print.