2023-12-14 22:27:42 -06:00
|
|
|
$triangle_width = 65;
|
|
|
|
$triangle_height = 40;
|
|
|
|
$triangle_thickness = 5.87;
|
|
|
|
$triangle_screw_hole_diameter = 4.7;
|
|
|
|
|
|
|
|
$triangle_x_hole_gap = 40;
|
|
|
|
$triangle_y_hole_gap = 20;
|
|
|
|
$triangle_x_offset = 19;
|
|
|
|
$triangle_y_offset = 5;
|
|
|
|
|
2023-12-17 12:40:52 -06:00
|
|
|
$fn=10;
|
2023-12-14 22:27:42 -06:00
|
|
|
|
2023-12-17 12:40:52 -06:00
|
|
|
use <Thread_Library.scad>
|
|
|
|
|
|
|
|
camera_mount();
|
|
|
|
|
|
|
|
$camera_mount_thickness = 1;
|
|
|
|
$camera_screw_gap_y = 25.2;
|
|
|
|
$camera_screw_diameter = 2.75;
|
|
|
|
module camera_mount() {
|
|
|
|
difference() {
|
|
|
|
cylinder(h=$camera_mount_thickness, d=$camera_screw_gap_y);
|
|
|
|
translate([0, 0, -0.1])
|
|
|
|
cylinder(h=3 * $camera_mount_thickness, d=$camera_screw_gap_y - $camera_screw_diameter * 3);
|
|
|
|
rotate([0, 0, 90])
|
|
|
|
translate([$camera_screw_gap_y / 2 - $camera_screw_diameter / 1.33, 0, -0.1])
|
|
|
|
cylinder(h=3 * $camera_mount_thickness, d=$camera_screw_diameter);
|
|
|
|
rotate([0, 0, -90])
|
|
|
|
translate([$camera_screw_gap_y / 2 - $camera_screw_diameter / 1.33, 0, -0.1])
|
|
|
|
cylinder(h=3 * $camera_mount_thickness, d=$camera_screw_diameter);
|
|
|
|
translate([-1 * $camera_screw_gap_y - $camera_screw_diameter / 1.33, -1 * $camera_screw_gap_y / 2, -0.1])
|
|
|
|
cube([$camera_screw_gap_y, $camera_screw_gap_y, 3 * $camera_mount_thickness]);
|
|
|
|
};
|
|
|
|
}
|
2023-12-14 22:27:42 -06:00
|
|
|
|
|
|
|
module attachment_point() {
|
|
|
|
difference() {
|
|
|
|
linear_extrude($triangle_thickness)
|
|
|
|
polygon([[0, 0], [$triangle_width, $triangle_height], [$triangle_width, 0]]);
|
|
|
|
translate([$triangle_x_offset, $triangle_y_offset, 0])
|
|
|
|
union() {
|
|
|
|
hole_puncher();
|
|
|
|
translate([$triangle_x_hole_gap, 0, 0]) hole_puncher();
|
|
|
|
translate([$triangle_x_hole_gap, $triangle_y_hole_gap, 0]) hole_puncher();
|
|
|
|
};
|
|
|
|
translate([$rounded_nose, 4.234, -0.2])
|
|
|
|
rotate([0, 0, 120])
|
|
|
|
nose_rounding();
|
|
|
|
translate([0, $triangle_height - $triangle_y_offset * 1.5, -0.1])
|
|
|
|
cube([100, 100, $triangle_thickness * 3]);
|
|
|
|
translate([45, 12, -0.1])
|
|
|
|
cylinder(h=100, r=10);
|
|
|
|
translate([28, 8, -0.1])
|
|
|
|
cylinder(h=100, r=4);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
$screen_enter_diameter = 10;
|
|
|
|
$screen_lock_diameter = 6.25;
|
|
|
|
$screen_enter_gap = 30 + $screen_lock_diameter;
|
|
|
|
$screen_enter_y_offset = 14;
|
|
|
|
$screen_mount_width = 50;
|
|
|
|
$screen_mount_height = 60;
|
|
|
|
$screen_mount_thickness = 5;
|
|
|
|
$screen_side_cutout_size = 36;
|
|
|
|
|
|
|
|
module screen_mount() {
|
|
|
|
difference() {
|
|
|
|
cube([$screen_mount_width, $screen_mount_height, $screen_mount_thickness]);
|
|
|
|
translate([$screen_mount_width / 2, $screen_enter_y_offset, -0.1])
|
|
|
|
cylinder(h=$screen_mount_thickness * 2, d=$screen_enter_diameter);
|
|
|
|
translate([$screen_mount_width / 2, $screen_enter_y_offset + $screen_enter_gap, -0.1])
|
|
|
|
cylinder(h=$screen_mount_thickness * 2, d=$screen_enter_diameter);
|
|
|
|
for (i = [0:1:7]) {
|
|
|
|
mount_hole_puncher(i * -1);
|
|
|
|
};
|
|
|
|
translate([$screen_mount_width, $screen_mount_height / 2, -0.1])
|
|
|
|
cylinder(h=$screen_mount_thickness * 2, d=$screen_side_cutout_size);
|
|
|
|
translate([0, $screen_mount_height / 2, -0.1])
|
|
|
|
cylinder(h=$screen_mount_thickness * 2, d=$screen_side_cutout_size);
|
|
|
|
/*
|
|
|
|
translate([25, 0, -0.1])
|
|
|
|
rotate([0, 0, -30])
|
|
|
|
cube([$screen_mount_width, $screen_mount_height, $screen_mount_thickness * 2]);
|
|
|
|
translate([-10, -20, -0.1])
|
|
|
|
rotate([0, 0, 30])
|
|
|
|
cube([$screen_mount_width, $screen_mount_height, $screen_mount_thickness * 2]);
|
|
|
|
|
|
|
|
translate([0, $screen_mount_height, 0])
|
|
|
|
mirror([0, 1, 0])
|
|
|
|
union() {
|
|
|
|
translate([25, 0, -0.1])
|
|
|
|
rotate([0, 0, -30])
|
|
|
|
cube([$screen_mount_width, $screen_mount_height, $screen_mount_thickness * 2]);
|
|
|
|
translate([-10, -20, -0.1])
|
|
|
|
rotate([0, 0, 30])
|
|
|
|
cube([$screen_mount_width, $screen_mount_height, $screen_mount_thickness * 2]);
|
|
|
|
};
|
|
|
|
*/
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
module mount_hole_puncher($gap) {
|
|
|
|
translate([$screen_mount_width / 2, $screen_enter_y_offset + $gap, -0.1])
|
|
|
|
cylinder(h=$screen_mount_thickness * 2, d=$screen_lock_diameter);
|
|
|
|
translate([$screen_mount_width / 2, $screen_enter_y_offset + $screen_enter_gap + $gap, -0.1])
|
|
|
|
cylinder(h=$screen_mount_thickness * 2, d=$screen_lock_diameter);
|
|
|
|
};
|
|
|
|
|
|
|
|
module hole_puncher() {
|
|
|
|
translate([0, 0, $triangle_thickness * -1])
|
|
|
|
cylinder(h=$triangle_thickness * 3, d=$triangle_screw_hole_diameter);
|
|
|
|
};
|
|
|
|
|
|
|
|
$rounded_nose = 25;
|
|
|
|
module nose_rounding() {
|
|
|
|
difference() {
|
|
|
|
color("red") cube([$rounded_nose, $rounded_nose, $triangle_thickness * 2]);
|
|
|
|
translate([-3, 0, $triangle_thickness / -2])
|
|
|
|
color("blue")
|
|
|
|
cylinder(h=$triangle_thickness * 3, d=$rounded_nose);
|
|
|
|
};
|
|
|
|
};
|