From 37fe83e2e08b6a0bd23042e37fbe89122d78516c Mon Sep 17 00:00:00 2001 From: texas Date: Fri, 16 Aug 2024 16:49:04 -0500 Subject: [PATCH 1/2] added chamfer distance variable to taper in the bottom of the dome heads --- vitamins/screw.scad | 34 +++++++++++++++++++++------------- vitamins/screws.scad | 2 +- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/vitamins/screw.scad b/vitamins/screw.scad index 7023f53..65d4aa2 100644 --- a/vitamins/screw.scad +++ b/vitamins/screw.scad @@ -235,27 +235,35 @@ module screw(type, length, hob_point = 0, nylon = false) { //! Draw specified sc cylinder(h=2 * eps, r=socket_rad + eps); shaft(); } - if(head_type == hs_dome) { - R_minus_h = head_height; // h would be the height of the sphere cap that's cut off of the top of the screw dome - a= socket_rad; - // this is the trig way to do this, - // alpha=atan(R_minus_h/a); - // R = R_minus_h/sin(alpha); //Radius if the cap was a perfect unscaled sphere - // this is mathematcially equivalent, but may run faster computationally with sqrt and ^2 instead of trig - R= a*sqrt((R_minus_h^2/a^2)+1); // Radius if the cap was a perfect unscaled sphere - dome_height_scaling_factor= R/head_rad; + edge_height = head_rad / 7.5; + head_chamfer_x=edge_height/2; + head_fillet_radius= 0.5; + p0 = [head_rad, edge_height]; // Lowest point on the arc + p1 = [1.3 * socket_rad / cos(30), head_height]; // Highest point on the arc + p = (p0 + p1) / 2; // Start of bisector + gradient = (p0.x - p1.x) / (p1.y - p0.y); // Gradient of perpendicular bisector = -1 / gradient of the line between p10 and p1 + c = p.y - gradient * p.x; // Y ordinate of the centre of the dome + r = norm(p1 - [0, c]); // Dome radius is distance from centre color(colour) { rotate_extrude() { difference() { intersection() { - scale([1,dome_height_scaling_factor]) - circle(r=head_rad); + translate([0, c]) + circle(r); - square([head_rad, head_height]); + // square([head_rad, head_height]); + offset(head_fillet_radius) offset(-head_fillet_radius) + polygon(points = [ + [0,0], + [head_rad-head_chamfer_x,0], + [head_rad, edge_height], + [head_rad,head_height], + [0,head_height], + ]); } translate([0, head_height - socket_depth]) - square([socket_rad, 20]); + square([socket_rad, 10]); } } linear_extrude(head_height) diff --git a/vitamins/screws.scad b/vitamins/screws.scad index 6fd2b7d..094010a 100644 --- a/vitamins/screws.scad +++ b/vitamins/screws.scad @@ -88,7 +88,7 @@ M3_dome_screw = ["M3_dome", "M3 dome", hs_dome, 3, 5.7, 1.65, 1.04,2.0 M4_dome_screw = ["M4_dome", "M4 dome", hs_dome, 4, 7.6, 2.2, 1.3, 2.5, 20, M4_washer, M4_nut, M4_tap_radius, M4_clearance_radius]; M5_dome_screw = ["M5_dome", "M5 dome", hs_dome, 5, 9.5, 2.75, 1.56,3.0, 22, M5_washer, M5_nut, M5_tap_radius, M5_clearance_radius]; M6_dome_screw = ["M6_dome", "M6 dome", hs_dome, 6, 10.5, 3.3, 2.5,4.0, 24, M6_washer, M6_nut, M6_tap_radius, M6_clearance_radius]; -M8_dome_screw = ["M8_dome", "M8 dome", hs_dome, 8, 14, 4.4, 3,5.0, 30, M8_washer, M8_nut, M8_tap_radius, M8_clearance_radius]; +M8_dome_screw = ["M8_dome", "M8 dome", hs_dome, 8, 14, 4.4, 3, 5.0, 30, M8_washer, M8_nut, M8_tap_radius, M8_clearance_radius]; M2p5_pan_screw = ["M2p5_pan", "M2.5 pan", hs_pan, 2.5, 4.7, 1.7, 0, 0, 0, M2p5_washer, M2p5_nut, M2p5_tap_radius, M2p5_clearance_radius]; M3_pan_screw = ["M3_pan", "M3 pan", hs_pan, 3, 5.4, 2.0, 0, 0, 0, M3_washer, M3_nut, M3_tap_radius, M3_clearance_radius]; From fe3ce88086de8480a88b69b7f7d2e6376b03caa6 Mon Sep 17 00:00:00 2001 From: texas Date: Fri, 23 Aug 2024 14:32:03 -0500 Subject: [PATCH 2/2] adding test code for weld nuts and rod ends, adding ball bearings to test code list, and updating code for dome screw heads to use an angle to determine inset distance of the lower taper --- tests/nuts.scad | 7 +++++++ tests/rod_ends.scad | 17 +++++++++++++++++ vitamins/ball_bearings.scad | 2 +- vitamins/nut.scad | 4 ++-- vitamins/rod_end.scad | 20 ++++++++++---------- vitamins/screw.scad | 8 ++++---- 6 files changed, 41 insertions(+), 17 deletions(-) create mode 100644 tests/rod_ends.scad diff --git a/tests/nuts.scad b/tests/nuts.scad index 9659629..ac4ee29 100644 --- a/tests/nuts.scad +++ b/tests/nuts.scad @@ -85,6 +85,13 @@ module nuts() { if(n == M8_nut) nut_square(M8nS_thin_nut); } + + translate([0,150]){ + if(n==M4_nut) + weld_nut(M4_weld_nut); + if(n==M6_nut) + weld_nut(M6_weld_nut); + } } } diff --git a/tests/rod_ends.scad b/tests/rod_ends.scad new file mode 100644 index 0000000..c4951ff --- /dev/null +++ b/tests/rod_ends.scad @@ -0,0 +1,17 @@ + +include <../utils/core/core.scad> +use <../utils/layout.scad> + +include <../vitamins/rod_ends.scad> + + +module do_rod_ends(list) { + diameters = [for(b = list) rod_end_bearing_od(b)]; + max = max(diameters); + layout(diameters) let(b = list[$i]) + //translate([0, (max - bb_diameter(b)) / 2]) + rod_end_bearing(list[$i]); +} + +if($preview) + do_rod_ends(rod_ends); diff --git a/vitamins/ball_bearings.scad b/vitamins/ball_bearings.scad index 05a095c..1f86594 100644 --- a/vitamins/ball_bearings.scad +++ b/vitamins/ball_bearings.scad @@ -37,6 +37,6 @@ BBF693 = ["F693", 3, 8, 3, "silver", 0.5, 0.7, 9.5, 0.7]; BBF625 = ["F625", 5, 16, 5, "silver", 1.0, 1.0, 18, 1]; BBF695 = ["F695", 5, 13, 4, "silver", 1.0, 1.0, 15, 1]; -ball_bearings = [BBF693, BBF623, BBF695, BBMR63, BBMR83, BBMR93, BBSMR95, BB624, BB686, BB696, BB608, BB6200, BB6201, BB6808]; +ball_bearings = [BBF625, BBF693, BBF623, BBF695, BBMR63, BBMR83, BBMR85, BBMR93, BBMR95, BBSMR95, BB624, BB686, BB696, BB608, BB6200, BB6201, BB6808]; use diff --git a/vitamins/nut.scad b/vitamins/nut.scad index dcba1ea..152eff4 100644 --- a/vitamins/nut.scad +++ b/vitamins/nut.scad @@ -190,7 +190,7 @@ module wingnut(type) { //! Draw a wingnut function t_nut_tab(type) = [type[8], type[9]]; //! Sliding t-nut T dimensions -module sliding_ball_t_nut(size, w, h, r) { +module sliding_ball_t_nut(size, w, h, r) { //! Draw a sliding ball t nut rad = 0.5; stem = size.z - h; ball_d = 4; @@ -245,7 +245,7 @@ module sliding_t_nut(type) { //! Draw a sliding T nut, T nut with a spring loade extrusionSlidingNut(size, tab[0], tab[1], tabSizeZ, holeRadius, 0, hammerNut); } -module weld_nut(type) { +module weld_nut(type) { //! draw a weld nut thread_d = nut_size(type); hole_rad = thread_d / 2; nut_neck_rad = nut_radius(type); diff --git a/vitamins/rod_end.scad b/vitamins/rod_end.scad index 9c4cfae..394589b 100644 --- a/vitamins/rod_end.scad +++ b/vitamins/rod_end.scad @@ -2,25 +2,25 @@ include include -function rod_end_bearing_bore(type) =type[1]; // radius of the bore hole in the bearing -function rod_end_bearing_od(type) =type[2]; // Outer diameter of the bearing +function rod_end_bearing_bore(type) =type[1]; //! radius of the bore hole in the bearing +function rod_end_bearing_od(type) =type[2]; //! Outer diameter of the bearing function rod_end_bore_width(type) = type[3]; //! Width function rod_end_bearing_width(type) = type[4]; //! Width function rod_end_bearing_shield_colour(type) = type[5]; //! Shield colour, "silver" for metal -function rod_end_screw_radius(type) =type[6]/2; // radius of the screw end, not the bore -// function screw_pitch(type) =type[6]; // pitch of the screw end, not the bore -function rod_end_sphere_seg_width(type) = type[7]; // the width of the pivoting part, effectively a (sphere - sphereCaps - center bore) -function rod_end_sphere_radius(type) = type[8]; -function rod_end_screw_length(type) =type[9]; // length of the screw from eye center, not the bore -function rod_end_thread_length(type) =type[10]; // length of the threads -function rod_end_overall_length(type) = type[11]; +function rod_end_screw_radius(type) =type[6]/2; //! radius of the screw end, not the bore +// function screw_pitch(type) =type[6]; //! pitch of the screw end, not the bore +function rod_end_sphere_seg_width(type) = type[7]; //! the width of the pivoting part, effectively a (sphere - sphereCaps - center bore) +function rod_end_sphere_radius(type) = type[8]; //!radius of the rod end sphere +function rod_end_screw_length(type) =type[9]; //! length of the screw from eye center, not the bore +function rod_end_thread_length(type) =type[10]; //! length of the threads +function rod_end_overall_length(type) = type[11]; //! overall length of the rod end function rod_end_bearing_rim(type) = type[12]; //! Outer rim thickness guesstimate // function screw_thread_radius(type) = //! Thread radius // let(d = screw_thread_diameter(type)) is_undef(d) ? rod_end_screw_radius(type) : d / 2; -module rod_end_bearing(type) { +module rod_end_bearing(type) { //! Draw a rod end bearing bb_bore = rod_end_bearing_bore(type); bb_od=rod_end_bearing_od(type); diff --git a/vitamins/screw.scad b/vitamins/screw.scad index 65d4aa2..c8d2411 100644 --- a/vitamins/screw.scad +++ b/vitamins/screw.scad @@ -237,8 +237,9 @@ module screw(type, length, hob_point = 0, nylon = false) { //! Draw specified sc } if(head_type == hs_dome) { edge_height = head_rad / 7.5; - head_chamfer_x=edge_height/2; - head_fillet_radius= 0.5; + head_chamfer_angle= 15; // degrees + head_chamfer_x=edge_height*tan(head_chamfer_angle); + head_fillet_radius= 0.3; p0 = [head_rad, edge_height]; // Lowest point on the arc p1 = [1.3 * socket_rad / cos(30), head_height]; // Highest point on the arc p = (p0 + p1) / 2; // Start of bisector @@ -252,8 +253,7 @@ module screw(type, length, hob_point = 0, nylon = false) { //! Draw specified sc translate([0, c]) circle(r); - // square([head_rad, head_height]); - offset(head_fillet_radius) offset(-head_fillet_radius) + // offset(head_fillet_radius) offset(-head_fillet_radius) polygon(points = [ [0,0], [head_rad-head_chamfer_x,0],