BL Touch With Duplicator i3 Plus mk2

hi, so I have been playing around with my Mk 2 for a while now and noticed that the bed was not level so I decided to remove the steel plate under the print surface that Wanhao sent out as a bodge (first mistake). Anyway the inductive sensor was barely usable anymore only about 0.2mm difference between height of sensor and nozzle. I managed to print up a mount for a BL Touch I had lying around and put it in place of the inductive sensor.

I really like the BL and plan on keeping it as the inductive sensors for me are a pain and unreliable. My problem is i cant get the BL working with the Mk 2 mainboard firmware or any of the other BL Touch firmware. Does anybody know of something i can do or a fix that might work to get my printer up and running with the BL?

Thanks in advance for any help.

As far as I know, the EXT (headless) connector is the same for Mark I and Mark II. So it is probably possible to use it for the BLTouch but you have to adapt yourself the firmware and recompile it.

Thanks for the swift reply, will look into adapting the firmware and post any findings in case anyone else is looking to make the change

To give you a few hints, you have to modify pins_I3_PLUS_Mark2.h and mimic what is inside pins_I3_PLUS.h. For pins numbers, you can use my article about i3 Plus:

I highly recommend to avoid using Arduino IDE and use instead Platform IO to build. In this later case, you need to add new targets in platformio.ini (one for BLTouch, one for BLTouch version 3).

If you have difficulty, tell me and I will do it.

All I ask is that you publish what you have done (such as the support for the BLTouch).

Hello again, I’ve made some progress the Mk 2 it is now recognising and deploying the BL Touch sensor but doing he same thing that was happening to @CBoismenu when he had it wired to the Z-endstop not the Z-probe (sensor deploys then instantly retracts without any z-axis movement ) neither of these are labeled or documented anywhere on the Mk 2 board v5.4 , so I believe the board only includes pin out for z-endstop and not z-probe? (wild guessing)

anyway thats all I have time for tonight. If you have any info about the z-probe vs z-endstop issue that would be great.

Sorry, I do not fully understand: how do you connect the BLTouch? You have to connect all 5 wires to the EXT connector.

I have the BL Touch connected as per BLTouch Sensor. Though there is nothing labled z-probe so i used the connector that was previously used for the inductive sensor but the outcome was what is said above.

So you have connected your 5v BLTouch to the 24v connector for the inductive sensor? Are you sure you have not fried you BLTouch?

ext 10 pin 10 is 5v, z-probe or z-endstop (still unsure of which is which on the v5.4 board ) pin 2 is sense and pin 3 gnd. all other features of the bl touch is working correctly when installed.

So you use VCC from the EXT connector, right? Still, I dont’t think what you are doing can work. The signal is supposed to be 24v when the sensor detects metal, so it is down-converted somewhere. Why not using only the EXT connector?

tried to mimic i3 pin out… but yes if the board is expecting a ~24v signal then of course it isn’t going to work. I will give it another go soon using only ext.

I’m about to try this after putting a glass bed on my MkII. If I read all the resources correctly, it looks like I need to:

  • Wire the 2 GND (brown, black) from the BLTouch to pin 9 on the EXT header (GND)
  • Wire VCC (red)from the BLTouch to pin 10 on the EXT header (VCC)
  • Wire Servo 0 (orange) from the BLTouch to pin 1 on the EXT header (PG1, pin 40)
  • Wire Z-endstop (white) from the BLTouch to pretty much any pin on the EXT header except for GND or VCC (9 or 10)?

Update pins_I3_PLUS_MARK2.h to set:

  • SERVO0_PIN to pin 40
  • Z_STOP_PIN to whichever pin I chose (I’ll probably go with EXT pin 2, so Arduino pin 2)

And add a new environment to platformio.ini with build_flags set to include -D ADVi3PP_BLTOUCH3 or ADVi3PP_BLTOUCH.

Does all that sound about right?

Will updating the pin definitions and defines be enough or is it likely there’ll be a Mark2/BLTouch conflict somewhere in the code?

EDIT: From the machine info page I see this:

I guess that BL-SIG and VCC are there to be able to support a BLTouch sensor. There is apparently a special Interface board with a connector for BLTouch.

That looks very interesting. It’d be nice to save running all that wire through the machine to the mainboard manually.

Pin #2 is 51(PB2 / MOSI), not 2. UPDATE: EXT pin #2 is indeed Arduino #2.

Could be, I have not tried.

Based on guessing, since I do not own a Mark II. Since I wrote this article, I have received such interface board but did not yet take the time to verify my schema.

If you do implement a BLTouch for the Mark II, please share your results here. It may interest other people.

Pin #2 is 51(PB2 / MOSI), not 2.

Your info page says that 21/ PB2 / MOSI / Arduino pin 51 is pin 2 on the SPI connector, and pin 2 on the EXT connector is 95 / PF2 (A2) / Arduino pin 2. Is that incorrect?

Yes, you are right. EXT pin #2 is 95 / PF2 (A2) Arduino pin #2.

It is enough to define ADVi3PP_BLTOUCH3. Configuration.h, line 792:

// @advi3++: BLTouch V3.0 and newer smart series. Backport from Marlin 2
#define BLTOUCH
#define BLTOUCH_V3

unless you have a BLTouch Smart version 2 of course.

Okay, I used a multimeter and discovered that the “BL” pin maps to PH4 on the ATMega2560, the pin right below PH3, used for the Z-stop.

On that, @andrivet, a request: could you update your page with a note in the “Atmel ATMEGA2560” section that the Marlin definitions aren’t the actual mapped pins for the Mark II mainboard? I spent way too much time flailing about because I expected the Z-Min pin to be mapped to PA1. I only noticed it was PH3 when I gave up and decided to look at the software instead (and hence the pins header file).

I’ve plugged everything in, installed my software updates and it seems to work. I’ve sent a pull request to the main project here.

A couple of potentially ADVi3++-related issues:

  • Clicking the button to home the Z-axis in the movement menu doesn’t do anything, even if you manually raise the nozzle higher.
  • After a reboot the machine assumes the nozzle is at height 0, so won’t allow the nozzle to move any lower until you instruct it to probe for the Z-stop.

I don’t think either of these were issues with the stock induction sensor.

Aside from that, everything seems to work. Calibrating the Z-height works as expected, bed levelling works as expected. I used this mount for the BLTouch.

The last thing I want to do before I call this a success is find a way to clean up the interface board. The wires I soldered to the bottom are not at all clean and I’m worried if I put them in the metal housing, they’ll cause a short. I’m thinking of either 3D printing a new housing (which would be non-conductive, so resolve this problem), just covering up the leads with tape, or maybe making a small PCB that breaks out a header for the BLTouch, with a 3D-printed enclosure around it.

Just to update this thread: It’s been a few months and everything works just fine. Auto-levelling and everything is perfect.

Only complaint is that sometimes (especially first time after starting), the machine likes to ram the nozzle into the bed while Z-probing. From what I’ve seen, this is an issue with BLTouch on other Advi3pp machines too.

As far as I know, this is not an issue in ADVi3++ but a wiring problem. In some rare cases, it is a BLTouch problem. In version 4.0.6 (or perhaps the version before, do not remember), I change some parameters to slow down probing so the BLTouch has time to recover when there is a problem, but it is not always enough.

The main problem with the BLTouch is its Dupont connectors. They give a poor quality wiring.