Parcourir la source

Add camera mounting for monitor.

Cixo Develop il y a 6 mois
Parent
commit
b49aec36b4

+ 296 - 0
assets/camera_mount.scad

@@ -0,0 +1,296 @@
+include <../config/camera_mount.scad>
+
+module camera_mount_monitor_base() {
+    thickness = camera_mount_thickness;
+    diameter = camera_mount_diameter;
+    monitor_base = camera_mount_monitor_base;
+    rounding = camera_mount_rounding;
+
+    module corner(x = 0, y = 0, rounded = true) {
+        translate([x, y]) {
+            if (rounded) {
+                circle(r = rounding);
+            } else {
+                square([rounding * 2, rounding * 2], center = true);
+            }
+        }
+    }
+
+    monitor_base_outside = [
+        monitor_base.x,
+        monitor_base.y + thickness * 2,
+        monitor_base.z + thickness
+    ];
+
+    module top_shape() {
+        move_x = monitor_base_outside.x / 2 - rounding;
+        move_y = monitor_base_outside.y / 2 - rounding;
+        move_x_right = monitor_base_outside.x / 2 + thickness + diameter;
+
+        difference() {
+            hull() {
+                corner(-move_x, move_y);
+                corner(-move_x, -move_y);
+                corner(move_x, move_y, false);
+                corner(move_x, -move_y, false);
+            
+                translate([move_x_right, 0]) {
+                    circle(r = monitor_base_outside.y / 2);
+                }
+            }
+
+            translate([move_x_right, 0]) {
+                circle(d = diameter);
+            }
+        }
+    }
+    
+    module top_base_object() {
+        linear_extrude(height = monitor_base_outside.z, center = true) {
+            top_shape();
+        }
+    }
+
+    module top_object() {
+        render() {
+            difference() {
+                top_base_object();
+                
+                translate([0, 0, -thickness / 2] ){
+                    cube(monitor_base, center = true);
+                }
+            }
+        }
+    }   
+
+    color("#61C9A8") {
+        top_object();
+    }
+}
+
+module camera_mount_connector() {
+    monitor_base = camera_mount_monitor_base;
+    thickness = camera_mount_thickness;
+    diameter = camera_mount_diameter;
+    rounding = camera_mount_rounding / 5;
+    nut_diameter = camera_mount_nut_diameter;
+    nut_thickness = camera_mount_nut_thickness;
+    screw_diameter = camera_mount_screw_diameter;
+
+    connector_size = [
+        thickness * 4 + camera_mount_monitor_base.z,
+        nut_diameter + thickness * 2,
+        nut_diameter + thickness * 2
+    ];
+
+    module z_rotator_object() {
+        height = monitor_base.z + thickness;
+        diameter_tolerance = diameter - camera_mount_tolerance; 
+
+        translate([0, 0, -height / 2 - connector_size.z / 2]) {
+            cylinder(d = diameter_tolerance, h = height, center = true);
+        }
+    }
+
+    module connector_base() {
+        move_x = connector_size.x / 2 - rounding;
+        move_y = connector_size.y / 2 - rounding;
+        height = connector_size.z;
+
+        rotate([90, 0, 0]) {
+            hull() {
+                translate([-move_x, move_y]) {
+                    cylinder(r = rounding, h = height, center = true);
+                }
+
+                translate([-move_x, -move_y]) {
+                    cylinder(r = rounding, h = height, center = true);
+                }
+
+                translate([move_x, -move_y]) {
+                    cylinder(r = rounding, h = height, center = true);
+                }
+
+                translate([move_x, move_y]) {
+                    cylinder(r = rounding, h = height, center = true);
+                }
+            }
+        }
+
+        translate([connector_size.x / 2, 0, 0]) {
+            rotate([0, 90, 0]) {
+                cylinder(
+                    d = screw_diameter * 2,
+                    h = thickness,
+                    center = true
+                );
+            }
+        }
+    }
+
+    module connector() {
+        render() {
+            difference() {
+                connector_base();
+                
+                translate([thickness, 0, 0]) {
+                    rotate([0, 90, 0]) {
+                        cylinder(
+                            d = screw_diameter, 
+                            h = connector_size.x, 
+                            center = true
+                        );
+                    }
+                }
+
+                nut_cutoff = [
+                    nut_thickness,
+                    nut_diameter,
+                    connector_size.z / 2 + nut_diameter / 2
+                ];
+
+                nut_cutoff_move_z = (
+                    connector_size.z / 4 + 
+                    nut_diameter / 4 -
+                    nut_diameter / 2
+                );
+
+                translate([0, 0, nut_cutoff_move_z]) {
+                    cube(nut_cutoff, center = true);
+                }
+            }
+        }
+    }
+
+    color("#A53860") {
+        render() {
+            union() {
+                z_rotator_object();
+                connector();
+            }
+        }
+    }
+}
+
+module camera_mount_camera() {
+    camera = camera_mount_camera;
+    camera_shape = [camera.x, camera.z];
+    thickness = camera_mount_thickness;
+    first_height = camera_mount_first_height;
+    
+    outside = [
+        camera.x + thickness * 2,
+        camera.z + thickness * 2
+    ];
+
+    inside = [
+        camera.x - thickness * 2,
+        camera.z - thickness * 2
+    ];
+
+    module frame_shape() {
+        difference() {
+            square(outside, center = true);
+            square(inside, center = true);
+        }
+    }
+
+    module first_frame_shape() {
+        difference() {
+            square(outside, center = true);
+            square(camera_shape, center = true);
+        }
+    }
+
+    module second_frame_shape() {
+        difference() {
+            first_frame_shape();
+
+            union() {
+                square([outside.x, inside.y], center = true);
+                
+                translate([-inside.x / 4, thickness]) {
+                    square([inside.x / 2, camera_shape.y], center = true);
+                }
+            }
+        }
+    }
+   
+    module object() {
+        union() {
+            linear_extrude(height = thickness) {
+                frame_shape();
+            }
+            
+            linear_extrude(height = thickness + first_height) {
+                first_frame_shape();
+            }
+            
+            linear_extrude(height = outside.y) {
+                second_frame_shape();
+            }
+        }
+
+        
+    }
+
+    screw_diameter = camera_mount_screw_diameter;
+    tolerance = camera_mount_tolerance;
+
+    in = screw_diameter * 2 + tolerance;
+    out = screw_diameter * 2 + thickness * 2;
+
+    module rotator() {
+        module outer() {
+            union() {
+                circle(d = out);
+
+                translate([0, -out / 4]) {
+                    square([out, out / 2], center = true);
+                }
+            }
+        }
+
+        module first() {
+            difference() {
+                outer();
+                circle(d = in);
+            }
+        }
+
+        module second() {
+            difference() {
+                outer();
+                circle(d = screw_diameter);
+            }
+        }
+
+        union() {
+            linear_extrude(height = thickness) {
+                second();
+            }
+
+            linear_extrude(height = thickness * 2) {
+                first();
+            }
+        }
+    }
+
+    color("#ADA8B6") {
+        render() {
+            union() {
+                object();
+               
+                translate([
+                    -outside.x / 2 + thickness * 2, 
+                    outside.y / 2 + out / 2, 
+                    out / 2
+                ]) {
+                    rotate([0, 270, 0]) {
+                        rotator();
+                    }
+                }
+            }
+        }
+    }
+}

+ 10 - 0
config/camera_mount.scad

@@ -0,0 +1,10 @@
+camera_mount_thickness = 3;
+camera_mount_rounding = 5;
+camera_mount_diameter = 4;
+camera_mount_tolerance = 0.30;
+camera_mount_monitor_base = [60, 19, 19];
+camera_mount_screw_diameter = 3;
+camera_mount_nut_diameter = 6;
+camera_mount_nut_thickness = 2.5;
+camera_mount_camera = [60, 25, 41];
+camera_mount_first_height = 6;

+ 4 - 0
manufacture/camera_mount.1.3D.scad

@@ -0,0 +1,4 @@
+include <../assets/camera_mount.scad>
+
+$fn = 100;
+camera_mount_monitor_base();

+ 4 - 0
manufacture/camera_mount.2.3D.scad

@@ -0,0 +1,4 @@
+include <../assets/camera_mount.scad>
+
+$fn = 100;
+camera_mount_connector();

+ 4 - 0
manufacture/camera_mount.3.3D.scad

@@ -0,0 +1,4 @@
+include <../assets/camera_mount.scad>
+
+$fn = 100;
+camera_mount_camera();

+ 50 - 0
renders/camera_mount.scad

@@ -0,0 +1,50 @@
+include <../assets/camera_mount.scad>
+
+$fn = 100;
+
+camera_mount_monitor_base();
+
+connector_move_x = (
+    camera_mount_monitor_base.x / 2 +
+    camera_mount_thickness * 1 + 
+    camera_mount_diameter
+);
+
+connector_move_z = (
+    camera_mount_monitor_base.z / 2 +
+    camera_mount_thickness / 2 + 
+    camera_mount_nut_diameter / 2 +
+    camera_mount_thickness
+);
+
+translate([connector_move_x, 0, connector_move_z]) {
+    camera_mount_connector();
+}
+
+camera_move_x = (
+    camera_mount_camera.x / 2 +
+    camera_mount_thickness +
+    connector_move_x +
+    camera_mount_monitor_base.z / 2+ 
+    camera_mount_thickness * 2
+);
+
+camera_move_y = (
+    camera_mount_screw_diameter * 2
+);
+
+camera_move_z = (
+    camera_mount_monitor_base.z / 2 +
+    camera_mount_thickness / 2 +
+    camera_mount_nut_diameter / 2 +
+    camera_mount_thickness -
+    camera_mount_camera.z / 2 -
+    camera_mount_thickness -
+    camera_mount_screw_diameter * 2
+);
+
+translate([camera_move_x, camera_move_y, camera_move_z]) {
+    rotate([90, 0, 0]) {
+        camera_mount_camera();
+    }
+}