From: Lukáš Jiřiště Date: Fri, 18 Sep 2026 10:34:56 +0000 (+0200) Subject: Implement the 3.5' drive bracket X-Git-Url: https://git.ljiriste.work/?a=commitdiff_plain;h=fff97675f5aed5c3ceb473fd2db9b299e6b42f91;p=drive_bracket.git Implement the 3.5' drive bracket --- diff --git a/bracket.scad b/bracket.scad new file mode 100644 index 0000000..564a1ff --- /dev/null +++ b/bracket.scad @@ -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(); +}