summaryrefslogtreecommitdiff
path: root/case
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2024-12-24 12:39:34 +0100
committerxengineering <me@xengineering.eu>2024-12-26 12:06:36 +0100
commitdb966c966929dd3abc29ebab7ce47d638ba4a94f (patch)
treeaf2b844a2938de1698712642261bc2f8aa52732a /case
parent03d41e8069623b5d627dfb298c471a16c380c91d (diff)
downloadsoundbox-db966c966929dd3abc29ebab7ce47d638ba4a94f.tar
soundbox-db966c966929dd3abc29ebab7ce47d638ba4a94f.tar.zst
soundbox-db966c966929dd3abc29ebab7ce47d638ba4a94f.zip
WIP: Move `mech` directory to `case`
TODO: There are outdated references (see grep -R mech .) The directory name should reflect what is inside, not the field of engineering it belongs to.
Diffstat (limited to 'case')
-rw-r--r--case/assembly.scad18
-rw-r--r--case/mech.mk17
-rw-r--r--case/panel_front.scad70
-rw-r--r--case/parameters.scad21
-rw-r--r--case/pcb_case/bolt.scad13
-rw-r--r--case/pcb_case/conversion.scad8
-rw-r--r--case/pcb_case/nut.scad7
-rw-r--r--case/pcb_case/panel.scad28
-rw-r--r--case/pcb_case/pcb.scad14
-rw-r--r--case/pcb_case/rounded_cube.scad12
-rw-r--r--case/pcb_case/shell.scad116
-rw-r--r--case/pcb_case/spacer.scad10
-rw-r--r--case/pcb_case/tolerance_tests.scad86
-rw-r--r--case/production.scad38
-rw-r--r--case/prusa-slicer/anycubic_i3_mega_s.ini331
15 files changed, 789 insertions, 0 deletions
diff --git a/case/assembly.scad b/case/assembly.scad
new file mode 100644
index 0000000..756e539
--- /dev/null
+++ b/case/assembly.scad
@@ -0,0 +1,18 @@
+include <parameters.scad>
+
+use <panel_front.scad>
+
+use <pcb_case/pcb.scad>
+use <pcb_case/shell.scad>
+use <pcb_case/panel.scad>
+
+module assembly() {
+ pcb(pcb_dim, drillings, margins, t);
+
+ pcb_case_shell_bottom(pcb_dim, drillings, margins, t);
+ pcb_case_shell_top(pcb_dim, margins, t);
+ pcb_case_panel_back(pcb_dim, margins, t);
+ panel_front(pcb_dim, margins, t);
+}
+
+assembly();
diff --git a/case/mech.mk b/case/mech.mk
new file mode 100644
index 0000000..ca39a7c
--- /dev/null
+++ b/case/mech.mk
@@ -0,0 +1,17 @@
+PRINTER := anycubic_i3_mega_s
+PRINTER_CONFIG := $(PRINTER:%=mech/prusa-slicer/%.ini)
+MECH_BUILD_DIR := $(BUILD_DIR)/mech
+PARTS := assembly production pcb_case/tolerance_tests
+STL := $(PARTS:%=$(MECH_BUILD_DIR)/%.stl)
+GCODE := $(PARTS:%=$(MECH_BUILD_DIR)/%.gcode)
+
+.PHONY: mech
+mech: $(GCODE) $(STL)
+
+$(BUILD_DIR)/%.gcode: $(BUILD_DIR)/%.stl
+ mkdir -p $(dir $@)
+ prusa-slicer --load $(PRINTER_CONFIG) --output $@ --export-gcode $<
+
+$(BUILD_DIR)/%.stl: %.scad
+ mkdir -p $(dir $@)
+ openscad --hardwarnings --export-format binstl -o $@ $<
diff --git a/case/panel_front.scad b/case/panel_front.scad
new file mode 100644
index 0000000..da06927
--- /dev/null
+++ b/case/panel_front.scad
@@ -0,0 +1,70 @@
+use <pcb_case/conversion.scad>
+use <pcb_case/panel.scad>
+
+tol = 2;
+
+module panel_front(pcb_dim, margins, t) {
+ dim = dim_pcb_to_case(pcb_dim, margins, t);
+ x_off = dim[0]-2*t;
+
+ difference() {
+ pcb_case_panel_front(pcb_dim, margins, t);
+ mini_hdmi_hole(pcb_dim, margins, t);
+ for(v=[
+ [usb_max_y-usb_max_delta_y-tol/2, 0.75*t],
+ [usb_max_y-usb_delta_y-tol/2, t]
+ ]) {
+ translate([0, v[0], 0]) {
+ micro_usb_hole(pcb_dim, margins, t, v[1]);
+ }
+ }
+ for(y = [cinch_min_y+0.5*cinch_d, cinch_min_y+1.5*cinch_d+cinch_delta_y]) {
+ translate([0, y, 0]) {
+ cinch_hole(pcb_dim, margins, t);
+ }
+ }
+ }
+}
+
+hdmi_delta_y = 11.8;
+hdmi_delta_z = 3.9;
+hdmi_max_y = 31.7;
+hdmi_max_z = 13.7;
+module mini_hdmi_hole(pcb_dim, margins, t) {
+ case_dim = dim_pcb_to_case(pcb_dim, margins, t);
+ translate([
+ case_dim[0]-2*t,
+ hdmi_max_y-hdmi_delta_y-tol/2,
+ hdmi_max_z-hdmi_delta_z-tol/2]) {
+ cube([t, hdmi_delta_y+tol, hdmi_delta_z+tol]);
+ }
+}
+
+usb_delta_y = 8;
+usb_max_delta_y = 20.6;
+usb_delta_z = 3;
+usb_max_y = 71.55;
+usb_max_z = 12.7;
+module micro_usb_hole(pcb_dim, margins, t, dx) {
+ echo(dx);
+ case_dim = dim_pcb_to_case(pcb_dim, margins, t);
+ translate([
+ case_dim[0]-2*t,
+ 0,
+ usb_max_z-usb_delta_z-tol/2]) {
+ cube([dx, usb_delta_y+tol, usb_delta_z+tol]);
+ }
+}
+
+cinch_d = 8.3;
+cinch_min_y = 45;
+cinch_delta_y = 8.2;
+cinch_max_z = 34.25;
+module cinch_hole(pcb_dim, margins, t) {
+ case_dim = dim_pcb_to_case(pcb_dim, margins, t);
+ translate([case_dim[0]-2*t, 0, cinch_max_z-cinch_d/2]) {
+ rotate([0, 90, 0]) {
+ cylinder(d=cinch_d+tol, h=t, $fn=30);
+ }
+ }
+}
diff --git a/case/parameters.scad b/case/parameters.scad
new file mode 100644
index 0000000..9fda8b4
--- /dev/null
+++ b/case/parameters.scad
@@ -0,0 +1,21 @@
+include <pcb_case/bolt.scad>
+
+t = 1.65;
+
+pcb_dim = [30, 65, 1.4];
+
+margins = [
+ [1, 0.3],
+ [3.6, 1.7],
+ [bolt_l-t-pcb_dim[2], 27]
+];
+
+base_drilling = [3.5, 3.5];
+dx = [23, 0];
+dy = [0, 58];
+drillings = [
+ base_drilling,
+ base_drilling + dx,
+ base_drilling + dy,
+ base_drilling + dx + dy
+];
diff --git a/case/pcb_case/bolt.scad b/case/pcb_case/bolt.scad
new file mode 100644
index 0000000..4c26c30
--- /dev/null
+++ b/case/pcb_case/bolt.scad
@@ -0,0 +1,13 @@
+// bolt based on ISO 4762 (https://www.fasteners.eu/us/standards/ISO/4762)
+bolt_k = 3;
+bolt_l = 10;
+bolt_dk = 5.5;
+bolt_ds = 3;
+bolt_ds_tol = 0.45;
+
+module bolt() {
+ union() {
+ cylinder(d=bolt_ds, h=bolt_l, $fn=30);
+ translate([0, 0, -bolt_ds]) cylinder(d=bolt_dk, h=bolt_ds, $fn=30);
+ }
+}
diff --git a/case/pcb_case/conversion.scad b/case/pcb_case/conversion.scad
new file mode 100644
index 0000000..69c3c3b
--- /dev/null
+++ b/case/pcb_case/conversion.scad
@@ -0,0 +1,8 @@
+include <bolt.scad>
+include <nut.scad>
+
+function dim_pcb_to_case(pcb_dim, margins, t) = [
+ pcb_dim[0]+margins[0][0]+margins[0][1]+4*t,
+ pcb_dim[1]+margins[1][0]+margins[1][1]+2*t+2*(bolt_l-t),
+ pcb_dim[2]+margins[2][0]+margins[2][1]+4*t
+];
diff --git a/case/pcb_case/nut.scad b/case/pcb_case/nut.scad
new file mode 100644
index 0000000..0768b6a
--- /dev/null
+++ b/case/pcb_case/nut.scad
@@ -0,0 +1,7 @@
+nut_h = 3;
+nut_d = 4.15;
+nut_d_tol = 0.2;
+
+module nut() {
+ cylinder(d=nut_d,h=nut_h);
+}
diff --git a/case/pcb_case/panel.scad b/case/pcb_case/panel.scad
new file mode 100644
index 0000000..eef0b28
--- /dev/null
+++ b/case/pcb_case/panel.scad
@@ -0,0 +1,28 @@
+include <nut.scad>
+
+use <conversion.scad>
+use <rounded_cube.scad>
+
+panel_dim_0_tol = 0.3;
+panel_dim_1_2_tol = 0.45;
+
+module pcb_case_panel(pcb_dim, margins, t) {
+ dim = dim_pcb_to_case(pcb_dim, margins, t);
+
+ rounded_cube(
+ dim=[t, dim[1]-2*t, dim[2]-2*t],
+ radius=t
+ );
+}
+
+module pcb_case_panel_back(pcb_dim, margins, t) {
+ translate([t, t, t])
+ pcb_case_panel(pcb_dim, margins, t);
+}
+
+module pcb_case_panel_front(pcb_dim, margins, t) {
+ dim = dim_pcb_to_case(pcb_dim, margins, t);
+
+ translate([dim[0]-2*t, t, t])
+ pcb_case_panel(pcb_dim, margins, t);
+}
diff --git a/case/pcb_case/pcb.scad b/case/pcb_case/pcb.scad
new file mode 100644
index 0000000..7b24131
--- /dev/null
+++ b/case/pcb_case/pcb.scad
@@ -0,0 +1,14 @@
+include <bolt.scad>
+include <nut.scad>
+
+module pcb(dim, drillings, margins, t) {
+ translate([2*t+margins[0][0], bolt_l+margins[1][0], t+margins[2][0]]) {
+ difference() {
+ cube([dim[0], dim[1], dim[2]]);
+ for (drilling = drillings) {
+ translate([drilling[0], drilling[1], 0])
+ cylinder(d=3, h=dim[2], $fn=30);
+ }
+ }
+ }
+}
diff --git a/case/pcb_case/rounded_cube.scad b/case/pcb_case/rounded_cube.scad
new file mode 100644
index 0000000..acd50e7
--- /dev/null
+++ b/case/pcb_case/rounded_cube.scad
@@ -0,0 +1,12 @@
+module rounded_cube(dim, radius) {
+ range_y = [radius, dim[1]-radius];
+ range_z = [radius, dim[2]-radius];
+ height = dim[0];
+
+ hull() {
+ for (y=range_y, z=range_z) {
+ translate([0,y,z]) rotate([0,90,0])
+ cylinder(r=radius, h=height, $fn=30);
+ }
+ }
+}
diff --git a/case/pcb_case/shell.scad b/case/pcb_case/shell.scad
new file mode 100644
index 0000000..18139f6
--- /dev/null
+++ b/case/pcb_case/shell.scad
@@ -0,0 +1,116 @@
+include <bolt.scad>
+include <nut.scad>
+include <panel.scad>
+
+use <conversion.scad>
+use <rounded_cube.scad>
+
+module shell_base(pcb_dim, margins, t) {
+ dim = dim_pcb_to_case(pcb_dim, margins, t);
+
+ difference() {
+ // full body
+ rounded_cube(dim=dim, radius=t);
+
+ // cut away upper half
+ translate([0,0,dim[2]/2])
+ cube([dim[0], dim[1], dim[2]/2]);
+
+ // main PCB space
+ translate([3*t, t, t])
+ rounded_cube([dim[0]-6*t, dim[1]-2*t, dim[2]-2*t], t);
+
+ // remove front and back
+ translate([0, 2*t, 2*t])
+ rounded_cube([dim[0], dim[1]-4*t, dim[2]-4*t], t);
+
+ // panel holder
+ for (x_off = [t-panel_dim_0_tol/2, dim[0]-2*t-panel_dim_0_tol/2]) {
+ translate([x_off, t-panel_dim_0_tol/2, t-panel_dim_0_tol/2]) {
+ rounded_cube(
+ [
+ t+panel_dim_0_tol,
+ dim[1]-2*t+panel_dim_1_2_tol,
+ dim[2]-2*t+panel_dim_1_2_tol
+ ],
+ t
+ );
+ }
+ }
+
+ // bolt drillings
+ for (x = [dim[0]/4, dim[0]-dim[0]/4]) {
+ translate([x,0,dim[2]/2-1.5*bolt_ds])
+ rotate([-90,0,0])
+ cylinder(d=bolt_ds+bolt_ds_tol, h=1.1*t, $fn=30);
+ }
+ }
+}
+
+module shell_connector(pcb_dim, margins, t) {
+ dim = dim_pcb_to_case(pcb_dim, margins, t);
+
+ size_x = dim[0]-6*t;
+ size_y = bolt_l-t;
+ size_z = dim[2]/2+3*bolt_ds;
+
+ difference () {
+ // base body
+ translate([3*t,dim[1]-t-size_y,0])
+ cube([size_x,size_y,size_z]);
+
+ // bolt holes
+ for (x = [dim[0]/4, dim[0]-dim[0]/4]) {
+ translate([x,dim[1]-t,dim[2]/2+1.5*bolt_ds])
+ rotate([90,0,0])
+ cylinder(d=bolt_ds+bolt_ds_tol, h=size_y, $fn=30);
+ }
+
+ // nut holes
+ for (x = [dim[0]/4, dim[0]-dim[0]/4]) {
+ translate([x, dim[1]-t-size_y, dim[2]/2+1.5*bolt_ds])
+ rotate([-90,0,0])
+ cylinder(d=nut_d+nut_d_tol, h=nut_h, $fn=30);
+ }
+ }
+
+ echo(min_shell_bolt_length=t+size_y);
+}
+
+module pcb_case_shell(pcb_dim, drillings, margins, t) {
+ difference () {
+ union() {
+ shell_base(pcb_dim, margins, t);
+ shell_connector(pcb_dim, margins, t);
+ for (drilling = drillings) {
+ translate([
+ 2*t+margins[0][0]+drilling[0],
+ bolt_l+margins[1][0]+drilling[1],
+ 0
+ ]) cylinder(d=nut_d+2, h=t+margins[2][0], $fn=30);
+ }
+ }
+ for (drilling = drillings) {
+ translate([
+ 2*t+margins[0][0]+drilling[0],
+ bolt_l+margins[1][0]+drilling[1],
+ 0
+ ]) {
+ cylinder(d=bolt_ds+bolt_ds_tol, h=t+margins[2][0], $fn=30);
+ cylinder(d=nut_d+nut_d_tol, h=nut_h, $fn=30);
+ }
+ }
+ }
+}
+
+module pcb_case_shell_bottom(pcb_dim, drillings, margins, t) {
+ pcb_case_shell(pcb_dim, drillings, margins, t);
+}
+
+module pcb_case_shell_top(pcb_dim, margins, t) {
+ dim = dim_pcb_to_case(pcb_dim, margins, t);
+
+ translate([0, dim[1], dim[2]])
+ rotate([180,0,0])
+ pcb_case_shell(pcb_dim, [], margins, t);
+}
diff --git a/case/pcb_case/spacer.scad b/case/pcb_case/spacer.scad
new file mode 100644
index 0000000..e7eba3a
--- /dev/null
+++ b/case/pcb_case/spacer.scad
@@ -0,0 +1,10 @@
+include <bolt.scad>
+
+spacer_h = 11;
+
+module spacer() {
+ difference() {
+ cylinder(d=bolt_dk, h=spacer_h, $fn=30);
+ cylinder(d=bolt_ds+bolt_ds_tol, h=spacer_h, $fn=30);
+ }
+}
diff --git a/case/pcb_case/tolerance_tests.scad b/case/pcb_case/tolerance_tests.scad
new file mode 100644
index 0000000..94911cd
--- /dev/null
+++ b/case/pcb_case/tolerance_tests.scad
@@ -0,0 +1,86 @@
+include <bolt.scad>
+include <nut.scad>
+include <panel.scad>
+
+use <rounded_cube.scad>
+
+t = 2;
+step_width = 0.15;
+
+module bolt_drilling() {
+ steps = 2;
+
+ for(i = [-steps : steps]) {
+ tol = bolt_ds_tol + i * step_width;
+ echo(bolt_ds_tol=tol);
+ translate([i*5*bolt_ds,0,0])
+ difference() {
+ cube([5*bolt_ds, 5*bolt_ds, t]);
+ translate([2.5*bolt_ds,2.5*bolt_ds,0]) {
+ cylinder(d=bolt_ds+tol,h=t,$fn=50);
+ }
+ }
+ }
+}
+
+module nut_drilling() {
+ steps = 2;
+
+ for(i = [-steps : steps]) {
+ tol = nut_d_tol + i * step_width;
+ echo(nut_d_tol=tol);
+ translate([i*5*nut_d,0,0])
+ difference() {
+ cube([5*nut_d, 5*nut_d, 2*nut_h]);
+ translate([2.5*nut_d,2.5*nut_d,0]) {
+ union() {
+ cylinder(d=bolt_ds+bolt_ds_tol,h=2*nut_h,$fn=50);
+ translate([0,0,nut_h])
+ cylinder(d=tol+nut_d,h=nut_h,$fn=50);
+ }
+ }
+ }
+ }
+}
+
+module panel_thickness() {
+ steps = 2;
+
+ height = 2*t;
+
+ for(i = [-steps : steps]) {
+ tol = panel_dim_0_tol + i * step_width;
+ echo(panel_dim_0_tol=tol);
+ translate([i*5*t,0,0])
+ difference() {
+ cube([5*t, 5*t, height]);
+ translate([2*t, 0, t]) {
+ cube([t+tol, 5*t, t]);
+ }
+ }
+ }
+}
+
+module panel_width_height() {
+ steps = 2;
+
+ height = 3*t;
+
+ for(i = [-steps : steps]) {
+ tol = panel_dim_1_2_tol + i * step_width;
+ echo(panel_dim_1_2_tol=tol);
+ translate([i*3*t,0,0])
+ difference() {
+ cube([3*t, 8*t, height]);
+ translate([t, t-tol/2, t]) {
+ rounded_cube([t+panel_dim_0_tol, 6*t+tol, 6*t+tol], t);
+ }
+ }
+ }
+}
+
+bolt_drilling();
+translate([0, 20, 0]) nut_drilling();
+translate([0, 70, 0]) panel_thickness();
+translate([0, 50, 0]) panel_width_height();
+translate([0, 85, 0]) rotate([0, -90, 0]) rounded_cube([t, 6*t, 6*t], t);
diff --git a/case/production.scad b/case/production.scad
new file mode 100644
index 0000000..5d04fbd
--- /dev/null
+++ b/case/production.scad
@@ -0,0 +1,38 @@
+include <parameters.scad>
+
+use <panel_front.scad>
+
+use <pcb_case/conversion.scad>
+use <pcb_case/shell.scad>
+use <pcb_case/panel.scad>
+use <pcb_case/spacer.scad>
+
+module production() {
+ dim = dim_pcb_to_case(pcb_dim, margins, t);
+ spacing = 5;
+
+ pcb_case_shell_bottom(pcb_dim, drillings, margins, t);
+
+ translate([-spacing, 0, 0])
+ rotate([0, 180, 0])
+ translate([0, 0, -dim[2]])
+ pcb_case_shell_top(pcb_dim, margins, t);
+
+ translate([-spacing, dim[1]+spacing, 0])
+ rotate([0, -90, 0])
+ translate([-t, -t, -t])
+ pcb_case_panel_back(pcb_dim, margins, t);
+
+ translate([0, dim[1]+spacing, t])
+ rotate([0, 90, 0])
+ translate([2*t-dim[0], -t, -t])
+ panel_front(pcb_dim, margins, t);
+
+ for(i = [0:3]) {
+ translate([dim[0]+bolt_dk/2+spacing, bolt_dk/2+i*(bolt_dk+spacing), 0]) {
+ spacer();
+ }
+ }
+}
+
+production();
diff --git a/case/prusa-slicer/anycubic_i3_mega_s.ini b/case/prusa-slicer/anycubic_i3_mega_s.ini
new file mode 100644
index 0000000..10abab4
--- /dev/null
+++ b/case/prusa-slicer/anycubic_i3_mega_s.ini
@@ -0,0 +1,331 @@
+# generated by PrusaSlicer 2.7.1 on 2023-12-23 at 18:21:27 UTC
+arc_fitting = disabled
+autoemit_temperature_commands = 1
+avoid_crossing_curled_overhangs = 0
+avoid_crossing_perimeters = 0
+avoid_crossing_perimeters_max_detour = 0
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,210x0,210x210,0x210
+bed_temperature = 60
+before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]
+between_objects_gcode =
+binary_gcode = 0
+bottom_fill_pattern = monotonic
+bottom_solid_layers = 5
+bottom_solid_min_thickness = 0.5
+bridge_acceleration = 1000
+bridge_angle = 0
+bridge_fan_speed = 100
+bridge_flow_ratio = 1
+bridge_speed = 25
+brim_separation = 0
+brim_type = outer_only
+brim_width = 0
+color_change_gcode = M600
+colorprint_heights =
+compatible_printers_condition_cummulative = "printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_I3_MEGA.*/ and nozzle_diameter[0]==0.4";"printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_I3_MEGA.*/"
+complete_objects = 0
+cooling = 1
+cooling_tube_length = 5
+cooling_tube_retraction = 91.5
+default_acceleration = 1000
+default_filament_profile = "Generic PLA @MEGA"
+default_print_profile = 0.15mm QUALITY @MEGA
+deretract_speed = 50
+disable_fan_first_layers = 1
+dont_support_bridges = 1
+draft_shield = disabled
+duplicate_distance = 6
+elefant_foot_compensation = 0
+enable_dynamic_fan_speeds = 0
+enable_dynamic_overhang_speeds = 0
+end_filament_gcode = "; Filament-specific end gcode"
+end_gcode = G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1{if max_layer_z < max_print_height} Z{z_offset+min(max_layer_z+30, max_print_height)}{endif} E-34.0 F720 ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F3000 ; park print head\nM84 ; disable motors
+external_perimeter_acceleration = 0
+external_perimeter_extrusion_width = 0.45
+external_perimeter_speed = 40
+external_perimeters_first = 0
+extra_loading_move = -2
+extra_perimeters = 1
+extra_perimeters_on_overhangs = 0
+extruder_clearance_height = 35
+extruder_clearance_radius = 60
+extruder_colour = #808080
+extruder_offset = 0x0
+extrusion_axis = E
+extrusion_multiplier = 1
+extrusion_width = 0.45
+fan_always_on = 1
+fan_below_layer_time = 100
+filament_colour = #FF3232
+filament_cooling_final_speed = 3.4
+filament_cooling_initial_speed = 2.2
+filament_cooling_moves = 4
+filament_cost = 25.4
+filament_density = 1.24
+filament_deretract_speed = nil
+filament_diameter = 1.75
+filament_load_time = 0
+filament_loading_speed = 28
+filament_loading_speed_start = 3
+filament_max_volumetric_speed = 10
+filament_minimal_purge_on_wipe_tower = 15
+filament_multitool_ramming = 0
+filament_multitool_ramming_flow = 10
+filament_multitool_ramming_volume = 10
+filament_notes = ""
+filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
+filament_retract_before_travel = nil
+filament_retract_before_wipe = nil
+filament_retract_layer_change = nil
+filament_retract_length = nil
+filament_retract_length_toolchange = nil
+filament_retract_lift = nil
+filament_retract_lift_above = nil
+filament_retract_lift_below = nil
+filament_retract_restart_extra = nil
+filament_retract_restart_extra_toolchange = nil
+filament_retract_speed = nil
+filament_settings_id = "Generic PLA @MEGA"
+filament_soluble = 0
+filament_spool_weight = 0
+filament_toolchange_delay = 0
+filament_travel_lift_before_obstacle = nil
+filament_travel_max_lift = nil
+filament_travel_ramping_lift = nil
+filament_travel_slope = nil
+filament_type = PLA
+filament_unload_time = 0
+filament_unloading_speed = 90
+filament_unloading_speed_start = 100
+filament_vendor = Generic
+filament_wipe = nil
+fill_angle = 45
+fill_density = 15%
+fill_pattern = gyroid
+first_layer_acceleration = 800
+first_layer_acceleration_over_raft = 0
+first_layer_bed_temperature = 65
+first_layer_extrusion_width = 0.42
+first_layer_height = 0.2
+first_layer_speed = 20
+first_layer_speed_over_raft = 30
+first_layer_temperature = 215
+full_fan_speed_layer = 0
+fuzzy_skin = none
+fuzzy_skin_point_dist = 0.8
+fuzzy_skin_thickness = 0.3
+gap_fill_enabled = 1
+gap_fill_speed = 40
+gcode_comments = 0
+gcode_flavor = marlin
+gcode_label_objects = octoprint
+gcode_resolution = 0.0125
+gcode_substitutions =
+high_current_on_filament_swap = 0
+host_type = prusalink
+idle_temperature = nil
+infill_acceleration = 1000
+infill_anchor = 2.5
+infill_anchor_max = 12
+infill_every_layers = 1
+infill_extruder = 1
+infill_extrusion_width = 0.45
+infill_first = 0
+infill_overlap = 25%
+infill_speed = 60
+interface_shells = 0
+ironing = 0
+ironing_flowrate = 15%
+ironing_spacing = 0.1
+ironing_speed = 15
+ironing_type = top
+layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z]
+layer_height = 0.15
+machine_limits_usage = time_estimate_only
+machine_max_acceleration_e = 10000
+machine_max_acceleration_extruding = 1250
+machine_max_acceleration_retracting = 1250
+machine_max_acceleration_travel = 1500,1250
+machine_max_acceleration_x = 3000
+machine_max_acceleration_y = 2000
+machine_max_acceleration_z = 60
+machine_max_feedrate_e = 30
+machine_max_feedrate_x = 500
+machine_max_feedrate_y = 500
+machine_max_feedrate_z = 8
+machine_max_jerk_e = 5
+machine_max_jerk_x = 10
+machine_max_jerk_y = 10
+machine_max_jerk_z = 0.4
+machine_min_extruding_rate = 0,0
+machine_min_travel_rate = 0,0
+max_fan_speed = 100
+max_layer_height = 0.36
+max_print_height = 205
+max_print_speed = 100
+max_volumetric_extrusion_rate_slope_negative = 0
+max_volumetric_extrusion_rate_slope_positive = 0
+max_volumetric_speed = 0
+min_bead_width = 85%
+min_fan_speed = 100
+min_feature_size = 25%
+min_layer_height = 0.07
+min_print_speed = 15
+min_skirt_length = 4
+mmu_segmented_region_interlocking_depth = 0
+mmu_segmented_region_max_width = 0
+notes =
+nozzle_diameter = 0.4
+only_retract_when_crossing_perimeters = 0
+ooze_prevention = 0
+output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode
+overhang_fan_speed_0 = 0
+overhang_fan_speed_1 = 0
+overhang_fan_speed_2 = 0
+overhang_fan_speed_3 = 0
+overhang_speed_0 = 15
+overhang_speed_1 = 15
+overhang_speed_2 = 20
+overhang_speed_3 = 25
+overhangs = 1
+parking_pos_retraction = 92
+pause_print_gcode = M601
+perimeter_acceleration = 800
+perimeter_extruder = 1
+perimeter_extrusion_width = 0.45
+perimeter_generator = arachne
+perimeter_speed = 50
+perimeters = 2
+physical_printer_settings_id =
+post_process =
+print_host =
+print_settings_id = 0.15mm QUALITY @MEGA
+printer_model = I3MEGAS
+printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_I3_MEGA_S\nPRINTER_HAS_BOWDEN
+printer_settings_id = Anycubic i3 Mega S
+printer_technology = FFF
+printer_variant = 0.4
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+raft_contact_distance = 0.1
+raft_expansion = 1.5
+raft_first_layer_density = 90%
+raft_first_layer_expansion = 3
+raft_layers = 0
+remaining_times = 1
+resolution = 0
+retract_before_travel = 1.5
+retract_before_wipe = 60%
+retract_layer_change = 1
+retract_length = 6
+retract_length_toolchange = 10
+retract_lift = 0.075
+retract_lift_above = 0
+retract_lift_below = 204
+retract_restart_extra = 0
+retract_restart_extra_toolchange = 0
+retract_speed = 40
+seam_position = nearest
+silent_mode = 0
+single_extruder_multi_material = 0
+single_extruder_multi_material_priming = 1
+skirt_distance = 2
+skirt_height = 3
+skirts = 1
+slice_closing_radius = 0.049
+slicing_mode = regular
+slowdown_below_layer_time = 20
+small_perimeter_speed = 25
+solid_infill_acceleration = 0
+solid_infill_below_area = 0
+solid_infill_every_layers = 0
+solid_infill_extruder = 1
+solid_infill_extrusion_width = 0.45
+solid_infill_speed = 50
+spiral_vase = 0
+staggered_inner_seams = 0
+standby_temperature_delta = -5
+start_filament_gcode = "; Filament gcode\n"
+start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F1000 ; move print head up\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0
+support_material = 0
+support_material_angle = 0
+support_material_auto = 1
+support_material_bottom_contact_distance = 0
+support_material_bottom_interface_layers = -1
+support_material_buildplate_only = 0
+support_material_closing_radius = 2
+support_material_contact_distance = 0.1
+support_material_enforce_layers = 0
+support_material_extruder = 1
+support_material_extrusion_width = 0.35
+support_material_interface_contact_loops = 0
+support_material_interface_extruder = 1
+support_material_interface_layers = 2
+support_material_interface_pattern = rectilinear
+support_material_interface_spacing = 0.2
+support_material_interface_speed = 80%
+support_material_pattern = rectilinear
+support_material_spacing = 2
+support_material_speed = 50
+support_material_style = grid
+support_material_synchronize_layers = 0
+support_material_threshold = 50
+support_material_with_sheath = 1
+support_material_xy_spacing = 60%
+support_tree_angle = 40
+support_tree_angle_slow = 25
+support_tree_branch_diameter = 2
+support_tree_branch_diameter_angle = 5
+support_tree_branch_diameter_double_wall = 3
+support_tree_branch_distance = 1
+support_tree_tip_diameter = 0.8
+support_tree_top_rate = 15%
+temperature = 210
+template_custom_gcode =
+thick_bridges = 1
+thin_walls = 0
+thumbnails = 16x16,220x124
+thumbnails_format = PNG
+toolchange_gcode =
+top_fill_pattern = monotonic
+top_infill_extrusion_width = 0.4
+top_solid_infill_acceleration = 0
+top_solid_infill_speed = 40
+top_solid_layers = 7
+top_solid_min_thickness = 0.7
+travel_acceleration = 0
+travel_lift_before_obstacle = 0
+travel_max_lift = 0
+travel_ramping_lift = 0
+travel_slope = 0
+travel_speed = 180
+travel_speed_z = 0
+use_firmware_retraction = 0
+use_relative_e_distances = 1
+use_volumetric_e = 0
+variable_layer_height = 1
+wall_distribution_count = 1
+wall_transition_angle = 10
+wall_transition_filter_deviation = 25%
+wall_transition_length = 100%
+wipe = 1
+wipe_into_infill = 0
+wipe_into_objects = 0
+wipe_tower = 0
+wipe_tower_bridging = 10
+wipe_tower_brim_width = 2
+wipe_tower_cone_angle = 0
+wipe_tower_extra_spacing = 100%
+wipe_tower_extruder = 0
+wipe_tower_no_sparse_layers = 0
+wipe_tower_rotation_angle = 0
+wipe_tower_width = 60
+wipe_tower_x = 180
+wipe_tower_y = 140
+wiping_volumes_extruders = 70,70
+wiping_volumes_matrix = 0
+xy_size_compensation = 0
+z_offset = 0