Improvements (#3)

* Start at Kludgy maltron style spacing

* Thumb and pinky tweaks

* Fix keyboard-z-offset problem

* Tweaks for a shorter-height version

* Add wall-thickness parameter

* Change hex-spacers to screw-inserts

* Adjust height

* Fix usb-cutout size and alignment

* Adjust teensy-holder

* Clean out junk
This commit is contained in:
Tom Short 2017-03-13 19:02:03 -04:00 committed by GitHub
parent 4e0d902884
commit a9cbe36abd
20 changed files with 121 additions and 1834266 deletions

File diff suppressed because it is too large Load diff

1558
fulmer.clj

File diff suppressed because it is too large Load diff

787509
repl.gcode

File diff suppressed because it is too large Load diff

Binary file not shown.

28693
repl.scad

File diff suppressed because it is too large Load diff

50794
repl.stl

File diff suppressed because it is too large Load diff

BIN
repl.x3g

Binary file not shown.

View file

@ -6,6 +6,9 @@
[unicode-math.core :refer :all]))
(defn deg2rad [degrees]
(* (/ degrees 180) pi))
;;;;;;;;;;;;;;;;;;;;;;
;; Shape parameters ;;
;;;;;;;;;;;;;;;;;;;;;;
@ -14,20 +17,26 @@
(def ncols 5)
(def α (/ π 12)) ; curvature of the columns
(def β (/ π (if (= nrows 4) 26 36))) ; curvature of the rows
(def β (/ π 36)) ; curvature of the rows
(def centerrow (- nrows 3)) ; controls front-back tilt
(def centercol 3) ; controls left-right tilt / tenting (higher number is more tenting)
(def orthographic-x (> nrows 5)) ; for larger number of rows don't curve them in as much
; (def orthographic-x true) ; controls curvature of rowS
; (def orthographic-x true) ; controls curvature of rows
(def maltron-style false) ; use fixed angles for columns
(def maltron-angles [(deg2rad 10) (deg2rad 10) 0 0 0 (deg2rad -15) (deg2rad -15)]) ; starting point: http://patentimages.storage.googleapis.com/EP0219944A2/imgf0002.png
(defn column-offset [column] (cond
(= column 2) [0 2.82 -4.5]
(>= column 4) [0 -5.8 5.64]
(>= column 4) [0 -12 5.64] ; original [0 -5.8 5.64]
:else [0 0 0]))
(def thumb-offsets [6 -3 7])
(def keyboard-z-offset 24) ; controls height
(def keyboard-z-offset 9) ; controls height; original=24
(def extra-width 2.5) ; extra space between the base of keys; original= 2
(def extra-height 1.0) ; origin= 1/2
;;;;;;;;;;;;;;;;;;;;;;;
;; General variables ;;
@ -123,13 +132,14 @@
(def rows (range 0 nrows))
(def cap-top-height (+ plate-thickness sa-profile-key-height))
(def row-radius (+ (/ (/ (+ mount-height 1/2) 2)
(def row-radius (+ (/ (/ (+ mount-height extra-height) 2)
(Math/sin (/ α 2)))
cap-top-height))
(def column-radius (+ (/ (/ (+ mount-width 2.0) 2)
(def column-radius (+ (/ (/ (+ mount-width extra-width) 2)
(Math/sin (/ β 2)))
cap-top-height))
(def column-x-delta (+ -1 (- (* column-radius (Math/sin β)))))
(def column-base-angle (* β (- centercol 2)))
(defn key-place [column row shape]
(let [row-placed-shape (->> shape
@ -144,10 +154,10 @@
(translate (column-offset column)))
column-z-delta (* column-radius (- 1 (Math/cos column-angle)))
placed-shape-ortho (->> row-placed-shape
(rotate column-angle [0 1 0])
(rotate (if maltron-style (+ column-base-angle (nth maltron-angles column)) column-angle) [0 1 0])
(translate [(- (* (- column centercol) column-x-delta)) 0 column-z-delta])
(translate (column-offset column)))]
(->> (if orthographic-x placed-shape-ortho placed-shape)
(->> (if (or maltron-style orthographic-x) placed-shape-ortho placed-shape)
(rotate (/ π 12) [0 1 0])
(translate [0 0 keyboard-z-offset]))))
@ -196,15 +206,15 @@
(map + (column-offset column)))
column-z-delta (* column-radius (- 1 (Math/cos column-angle)))
placed-position-ortho (->> row-position
(rotate-around-y column-angle)
(rotate-around-y (if maltron-style (+ column-base-angle (nth maltron-angles column)) column-angle))
(map + [(- (* (- column centercol) column-x-delta)) 0 column-z-delta])
(map + (column-offset column)))]
(->> (if orthographic-x placed-position-ortho placed-position)
(->> (if (or maltron-style orthographic-x) placed-position-ortho placed-position)
(rotate-around-y (/ π 12))
(map + [0 0 24]))))
(map + [0 0 keyboard-z-offset]))))
; (pr (rotate-around-y π [10 0 1]))
; (pr (key-position 1 cornerrow [(/ mount-width 2) (- (/ mount-height 2)) 0]))
(pr (key-position 1 cornerrow [(/ mount-width 2) (- (/ mount-height 2)) 0]))
;;;;;;;;;;;;;;;;;;;;
;; Web Connectors ;;
@ -266,24 +276,27 @@
thumb-offsets))
; (pr thumborigin)
(defn deg2rad [degrees]
(* (/ degrees 180) pi))
(defn thumb-tr-place [shape]
(->> shape
; (rotate (deg2rad 10) [1 0 0])
; (rotate (deg2rad -23) [0 1 0])
; (rotate (deg2rad -3) [0 0 1])
(rotate (deg2rad 10) [1 0 0])
(rotate (deg2rad -23) [0 1 0])
(rotate (deg2rad -3) [0 0 1])
(rotate (deg2rad 10) [0 0 1])
(translate thumborigin)
(translate [-10 -16 0])
(translate [-12 -16 3])
))
(defn thumb-tl-place [shape]
(->> shape
; (rotate (deg2rad 10) [1 0 0])
; (rotate (deg2rad -23) [0 1 0])
; (rotate (deg2rad -3) [0 0 1])
(rotate (deg2rad 10) [1 0 0])
(rotate (deg2rad -23) [0 1 0])
(rotate (deg2rad -3) [0 0 1])
(rotate (deg2rad 10) [0 0 1])
(translate thumborigin)
(translate [-30 -15 -2])))
(translate [-32 -15 -2])))
(defn thumb-mr-place [shape]
(->> shape
(rotate (deg2rad -6) [1 0 0])
@ -434,30 +447,31 @@
(defn bottom [height p]
(->> (project p)
(extrude-linear {:height height :twist 0 :convexity 0})
(translate [0 0 (/ height 2)])))
(translate [0 0 (- (/ height 2) 10)])))
(defn bottom-hull [& p]
(hull p (bottom 10.001 p)))
(hull p (bottom 0.001 p)))
(def wall-offset -15)
(def wall-thickness 2) ; originally 5
(defn wall-brace [place1 dx1 dy1 post1 place2 dx2 dy2 post2]
(union
(hull
(place1 post1)
(place1 (translate [0 0 wall-offset] post1))
(place1 (translate [(* dx1 5) (* dy1 5) -4] post1))
(place1 (translate [(* dx1 5) (* dy1 5) wall-offset] post1))
(place1 (translate [(* dx1 wall-thickness) (* dy1 wall-thickness) -4] post1))
(place1 (translate [(* dx1 wall-thickness) (* dy1 wall-thickness) wall-offset] post1))
(place2 post2)
(place2 (translate [0 0 wall-offset] post2))
(place2 (translate [(* dx2 5) (* dy2 5) -4] post2))
(place2 (translate [(* dx2 5) (* dy2 5) wall-offset] post2)))
(place2 (translate [(* dx2 wall-thickness) (* dy2 wall-thickness) -4] post2))
(place2 (translate [(* dx2 wall-thickness) (* dy2 wall-thickness) wall-offset] post2)))
(bottom-hull
(place1 (translate [(* dx1 5) (* dy1 5) wall-offset] post1))
(place1 (translate [(* dx1 wall-thickness) (* dy1 wall-thickness) wall-offset] post1))
(place1 (translate [0 0 wall-offset] post1))
(place1 (translate [(* dx1 5) (* dy1 5) wall-offset] post1))
(place1 (translate [(* dx1 wall-thickness) (* dy1 wall-thickness) wall-offset] post1))
(place2 (translate [0 0 wall-offset] post2))
(place2 (translate [(* dx2 5) (* dy2 5) wall-offset] post2)))))
(place2 (translate [(* dx2 wall-thickness) (* dy2 wall-thickness) wall-offset] post2)))))
(defn key-wall-brace [x1 y1 dx1 dy1 post1 x2 y2 dx2 dy2 post2]
(wall-brace (partial key-place x1 y1) dx1 dy1 post1
@ -519,7 +533,7 @@
(translate [0 (/ mount-height 2) wall-offset])
))))
(def rj9-vertical-offset (- (last (key-position 0 0 [0 (/ mount-height 2) 0])) 40))
(def rj9-vertical-offset (- (last (key-position 0 0 [0 (/ mount-height 2) 0])) 35))
(def rj9-cube (cube 14.78 13 22.38))
(def rj9-space (on-wall-place 1 rj9-vertical-offset rj9-cube))
(def rj9-holder (on-wall-place 1 rj9-vertical-offset
@ -527,34 +541,38 @@
(union (translate [0 2 0] (cube 10.78 9 18.38))
(translate [0 0 5] (cube 10.78 13 5))))))
(def teensy-vertical-offset (+ rj9-vertical-offset 10))
(def teensy-width 20)
(def teensy-height 12)
(def teensy-length 33)
(def teensy2-length 53)
(def teensy-pcb-thickness 1.6)
(def teensy-offset-height 5)
(def teensy-vertical-offset )
(def teensy-holder-length 68)
(def teensy-holder-offset (- 0 (/ teensy-holder-length 2)))
(def teensy-holder-top-length 14)
(def teensy-holder-top-offset (- 1 (/ teensy-holder-top-length 2)))
(def teensy-holder
(on-wall-place 0 rj9-vertical-offset
(on-wall-place 0 teensy-vertical-offset
(translate [-5 0 0]
(union
(->> (cube 3 (* 1.2 teensy2-length) (+ 6 teensy-width))
(translate [-1.5 -30 0]))
(->> (cube teensy-pcb-thickness (* 1.2 teensy2-length) 3)
(translate [(/ teensy-pcb-thickness 2) -30 (- -1.5 (/ teensy-width 2))]))
(->> (cube 4 (* 1.2 teensy2-length) 4)
(translate [(+ 2 teensy-pcb-thickness) -30 (- -1 (/ teensy-width 2))]))
(->> (cube teensy-pcb-thickness (* 0.2 teensy2-length) 3)
(translate [(/ teensy-pcb-thickness 2) (+ (* 0.5 teensy2-length) -30) (+ 1.5 (/ teensy-width 2))]))
(->> (cube 4 (* 0.2 teensy2-length) 4)
(translate [(+ 2 teensy-pcb-thickness) (+ (* 0.5 teensy2-length) -30) (+ 1 (/ teensy-width 2))]))
(->> (cube 3 teensy-holder-length (+ 6 teensy-width))
(translate [-1.5 teensy-holder-offset 0]))
(->> (cube teensy-pcb-thickness teensy-holder-length 3)
(translate [(/ teensy-pcb-thickness 2) teensy-holder-offset (- -1.5 (/ teensy-width 2))]))
(->> (cube 4 teensy-holder-length 4)
(translate [(+ 2 teensy-pcb-thickness) teensy-holder-offset (- -1 (/ teensy-width 2))]))
(->> (cube teensy-pcb-thickness teensy-holder-top-length 3)
(translate [(/ teensy-pcb-thickness 2) teensy-holder-top-offset (+ 1.5 (/ teensy-width 2))]))
(->> (cube 4 teensy-holder-top-length 4)
(translate [(+ 2 teensy-pcb-thickness) teensy-holder-top-offset (+ 1 (/ teensy-width 2))]))
))))
(def usb-cutout
(let [hole-height 6.2
(let [hole-height 7.5
side-radius (/ hole-height 2)
hole-width 10.75
hole-width 12
side-cylinder (->> (cylinder side-radius teensy-length)
(with-fn 20)
(translate [(/ (- hole-width hole-height) 2) 0 0]))]
@ -562,10 +580,13 @@
(mirror [-1 0 0] side-cylinder))
(rotate (/ π 2) [1 0 0])
(rotate (/ π 2) [0 1 0])
(on-wall-place 0 rj9-vertical-offset))))
(on-wall-place 0 teensy-vertical-offset))))
(def usb-cutout
(on-wall-place 0 teensy-vertical-offset (->> (cube 9 30 12)
(translate [-1 10 0]))))
(defn hex-spacer [column row radius height]
(defn screw-insert [column row bottom-radius top-radius height]
(let [position (key-position column row [0 0 0])
column-offset (/ mount-width 2)
row-offset (/ mount-height 2)
@ -576,55 +597,74 @@
is-vertical (or shift-left shift-right)
col-angle (+ (* β (- centercol column)) (/ π 12))
row-angle (* α (- row centerrow))]
(->> (cylinder radius height)
(rotate (if is-vertical (/ π 6) 0) [0 0 1])
(->> (union (cylinder [bottom-radius top-radius] height)
(translate [0 0 (/ height 2)] (sphere top-radius)))
(translate [(first position) (second position) (/ height 2)])
(translate [(* (if shift-right 1 (if shift-left -1 0)) column-offset)
(* (if shift-up 1 (if shift-down -1 0)) row-offset)
0])
(translate [(* wall-offset (Math/sin col-angle))
(* wall-offset (Math/sin row-angle))
0])
(with-fn 6))))
0]))))
(defn hex-spacer-shapes [radius height]
(union (hex-spacer 0 0 radius height)
(hex-spacer 0 cornerrow radius height)
(hex-spacer 3 lastrow radius height)
(hex-spacer 3 0 radius height)
(hex-spacer lastcol (dec cornerrow) radius height)
(defn screw-insert-shapes [bottom-radius top-radius height]
(union (screw-insert 0 0 bottom-radius top-radius height)
(screw-insert 0 cornerrow bottom-radius top-radius height)
(screw-insert 3 lastrow bottom-radius top-radius height)
(screw-insert 3 0 bottom-radius top-radius height)
; (screw-insert lastcol (dec cornerrow) radius height)
))
(def hex-spacer-height 10)
(def hex-spacer-radius (/ 5.42 2))
(def hex-spacer-holes (hex-spacer-shapes hex-spacer-radius hex-spacer-height))
(def hex-spacer-outers (hex-spacer-shapes (+ hex-spacer-radius 1.6) (+ hex-spacer-height 1.6)))
(def screw-insert-height 3.8)
(def screw-insert-bottom-radius (/ 5.31 2))
(def screw-insert-top-radius (/ 5.1 2))
(def screw-insert-holes (screw-insert-shapes screw-insert-bottom-radius screw-insert-top-radius screw-insert-height))
(def screw-insert-outers (screw-insert-shapes (+ screw-insert-bottom-radius 1.6) (+ screw-insert-top-radius 1.6) (+ screw-insert-height 1.6)))
;; teensy info
; base width - 18
; height - 1.45
;
(spit "things/right.scad"
(write-scad (union
key-holes
connectors
thumb
thumb-connectors
(difference (union case-walls hex-spacer-outers)
rj9-space
usb-cutout
hex-spacer-holes)
rj9-holder
(if (= nrows 4) teensy-holder)
; thumbcaps
; caps
)))
(write-scad (difference
(union
key-holes
connectors
thumb
thumb-connectors
(difference (union case-walls
screw-insert-outers
(if (= nrows 4) teensy-holder))
rj9-space
usb-cutout
screw-insert-holes)
rj9-holder
; thumbcaps
; caps
)
(translate [0 0 -20] (cube 350 350 40))
; (translate [0 0 -50] (cube 5 5 20))
)))
(spit "things/test.scad"
(write-scad (intersection (translate [29 -5 0] (cube 30 30 30))
(difference (union case-walls hex-spacer-outers)
hex-spacer-holes)
(difference (union case-walls screw-insert-outers)
screw-insert-holes)
)))
; (spit "things/test.scad"
; (write-scad screw-insert-holes))
; (spit "things/test-half.scad"
; (write-scad (difference
; (union
; key-holes
; connectors
; thumb
; thumb-connectors
; (difference (union case-walls screw-insert-outers)
; ; rj9-space
; usb-cutout
; screw-insert-holes)
; ; rj9-holder
; ; (if (= nrows 4) teensy-holder)
; )
; (translate [0 0 -5] (cube 350 350 40))
; )))

13
t.scad
View file

@ -1,13 +0,0 @@
minkowski()
{
circle(1);
for(i=[0:5])
{
rotate([0,0,360/5 * i])
hull()
{
translate([20,0,0]) square(10);
square(2);
}
}
}

View file

@ -1,258 +0,0 @@
[profile]
layer_height = 0.2
wall_thickness = 1.6
retraction_enable = False
solid_layer_thickness = 0.6
fill_density = 100
print_speed = 40
print_temperature = 215
print_temperature2 = 0
print_temperature3 = 0
print_temperature4 = 0
print_temperature5 = 0
print_bed_temperature = 45
support = Everywhere
platform_adhesion = None
support_dual_extrusion = Both
wipe_tower = False
wipe_tower_volume = 15
ooze_shield = False
filament_diameter = 1.75
filament_diameter2 = 0
filament_diameter3 = 0
filament_diameter4 = 0
filament_diameter5 = 0
filament_flow = 100.0
nozzle_size = 0.4
retraction_speed = 40.0
retraction_amount = 4.5
retraction_dual_amount = 16.5
retraction_min_travel = 1.5
retraction_combing = All
retraction_minimal_extrusion = 0.02
retraction_hop = 0.0
bottom_thickness = 0.3
layer0_width_factor = 100
object_sink = 0.0
overlap_dual = 0.15
travel_speed = 100
bottom_layer_speed = 20
infill_speed = 0.0
solidarea_speed = 0.0
inset0_speed = 0.0
insetx_speed = 0.0
cool_min_layer_time = 5
fan_enabled = True
skirt_line_count = 1
skirt_gap = 3.0
skirt_minimal_length = 150.0
fan_full_height = 0.5
fan_speed = 100
fan_speed_max = 100
cool_min_feedrate = 10
cool_head_lift = False
solid_top = True
solid_bottom = True
fill_overlap = 15
perimeter_before_infill = False
support_type = Grid
support_angle = 60
support_fill_rate = 15
support_xy_distance = 0.7
support_z_distance = 0.15
spiralize = False
simple_mode = False
brim_line_count = 20
raft_margin = 5.0
raft_line_spacing = 3.0
raft_base_thickness = 0.3
raft_base_linewidth = 1.0
raft_interface_thickness = 0.27
raft_interface_linewidth = 0.4
raft_airgap_all = 0.0
raft_airgap = 0.22
raft_surface_layers = 2
raft_surface_thickness = 0.27
raft_surface_linewidth = 0.4
fix_horrible_union_all_type_a = True
fix_horrible_union_all_type_b = False
fix_horrible_use_open_bits = False
fix_horrible_extensive_stitching = False
plugin_config =
object_center_x = -1
object_center_y = -1
[alterations]
start.gcode = ;Sliced at: {day} {date} {time}
;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {fill_density}
;Print time: {print_time}
;Filament used: {filament_amount}m {filament_weight}g
;Filament cost: {filament_cost}
;M190 S{print_bed_temperature} ;Uncomment to add your own bed temperature line
;M109 S{print_temperature} ;Uncomment to add your own temperature line
G21 ;metric values
G90 ;absolute positioning
M82 ;set extruder to absolute mode
M107 ;start with the fan off
G28 X0 Y0 ;move X/Y to min endstops
G28 Z0 ;move Z to min endstops
G1 Z15.0 F{travel_speed} ;move the platform down 15mm
G92 E0 ;zero the extruded length
G1 F200 E3 ;extrude 3mm of feed stock
G92 E0 ;zero the extruded length again
G1 F{travel_speed}
;Put printing message on LCD screen
M117 Printing...
end.gcode = ;End GCode
M104 S0 ;extruder heater off
M140 S0 ;heated bed heater off (if you have it)
G91 ;relative positioning
G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure
G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more
G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way
M84 ;steppers off
G90 ;absolute positioning
;{profile_string}
start2.gcode = ;Sliced at: {day} {date} {time}
;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {fill_density}
;Print time: {print_time}
;Filament used: {filament_amount}m {filament_weight}g
;Filament cost: {filament_cost}
;M190 S{print_bed_temperature} ;Uncomment to add your own bed temperature line
;M104 S{print_temperature} ;Uncomment to add your own temperature line
;M109 T1 S{print_temperature2} ;Uncomment to add your own temperature line
;M109 T0 S{print_temperature} ;Uncomment to add your own temperature line
G21 ;metric values
G90 ;absolute positioning
M107 ;start with the fan off
G28 X0 Y0 ;move X/Y to min endstops
G28 Z0 ;move Z to min endstops
G1 Z15.0 F{travel_speed} ;move the platform down 15mm
T1 ;Switch to the 2nd extruder
G92 E0 ;zero the extruded length
G1 F200 E10 ;extrude 10mm of feed stock
G92 E0 ;zero the extruded length again
G1 F200 E-{retraction_dual_amount}
T0 ;Switch to the first extruder
G92 E0 ;zero the extruded length
G1 F200 E10 ;extrude 10mm of feed stock
G92 E0 ;zero the extruded length again
G1 F{travel_speed}
;Put printing message on LCD screen
M117 Printing...
end2.gcode = ;End GCode
M104 T0 S0 ;extruder heater off
M104 T1 S0 ;extruder heater off
M140 S0 ;heated bed heater off (if you have it)
G91 ;relative positioning
G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure
G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more
G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way
M84 ;steppers off
G90 ;absolute positioning
;{profile_string}
start3.gcode = ;Sliced at: {day} {date} {time}
;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {fill_density}
;Print time: {print_time}
;Filament used: {filament_amount}m {filament_weight}g
;Filament cost: {filament_cost}
;M190 S{print_bed_temperature} ;Uncomment to add your own bed temperature line
;M104 S{print_temperature} ;Uncomment to add your own temperature line
;M109 T1 S{print_temperature2} ;Uncomment to add your own temperature line
;M109 T0 S{print_temperature} ;Uncomment to add your own temperature line
G21 ;metric values
G90 ;absolute positioning
M107 ;start with the fan off
G28 X0 Y0 ;move X/Y to min endstops
G28 Z0 ;move Z to min endstops
G1 Z15.0 F{travel_speed} ;move the platform down 15mm
T2 ;Switch to the 3rd extruder
G92 E0 ;zero the extruded length
G1 F200 E10 ;extrude 10mm of feed stock
G92 E0 ;zero the extruded length again
G1 F200 E-{retraction_dual_amount}
T1 ;Switch to the 2nd extruder
G92 E0 ;zero the extruded length
G1 F200 E10 ;extrude 10mm of feed stock
G92 E0 ;zero the extruded length again
G1 F200 E-{retraction_dual_amount}
T0 ;Switch to the first extruder
G92 E0 ;zero the extruded length
G1 F200 E10 ;extrude 10mm of feed stock
G92 E0 ;zero the extruded length again
G1 F{travel_speed}
;Put printing message on LCD screen
M117 Printing...
end3.gcode = ;End GCode
M104 T0 S0 ;extruder heater off
M104 T1 S0 ;extruder heater off
M104 T2 S0 ;extruder heater off
M140 S0 ;heated bed heater off (if you have it)
G91 ;relative positioning
G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure
G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more
G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way
M84 ;steppers off
G90 ;absolute positioning
;{profile_string}
start4.gcode = ;Sliced at: {day} {date} {time}
;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {fill_density}
;Print time: {print_time}
;Filament used: {filament_amount}m {filament_weight}g
;Filament cost: {filament_cost}
;M190 S{print_bed_temperature} ;Uncomment to add your own bed temperature line
;M104 S{print_temperature} ;Uncomment to add your own temperature line
;M109 T2 S{print_temperature2} ;Uncomment to add your own temperature line
;M109 T1 S{print_temperature2} ;Uncomment to add your own temperature line
;M109 T0 S{print_temperature} ;Uncomment to add your own temperature line
G21 ;metric values
G90 ;absolute positioning
M107 ;start with the fan off
G28 X0 Y0 ;move X/Y to min endstops
G28 Z0 ;move Z to min endstops
G1 Z15.0 F{travel_speed} ;move the platform down 15mm
T3 ;Switch to the 4th extruder
G92 E0 ;zero the extruded length
G1 F200 E10 ;extrude 10mm of feed stock
G92 E0 ;zero the extruded length again
G1 F200 E-{retraction_dual_amount}
T2 ;Switch to the 3rd extruder
G92 E0 ;zero the extruded length
G1 F200 E10 ;extrude 10mm of feed stock
G92 E0 ;zero the extruded length again
G1 F200 E-{retraction_dual_amount}
T1 ;Switch to the 2nd extruder
G92 E0 ;zero the extruded length
G1 F200 E10 ;extrude 10mm of feed stock
G92 E0 ;zero the extruded length again
G1 F200 E-{retraction_dual_amount}
T0 ;Switch to the first extruder
G92 E0 ;zero the extruded length
G1 F200 E10 ;extrude 10mm of feed stock
G92 E0 ;zero the extruded length again
G1 F{travel_speed}
;Put printing message on LCD screen
M117 Printing...
end4.gcode = ;End GCode
M104 T0 S0 ;extruder heater off
M104 T1 S0 ;extruder heater off
M104 T2 S0 ;extruder heater off
M104 T3 S0 ;extruder heater off
M140 S0 ;heated bed heater off (if you have it)
G91 ;relative positioning
G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure
G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more
G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way
M84 ;steppers off
G90 ;absolute positioning
;{profile_string}
support_start.gcode =
support_end.gcode =
cool_start.gcode =
cool_end.gcode =
replace.csv =
preswitchextruder.gcode = ;Switch between the current extruder and the next extruder, when printing with multiple extruders.
;This code is added before the T(n)
postswitchextruder.gcode = ;Switch between the current extruder and the next extruder, when printing with multiple extruders.
;This code is added after the T(n)

File diff suppressed because it is too large Load diff

Binary file not shown.

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff