From 70a521a14c81c7f67df96ce26b066492e2bbc775 Mon Sep 17 00:00:00 2001 From: Sasza Stanczew Date: Mon, 15 Dec 2025 23:42:49 +0100 Subject: [PATCH] a --- Dom/Kulki_na_brame.scad | 20 +++ Dom/rectangular_folding_case_v1-1.scad | 187 +++++++++++++++++++++++++ Dom/tabl_basi_dzien.scad | 84 +++++++++++ Neptune4/filament_detector_guide.scad | 68 +++++++++ Neptune4/screen_holder.scad | 61 ++++++++ Neptune4/wkladka_do_rolki.scad | 72 ++++++++++ Oliwka/pierscien.scad | 39 +++--- 7 files changed, 515 insertions(+), 16 deletions(-) create mode 100644 Dom/Kulki_na_brame.scad create mode 100644 Dom/rectangular_folding_case_v1-1.scad create mode 100644 Dom/tabl_basi_dzien.scad create mode 100644 Neptune4/filament_detector_guide.scad create mode 100644 Neptune4/screen_holder.scad create mode 100644 Neptune4/wkladka_do_rolki.scad diff --git a/Dom/Kulki_na_brame.scad b/Dom/Kulki_na_brame.scad new file mode 100644 index 0000000..3157082 --- /dev/null +++ b/Dom/Kulki_na_brame.scad @@ -0,0 +1,20 @@ +include + +kula_d = 50; +pret_t = 2.5; +pret_l = 27; + +$fn = 13; + +corner = pret_l/2 - pret_t/2; + +difference() { + spheroid(d=kula_d, style="octa"); + // cuboid([kula_d,kula_d,kula_d], rounding=10); + down(kula_d/4) union() { + left(corner) cuboid([pret_t,pret_l,kula_d]); + fwd(corner) cuboid([pret_l,pret_t,kula_d]); + left(corner) fwd(corner) pie_slice(h=kula_d/2, d=10, ang=90); + } + down(kula_d*3/4) cuboid([kula_d, kula_d, kula_d]); +} diff --git a/Dom/rectangular_folding_case_v1-1.scad b/Dom/rectangular_folding_case_v1-1.scad new file mode 100644 index 0000000..dcea9b4 --- /dev/null +++ b/Dom/rectangular_folding_case_v1-1.scad @@ -0,0 +1,187 @@ +// https://www.thingiverse.com/thing:384919/files +include + +text = ["Niedz","23:00"]; +textsize = 4; + +/*[Dimensions]*/ + +// Width of the case in mm (interior dimension) +interiorWidth = 15; + +// Length of the case in mm (interior dimension) +interiorLength = 15; + +// Height of the case in mm (interior dimension) +interiorHeight = 5; + +// Case interior fillet radius +interiorFillet = 2.5; + +// Width of the hinge in mm +hingeWidth = 7.5; + + +/*[Walls]*/ + +// Horizontal wall (top and bottom) thickness +coverThickness = 1.0; + +// Vertical wall (side) thickness +sidewallWidth = 1.1; + +// Amount the lid protrudes into the case (larger value allows the case to close more securely) +lidInsetHeight = 1.1; + +// Thickness of the hinge (it should be no more than a few layers thick keep it flexible) +hingeThickness = 0.3; + +// hinge length multiplier (as a function of case height - longer hinges may be needed for less flexible plastics) +hingeLengthScale = 1.5; + + +/*[Details]*/ + +// Distance the top and bottom surfaces extend beyond the sides of the case (makes the case easier to open) +rimInset = 0.6; + +// Length of the opening tab on the lid of the case (optional - set to 0 to remove) +tabSize = 2; + +// Fillet radius used for hinge and tab +hingeFillet = 3; + + +/*[Printer Tolerances]*/ + +// Adjust the tightness of the closed case (larger value makes the case looser, negative value makes it tighter - try adjusting in 0.1mm increments) +lidInsetOffset = 0.0; + + + +/*[hidden]*/ +eps = 0.1; +$fn = 120; // resolution + +module case() +{ + // minimal error checking + hingeWidth = min(hingeWidth, interiorWidth); + hingeThickness = min(hingeThickness, coverThickness); + lidInsetHeight = min(lidInsetHeight, interiorHeight); + + baseLength = interiorLength + sidewallWidth*2; + baseWidth = interiorWidth + sidewallWidth*2; + baseRadius = interiorFillet + sidewallWidth; + + caseLength = baseLength + rimInset*2; + caseWidth = baseWidth + rimInset*2; + caseRadius = baseRadius + rimInset; + + hingeLength = hingeLengthScale * interiorHeight + coverThickness*2; + centerY = (caseLength + hingeLength)/2; + + filletXOffset = hingeWidth/2 + hingeFillet; + filletYOffset = hingeLength/2 - hingeFillet; + + + module rrect(h, w, l, r) { + r = min(r, min(w/2, l/2)); + w = max(w, eps); + l = max(l, eps); + h = max(h, eps); + if (r <= 0) { + translate([-w/2, -l/2,0]) { + cube([w,l,h]); + } + } else { + hull() { + for (y = [-l/2+r, l/2-r]) { + for (x = [-w/2+r, w/2-r]) { + translate([x,y,0]) { + cylinder(h=h, r=r, center=false); + } + } + } + } + } + } + + module rrectTube(h, ow, ol, or, t) { + difference() { + rrect(h=h, w=ow, l=ol, r=or); + translate([0,0,-eps]) { + rrect(h=h+eps*2, w=ow-t*2, l=ol-t*2, r=or-t); + } + } + } + difference() { + union() { + // bottom surfaces + for (i = [-centerY, centerY]) { + translate([0,i,0]) { + rrect(h=coverThickness, w=caseWidth, l=caseLength, r=caseRadius); + } + } + + + translate([0,0,coverThickness-eps]) { + + // base + translate([0,centerY,0]) { + rrectTube(h=interiorHeight+eps, ow=baseWidth, ol=baseLength, or=baseRadius, t=sidewallWidth); + } + + // lid + translate([0,-centerY,0]) { + rrectTube(h=lidInsetHeight+eps, ow=interiorWidth - lidInsetOffset, ol=interiorLength - lidInsetOffset, or=interiorFillet - lidInsetOffset/2, t=sidewallWidth); + } + } + + // hinge + if (hingeWidth > caseWidth - caseRadius*2) { + translate([-hingeWidth/2,-centerY,0]) { + cube([hingeWidth, centerY*2, hingeThickness]); + } + } else { + difference() { + translate([-hingeWidth/2 - hingeFillet,-centerY,0]) { + cube([hingeWidth + hingeFillet*2, centerY*2, hingeThickness]); + } + + // fillet hinge + for (x = [-filletXOffset, filletXOffset]) { + hull() { + for (y = [-filletYOffset, filletYOffset]) { + translate([x,y,-eps]) { + cylinder(h=hingeThickness + eps*2, r=hingeFillet, center=false); + } + } + } + } + } + } + + // tab + if (tabSize > 0) { + hull() { + for (x = [hingeFillet - hingeWidth/2, hingeWidth/2 - hingeFillet]) { + translate([x,-caseLength - hingeLength/2 - tabSize + hingeFillet,0]) { + cylinder(h=coverThickness, r=hingeFillet, center=false); + } + } + translate([-hingeWidth/2,-centerY,0]) { + cube([hingeWidth, eps, coverThickness]); + } + } + } + } +fwd(centerY) xflip() union() { + back(textsize/2 + 1) text3d(text[0],center=true, size=textsize, h=0.5, font=":style=bold"); + fwd(textsize/2 + 1) text3d(text[1],center=true, size=textsize, h=0.5, font=":style=bold"); +} +} +} + +case(); + diff --git a/Dom/tabl_basi_dzien.scad b/Dom/tabl_basi_dzien.scad new file mode 100644 index 0000000..f871188 --- /dev/null +++ b/Dom/tabl_basi_dzien.scad @@ -0,0 +1,84 @@ +include + +day = ["P","W","Ś","C","P","S","N"]; +layer_h = 0.3; +hole_w = 13; +hole_d = 13; +hole_h = 8; +t_w = 3; +t_d = 6; + +num_w = 1; +num_d = 2; + +t = 2; +r = 1; +cap_t = 2; +$slop=0.35; + +conn_l = 20; +conn_w = 8; + +// constants for easy modeling +box_w = hole_w*num_w + t_w*(num_w+1); +box_d = hole_d*num_d + t_d*(num_d-1) + 2*t; +box_h = hole_h+t; + +conn_cyl1 = [hole_d/2 + t,hole_d/2+t_d+hole_d+t]; +conn_cyl2 = [hole_d/2+t_d - t,hole_d/2+t_d+hole_d+conn_l+t_d/2+t - r]; + + +difference() { + // main box + cuboid([box_w,box_d,box_h], rounding=r); + // holes + left((hole_w+t_w) * (num_w-1)/2) back((hole_d+t_d) * (num_d-1)/2) + for(i=[0:num_w-1]) { for(j=[0:num_d-1]) { + right(i*(hole_w + t_w)) fwd(j*(hole_d + t_d)) up(t/2) union() { + cuboid([hole_w, hole_d, hole_h], chamfer=-0.5, edges=TOP); + // channel for locking mechanism + up(hole_h/2 - cap_t/2 - 0.2) cuboid([hole_w+$slop, hole_d+$slop, layer_h*3], chamfer=layer_h/2); + } + }} +} +// connecting tabs / hinges +down(box_h/2 - layer_h/2) back(box_d/2 + conn_l/2) +left((hole_w+t_w) * (num_w-1)/2) for(i = [0 : num_w-1]) { + right(i*(hole_w + t_w)) cuboid([conn_w,conn_l + 2*r,layer_h]); +} + +// cap +back(box_d/2 + conn_l - t) down(box_h/2) +left((hole_w+t_w) * (num_w-1)/2) back(hole_d) +for(i=[0:num_w-1]) { for(j=[0:num_d-1]) { + right(i*(hole_w + t_w)) back(j*(hole_d + t_d)) difference() { + union() { + // cap body + cuboid([hole_w-$slop, hole_d-$slop, cap_t + t], anchor=BOTTOM, chamfer=0.5, edges=TOP); + // cap thicker part to friction lock + up(cap_t + t - 0.8) cuboid([hole_w, hole_d, layer_h*1.5], rounding=layer_h/2); + // cap top with letters + cuboid([hole_w+t, hole_d+t, t], anchor=BOTTOM, rounding=1, edges="Z"); + fwd(hole_d/2) cuboid([conn_w, t_d - t/2, layer_h], anchor=BOTTOM+BACK); + if(j==(num_d-1)) { + // round tab to open the container + back(hole_d/2) cyl(d=hole_w, h=t, anchor=BOTTOM, chamfer=0.5); + // chamfers for connectors + for(k = conn_cyl1) { + up(t/2 + layer_h) fwd(k) difference() { + cuboid([conn_w,t,t]); + up(t/2) fwd(t/2) xrot(45) cuboid([conn_w+1,t*2,t*2]); + } + } + for(k = conn_cyl2) { + up(t/2 + layer_h) fwd(k) difference() { + cuboid([conn_w,t,t]); + up(t/2) back(t/2) xrot(45) cuboid([conn_w+1,t*2,t*2]); + } + } + } + } + text3d(day[i], center=true, orient=BOTTOM, spin=180, h=layer_h*2, size=8); + } +} +} \ No newline at end of file diff --git a/Neptune4/filament_detector_guide.scad b/Neptune4/filament_detector_guide.scad new file mode 100644 index 0000000..9d4d124 --- /dev/null +++ b/Neptune4/filament_detector_guide.scad @@ -0,0 +1,68 @@ +include + +$fn = 36*5; +t = 5; +rounding = 1; + +// base to connect to the printer +base_hole_distance = 40; +base_hole_d = 4.5; +base_dim = [62,25,12]; + +det_offset = 4; + + +difference() { + // base + cuboid(base_dim, rounding=rounding, anchor=TOP); + // holes for screws + left(base_hole_distance/2) cyl(d=base_hole_d, h=base_dim[2], chamfer=-1, anchor=TOP); + right(base_hole_distance/2) cyl(d=base_hole_d, h=base_dim[2], chamfer=-1, anchor=TOP); + + // hole for screw for filament detector + down(base_dim[2]/2) left(det_offset) ycyl(d=base_hole_d, h=base_dim[1]); +} + +// ball bearing holder +bear_up = 25; +bear_fwd = 15; + +bear_od = 22; +bear_cover_od = 35; // I have a cover/guide printed on my 608 bearings +bear_id = 8; +bear_w = 8;// bearing is 7mm, +1 for clearance + +// bearing mockup to see clearance +// up(bear_up) fwd(bear_fwd) xcyl(d=bear_cover_od); + +difference() { + // base for bearing + chain_hull() { + up(bear_up) fwd(bear_fwd) xcyl(d=bear_od, h=bear_w+2*t, rounding=rounding); + cuboid([bear_w + 2*t, base_dim[1],2]); + } + // cutout for bearing + up(bear_up) fwd(bear_fwd) xcyl(d=bear_cover_od + t, h=bear_w); + // hole for screw to hold bearing + up(bear_up) fwd(bear_fwd) xcyl(d=bear_id, h=bear_w + 2*t+0.1); +} + +// PTFE tube holder +ptfe_dim = [bear_w + 2*t,9,37]; +filament_od = 2.5; +ptfe_od = 4.2; + +difference() { + union() { + // upright square + back(base_dim[1]/2) down(rounding) cuboid(ptfe_dim, anchor=BACK+BOTTOM); + // upright round top + up(ptfe_dim[2]-rounding) back(base_dim[1]/2) + ycyl(h=ptfe_dim[1], d=ptfe_dim[0], anchor=BACK); + } + // hole for filament + up(ptfe_dim[2]-rounding) back(base_dim[1]/2) ycyl(h=ptfe_dim[1], d=filament_od, anchor=BACK); + // hole for PTFE tube + up(ptfe_dim[2]-rounding) back(base_dim[1]/2) ycyl(h=ptfe_dim[1]/2, d=ptfe_od, rounding1=1, rounding2=-0.5, anchor=BACK); + +} \ No newline at end of file diff --git a/Neptune4/screen_holder.scad b/Neptune4/screen_holder.scad new file mode 100644 index 0000000..b1acc94 --- /dev/null +++ b/Neptune4/screen_holder.scad @@ -0,0 +1,61 @@ +include + +// the original Neptune 4 screen module +module screen() { + // main body + cuboid([87,20,145], chamfer=2, edges=BACK, anchor=BOTTOM); + // space for cable + cuboid([25,20,50]); + xrot(20) cuboid([25,20,50]); + // MAGNET + back(14) up(15 + 25) union() { + cuboid([48,5,30]); + left(62/2) ycyl(d=3.5, h=20); + right(62/2) ycyl(d=3.5, h=20); + } +} + +bot_w = 90; +bot_d = 50; +bot_h = 5; +bot_mag_d = 8.5; +bot_mag_h = 2; +bot_mag = [3,3]; + +// bottom +difference() { + // main base + cuboid([bot_w, bot_d, bot_h], anchor=FWD+BOTTOM, chamfer=1); + // magnet holes + for(i = [0 : bot_mag[0]-1]) { + for(j = [0 : bot_mag[1]-1]) { + left(bot_w/2) right(bot_mag_d) fwd(bot_mag_d) + right(((bot_w - bot_mag_d*2)/(bot_mag[0]-1)) * i) + fwd(((bot_d - bot_mag_d*2)/(bot_mag[1]-1)) * j) + cyl(d=bot_mag_d, h=bot_mag_h, anchor=BOTTOM, chamfer=-0.2); + } + } +} + +// vertical upright + +vert_h = 50; +vert_t = 5; + +// holder + +hold_angle = 20; +hold_t = 20; +hold_h = 65; +hold_dist = 5; + +difference() { + union() { + // vertical upright + cuboid([bot_w, vert_t, vert_h], anchor=BOTTOM+FWD, chamfer=1); + // holder body + up(vert_h - vert_t) xrot(-hold_angle) + cuboid([bot_w,hold_t,hold_h], anchor=BOTTOM, chamfer=1); + } + up(vert_h - vert_t) xrot(-hold_angle) fwd(hold_t/2 - 3.55) up(hold_dist) screen(); +} diff --git a/Neptune4/wkladka_do_rolki.scad b/Neptune4/wkladka_do_rolki.scad new file mode 100644 index 0000000..14334bd --- /dev/null +++ b/Neptune4/wkladka_do_rolki.scad @@ -0,0 +1,72 @@ +include +include + +// the values are diameter, length +// specify diameter 2-3mm smaller for clearance, length doesn't matter much +spectrum = [51, 65]; // in diam = 53 + + +t = 2; +roll = spectrum; +grid_const = 100; +grid = 18; + +$slop = 0.3; +$fn = 360; + +module holes(size, num) { + down(100/2) textured_tile("trunc_diamonds", size, tex_depth=100, tex_reps=[num,num], tex_extra=0); +} + +// bottom +union() { + difference() { + // main body + cyl(d=roll[0], h=t, anchor=BOTTOM); + // holes + holes(roll[0], grid); + } +} + +// wall +union() { + difference() { + // main body + tube(h=roll[1], od=roll[0], wall=t, anchor=BOTTOM); + // holes + // cyl(h=roll[1], d=20, tex_reps=[40,20], texture="pyramids", tex_depth=roll[0]*2, anchor=BOTTOM); + } + // top threads + for(a = [0,180] ) { + zrot(a) up(roll[1] - 2*t) thread_helix(d=roll[0] - 4*t, pitch=5, thread_depth=2, turns=0.2, internal=true); + } +} + +top_d = roll[0] + 5; +top_h = 6; +thread_h = 16; + +chamfer_h = 4; +chamfer_t = 3; + +// top +up(roll[1] + 20) union() { + // top + difference() { + cyl(d=roll[0], h=t, anchor=TOP); + holes(roll[0], grid); + } + // cylinder with threads + tube(od=roll[0] - 4*t - $slop, wall=t, h=thread_h, anchor=TOP); + for(a = [0,180] ) { + zrot(a) down(thread_h - 4) thread_helix(d=roll[0] - 4*t - $slop, pitch=5, thread_depth=2, turns=0.2); + } + // outer part with texture + difference() { + cyl(d=top_d, h=top_h, anchor=TOP, texture="hex_grid"); + cyl(h=top_h, d=roll[0]-4*t-$slop, anchor=TOP); + } + // tube(od=top_d, id=roll[0]-4*t-$slop, h=top_h, anchor=TOP, texture="hex"); + // chamfered part + down(top_h) tube(id=roll[0] - 4*t - $slop, od2=roll[0] - 4*t - $slop + chamfer_t, od1=roll[0] - 4*t - $slop, h=chamfer_h); +} \ No newline at end of file diff --git a/Oliwka/pierscien.scad b/Oliwka/pierscien.scad index 50455fe..3ca2d26 100644 --- a/Oliwka/pierscien.scad +++ b/Oliwka/pierscien.scad @@ -1,27 +1,34 @@ include +include -t=3; -d = 50; -h = 50; -conn = 5; -tr = 3; // trytytka szer -tr_d = 0.5; +t=7.5; +d = 80; +h = 100; +conn = 0; +tr = 4; // trytytka szer +tr_d = 1; $fn = 360; difference() { torus(d_maj=d, d_min=t); back(d + conn/2)cuboid([2*d,2*d,2*d]); - left(d/2) union() { - up(conn/2) cuboid([conn,conn,conn]); - xrot(90) tube(h=tr, id=t-tr_d, wall=t, rounding=0.3); - } - right(d/2) union() { - down(conn/2) cuboid([conn,conn,conn]); - xrot(90) tube(h=tr, id=t-tr_d, wall=t, rounding=0.3); - } - + // left(d/2) union() { + // up(conn/2) cuboid([t*2,conn,conn]); + // xrot(90) tube(h=tr, id=t-tr_d, wall=t, rounding=0.3); + // } + // right(d/2) union() { + // down(conn/2) cuboid([t*2,conn,conn]); + // xrot(90) tube(h=tr, id=t-tr_d, wall=t, rounding=0.3); + // } + left(d/2) xrot(-90) rabbit_clip("female", t/2,t/2,0.5, 0.4,1, lock=true); } +right(d/2) xrot(-90) rabbit_clip("male", t/2,t/2,0.5, 0.4,1, lock=true); + + for(i = [0:1] ) { - zrot(90*i + 45) left(d/2) up(h/2) cyl(h=h, d=t); + zrot(90*i + 45) left(d/2) union() { + cyl(h=h, d=t, anchor=BOTTOM); + up(h) cyl(h=t*2, d1=t, d2=0, anchor=BOTTOM); + } } \ No newline at end of file