I had a hell of a time getting the 3d chameleon to work on my printer. I finally have a decent multicolor print so I figure I should share what I have and maybe it will help someone out. My printer is an Ender 3 with a BTT SKR mini e3 v3 with the Sprite Extruder. The mode 3 gcode generator is good for getting the framework but to get it all working takes A LOT of tweaking. In the mode 3 Gcode the tip shaping portion was exceedingly time consuming and kept jamming my sprite extruder. I made my own tip shaping sequence, the tips are not neat but the sprite extruder has a bit of horsepower and overcomes it well enough. In the picture the blobs are an issue as they can get big enough to cause the nozzle to hit them at color change and cause a layer shift. So I need to dial that in, but it does work as is.
Below is my gcode that I used if anyone wanted to look over it all. I added more context in some of the commands then what came with the auto generated from this site. --------------------------------------------------------------------------------------------------------------------------------------------------------------
Start Gcode is normal but I added lines to hit the button 3 times then another for 7 pulses to zero G90 ; use absolute coordinates
M83 ; extruder relative mode
M104 S180 ; set temporary nozzle temp to prevent oozing during homing
M140 S{first_layer_bed_temperature[0]} ; set final bed temp
G4 S30 ; allow partial nozzle warmup
G28 ; home all axis and restore leveling
G1 Z50 F240
G1 X2.0 Y10 F3000
M104 S{first_layer_temperature[0]} ; set final nozzle temp
M190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize
M109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize
G1 Z0.28 F240
G92 E0
G90
M83
;<<<<<hit button 3 times then another for 7 pulses to zero chameleon>>>>>>>>>>>
G92 E0
G0 X0 Y231 F2000 ;moved to button
G0 X0 Y234 F2000 ;pressed button
G4 P150 ;wait 150ms
G0 X0 Y231 F2000 ;moved to button
G4 P150 ;wait 150ms
G0 X0 Y234 F2000 ;pressed button
G4 P150 ;wait 150ms
G0 X0 Y231 F2000 ;moved to button
G4 P150 ;wait 150ms
G0 X0 Y234 F2000 ;pressed button
G4 P150 ;wait 150ms
G0 X0 Y231 F2000 ;moved to button
G4 P150 ;wait 150ms
G0 X0 Y234 F2000 ;pressed button
G4 P3200 ;wait 7 pulses
G0 X0 Y231 F2000 ;moved to button
G4 P5000 ;wait seconds to home
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Tool change Gcode: Mostly stock from mode 3 gcode generator. I made my own tip shaping, added more context to some of the lines, removed most of the 3d clippy stuff and added a purge line sequence to the bottom. ; Auto generated 3D Chameleon Mk3 Mode 3 Tool Change GCode for PrusaSlicer
; - 3D Chameleon Mk3 Tool T{next_extruder} -
;begin switch from extruder {previous_extruder} to extruder #{next_extruder}
M117 Unloading Tool T[previous_extruder]
M83 ; turn relative distances for the extruder
; unload extruder {previous_extruder}
G92 E0
; go to holding position to unload the stock extruder
G0 Y231 F2000 ; <<----- EDIT THIS LINE TO SET THE INITIAL LOCATION OF THE BUTTON
; if this is the first load, then don't unload
G91 ; move to relative mode
M83
; load extruder #{next_extruder}
M117 Loading Tool T{next_extruder}
{if previous_extruder>-1}
; back out the filament for cutting
G0 E-20 F500 ; retract a bit, adjust this to tune waste
; <<< Start Of Tip Shaping V3 >>>
G92 E0 ; Zero the extruder
G0 E10 F500; push out the molten filament
G0 E-13 F4000; quickly retract
G4 P5000 ; Wait for 5000ms (5 seconds)
G1 E-50 F1500 ; Quickly retract 50mm to fully unload the filament
; <<< End Of Tip Shaping V3 >>>
; we skipped to here if it was extruder -1
{endif}
{if previous_extruder>-1}
; retract it back out of the extruder
; <<< This section is for unloading the hot end. >>>
G92 E0
G0 E-44 F2000
G92 E0
G0 E-30 F2000 ; <<<---- if mechanical cutter, change to a positive value of at least 5mm
G92 E0
; ok - out of extruder - press button to remove it all the way
G91 ; move to relative mode
M82
; we skipped to here if it was extruder -1
{endif}
; press the button to select the new extruder
G0 Y3 F2000
;<<<<<<< The below section will vary from printer to printer, for time it seems is not the same on all printers. Tweak the P values if chameleon holds the button down to long or short>>>>>>>>>>>>
{if next_extruder==0}
G4 P500 ; dwell for .5 seconds - adjust this to match your machines single pulse time
{endif}
{if next_extruder==1}
G4 P1000 ; dwell for 1.0 seconds - adjust this to match your machines two pulse time
{endif}
{if next_extruder==2}
G4 P1500 ; dwell for 1.5 seconds - adjust this to match your machines three pulse time
{endif}
{if next_extruder==3}
G4 P1900 ; dwell for 2.0 seconds - adjust this to match your machines four pulse time
{endif}
G0 Y-3
; <<< This section is for unloading the 3d Chameleon. From extruder back to filament starting point above Y adapter >>>
G4 P2000 ; wait for cutter to work
; ok command selected - back out filament if needed after cut
{if previous_extruder>-1}
G0 Y3 F2000 ; Moves to button
G4 P7000 ; Holds button to get filament to starting point above Y adapter
G0 Y-3 ; Moves off the button
G4 P400
; <<< This section is for loading the 3d Chameleon. Filament starting point above Y adapter to extruder gears >>>
{endif}
G0 Y3 F2000 ; Moves to button
G4 P7000 ; Holds button to load filament from starting point
G0 E28 F1500; <<<--- adjust this E value to tune extruder loading default was 28
G0 Y-3; Moves off button
G4 P400
G92 E0
G90 ; move back to absolute mode
M83 ; but make sure the extruder stays in relative
; reload filament all the way into extruder
; <<< This section is for loading the hotend. From extruder gear to hotend >>>
G92 E0
G0 E19 F2000 ; <<<<<----------- EDIT THIS DISTANCE TO FINE TUNE THE FILAMENT LOADING TO STOP BLOBBING OR UNDEREXTRUSION
G92 E0
M83 ; turn relative distances for the extruder
M302 S180 ; prevent cold extrusion
M117 3D Chameleon Tool T{next_extruder}
; This should be a purge at the start of the print
{if previous_extruder==-1}
G1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line
G1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little
G1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line
G92 E0 ; Reset Extruder
G1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed
G1 X5 Y20 Z0.3 F5000.0 ; Move over to prevent blob squish
{endif}
------------------------------------------------------------------------------------------------------------------------------------------------------
END GCODE: I moved the standard end Gcode of present print and turn off heat to the bottom. The top portion is all about tip shaping, unloading and zeroing the chameleon. ; Begin End G-Code
; Ensure the print head is raised before starting unload sequence
{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F600 ; Move print head up{endif}
; Perform Tip Shaping V3 before unloading
; <<< Start Of Tip Shaping V3 >>>
G92 E0 ; Zero the extruder
G0 E10 F500; push out the molten filament
G0 E-13 F4000; quickly retract
G4 P5000 ; Wait for 5000ms (5 seconds)
G1 E-50 F1500 ; Quickly retract 50mm to fully unload the filament
G92 E0 ; Reset extruder position
; <<< End Of Tip Shaping V3 >>>
; Start 3D Chameleon unloading and zeroing sequence
G0 Y234 F2000 ; Move to button position to initiate unload and zero
G4 P2750 ; Hold button for 6 pulses, each pulse 0.5 seconds, total 3 seconds for unload and zero I reduced the P a bit to ensure we don't hit 7 pulses which is a zero only command.
G0 Y231 F2000 ; Move back to standby position
; Pause before initiating return sequence
G4 P1000 ; Pause for 1 second to allow all processes to complete
; Activate the button for 7 seconds to back the filament to its starting point
G0 Y234 F2000 ; Press button again to start filament return
G4 P7000 ; Hold button for 7 seconds to ensure filament is fully retracted
G0 Y231 F2000 ; Return to standby position
; Short pause to ensure all operations have ceased before moving the bed forward
G4 P500 ; Pause for 0.5 seconds
; Now, move the bed forward to present the print
G1 X5 Y{print_bed_max[1]*0.85} F{travel_speed*60} ; Present print
{if max_layer_z < max_print_height-10}G1 Z{z_offset+min(max_layer_z+70, max_print_height-10)} F600 ; Move print head further up to clear any obstruction{endif}
{if max_layer_z < max_print_height*0.6}G1 Z{max_print_height*0.6} F600 ; Ensure print head is well clear of the print{endif}
; Turn off heaters, fan, and motors for final shutdown
M140 S0 ; Turn off heatbed
M104 S0 ; Turn off hot
Any Gcode experts out there? My toolchange gcode is acting odd. It seems that if my extruder 0 is the first to be loaded it doesn't actually load and just go's straight to the print while also skipping my purge line.