I recently bought a dual extruder for the sm2 and had quite some bed leveling issues. Therefore I used the great Klicky probe guides in the forum + the models on printables for the dual extruder. Now that that was working It was way better but still not great with a 6x6 mesh. Wanted to do a 11x11 then but found out that the gcodes for leveling are not available for the dual extruder.
It would be really great to have 11x11 bed leveling without the automatic z offset on the nozzles at the end would be great to Save some pinched fingers.
@Jade I do know you have loads of stuff on the plate with the u1 coming. And i am in the first batch of Kickstarters there as well, but it would be still really great to get some updates/informations for the s2.0 as well (want to utilize the bigger build volume)
I think I read somewhere, that the bed isn’t stable enough in the corners to calibrate with the nozzle directly touching. That’s the way the do it on the artisan. Therefore they only do the z offset calibration in the middle of the bed with the nozzles, the rest with the sensor. As I use a Klicky probe I would need the z offset in the end anyways.
So you would make the g1029 work correctly? I mean in my opinion it is something that snapmaker should actually bake into the firmware themselves. As the sell the dual extruder explicitly for the sm2 as well and I think it is fair to assume that the same capabilities are available for the upgraded part as well.
Off topic: Just installed the bracing Kit and thought it would take me an hour or so. Actually took me quite a bit longer
I think it would make sense if they implemented the 11x11 in the gui as well. This way the user can just choose whatever fits best without having to mess with gcode commands.
It would also be nice if they gave us the option for a pause between leveling and z offset calibration then we could safely remove our clicky probes.
The gcodes used by the Android remote are M3002 and M3003, but one needs to run multiple commands in series to achieve full leveling.
; Test right extruder height
M3002 L0
; Test left extruder height
M3002 L1
; Auto level start 3x3 grid
M3003 L0 G3
; Test grid point 1 with inductance probe
M3003 L1 P1
; Test grid point 2
M3003 L1 P2
…
; Test grid point 9 (depending on size you need to generate P1 … P
M3003 L1 P9
; Finish leveling, this performs height test with force sensor and applies mesh
M3003 L2
This is the final script that I’m now using in Octoprint. The bed is supposed to be pre-heated (or also the chamber if there is a heating).
It is supposed to work with both: the normal mono print head and the dual version, this is decided based on the Octo print profile.
The mono code contains a machine dependent constant (the step with the calib card). You need to write down the number in the manual calibration.
For the dual head it is important to note the the hotend must be clean and COLD .
I created holes in the sticker surface of the bed with a 250° nozzle.
I found some info in the sources for the other 300X commands:
M3000 shows current settings relevant to the dual head (offsets, nozzle dias, …)
M3001 does a single probe run at current position, but has no effect on the calibration
M3002 should be used to find out the z-offsets of the 2 nozzles in auto mode, with Levels 2-5 also with the card manually
M3003 does the calibration automatically
M3004 does the calibration with manual interaction
M3005 does a single automatic probe to some center point, but does not change settings
; Home
G28
{% if printer_profile.extruder.count == 1 %}
; Grid level off
M420 S0
; 5 x 5 Grid
G1029 P5
; Execute Auto Level
G1029 A
G91 ; Relative Coords movement
; My Value! dont copy blindly
G1 Z-2.0 F30 ; Move nozzle blindly to surface
G1029 S ; Save Grid Level result
;G1029 D1
G90 ; absolute coords
{% else %}
; Set the hotend temp to something low and
; non-bed-melting. Got holes with 250°C
M109 T0 S70
{% set grid_count = 5 %}
; Start leveling procedure - L0
M3003 L0 G{{ grid_count }}
{% set grid_points = range(1,grid_count*grid_count+1) %}
{% for point in grid_points %}
;M118 Point {{ point }}
; Leveling step - L1
M3003 L1 P{{ point }}
{% endfor %}
; Finish and store - L2
M3003 L2
; Make sure, leveling is on
M420 S1
{% endif %}