Tags
I'm working on creating some gcode to create a whole set of key caps in one print, it is getting tedious to print them one at a time, and my past experience with my printer proves that printing a bunch of separate pieces increases the chances of failure. I don't want to end up with 42 keys that are half done and a ball of filament.
figuring out the coordinates.
To figure out the coordinates I printed one key cap, and manually jogged the printer in position to knock off the cap, then sweep it out of the way.
print head in position to knock
Position before the knock
Position after the sweep
gcode
I opened the gcode split it into start.gcode, end.gcode, and part.gcode.
start.gcode
;FLAVOR:Marlin ;TIME:1488 ;Filament used: 0.265511m ;Layer height: 0.12 ;MINX:105.708 ;MINY:101.231 ;MINZ:0.12 ;MAXX:113.512 ;MAXY:118.776 ;MAXZ:17.04 ;TARGET_MACHINE.NAME:Creality Ender-3 S1 Pro ;Generated with Cura_SteamEngine 5.8.0 M82 ;absolute extrusion mode ; Ender 3 S1 Pro Start G-code ; M413 S0 ; Disable power loss recovery G92 E0 ; Reset Extruder ; Prep surfaces before auto home for better accuracy M140 S60 M104 S200 G28 ; Home all axes G1 Z10.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed G1 X0 Y0 M190 S60 M109 S200 M82 ;absolute extrusion mode ; Ender 3 S1 Pro Start G-code ; M413 S0 ; Disable power loss recovery G92 E0 ; Reset Extruder ; Prep surfaces before auto home for better accuracy M140 S60 M104 S200 G28 ; Home all axes G1 Z10.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed G1 X0 Y0 M190 S60 M109 S200 G1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position 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
end.gcode
M140 S0 ; Turn off bed M107 ; Turn off fan G91 ;Relative positioning G1 E-2 F2700 ;Retract a bit G1 E-2 Z0.2 F2400 ;Retract and raise Z G1 X5 Y5 F3000 ;Wipe out G1 Z10 ;Raise Z more G90 ;Absolute positioning G1 X0 Y220 ;Present print M106 S0 ;Turn-off fan M104 S0 ;Turn-off hotend M140 S0 ;Turn-off bed M84 X Y E ;Disable all steppers but Z M82 ;absolute extrusion mode M104 S0 ;End of Gcode ;SETTING_3 {"global_quality": "[general]\\nversion = 4\\nname = Super Quality #2 ;SETTING_3 \\ndefinition = creality_ender3s1pro\\n\\n[metadata]\\ntype = quality ;SETTING_3 _changes\\nquality_type = super\\nsetting_version = 23\\n\\n[values]\ ;SETTING_3 \nadhesion_type = none\\nsupport_type = buildplate\\n\\n", "extruder_ ;SETTING_3 quality": ["[general]\\nversion = 4\\nname = Super Quality #2\\ndefin ;SETTING_3 ition = creality_ender3s1pro\\n\\n[metadata]\\ntype = quality_changes ;SETTING_3 \\nquality_type = super\\nsetting_version = 23\\nposition = 0\\n\\n[v ;SETTING_3 alues]\\nbrim_gap = 0.1\\nspeed_print = 120\\nsupport_angle = 35\\nz_ ;SETTING_3 seam_corner = z_seam_corner_inner\\nz_seam_position = right\\n\\n"]}
part.gcode
Now part.gcode is the rest of the gcode, and is 22k lines long, I'll spare putting that in this post.
Writing the knock and sweep
Now that I have the coordinates, and my gcode split up, I am going to write the code for the knock and sweep by hand, and just add this to the end of part.gcode.
; KNOCK AND SWEEP G0 X80 Y140 ; move to knock position G0 Z2 ; lower z to knock G0 X140 ; knock G0 Y40 ; sweep
A python script to make multiples.
Now I wrote this python script to generate a gcode file to print n
number of caps
from pathlib import Path import sys n = int(sys.argv[1]) print("printing " + str(n) + " times") start = Path("start.gcode").read_text() end = Path("end.gcode").read_text() part = Path("part.gcode").read_text() full = start + part * n + end Path("kp-lame-normal-" + str(n) + ".gcode").write_text(full)
python render.py 42
Results
The final result here is me printing out 42 new caps in this beautiful black and purple silk fillament.