May 2, 2018
Description
I was using an inductive sensor as my main Z_min sensor. I was unable to use it as bed leveling sensor because I was using a very thin and soft steel plate under the glass. This lead to several issues: the glass itself is not perfect. The steel plate under it was not flat even when compressed so both the steel and glass does not represent the REAL printing surface. Only a touching probe can give you that!!!
I like the idea of the piezo - but also plan to use PEI in the future and I would not like to touch a hot nozzle to that surface.
I like a lot the BLTouch - but the real thing is too expensive to my tastes and the clones are not that reliable and not so cheap as well.
I do not like the bulky thing, with movable wires and such, when using a servo and a mechanical end-stop. Also I do not trust the repeatability of the servo positioning.
I fall in love with these two designs:
Robscar Thing
Jupacreations Thing
Cheap as heck, simple, reliable, no dependency on servo position (the servo just raise the probe when not in use). But both are bulky and very specific to their owners printers.
So I started designing something I could just put in place of my old inductive sensor at my Hypercube Evolution. That is compact enough for any other printer (different fixation designs on demand! Just ask me.). The size is based o the BLTouch footprint.
Some key features (this list is based on Jupacreations design description!):
** Well... it is sensitive to temperature... But my fault: I put the thing right at the heat flow path of the hot end cooling fan! Do not do that!!!! I am working on a solution :D
You will only need:
* 1x Micro Servo (e.g. TowerPro SG90)
* 1x Optical Endstop TCST2103 (RepRap Standard)
* 2x M3x10 to fix the optical endstop.
* 1x M3x30 as the probe
* 2x self cutting screws (2x8) fix the servo
* 1x Cheap made in China gift pen spring that fits the M3x30 screw.
* Some 4 wire cable **
** I like to use old USB cables for this! It is very common to have the micro USB damaged from use ao the cable is good, felxible, shileded and have nice and stadard colors. Use black and red for feed and the other two for each signal :D.
This is a great instructions video complete with Marlin configuration: https://youtu.be/bhuslm04Cus
IMPORTANT: IF YOU USE RAMPS YOU WILL NEED AN EXTERNAL 5V SOURCE AS THE ARDUINO CAN NOT HANDLE THE SERVO CURRENT. I am using the same UBEC that I use to feed the Raspberry Pi. Everything is ground common!
The offset will be tuned later. Tje Mesh grid is used by G29 and you need to modify to your bed size and type.
Define the points for G32 (you will use this at your start gcode) in your bed.g file.
Configure your deployprobe.g and rectractprobe.g as follows:
M280 P7 S200 I1 ; Deploy probe **CHECK YOUR ANGLE VALUE**
G4 P300 ; Wait 0.3 sec. (this will give enough time for the servo to extend)
M280 P7 S127 I1 ; Retract probe **CHECK YOUR ANGLE VALUE**
; called to home the X axis
G91 ; relative positioning
G1 Z5 F4000 S2 ; lift Z relative to current position
G1 S1 X-305 F3600 ; move quickly to X axis endstop and stop there (first pass)
G1 X5 F3600 ; go back a few mm G1 S1 X-305 F1800 ; move slowly to X axis endstop once more (second pass)
G1 Z-5 F4000 S2 ; lower Z again
; called to home the Y axis
G91 ; relative positioning
G1 Z5 F4000 S2 ; lift Z relative to current position
G1 S1 Y-285 F3600 ; move quickly to Y axis endstop and stop there (first pass)
G1 Y5 F4000 ; go back a few mm
G1 S1 Y-285 F180 ; move slowly to Y axis endstop once more (second pass)
G1 Z-5 F4000 S2 ; lower Z again
G90 ; absolute positioning
G91 ; relative positioning
G1 Z5 F4000 S2 ; lift Z relative to current position
G90 ; absolute positioning
G0 S0 X119 Y140 F4000 ; move to center of bed
G30 ; move Z down until the switch triggers (first pass)
G1 Z5 F1800 ; go back a few mm
G30 ; move Z down until the switch triggers (second pass)
G1 Z10 F1800 S2 ; lift Z relative to current position
G90 ; absolute positioning
; called to home all axes
G91 ; relative positioning
G1 Z5 F6000 S2 ; lift Z relative to current position
;==============Home X====================
G1 S1 X-305 F4000 ; move quickly to X axis endstop and stop there (first pass)
G1 X5 F6000 ; go back a few mm
G1 S1 X-305 F180 ; move slowly to X axis endstop once more (second pass)
;==============Home Y====================
G1 S1 Y-285 F4000 ; move quickly to Y axis endstop and stop there (first pass)
G1 Y5 F6000 ; go back a few mm
G1 S1 Y-285 F180 ; move slowly to Y axis endstop once more (second pass)
;==============Home Z====================
G90 ; absolute positioning
G0 X119 Y140 F4000 ; move to center of bed
G91 ; relative positioning
G30 ; move Z down until the switch triggers (first pass)
G1 Z5 F1800 ; go back a few mm
G30 ; move Z down until the switch triggers (second pass)
G1 Z10 F1800 S2 ; lift Z relative to current position
G90 ; absolute positioning
Then follow this instructions for testing and calibrating your offset: Test and calibrate a Z probe
After that send a G29 command to measure and save your mesh and use G32 at your start gcode so it home all axis, measure the tilt and compensate with the mesh grid.
MAKE SURE YOUR MOTORS, BED AND FRAME ARE ALL GROUNDED! I was having issues with static building due to filament and/or belts. This causes the servo to twitch and lose positioning. And also could damage your board :D
And that is it!
ps.: There is a real need to familiarize oneself with the probe support documents before these instructions make sense!
Here is some sample code to add to the config:
[servo BFPTouch]
set pin to the pin that the BFPTouch servo is connected to.
pin: ar4
initial_angle: 0
enable: True
maximum_servo_angle = 90
minimum_pulse_width = 0.001
maximum_pulse_width = 0.002
Define a probe using the BFPTouch
[probe]
pin: ^ar18
speed: 5.0
z_offset: 1.0
activate_gcode:
SET_SERVO SERVO=BFPTouch ENABLE=1
SET_SERVO SERVO=BFPTouch ANGLE=45
G4 P300
deactivate_gcode:
SET_SERVO SERVO=BFPTouch ANGLE=5
SET_SERVO SERVO=BFPTouch ENABLE=0
[servo BFPTouch]
pin: P2.0
initial_angle: 131
maximum_servo_angle = 180
minimum_pulse_width = 0.0005
maximum_pulse_width = 0.0024
[probe]
pin: P1.27 #using z-endstop pin
x_offset: -42
y_offset: -16
z_offset: 0.77
speed: 3.0
samples: 2
activate_gcode:
SET_SERVO SERVO=BFPTouch ANGLE=180
G4 P300
deactivate_gcode:
SET_SERVO SERVO=BFPTouch ANGLE=131
One has to determine their own servo angles and probe offsets, but maybe this helps someone when setting up Klipper with a BFPTouch.
Some photos are from older iterations of the design. Firstly I was counting on gravity alone to release the probe. Then I tried some printed spring design (that failed...) and the M3x30 was fixed to the flag with the head inserted to it. You can see on Mk1 that I cul a channel to be able to put the screw in......:D Then I decided to invert the M3x30 and screw it directly to the flag. And the final mod was adding more space for the spring as a release mechanism. During these iterations I also modified some tolerances.
License:
Creative Commons - Attribution