]> www.ljiriste.work Git - drive_bracket.git/commitdiff
Implement the 3.5' drive bracket
authorLukáš Jiřiště <redacted>
Fri, 18 Sep 2026 10:34:56 +0000 (12:34 +0200)
committerLukáš Jiřiště <redacted>
Fri, 18 Sep 2026 10:34:56 +0000 (12:34 +0200)
bracket.scad [new file with mode: 0644]

diff --git a/bracket.scad b/bracket.scad
new file mode 100644 (file)
index 0000000..564a1ff
--- /dev/null
@@ -0,0 +1,157 @@
+$fn = 100;
+
+gap = 10;
+drive_thickness = 27;
+overdraw = 5;
+height = 10;
+thickness = 5;
+
+drive_width = 101.6;
+
+pin_depth = 6;
+pin_d = 2.56;
+pin_dist = 41.61;
+pin_height = 6.4;
+
+drive_count = 3;
+
+frame_clearance = 3;
+
+length = 2 * frame_clearance + drive_count * drive_thickness + gap * (drive_count - 1);
+
+over_desk = 40;
+
+insert_d = 4.5;
+insert_depth = min(overdraw, 6);
+
+screw_d = 3;
+
+hat_screw_d = 2.5;
+hat_hole_dist = [58, 49];
+
+module horizontal()
+{
+       union()
+       {
+               cube([length, height, thickness], center = false);
+               for (i = [0:drive_count - 1])
+                       translate([frame_clearance + pin_height + i * (drive_thickness + gap), height / 2 + pin_d / 2, 0])
+                               cylinder(d = pin_d, h = thickness + pin_depth);
+       }
+}
+
+module insert()
+{
+       difference()
+       {
+               cube([insert_depth, height, height]);
+               translate([0, height / 2, height / 2])
+                       rotate(90, [0, 1, 0])
+                       cylinder(h = height, d = insert_d);
+       }
+}
+
+module leg()
+{
+       union()
+       {
+               translate([0, -over_desk, 0])
+                       cube([overdraw, pin_dist + height + over_desk, thickness], center = false);
+               translate([0, 0, thickness])
+                       insert();
+               translate([0, pin_dist, thickness])
+                       insert();
+       }
+}
+
+module bracket()
+{
+       horizontal();
+       translate([0, pin_dist, 0])
+               horizontal();
+       translate([-overdraw, 0, 0])
+               leg();
+       translate([length, 0, 0])
+               mirror([1, 0, 0])
+                       leg();
+}
+
+outer_width = 2 * thickness + drive_width;
+outer_height = pin_dist + height;
+inner_width = outer_width - 2 * (thickness + height);
+inner_height = outer_height - 2 * height;
+
+module plate_base()
+{
+       difference()
+       {
+               square([outer_width, outer_height], center = true);
+               for (i = [-1:2:1], j = [-1:2:1])
+                       translate([i * (outer_width / 2 - height / 2 - thickness) , j * (outer_height / 2 - height / 2)])
+                               circle(d = screw_d);
+       }
+}
+
+module blank_plate()
+{
+       linear_extrude(thickness)
+               translate([outer_width / 2, outer_height / 2])
+                       difference()
+                       {
+                               plate_base();
+                               square([inner_width, inner_height], center = true);
+                       }
+}
+
+module hat_screw_hole_base()
+{
+       base_length = 7;
+       translate([base_length / 2, 0])
+               difference()
+               {
+                       square(base_length, center = true);
+                       circle(d = hat_screw_d);
+               }
+}
+
+module hat_holder()
+{
+       holder_inner_height = max(56, inner_height);
+       holder_height = holder_inner_height + 2 * height;
+       linear_extrude(thickness)
+               translate([outer_width / 2, outer_height / 2])
+               union()
+               {
+                       difference()
+                       {
+                               union()
+                               {
+                                       plate_base();
+                                       translate([0, -holder_height / 2])
+                                               square([outer_width, holder_height - outer_height], center = true);
+                               }
+                               translate([0, -(holder_height - outer_height) / 2])
+                                       square([inner_width, holder_inner_height], center = true);
+                       }
+                       translate([-(inner_width - hat_hole_dist.x) / 2, -(holder_height - outer_height) / 2, 0])
+                               for (i = [-1:2:1], j = [-1:2:1])
+                                       translate([i * hat_hole_dist.x / 2, j * hat_hole_dist.y / 2])
+                                               hat_screw_hole_base();
+               }
+}
+
+rotate(90, [1, 0, 0])
+{
+       bracket();
+       translate([0, 0, thickness * 2 + drive_width])
+               mirror([0, 0, 1])
+                       bracket();
+
+       translate([-overdraw, 0, 0])
+               rotate(-90, [0, 1, 0])
+                       blank_plate();
+
+       translate([length + thickness, 0, 0])
+               rotate(-90, [0, 1, 0])
+                       hat_holder();
+}