diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8504958 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +*.stl filter=lfs diff=lfs merge=lfs -text +*.STL filter=lfs diff=lfs merge=lfs -text +*.3mf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text diff --git a/old/spoolmount.stl b/old/spoolmount.stl new file mode 100644 index 0000000..76ad09d --- /dev/null +++ b/old/spoolmount.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39b99dd3b35de527a30f3e33f8ffcb4978df1374df1a8b507c1d962f5cbedabd +size 4200684 diff --git a/unfuck the mmu/Upstream/Spool-holder-L.stl b/unfuck the mmu/Upstream/Spool-holder-L.stl new file mode 100644 index 0000000..921bb13 --- /dev/null +++ b/unfuck the mmu/Upstream/Spool-holder-L.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c29e08d140c5722c2520f0b088bf0f72f96902ff1ea8335da95b108edeb814dc +size 168284 diff --git a/unfuck the mmu/Upstream/configurable spool holder V3.1.scad b/unfuck the mmu/Upstream/configurable spool holder V3.1.scad new file mode 100644 index 0000000..7d7e97c --- /dev/null +++ b/unfuck the mmu/Upstream/configurable spool holder V3.1.scad @@ -0,0 +1,330 @@ +/* +This OpenSCAD script can produce a spool holder with different spindle lengths, a spindle extension piece, and a bracket that has two different spindle mounting points. +Before printing the full set, use the 'test_pieces' module to generate a couple of parts that check the fitment of the male and female threads, and the size of the recessed nut slot. +Use the spindle_thread_tol parameter to alter the tightness of the threaded sections - a bigger value will make the parts fit less tightly. +Use the hex_ap parameter to adjust the size of the recessed nut slot - it represents the 'across points' dimension of the hexagonal nut slot. +By default the script produces a bracket for the top-right-front corner of the enclosure, which is the regular spindle location. This bracket will also fit the bottom-left-front, the top-left-rear and bottom-right-rear +Use the if_mirror option to flip the geometry. When mirrored, the bracket will fit the top_left_front, bottom-right-front, bottom-left-rear and top-right-rear +(Note that simply mirroring the model in the slicer will not work, since the screw threads will be reversed) + +CJH 26 April 2023 +Updated 17 April 2024 with V3 bracket design abd mirrored geometry option +Updated 28 April 2023 with new 3rd mounting hole location and addition of spare spindle storage +Updated 8th April 2024 with the if_mirror option, the option to specify a reduced depth for the hexagon lattice and spindle reinforcing bosses, and an adjustment to the location of the spare spindle so that it can be screwed all the way in without foulong the enclosure screw. +*/ + +$fa = 1;// minimum angle for a fragment } smaller values will improve STL resolution +$fs = 0.3;// minimum size of a fragment } but will increase rendering time +// } Beware - 0.1 can take a very long time to render! + +include + +//*************************** Parameter Definitions ************************************** +layer_ht = 0.3;//used to create the 'bridge helper' support layers for the 'suspended' bolt hole above the nut hole. 0.3mm works for a 0.2mm layer height, but not vice versa + +//bracket options +second_spindle = false;//include an additional 'high capacity' spindle location +spare_spindle = false;//include a threaded hole to store a spare spindle or extension +if_mirror = true;//flip the geometry, but retain normal screw threads +third_hole = false;//include a third screw hole along the top edge of the enclosure frame + +depth = 18.5;//depth, or thickness, of the bracket +frame_width = 8;//8;// width of main frame around hexagon lattice + +//Spindle definitions +spindle_diam = 24;//the outer diameter of the spindle +spindle_length = 75;//the (default) length of the spindle (and the extension). Can be overriden with the 'length=' parameter. +spindle_thread = spindle_diam-6;//the outside diameter of the threaded sections - allows a 3mm 'landing' face +spindle_thread_tol = 0.6;//the difference between the male and female thread diameters, to allow for printing inaccuracies +spindle_end_diam = spindle_diam+10;//defines the diameter of the conical end of the spindle +x_offset = -50; //difference between the 'default' spindle location [0,0] +y_offset = -20; //and the 'high capacity' spindle location +hole_spindle = [x_offset,y_offset]; // +extra_spare_offset = 11.5;//11.5 places the spare spindle between the enclosure frame screws, so that it can be screwed fully in +hole_spare = [58.2+extra_spare_offset,81.65+extra_spare_offset]; // + +//Screw hole definitions +hole1 = [43.95,95.9,0];// coordinates of the three screw/nut holes +hole2 = [72.45,67.4,0];// relative to main spindle origin +hole3 = [43.95-60,95.9,0]; //version 2 location of third mounting hole +//hole3 = [72.45,7.4,0]; //version 1 location of third mounting hole +hex_ap=6.3;//'across points' dimension of hex nut slot, allowing for printing inaccuracies. + //6.3 works for M3 nuts with Prusament PETG on my Prusa MK4, and gives tight push-fit. YMMV. Use the test pieces to check + //Any over-extrusion will make the nut holes smaller and may make the nuts difficult to insert. + +//parameters to define the pattern of hexagons in the main bracket +hex_rad = 20;//15;//the radius of a circle that encloses the hexagon +hex_sepn = 3;//4;//the width of the dividing lines between adjacent hexagons +hex_cols = 5;//the number of columns and rows of hexagons to fill the bracket space +hex_rows = 6;//increase or decrease so that there are enough hexagons with the specified dimensions to cover the bracket +hex_depth = 12;//depth/2;// depth of hexagon lattice. Also defines the depth of the spindle reinforcing bosses + +mirror = if_mirror ? [1,0,0]:[0,0,0];//create mirror vector depending on 'if_mirror' option + +//*************************** Create the STLs ************************************** +// prints the complete set of bracket, four spindles and two extension pieces +full_set(if_bracket=true,if_ext=false,if_ext50=false,if_75=false,if_90=false,if_125=false,if_165=false); + +//print a couple of test pieces to check screw threads and nut slot dimensions for a given filament/printer setting +//test_pieces(); + +//generate modifiers for use in PrusaSlicer in case different settings are required for the thread sections +//modifiers(); + +//make a piece to test the spare spindle location +//spare_test(); + +//*************************** Component modules ************************************** +module full_set(if_bracket=false,if_ext=false,if_50=false,if_75=false,if_90=false,if_125=false,if_165=false){// makes the complete set of bracket, 75mm, 90mm and 165mm spindles, and 75mm extension + if(if_bracket) bracket(); + if(if_ext) translate([70,20,0]) spindle_ext(); + if(if_ext50) translate([75,-15,0]) spindle_ext(length=50); + if(if_75) translate([60,70,0]) spindle(); + if(if_90) translate([45,120,0]) spindle(length=90); + if(if_125) translate([-14,130,0]) spindle(length=125); + if(if_165) translate([-60,130,0]) spindle(length=165); +} + +module test_pieces(){//makes a couple of test pieces to test the fit between the male and femaile threads, and the dimensions of a deep nut slot + translate([40,0,0]) + difference(){ + cylinder(d=spindle_diam,h=25); + female_thread(); + } + difference(){ + translate([0,0,0]) spindle(length=25); + translate([0,0,depth]) rotate([180,0,0]) deep_nut_slot(); + } +} + +module bracket(){// makes the main mounting bracket + mirror(mirror) + translate([0,0,depth]) rotate([180,0,180]) { + difference(){ + raw_bracket(); + translate(hole1) rotate([0,0,-15]) deep_nut_slot(); + translate(hole2) rotate([0,0,-15]) deep_nut_slot(); + if (third_hole) translate(hole3) deep_nut_slot(); + mirror(mirror) female_thread();//spindle hole at [0,0] + if(second_spindle) translate(hole_spindle) mirror(mirror) female_thread();//spindle hole for larger diameter spools + if(spare_spindle) translate(hole_spare) mirror(mirror) female_thread();//spindle hole for spare storage + } + } +} + +module spindle(length=spindle_length){//makes a spindle with a specified length. Defaults to 'spindle_length' + cylinder(h=2,d=spindle_end_diam); + translate([0,0,2]) cylinder(h=4,d1=spindle_end_diam,d2=spindle_diam); + translate([0,0,6]) cylinder(d=spindle_diam,h=length); + translate([0,0,length+6]) male_thread(); + } + +module spindle_ext(length=spindle_length){//makes a spindle extension with a specified length. Defaults to 'spindle_length' + difference(){ + cylinder(d=spindle_diam,h=length); + female_thread(); + } + translate([0,0,length]) male_thread(); +} + +module raw_bracket(){//makes the basic bracket before adding the nut slots and spindle screw threads + +//hexagon lattice + translate([0,0,depth-hex_depth]) + difference(){ +// linear_extrude(depth) outline(); + linear_extrude(hex_depth) offset(r=-0.1) outline(); + translate([45,40,0]) rotate([90,0,0]) hexagons(r=hex_rad,s=hex_sepn,n_cols=hex_cols,n_rows=hex_rows); + } + +//outer frame + difference(){ + linear_extrude(depth) outline(); +// linear_extrude(depth) offset(r=-8) outline(); + linear_extrude(depth) offset(r=-frame_width) outline(); + } + +//screw hole 1 + intersection(){ + linear_extrude(depth) outline(); + translate(hole1) cylinder(d=18,h=depth); + } +//screw hole 2 + intersection(){ + linear_extrude(depth) outline(); + translate(hole2) cylinder(d=18,h=depth); + } +//screw hole 3 + if (third_hole){ + intersection(){ + linear_extrude(depth) outline(); + translate(hole3) cylinder(d=18,h=depth); + } + } + +//default spindle with boss + intersection(){ + linear_extrude(depth) outline(); +// cylinder(d=34.5,h=depth); + translate([0,0,depth-hex_depth]) cylinder(d=spindle_thread+2*frame_width,h=hex_depth); + } + intersection(){ + linear_extrude(depth) outline(); +// cylinder(d=34.5,h=depth); + translate([0,0,0]) cylinder(d=spindle_diam,h=depth); + } + +//high capacity spindle with boss + if(second_spindle){ + intersection(){ + linear_extrude(depth) outline(); + // translate(hole_spindle) cylinder(d=34.5,h=depth); + translate(hole_spindle) translate([0,0,depth-hex_depth]) cylinder(d=spindle_thread+2*frame_width,h=hex_depth); + } + intersection(){ + linear_extrude(depth) outline(); + // translate(hole_spindle) cylinder(d=34.5,h=depth); + translate(hole_spindle) cylinder(d=spindle_diam,h=depth); + } + } + +//extra lip around mounting holes +// translate([0,0,-1.5]) + translate([0,0,-0.75]) + intersection(){ +// translate([30.8,104.3,0]) + translate([60,85.6,0]) +// rotate([0,0,-45]) cube([75,15,1.5]); + rotate([0,0,-45]) cube([80,15,1.51],center=true); + linear_extrude(depth) outline(); + } + +//spare spindle storage hole + if (spare_spindle) { + overlap = 0.1;//to ensure spare overlaps the bracket everywhere, to avoid meshing errors + translate([0,0,4]) + linear_extrude(depth-4) + hull(){ + translate(hole_spare) circle(d=((64.38-54.2)^2+(77.65-87.82)^2)^0.5+2*frame_width+2*overlap); + translate([64.38,77.65,0]) circle(d=9.95+overlap); + translate([54.2,87.82,0]) circle(d=9.95+overlap); + } + } + +} + +module modifiers(){//makes modifiers for screw thread sections - may be useful for defining different print settings for screw threads + translate([0,0,depth]) rotate([180,0,180]) { + translate(hole_spindle) cylinder(d=spindle_diam,h=depth); + translate([0,0,0]) cylinder(d=spindle_diam,h=depth); + if(second_spindle) translate([0,0,4]) translate(hole_spare) cylinder(h=depth-4,d=spindle_diam); + } +} + +module male_thread(length = depth, diam=spindle_thread,taper=true, trim=true){//makes the male threaded section for the spindle and the spindle extension + translate([0,0,length]) + rotate([180,0,0]) + difference(){ + ScrewThread(outer_diam=diam, height=length, pitch=0, tooth_angle=30, tolerance=0.4, tip_height=0, tooth_height=0, tip_min_fract=0); + if(taper){ + difference(){ + translate([0,0,0]) cylinder(h=5,d1=diam*0.8+9,d2=diam+6); + translate([0,0,0]) cylinder(h=5,d1=diam*0.8,d2=diam); + } + } + if(trim){ + difference(){ + cylinder(d=spindle_thread+5,h=depth); + cylinder(d=spindle_thread-1,h=depth); + } + } + } +} + +module female_thread(length=depth+1,diam=spindle_thread+spindle_thread_tol,taper=false){//makes the female threaded section for subtracting from the spindle extension and the main bracket + male_thread(length = length, diam=diam,taper=false, trim=false); + cylinder(d=diam-3,h=depth+1); +} + +module outline(){//defines the outline of the bracket + difference(){ + hull(){ + translate(hole1) circle(d=18); + translate(hole2) circle(d=18); + if (third_hole) translate(hole3) circle(d=18); +// translate(hole_spindle) circle(d=33); +// circle(d=33); + if(second_spindle) translate(hole_spindle) circle(d=spindle_thread+2*frame_width); + circle(d=spindle_thread+2*frame_width); +// translate(hole_spare) circle(d=33); + } + hull(){ + translate([64.38,77.65,0]) circle(d=9.95); + translate([54.2,87.82,0]) circle(d=9.95); + translate([64.38+10,77.65+10,0]) circle(d=9.95); + translate([54.2+10,87.82+10,0]) circle(d=9.95); + } + } +} + +module deep_nut_slot(){//makes a nut slot for use in deep sections. Uses a wider slot above the main nut slot, as used by Prusa in the original spool holder + translate([0,0,10.4]) rotate([180,0,0]) basic_nut_slot(hex_diam = hex_ap,bolt_diam = 3.2,recess = 3.6,bolt_length = 10.4+1.6); + translate([0,0,10]) linear_extrude(2.1,scale=1.8) hex_nut(r=hex_ap/2,points=false); + translate([0,0,10+2.1]) linear_extrude(5.9) hex_nut(r=1.8*hex_ap/2,points=false); + translate([0,0,10+2.1+5.9]) linear_extrude(0.6,scale=1.2) hex_nut(r=1.8*hex_ap/2,points=false); +} + +module basic_nut_slot(hex_diam,bolt_diam,recess,bolt_length){//makes a basic nut slot, with small circular holes at the vertices of the hexagonal nut +//hex_diam = diameter of circle enclosing the hexagon +//bolt_diam = diameter of threaded part of bolt +//recess = depth of nut recess +//bolt_length = total length of bolt hole, including nut recess + cylinder(d=bolt_diam,h=bolt_length); + linear_extrude(recess) hex_nut(r=hex_diam/2); + intersection(){ + linear_extrude(recess+layer_ht) hex_nut(r=hex_diam/2); + translate([-hex_diam/2,-bolt_diam/2,0]) cube([hex_diam,bolt_diam,recess+layer_ht]); + } + translate([-bolt_diam/2,-bolt_diam/2,0]) cube([bolt_diam,bolt_diam,recess+2*layer_ht]); +} + +module hexagons(r,s,n_cols,n_rows){//makes a panel of extruded hexagons + cols = round(n_cols/2)==n_cols/2 ? n_cols : n_cols+1;//make cols an even number + l = 2*r*cos(30)+s; + for(col = [-cols/2 : cols/2]){ + for(row = [-n_rows/2 : n_rows/2]){ + offset_y = round(col/2)==col/2 ? l/2 : 0; + translate([col*l*cos(30),0,row*l+offset_y]) hexagon(r); + } + } +} + +module hexagon(r){//makes a single hexagon extruded to the depth of the bracket + rotate([0,30,0]) + rotate([-90,0,0]) + linear_extrude(depth) + hex_nut(r,points=false); +} + +module hex_nut(r,points=true){//makes a 2D hexagon with a specified radius. The boolean 'points' parameter specifies whether ther should be small circles at the vertices of the hexagon. + x = r*cos(30); + y = r*sin(30); + hex = [ + [x,y], + [0,r], + [-x,y], + [-x,-y], + [0,-r], + [x,-y] + ]; + polygon(hex); + if(points) for(p=hex) translate(p) circle(d=r/6); +} + +module spare_test(){//makes a test piece to test the location of the spare spindle + difference(){ + rotate([0,0,45]) bracket(); + translate([-50,-30,0]) cube([100,122,depth]); + } +} + diff --git a/unfuck the mmu/loop v1.bgcode b/unfuck the mmu/loop v1.bgcode new file mode 100644 index 0000000..5ea3298 Binary files /dev/null and b/unfuck the mmu/loop v1.bgcode differ diff --git a/unfuck the mmu/loop.scad b/unfuck the mmu/loop.scad new file mode 100644 index 0000000..4c58829 --- /dev/null +++ b/unfuck the mmu/loop.scad @@ -0,0 +1,52 @@ +$screw_offset = 0; // 26 +$ptfe_hole_diameter = 4.4; // 4.1 + +difference() { + union() { + box1(); + + translate([0, 0, 10]) + rotate([90, 0, 0]) + torus(i=7, o=15, xs=0.4, ys=1.5, $fn=100); + } + + translate([0, $screw_offset, 3.70]) + cube([5.6, 3.235, 2.61], center=true); + + translate([0, $screw_offset, 3.70]) + rotate([0, 0, 60]) + cube([5.6, 3.235, 2.61], center=true); + + translate([0, $screw_offset, 3.70]) + rotate([0, 0, -60]) + cube([5.6, 3.235, 2.61], center=true); + + translate([0, $screw_offset, 0]) + cylinder(h=10, d=3.2, center=true, $fn=100); + + translate([0, $screw_offset, -4.5]) + cylinder(h=1.01, d=4.4, center=true, $fn=100); +} + + +module box1() { + hull() { + for (x = [-8, 8]) { + for (y = [-4, 4]) { + for (z = [-3, 3]) { + translate([x, y, z]) + sphere(d=4, $fn=100); + } + } + } + } +} + +module torus(i, o, xs=1.0, ys=1.0) { + r = (o - i) / 2; + + rotate_extrude() + translate([i + r, 0, 0]) + scale([xs, ys, 1.0]) + circle(r); +} \ No newline at end of file diff --git a/unfuck the mmu/loop.stl b/unfuck the mmu/loop.stl new file mode 100644 index 0000000..2153581 --- /dev/null +++ b/unfuck the mmu/loop.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:448ef8720047362f2de213b10a42bfed83f25c259c86a696e54c4ba879d354a0 +size 1223684 diff --git a/unfuck the mmu/ptfe guide v1.stl b/unfuck the mmu/ptfe guide v1.stl new file mode 100644 index 0000000..8f0caf6 --- /dev/null +++ b/unfuck the mmu/ptfe guide v1.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94ec22d193910155b6f436c91a2024ce5efb3bedf4fd957418dd1ad01f971e74 +size 626884 diff --git a/unfuck the mmu/ptfe guide v2.stl b/unfuck the mmu/ptfe guide v2.stl new file mode 100644 index 0000000..314025e --- /dev/null +++ b/unfuck the mmu/ptfe guide v2.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe8994afb75315b1e3fe88453a6f9fde107a967fba2bd762792dd10fae4fcab2 +size 646884 diff --git a/unfuck the mmu/ptfe holder v1.bgcode b/unfuck the mmu/ptfe holder v1.bgcode new file mode 100644 index 0000000..933ea80 Binary files /dev/null and b/unfuck the mmu/ptfe holder v1.bgcode differ diff --git a/unfuck the mmu/ptfe holder v1.stl b/unfuck the mmu/ptfe holder v1.stl new file mode 100644 index 0000000..f6b2f69 --- /dev/null +++ b/unfuck the mmu/ptfe holder v1.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39429d22db8857ef58dd7634b467a455ed7dae0580d45230175844602aa4fa38 +size 896884 diff --git a/unfuck the mmu/ptfe holder v2.bgcode b/unfuck the mmu/ptfe holder v2.bgcode new file mode 100644 index 0000000..4810f26 Binary files /dev/null and b/unfuck the mmu/ptfe holder v2.bgcode differ diff --git a/unfuck the mmu/ptfe holder v2.stl b/unfuck the mmu/ptfe holder v2.stl new file mode 100644 index 0000000..2b9f62b --- /dev/null +++ b/unfuck the mmu/ptfe holder v2.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb5010d24bdfaa75fce28a8beeb9dbc5fbb82f17aa806bf7b05eeab32085bdf4 +size 916884 diff --git a/unfuck the mmu/ptfe holder v3.bgcode b/unfuck the mmu/ptfe holder v3.bgcode new file mode 100644 index 0000000..986a27b Binary files /dev/null and b/unfuck the mmu/ptfe holder v3.bgcode differ diff --git a/unfuck the mmu/ptfe holder v4.bgcode b/unfuck the mmu/ptfe holder v4.bgcode new file mode 100644 index 0000000..9ebfcd5 Binary files /dev/null and b/unfuck the mmu/ptfe holder v4.bgcode differ diff --git a/unfuck the mmu/spool cage v1.bgcode b/unfuck the mmu/spool cage v1.bgcode new file mode 100644 index 0000000..fd11c1b Binary files /dev/null and b/unfuck the mmu/spool cage v1.bgcode differ diff --git a/unfuck the mmu/spool cage v1.stl b/unfuck the mmu/spool cage v1.stl new file mode 100644 index 0000000..faae8ec --- /dev/null +++ b/unfuck the mmu/spool cage v1.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9b1d389bd9a3663b268fc72d1283adc6ebb9af721c71e6c79b4a8f6968123b4 +size 15655784 diff --git a/unfuck the mmu/spool cage v2.scad b/unfuck the mmu/spool cage v2.scad new file mode 100644 index 0000000..5d4c00e --- /dev/null +++ b/unfuck the mmu/spool cage v2.scad @@ -0,0 +1,57 @@ +difference() { + union() { + cage(); + } + + translate([208.5 / 2, 0, 43.5]) + rotate([90, 0, 30]) + cylinder(h=50, d=4.2, center=true, $fn=100); +} + +edges(); + +module edges() { + translate([0, 0, 83]) + torus2(d_major=204, d_minor=6, $fn=500); + + translate([0, 0, 3]) + torus2(d_major=204, d_minor=6, $fn=500); +} + +module cage() { + difference() { + translate([0, 0, 3]) + cylinder(h=80, d=210, $fn=500); + + translate([0, 0, -20]) + cylinder(h=150, d=204, $fn=500); + + for (a = [15 : 6 : 351]) { + for (h = [11.5 : 18 : 66]) { + rotate([0, 0, a]) + translate([100, 0, h]) + rotate([0, 90, 0]) + cylinder(h=50, d=9, $fn=50); + } + } + + for (a = [12 : 6 : 348]) { + for (h = [20.5 : 18 : 75]) { + rotate([0, 0, a]) + translate([100, 0, h]) + rotate([0, 90, 0]) + cylinder(h=50, d=9, $fn=50); + } + } + } +} + +module torus(r_major, r_minor) { + rotate_extrude() + translate([r_major, 0, 0]) + circle(r=r_minor); +} + +module torus2(d_major, d_minor) { + torus(r_major=d_major / 2, r_minor=d_minor / 2); +} \ No newline at end of file diff --git a/unfuck the mmu/spool cage v2.stl b/unfuck the mmu/spool cage v2.stl new file mode 100644 index 0000000..c9cb9f5 --- /dev/null +++ b/unfuck the mmu/spool cage v2.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b80ed683a8b6d98e1d1e277d2c8b7432a6f00394cc206406326596a48f3d2c7 +size 15560184 diff --git a/unfuck the mmu/spool cage v3.bgcode b/unfuck the mmu/spool cage v3.bgcode new file mode 100644 index 0000000..70c42c5 Binary files /dev/null and b/unfuck the mmu/spool cage v3.bgcode differ diff --git a/unfuck the mmu/spool cage v3.scad b/unfuck the mmu/spool cage v3.scad new file mode 100644 index 0000000..981e9b8 --- /dev/null +++ b/unfuck the mmu/spool cage v3.scad @@ -0,0 +1,114 @@ +difference() { + cage(); + + ptfe(); +} + +edges(); + +mount(); + +module mount() { + difference() { + cylinder(h=4, d=116, $fn=500); + + translate([0, 0, -1]) + cylinder(h=6, d=86, $fn=500); + + for (a = [0 : 30 : 330]) { + rotate([0, 0, a]) { + translate([47.5, -5, -1]) + cube([5, 10, 6]); + + translate([47.5, -15, 5]) + rotate([-11.31, 0, 0]) + cube([5, 15, 2]); + + translate([47.5, 0, 2]) + rotate([11.31, 0, 0]) + cube([5, 15, 2]); + } + } + } + + translate([0, 0, 2]) + torus2(d_major=86, d_minor=4, $fn=500); + + translate([0, 0, 2]) + torus2(d_major=116, d_minor=4, $fn=500); + + for (a = [0 : 45 : 315]) { + rotate([0, 0, a]) { + translate([57, -5, 0]) + cube([46, 10, 4]); + + translate([57, -5, 2]) + rotate([0, 90, 0]) + cylinder(h=46, d=4, $fn=50); + + translate([57, 5, 2]) + rotate([0, 90, 0]) + cylinder(h=46, d=4, $fn=50); + } + } + + +} + +module ptfe() { + rotate([0, 0, 0.7]) + translate([208.5 / 2, 0, 45]) + rotate([90, 0, 30]) + cylinder(h=50, d=4.2, center=true, $fn=100); + + rotate([0, 0, -0.7]) + translate([208.5 / 2, 0, 57]) + rotate([90, 0, -30]) + cylinder(h=50, d=4.2, center=true, $fn=100); +} + +module edges() { + translate([0, 0, 100]) + torus2(d_major=206, d_minor=4, $fn=500); + + translate([0, 0, 2]) + torus2(d_major=206, d_minor=4, $fn=500); +} + +module cage() { + difference() { + translate([0, 0, 2]) + cylinder(h=98, d=210, $fn=500); + + translate([0, 0, -20]) + cylinder(h=150, d=204, $fn=500); + + for (a = [14 : 6 : 351]) { + for (h = [10.5 : 18 : 84]) { + rotate([0, 0, a]) + translate([100, 0, h]) + rotate([0, 90, 0]) + cylinder(h=50, d=9, $fn=50); + } + } + + for (a = [11 : 6 : 348]) { + for (h = [19.5 : 18 : 93]) { + rotate([0, 0, a]) + translate([100, 0, h]) + rotate([0, 90, 0]) + cylinder(h=50, d=9, $fn=50); + } + } + } +} + +module torus(r_major, r_minor) { + rotate_extrude() + translate([r_major, 0, 0]) + circle(r=r_minor); +} + +module torus2(d_major, d_minor) { + torus(r_major=d_major / 2, r_minor=d_minor / 2); +} \ No newline at end of file diff --git a/unfuck the mmu/spool cage v3.stl b/unfuck the mmu/spool cage v3.stl new file mode 100644 index 0000000..dc3a500 --- /dev/null +++ b/unfuck the mmu/spool cage v3.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a00293febbe32d16ff05a341fdf8439d0da2b516af00f0af1928e6f9de9d0a5 +size 42231784 diff --git a/unfuck the mmu/spool cage v4.bgcode b/unfuck the mmu/spool cage v4.bgcode new file mode 100644 index 0000000..72f417a Binary files /dev/null and b/unfuck the mmu/spool cage v4.bgcode differ diff --git a/unfuck the mmu/spool cage v4.stl b/unfuck the mmu/spool cage v4.stl new file mode 100644 index 0000000..d7a20b8 --- /dev/null +++ b/unfuck the mmu/spool cage v4.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d1c77392c75b9bfc97552d7c99365c1f19304af50ffe8f94f53948f31e4c444 +size 45595684 diff --git a/unfuck the mmu/spool cage v5.bgcode b/unfuck the mmu/spool cage v5.bgcode new file mode 100644 index 0000000..8c7af0c Binary files /dev/null and b/unfuck the mmu/spool cage v5.bgcode differ diff --git a/unfuck the mmu/spool cage v5.stl b/unfuck the mmu/spool cage v5.stl new file mode 100644 index 0000000..54fa865 --- /dev/null +++ b/unfuck the mmu/spool cage v5.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:350f72859ef8f062bda9f05c8ee8ca9a02f80ad9e563156883c0494a42b2b559 +size 65654684 diff --git a/unfuck the mmu/spool cage v6.bgcode b/unfuck the mmu/spool cage v6.bgcode new file mode 100644 index 0000000..3853911 Binary files /dev/null and b/unfuck the mmu/spool cage v6.bgcode differ diff --git a/unfuck the mmu/spool cage v6.stl b/unfuck the mmu/spool cage v6.stl new file mode 100644 index 0000000..d22dabf --- /dev/null +++ b/unfuck the mmu/spool cage v6.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01028da064e2556ba40bb20020d74ec54ee4e91bcdd6645f73616d0537b64a13 +size 65679484 diff --git a/unfuck the mmu/spool cage.scad b/unfuck the mmu/spool cage.scad new file mode 100644 index 0000000..97fcbe1 --- /dev/null +++ b/unfuck the mmu/spool cage.scad @@ -0,0 +1,143 @@ +inner_ring(); +outer_ring(); +spokes(); + + +module inner_ring() { + difference() { + cylinder(h=4, d=70, $fn=500); + + translate([0, 0, -1]) + cylinder(h=6, d=55, $fn=500); + } +} + +module outer_ring() { + difference() { + union() { + cylinder(h=4, d=210, $fn=500); + + bend1(); + + bend2(); + + ring(); + } + + translate([0, 0, -1]) + cylinder(h=6, d=195, $fn=500); + + translate([-220, -150, -10]) + cube([220, 300, 200]); + } +} + +module spokes() { + for (a = [-55 : 27.5 : 55]) { + rotate([0, 0, a]) + translate([30, -5, 0]) + cube([70, 10, 4]); + } + + translate([0, 30, 0]) + cube([10, 70, 4]); + + translate([0, -100, 0]) + cube([10, 70, 4]); +} + +module bend1() { + translate([0, 0, 10]) + rotate_extrude($fn=500) + translate([105, 0, 0]) + difference() { + circle(d=20, $fn=500); + + circle(d=12, $fn=500); + + translate([-10, 0, 0]) + square(20); + + translate([-20, -10, 0]) + square(20); + } +} + +module bend2() { + translate([0, 0, 75]) + rotate_extrude($fn=500) + translate([100, 0, 0]) + difference() { + circle(d=30, $fn=500); + + circle(d=22, $fn=500); + + translate([-20, -40, 0]) + square(40); + + translate([-30, 0, 0]) + rotate([0, 0, -15]) + square(60, center=true); + } +} + +module ring() { + difference() { + union() { + translate([0, 0, 10]) + cylinder(h=65, d=230, $fn=500); + + difference() { + translate([-13, 0, 44]) +// torus(i=57, o=147, xs=0.5, $fn=500); + torus2(r1=101, r2=45, xs=0.6, $fn=500); + + cube([200, 200, 200]); + } + + } + + translate([0, 0, -20]) + cylinder(h=150, d=221, $fn=500); + + for (a = [-84 : 6 : 84]) { + for (h = [15 : 18 : 69]) { + p = (a + 84) / 168; + d = 10 * pow(p, 0.8); + + rotate([0, 0, a]) + translate([100, 0, h]) + rotate([0, 90, 0]) + cylinder(h=50, d=d, $fn=50); + } + } + + for (a = [-87 : 6 : 87]) { + for (h = [24 : 18 : 63]) { + p = (a + 87) / 174; + d = 10 * pow(p, 0.8); + + rotate([0, 0, a]) + translate([100, 0, h]) + rotate([0, 90, 0]) + cylinder(h=50, d=d, $fn=50); + } + } + } +} + +module torus(i, o, xs=1.0, ys=1.0) { + r = (o - i) / 2; + + rotate_extrude() + translate([i + r, 0, 0]) + scale([xs, ys, 1.0]) + circle(r); +} + +module torus2(r1, r2, xs=1.0, ys=1.0) { + rotate_extrude() + translate([r1, 0, 0]) + scale([xs, ys, 1.0]) + circle(r2); +} \ No newline at end of file diff --git a/unfuck the mmu/spool_holder v1.bgcode b/unfuck the mmu/spool_holder v1.bgcode new file mode 100644 index 0000000..1a55151 Binary files /dev/null and b/unfuck the mmu/spool_holder v1.bgcode differ diff --git a/unfuck the mmu/spool_holder v1.stl b/unfuck the mmu/spool_holder v1.stl new file mode 100644 index 0000000..6fbd456 --- /dev/null +++ b/unfuck the mmu/spool_holder v1.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd6e1afe0d74174dd3dc540be602450dff2705c9009f3d285c46fbdb0dd375a3 +size 4079684 diff --git a/unfuck the mmu/spoolmount a v1.stl b/unfuck the mmu/spoolmount a v1.stl new file mode 100644 index 0000000..39b9dc0 --- /dev/null +++ b/unfuck the mmu/spoolmount a v1.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:346dfea9a367ded9cdd255dd4567839467b8d3d1072eaf1e51a488f9d6b6af8a +size 4048884 diff --git a/unfuck the mmu/spoolmount b v1.stl b/unfuck the mmu/spoolmount b v1.stl new file mode 100644 index 0000000..56a33f7 --- /dev/null +++ b/unfuck the mmu/spoolmount b v1.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d81150d838596345c560af6c489e91b28115d31dad2d698e74e378eefb7177a +size 4061684 diff --git a/unfuck the mmu/spoolmount v1.bgcode b/unfuck the mmu/spoolmount v1.bgcode new file mode 100644 index 0000000..b7a1e52 Binary files /dev/null and b/unfuck the mmu/spoolmount v1.bgcode differ diff --git a/unfuck the mmu/spoolmount v2.bgcode b/unfuck the mmu/spoolmount v2.bgcode new file mode 100644 index 0000000..51b6c54 Binary files /dev/null and b/unfuck the mmu/spoolmount v2.bgcode differ diff --git a/unfuck the mmu/spoolmount v3.bgcode b/unfuck the mmu/spoolmount v3.bgcode new file mode 100644 index 0000000..bfb7cc3 Binary files /dev/null and b/unfuck the mmu/spoolmount v3.bgcode differ diff --git a/unfuck the mmu/spoolmount v4.bgcode b/unfuck the mmu/spoolmount v4.bgcode new file mode 100644 index 0000000..9992caf Binary files /dev/null and b/unfuck the mmu/spoolmount v4.bgcode differ diff --git a/unfuck the mmu/spoolmount v5.bgcode b/unfuck the mmu/spoolmount v5.bgcode new file mode 100644 index 0000000..91e53e9 Binary files /dev/null and b/unfuck the mmu/spoolmount v5.bgcode differ diff --git a/unfuck the mmu/spoolmount v6.bgcode b/unfuck the mmu/spoolmount v6.bgcode new file mode 100644 index 0000000..8d7334d Binary files /dev/null and b/unfuck the mmu/spoolmount v6.bgcode differ diff --git a/unfuck the mmu/spoolmount v7.bgcode b/unfuck the mmu/spoolmount v7.bgcode new file mode 100644 index 0000000..0be4145 Binary files /dev/null and b/unfuck the mmu/spoolmount v7.bgcode differ diff --git a/unfuck the mmu/spoolmount v8.bgcode b/unfuck the mmu/spoolmount v8.bgcode new file mode 100644 index 0000000..47a3f36 Binary files /dev/null and b/unfuck the mmu/spoolmount v8.bgcode differ