The last thing I wanted to do for my UP Plus 2 rebuild was to change the Z probe. The original Z probe is a micro-switch that is attached to the hot-end before calibrating. The UP Studio software has a calibrate function to allow bed leveling before printing. The probe would be manually attached, the calibration routine run via software and then the probe removed before starting the print. The same procedure can be done through the Marlin firmware I am running and G code commands via Octoprint but it is a pain. I want to be able to just press print and forget it.
My old Prusa Mendel printer was capable of auto bed leveling via an RC servo retracted Z probe. This worked well with the only problems being the twisted frame of the machine causing issues towards the end of its life. I considered mounting the servo Z probe to the Up but wanted to try something new. I had seen non contact sensors before and wanted to give them a try.
After looking around the internet I settled on an LJ18A3-8-Z/BX 8mm Inductive Approach Proximity Sensor. This sensor will trigger when a piece of metal is brought within 8mm of its end. Since the bed of the Up is made of aluminium this is perfect. The sensors 8mm activation is repeatable to within ± 25um which is suitable for printing at 0.1mm layer height when printing on a raft like I do. The sensor is bolted onto the side of the hot-end adapter and can be manually adjusted without much difficulty.
The wiring was a little interesting as the sensor runs off 12V but the Arduino take 5V inputs. There is a lot of discussions around the internet about how to interface these sensors with the Arduino with much arguing about voltage dividers vs opto-couplers vs transistor logic. I had a look at the sensors data sheet and saw that the sensor has a NPN Current-Sink output which means that the sensors output is grounded when active and floating otherwise. I checked that the Arduino input is set with a pull-up resistor and the firmware input is active low then connected the sensor output via a diode with the anode to the Arduino to prevent any 12V from getting through and that is it. Enable auto bed leveling in firmware and add the G code to the slicer software and now the Up is print and forget.
The last thing was to add a print job cooling fan and duct to the hot-end. This fan and the hot-end fan are both controlled via the RAMPS. The hot-end fan is on the third power output of the RAMPS and is set to turn on when the hot-end temp is above 50 degrees. The second fan is switched on via a relay from a spare output pin on the Arduino and is controlled via G code. All the wiring is brought up to the extruder via the existing Up wiring harness.