commit 7bb8b65e5456d3cad904c8c1a9d22c7b0a31eed4 Author: Ian Gulliver Date: Sun Jul 12 11:43:06 2026 -0700 Initial import 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/2020 8mm cap.scad b/2020 8mm cap.scad new file mode 100644 index 0000000..e321616 --- /dev/null +++ b/2020 8mm cap.scad @@ -0,0 +1,63 @@ +$fn = 500; + +//cylinder(h=10, d=11); +// 4.5 thick under screw +// 12 diameter screw head hole (~10.8 screw head) + +e = 0.02; +w = 50.8; + +difference() { + union() { + hull() { + for (x=[0, 15], y=[0, w - 1]) + translate([x, y, 0]) { + translate([0.5, 0.5, 0]) + cylinder(h=1, d=1); + + translate([0.5, 0.5, 1.0]) + sphere(d=1); + } + + for (x=[0, 15]) + translate([x, 0, 0]) { + translate([0.5, w / 2, 15]) + rotate([0, 90, 0]) + rotate_extrude() + translate([7, 0, 0]) + circle(d=1); + } + } + + for (x=[-0.25, 11.25], y=[12.7 - (6.5 / 2), w - 12.7 - (6.5 / 2)]) { + translate([x, y, 0]) + rotate([-90, 0, 0]) + intersection() { + translate([0.5, -0.5, 0]) + hull() + for (p=[[0, 0], [1.5, 1.5], [2.5, 1.5], [4, 0]]) { + translate([p[0], p[1], 0]) + cylinder(h=6.5, d=1); + } + + cube([10, 10, 10]); + } + } + } + + translate([-e, w / 2, 15]) + rotate([0, 90, 0]) + cylinder(h=10, d1=8.2, d2=8.1); + + for (y=[12.7, w - 12.7]) + translate([0, y, 0]) { + translate([8, 0, -e]) { + cylinder(h=20, d=6.8); + + translate([0, 0, 4]) + cylinder(h=20, d=12); + } + } +} + + \ No newline at end of file diff --git a/2020 8mm cap.stl b/2020 8mm cap.stl new file mode 100644 index 0000000..30a6a69 --- /dev/null +++ b/2020 8mm cap.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e88af6930d667f91ea5c75cf30da960271b4a23529b087b13ee86abefabf51b +size 37608424 diff --git a/2020 wheel truck.scad b/2020 wheel truck.scad new file mode 100644 index 0000000..60f18a2 --- /dev/null +++ b/2020 wheel truck.scad @@ -0,0 +1,44 @@ +// ECHO: "max_radius=", 13.6 +// ECHO: "total_height=", 28.9 + +// clearance radius = 4 + 13.6 = 17.6 +// clearance diameter = 17.6 * 2 = 35.2 + +// 2020 width is 50.8 + +// linear bearing od=15, l=24 + +// 15 + 15 + 35.2 = 65.2 === can't go side-by-side + +$fn = 500; + +difference() { + color("red", 0.7) + hull() { + for(y=[6, 44.8], z=[6, 34.5]) { + translate([0, y, z]) + rotate([0, 90, 0]) + cylinder(h=54, r=6); + } + } + + for (y=[9.4, 41.4]) { + translate([-1, y, 9]) + rotate([0, 90, 0]) + cylinder(h=60, d=13); + } + + for (x=[2, 28], y=[9.4, 41.4]) { + translate([x, y, 9]) + rotate([0, 90, 0]) + cylinder(h=24, d=15); + } + + translate([12, (50.8 / 2), 34]) + rotate([0, 90, 0]) + cylinder(h=30, r=20); + + translate([2, (50.8 / 2), 34]) + rotate([0, 90, 0]) + cylinder(h=50, d=8); +} \ No newline at end of file diff --git a/2020 wheel-c.stl b/2020 wheel-c.stl new file mode 100644 index 0000000..4b26863 --- /dev/null +++ b/2020 wheel-c.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b7b96d9df4d8b467f2aa9f126836d3545306d030d422fdae2af230ecc188c62 +size 2263467 diff --git a/2020 wheel-w.stl b/2020 wheel-w.stl new file mode 100644 index 0000000..a51deec --- /dev/null +++ b/2020 wheel-w.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4242764703d1d342bbd6ac962e2294051394f4d422cc33be880115e19cd0f2b0 +size 1688107 diff --git a/2020 wheel.scad b/2020 wheel.scad new file mode 100644 index 0000000..9778aee --- /dev/null +++ b/2020 wheel.scad @@ -0,0 +1,107 @@ +$fn = 300; + +// * c w +part = "w"; + +slot_center_spacing = 25.4; + + +ramp_height = 5; +ramp_slot_mid = 4.25; +ramp_depth = 2.5; + +deramp_height = 1; +deramp_depth = (ramp_depth / ramp_height) * (ramp_height - deramp_height); + +bearing_radius = 8.1; +bearing_underhang = 1; +bulk_radius = 4; + +bearing_height = 5; +bearing_count = 2; + +core_radius = 9.5; +core_bump_radius = 1; +core_bump_height = 2; + +e = 0.02; + +inner_radius = bearing_radius - bearing_underhang; +echo("inner_radius=", inner_radius); + +outer_radius = inner_radius + bulk_radius; +echo("outer_radius=", outer_radius); + +echo("max_radius=", outer_radius + ramp_depth); + +mid = slot_center_spacing - ramp_slot_mid - ramp_slot_mid; + +total_height = deramp_height + ramp_height + mid + ramp_height + deramp_height; +echo("total_height=", total_height); + +bearing_portion = mid / bearing_count; + +if (part == "*" || part == "c") { + color("grey", 0.6) + intersection() { + wheel(); + core_mask(); + } +} + +if (part == "*" || part == "w") { + color("red", 0.6) + difference() { + wheel(); + core_mask(); + } +} + +module core_mask() { + rotate_extrude() + polygon([ + [0, total_height + e], + [0, 0 - e], + + [core_radius + core_bump_radius, 0 - e], + [core_radius + core_bump_radius, 0], + [core_radius, core_bump_height], + [core_radius, total_height - core_bump_height], + [core_radius + core_bump_radius, total_height], + [core_radius + core_bump_radius, total_height + e], + ]); +} + +module wheel() { + // deramp + // ramp + // [tip] + // ramp + // mid + // ramp + // [tip] + // ramp + // deramp + + difference() { + rotate_extrude() + polygon([ + [inner_radius, total_height], + [inner_radius, 0], + + [outer_radius + deramp_depth, 0], + [outer_radius + ramp_depth, deramp_height], + [outer_radius, deramp_height + ramp_height], + [outer_radius, deramp_height + ramp_height + mid], + [outer_radius + ramp_depth, deramp_height + ramp_height + mid + ramp_height], + [outer_radius + deramp_depth, total_height], + ]); + + + for (b = [0 : bearing_count - 1]) { + translate([0, 0, deramp_height + ramp_height + (b * bearing_portion)]) + translate([0, 0, bearing_portion / 2 - bearing_height / 2]) + cylinder(h=bearing_height, r=bearing_radius); + } + } +} \ No newline at end of file diff --git a/shot container lid.scad b/shot container lid.scad new file mode 100644 index 0000000..5959026 --- /dev/null +++ b/shot container lid.scad @@ -0,0 +1,37 @@ +$fn = 200; + +difference() { + union() { + rotate_extrude() { + translate([8, 1, 0]) + circle(d=2); + + translate([44, 1, 0]) + circle(d=2); + + translate([8, 0, 0]) + square([36, 1]); + } + + translate([0, 0, 10]) + scale([1, 1, 0.7]) + rotate_extrude() { + translate([9, 1, 0]) + circle(d=4); + + translate([43, 1, 0]) + circle(d=4); + } + + translate([0, 0, 1]) + cylinder(h=10, d=90); + } + + cylinder(h=16, d=14); + + translate([0, 0, 2]) + rotate_extrude() { + translate([11, 0, 0]) + square([30, 16]); + } +} \ No newline at end of file diff --git a/shot container.scad b/shot container.scad new file mode 100644 index 0000000..f05c081 --- /dev/null +++ b/shot container.scad @@ -0,0 +1,37 @@ +$fn = 400; + +difference() { + union() { + rotate_extrude() { + translate([4, 1, 0]) + circle(d=2); + + translate([40, 1, 0]) + circle(d=2); + + translate([4, 0, 0]) + square([36, 1]); + } + + translate([0, 0, 90.5]) + scale([1, 1, 0.7]) + rotate_extrude() { + translate([5, 1, 0]) + circle(d=4); + + translate([39, 1, 0]) + circle(d=4); + } + + translate([0, 0, 1]) + cylinder(h=90, d=82); + } + + cylinder(h=92, d=6); + + translate([0, 0, 5]) + rotate_extrude() { + translate([7, 0, 0]) + square([30, 92]); + } +} \ No newline at end of file