diff --git a/.gitignore b/.gitignore index 8f967c8..b27f388 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.DS_Store benchmark -releases \ No newline at end of file +releases +stl/*/*.txt \ No newline at end of file diff --git a/scad/100ft_v3/gnal_100ft.scad b/scad/100ft_v3/gnal_100ft.scad index d858e62..bef596d 100644 --- a/scad/100ft_v3/gnal_100ft.scad +++ b/scad/100ft_v3/gnal_100ft.scad @@ -257,7 +257,7 @@ module film_guide (rotations = 60, id = 45.55, spacing = 2.075, bottom = -2) { spiral(rotations, id, spacing, bottom, $fn); } -PART="spiral"; +PART="spindle_single"; if (PART == "spiral") { gnal_100ft_spiral(); @@ -277,10 +277,14 @@ if (PART == "spiral") { gnal_spiral_bottom_insert_s8(); } else if (PART == "insert_16") { gnal_spiral_bottom_insert_16(); +} else if (PART == "insert_single") { + gnal_spiral_bottom_insert_single(); } else if (PART == "spacer_16") { gnal_spacer_16(); } else if (PART == "spindle_top") { gnal_spindle_top(); } else if (PART == "spindle_bottom") { gnal_spindle_bottom(); -} +} else if (PART == "spindle_single") { + gnal_spindle_single(); +} \ No newline at end of file diff --git a/scad/50ft_v3/gnal_50ft.scad b/scad/50ft_v3/gnal_50ft.scad index 5e9d982..2f92bc4 100644 --- a/scad/50ft_v3/gnal_50ft.scad +++ b/scad/50ft_v3/gnal_50ft.scad @@ -207,12 +207,16 @@ if (PART == "spiral") { gnal_spiral_bottom_insert_s8(); } else if (PART == "insert_16") { gnal_spiral_bottom_insert_16(); +} else if (PART == "insert_single") { + gnal_spiral_bottom_insert_single(); } else if (PART == "spacer_16") { gnal_spacer_16(); } else if (PART == "spindle_top") { gnal_spindle_top(); } else if (PART == "spindle_bottom") { gnal_spindle_bottom(); +} else if (PART == "spindle_single") { + gnal_spindle_top(); } else if (PART == "spiral_test") { difference () { gnal_50ft_spiral(); diff --git a/scad/libraries/gnal_v3.scad b/scad/libraries/gnal_v3.scad index 2c7227e..6cd1c0c 100644 --- a/scad/libraries/gnal_v3.scad +++ b/scad/libraries/gnal_v3.scad @@ -13,6 +13,8 @@ include <./Triangles.scad>; * + clone translated along Z by 0.2mm * BOTTOM (small screw) * metric_thread (diameter=10, pitch=1.5, thread_size = 1.6, length=LEN); + * SINGLE LEVEL (middle screw) + * */ FINE = 200; @@ -23,6 +25,7 @@ THREAD = 1.6; LEN = 21; INSERT_D = 26; +SINGLE_THREAD_D = 12; function X (start_r, spacing, fn, r, i) = (start_r + (r * spacing) + (i * calcIncrement(spacing, fn))) * cos(i * calcAngle(fn)); function Y (start_r, spacing, fn, r, i) = (start_r + (r * spacing) + (i * calcIncrement(spacing, fn))) * sin(i * calcAngle(fn)); @@ -272,6 +275,39 @@ module gnal_spiral_bottom_insert_16 () { } } +module gnal_spiral_bottom_insert_single () { + $fn = 160; + void_d = 18 - .3; + H = 17; + D2 = INSERT_D; + + translate([0, 0, 0]) difference () { + union () { + cylinder(r = void_d / 2, h = H, center = true); + //skirt + translate([0, 0, -(H - 1) / 2]) cylinder(r = D2 / 2, h = 1.5, center = true); + //notches + translate([0, 0, -((H - 2.5) / 2) - .1]) { + intersection () { + cylinder(r = D2 / 2, h = 6, center = true); + difference () { + rotate([0, 45, 0]) cube([3, D2 + 2, 3], center = true); + translate([0, 0, -1.5]) cube([6, D2 + 3, 3], center = true); + } + } + intersection () { + cylinder(r = D2 / 2, h = 6, center = true); + rotate([0, 0, 90]) difference () { + rotate([0, 45, 0]) cube([3, D2 + 2, 3], center = true); + translate([0, 0, -1.5]) cube([6, D2 + 3, 3], center = true); + } + } + } + } + translate([0, 0, -LEN / 2]) metric_thread (diameter=SINGLE_THREAD_D, pitch=PITCH, thread_size = THREAD, length = LEN); + } +} + /** * Spacers **/ @@ -532,10 +568,113 @@ module gnal_spindle_top () { } //screw translate([0, 0, -37.5]) { - metric_thread (diameter=13.6, pitch=1.5 ,thread_size = 1.6, length = 21); + metric_thread (diameter=13.6, pitch = PITCH, thread_size = THREAD, length = 21); } //cylinder plug translate([0, 0, -37.5 + (21 / 2) - 1]) { cylinder(r = 12 / 2, h = 21, center = true, $fn = FINE); } +} + +module gnal_spindle_single () { + D = 50; + THICKNESS = 2.5; + H = 19.5; + ROUND = 8; + + HANDLE_D = 13.25; + HANDLE_BASE = 16; + HANDLE_TOP = 13; + HANDLE_H = 54.5; + + NOTCHES = 17; + NOTCH = 1.5; + FINE = 200; + + SINGLE_INSERT = 11; + + difference () { + //cup + translate([0, 0, ROUND - 2]) minkowski () { + cylinder(r = (D / 2) - ROUND, h = (H * 2) - ROUND, center = true, $fn = FINE); + sphere(r = ROUND, $fn = FINE); + } + translate([0, 0, ROUND - 2 + THICKNESS]) minkowski () { + cylinder(r = (D / 2) - THICKNESS - ROUND, h = (H * 2) - ROUND, center = true, $fn = 200); + sphere(r = ROUND, $fn = FINE); + } + //hollow out cup + translate([0, 0, H + ROUND - 4 - 3]) { + cylinder(r = (D / 2) + 1, h = H * 2, center = true); + } + + //inner cup bevel + translate([0, 0, (H / 2) - ROUND - 1]) { + cylinder(r1 = (D / 2) - 2.5, r2 = (D / 2) - 2.5 + 1, h = 1, center = true, $fn = FINE); + } + //outer cup bevel + translate([0, 0, (H / 2) - ROUND - 1]) { + difference () { + cylinder(r = (D / 2) + .25, h = 1, center = true, $fn = FINE); + cylinder(r2 = (D / 2) - .8, r1 = (D / 2) - .8 + 1, h = 1, center = true, $fn = FINE); + } + } + //hole in cup + translate([21, 0, -10]) cylinder(r = 3 / 2, h = 40, center = true, $fn = 40); + } + + //reference cylinder + //translate([0, 0, -6.6]) color("red") cylinder(r = 50 / 2, h = 19.57, center = true); + + //handle + translate([0, 0, -15]) { + difference() { + cylinder(r1 = HANDLE_BASE / 2, r2 = HANDLE_TOP / 2, h = HANDLE_H, $fn = FINE); + //ring negative + translate([0, 0, 31 + 14.5]) { + difference () { + cylinder(r = HANDLE_D / 2 + 2, h = 20, center = true); + cylinder(r = HANDLE_D / 2 - .5, h = 20 + 1, center = true); + } + } + //handle notches + for(i = [0 : NOTCHES]) { + rotate([0, 0, i * (360 / NOTCHES)]) { + translate([0, HANDLE_D / 2 - .5, 31 + 14.5]) { + rotate([0.75, 0, 0]) rotate([0, 0, 45]) { + Right_Angled_Triangle(a = NOTCH, b = NOTCH, height = 20, centerXYZ=[true, true, true]); + } + } + } + } + //bevel handle at top + translate([0, 0, 54.01]) { + difference () { + cylinder(r = 13 / 2, h = 1, center = true); + cylinder(r1 = 12.5 / 2, r2 = 11.5 / 2, h = 1.01, center = true); + } + } + } + + } + //attach handle with pyramid cylinder + translate ([0, 0, -13.7]) { + cylinder(r1 = 16 / 2 + 2, r2 = 16 / 2 - .1, h = 3, center = true, $fn = FINE); + } + //plate under cup + translate([0, 0, -17.75]) { + cylinder(r = 31.5 / 2, h = 1, center = true, $fn = FINE); + } + //insert for single layer + translate ([0, 0, -24.25]) { + cylinder(r = 22 / 2, h = 14, center = true, $fn = FINE); + } + //screw + translate([0, 0, -37.5 - SINGLE_INSERT]) { + metric_thread (diameter=SINGLE_THREAD_D, pitch = PITCH, thread_size = THREAD, length = 21); + } + //cylinder plug + translate([0, 0, -37.5 - SINGLE_INSERT + (21 / 2) - 1]) { + cylinder(r = 10 / 2, h = 21, center = true, $fn = FINE); + } } \ No newline at end of file diff --git a/scripts/v3.sh b/scripts/v3.sh index fb98639..e09c100 100644 --- a/scripts/v3.sh +++ b/scripts/v3.sh @@ -3,17 +3,18 @@ V="v3" echo "Rendering GNAL ${V}" +sh ./scripts/license.sh + VERSION=`bash ./scripts/version.sh` CPU=`bash ./scripts/cpu.sh` DIST=./stl IMG=./img - NOTES=./notes/${V}.csv #"quarter_a" "quarter_b" "quarter_c" "quarter_d" #quarter pieces not rendering properly -FILES=( "spindle_bottom" "spindle_top" "spacer" "top" "spiral" "insert_s8" "insert_16" "spacer_16" ) +FILES=( "spindle_bottom" "spindle_top" "spindle_single" "spacer" "top" "spiral" "insert_s8" "insert_16" "spacer_16" "insert_single" ) SIZES=( "50ft" "100ft" ) mkdir -p $DIST @@ -85,8 +86,11 @@ do openscad -o "$png" --imgsize=1920,1080 --colorscheme=DeepOcean -D "PART=\"${FILE}\"" "${scad}" fi done + # add license to directories for zip + cp ./LICENSE.txt "./stl/${SIZE}_v3/" # zip all zip -x ".*" -r "./releases/gnal_${SIZE}_v3.zip" "./stl/${SIZE}_v3/" # tar all tar --exclude=".*" -czvf "./releases/gnal_${SIZE}_v3.tar.gz" "./stl/${SIZE}_v3/" -done \ No newline at end of file +done +