浏览代码

Finally done vesa for monitors.

cixo 1 年之前
父节点
当前提交
220810d24e
共有 8 个文件被更改,包括 394 次插入52 次删除
  1. 326 48
      assets/vesa.scad
  2. 1 1
      config/hook.scad
  3. 19 2
      config/vesa.scad
  4. 5 0
      manufacture/vesa.1.3D.scad
  5. 5 0
      manufacture/vesa.2.3D.scad
  6. 5 0
      manufacture/vesa.3.3D.scad
  7. 5 0
      manufacture/vesa.4.3D.scad
  8. 28 1
      renders/vesa.scad

+ 326 - 48
assets/vesa.scad

@@ -1,55 +1,18 @@
 include <../config/vesa.scad>
+include <../config/wall.scad>
+include <../config/hook.scad>
 
-module vesa_hinge_mounting_shape() {
-    radius = vesa_hinge_screw / 2;
-
-    move_x = vesa_hinge_height / 2 - vesa_hinge_screw;
-    move_y = vesa_hinge_height / 2 + vesa_hinge_thickness + vesa_hinge_screw;
-
-    translate([move_x, 0]) {
-        circle(r = radius);
-    }
-
-    translate([-move_x, 0]) {
-        circle(r = radius);
-    }
-
-    translate([0, move_y]) {
-        circle(r = radius);
-    }
-
-    translate([0, -move_y]) {
-        circle(r = radius);
-    }
-}
+function vesa_hinge_full_height() = 
+    vesa_hinge_height 
+    + vesa_hinge_thickness * 2;
 
 module vesa_hinge_object() {
     module bottom_base_object() {
-        move_x = vesa_hinge_height / 2 - vesa_hinge_screw;
-        move_y = vesa_hinge_height / 2 + vesa_hinge_thickness + vesa_hinge_screw;
+        move_x = vesa_hinge_width / 2;
+        move_y = vesa_hinge_full_height() / 2;
 
         linear_extrude(height = vesa_hinge_thickness) {
-            difference() {
-                hull() {
-                    translate([move_x, move_y]) {
-                        circle(r = vesa_hinge_screw);
-                    }
-
-                    translate([-move_x, move_y]) {
-                        circle(r = vesa_hinge_screw);
-                    }
-
-                    translate([-move_x, -move_y]) {
-                        circle(r = vesa_hinge_screw);
-                    }
-
-                    translate([move_x, -move_y]) {
-                        circle(r = vesa_hinge_screw);
-                    }
-                }
-
-                vesa_hinge_mounting_shape();
-            }
+            square([move_x * 2, move_y * 2], center = true);
         }
     }
 
@@ -77,7 +40,7 @@ module vesa_hinge_object() {
         }
     }
 
-    move_y = vesa_hinge_depth / 2 + vesa_hinge_thickness / 2;
+    move_y = vesa_hinge_height / 2 + vesa_hinge_thickness / 2;
     move_z = vesa_hinge_thickness;
 
     translate([0, move_y, move_z]) {
@@ -91,6 +54,321 @@ module vesa_hinge_object() {
     bottom_base_object();
 }
 
-module vesa_object() {
-    vesa_hinge_object(); 
+module vesa_thread(rotated = true) {
+    module base_object() {
+        cylinder(r = vesa_thread_radius / 2, h = vesa_thread_height);
+        cylinder(r = vesa_thread_top_radius / 2, h = vesa_thread_top_height);
+    }
+
+    if (rotated) {
+        rotate([0, 180, 0]) {
+            base_object();
+        }
+    } else {
+        base_object();
+    }
+}
+
+module vesa_connector_object(center = false) {
+    module base_shape() {
+        hull() {
+            move_x = vesa_connector_length / 2 - vesa_hinge_depth / 2;
+        
+            translate([move_x, 0]) {
+                circle(r = vesa_hinge_depth / 2);
+            }
+
+            translate([-move_x, 0]) {
+                circle(r = vesa_hinge_depth / 2);
+            }
+        }
+    }
+
+    module mounting_screws() {
+        radius = vesa_hinge_screw / 2;
+        move_x = vesa_connector_length / 2 - vesa_hinge_depth / 2 + radius;
+
+        translate([move_x, 0]) {
+            circle(r = radius);
+        }
+
+        translate([-move_x, 0]) {
+            circle(r = radius);
+        }
+    }
+
+    module base_object() {
+        height = vesa_hinge_height - vesa_connector_margin;
+
+        linear_extrude(height = height, center = center) {
+            difference() {
+                base_shape();
+                mounting_screws();
+            }
+        }
+    }
+
+    module threads() {
+        translate([0, 0, vesa_hinge_height - vesa_connector_margin]) {
+            vesa_thread();
+        }
+
+        translate([0, 0, 0]) {
+            vesa_thread(false);
+        }
+    }
+
+    render() {
+        difference() {
+            radius = vesa_hinge_screw / 2;
+            move_x = vesa_connector_length / 2 - vesa_hinge_depth / 2 + radius;
+            correct = vesa_hinge_height - vesa_connector_margin;
+            center_correct = center ? -correct / 2 : 0;
+        
+            base_object();
+    
+            translate([move_x, 0, center_correct]) {
+                threads();
+            }
+
+            translate([-move_x, 0, center_correct]) {
+                threads();
+            }
+
+            first_cable_x = move_x 
+            - vesa_cable_hole / 1.5
+            - vesa_thread_top_radius;
+
+            cable_z = vesa_cable_hole / 1.5;
+
+            translate([first_cable_x , 0, cable_z]) {
+                rotate([90, 0, 0]) {
+                    cylinder(
+                        r = vesa_cable_hole / 2, 
+                        h = vesa_hinge_height,
+                        center = true
+                    );
+                }
+            }
+
+            translate([0 , 0, cable_z]) {
+                rotate([90, 0, 0]) {
+                    cylinder(
+                        r = vesa_cable_hole / 2, 
+                        h = vesa_hinge_height,
+                        center = true
+                    );
+                }
+            }
+
+            translate([-first_cable_x , 0, cable_z]) {
+                rotate([90, 0, 0]) {
+                    cylinder(
+                        r = vesa_cable_hole / 2, 
+                        h = vesa_hinge_height,
+                        center = true
+                    );
+                }
+            }
+        }
+    }
+}
+
+module vesa_wall_hinge_object() {
+    module wall_base_shape() {
+        move_x = vesa_wall_width / 2 - vesa_rounding;
+        move_y = vesa_wall_height / 2 - vesa_rounding;
+        rounding = vesa_rounding;
+
+        hull() {
+            translate([move_x, move_y]) {
+                circle(r = rounding);
+            }
+
+            translate([-move_x, move_y]) {
+                circle(r = rounding);
+            }
+
+            translate([move_x, -move_y]) {
+                circle(r = rounding);
+            }
+
+            translate([-move_x, -move_y]) {
+                circle(r = rounding);
+            }
+        }
+    }
+
+    module wall_holes() {
+        move_x = (
+            vesa_wall_width
+            - (vesa_wall_width % wall_holes_space)
+        ) / 2;
+        
+        move_y = (
+            vesa_wall_height 
+            - (vesa_wall_height % wall_holes_space)
+        ) / 2;
+
+        for (count_x = [-move_x : wall_holes_space : move_x]) {
+            for (count_y = [-move_y : wall_holes_space : move_y]) {
+                translate([count_x, count_y]) {
+                    circle(r = hook_mounting_hole / 2);
+                }
+            }
+        }
+    }
+
+    module wall_shape() {
+        difference() {
+            wall_base_shape();
+            wall_holes();
+        }
+    }
+
+    module wall_object() {
+        linear_extrude(height = vesa_hinge_thickness) {
+            wall_shape();
+        }
+    }
+
+    union() {
+        vesa_hinge_object();
+        wall_object();
+    }
+}
+
+module vesa_corner_base_object(move = false) {
+    radius = vesa_hinge_full_height() / 2;
+    move_x = vesa_hinge_height / 3;
+
+    rotate([90, 0, 90]) {
+        linear_extrude(height = vesa_corner_thickness, center = true) {
+            difference() {
+                hull() {
+                    translate([0, radius / 2]) {
+                        square([radius * 2, radius], center = true);
+                    }
+
+                    circle(r = radius);
+                }
+                
+                circle(r = vesa_hinge_screw / 2);
+               
+                if (move) {
+                    difference() {
+                        size = radius - vesa_hinge_screw;
+                        move = (size + vesa_hinge_screw) * 2;
+                    
+                        circle(r = size + vesa_hinge_screw / 2);
+                        circle(r = size - vesa_hinge_screw / 2);
+                        
+                        translate([0, move / 4]) {
+                            square([move, move / 2], center = true);
+                        }
+                    }
+                } else {
+                    translate([0, radius - vesa_hinge_screw]) {
+                        circle(r = vesa_hinge_screw / 2);
+                    }
+                }
+            }
+        }
+    }
+}   
+
+module vesa_corner_hinge_object() {
+    radius = vesa_hinge_full_height() / 2;
+    move_x = vesa_hinge_width / 3;
+
+    module corner_object() {
+        vesa_corner_base_object();
+    }
+
+    union() {
+        vesa_hinge_object();
+        
+        translate([move_x, 0, -radius]) {
+            corner_object();
+        }
+
+        translate([-move_x, 0, -radius]) {
+            corner_object();
+        }
+    }
+}
+
+module vesa_plate_corner_object() {
+    module vesa_plate_base_shape() {
+        move_x = vesa_width / 2 - vesa_rounding + vesa_margin;
+        move_y = vesa_height / 2 - vesa_rounding + vesa_margin;
+        rounding = vesa_rounding;
+        
+        hull() {
+            translate([move_x, move_y]) {
+                circle(r = rounding);
+            }
+
+            translate([move_x, -move_y]) {
+                circle(r = rounding);
+            }
+
+            translate([-move_x, move_y]) {
+               circle(r = rounding);
+            }    
+
+            translate([-move_x, -move_y]) {
+                circle(r = rounding);
+            }
+        }
+    }
+
+    module vesa_plate_shape() {
+        radius = vesa_screw / 2;
+        move_x = vesa_width / 2;
+        move_y = vesa_height / 2;
+
+        difference() {
+            vesa_plate_base_shape();
+
+            translate([move_x, move_y]) {
+                circle(r = radius);
+            }
+
+            translate([-move_x, move_y]) {
+                circle(r = radius);
+            }
+ 
+            translate([move_x, -move_y]) {
+                circle(r = radius);
+            }
+ 
+            translate([-move_x, -move_y]) {
+                circle(r = radius);
+            }
+        }
+    }
+
+    module vesa_plate_object() {
+        height = max(vesa_hinge_thickness, vesa_plate_thickness);
+        correct = vesa_hinge_thickness - height;
+        
+        translate([0, 0, correct - height]) {
+            linear_extrude(height = height) {
+                vesa_plate_shape();                
+            }
+        }
+    }  
+    
+    union() {
+        vesa_plate_object();   
+        
+        translate([0, 0, vesa_hinge_full_height() / 2]) {
+            rotate([180, 0, 0]) {
+                vesa_corner_base_object(true);
+            }
+        }
+    }
 }
+
+

+ 1 - 1
config/hook.scad

@@ -1,7 +1,7 @@
 hook_mounting_hole = 3;
 hook_entrance_margin = 2;
 hook_entrance_height = 1.5;
-hook_holding_margin = 0.2;
+hook_holding_margin = 0.7;
 hook_holding_height_margin = 0.2;
 hook_color = "lightblue";
 hook_manufacture_count = 4;

+ 19 - 2
config/vesa.scad

@@ -1,5 +1,22 @@
-vesa_rounting = 5;
+vesa_rounding = 5;
 vesa_hinge_screw = 3;
+vesa_hinge_width = 15;
 vesa_hinge_depth = 15;
-vesa_hinge_height = 15;
+vesa_hinge_height = 22;
 vesa_hinge_thickness = 4;
+vesa_connector_length = 70;
+vesa_connector_margin = 1;
+vesa_thread_radius = 5;
+vesa_thread_top_radius = 8;
+vesa_thread_height = 9;
+vesa_thread_top_height = 1;
+vesa_plate_thickness = 2;
+vesa_wall_width = 60;
+vesa_wall_height = 50;
+vesa_corner_thickness = 5;
+
+vesa_cable_hole = 4;
+vesa_margin = 10;
+vesa_width = 100;
+vesa_height = 100;
+vesa_screw = 4;

+ 5 - 0
manufacture/vesa.1.3D.scad

@@ -0,0 +1,5 @@
+include <../assets/vesa.scad>
+
+$fn = 100;
+
+vesa_plate_corner_object();

+ 5 - 0
manufacture/vesa.2.3D.scad

@@ -0,0 +1,5 @@
+include <../assets/vesa.scad>
+
+$fn = 100;
+
+vesa_connector_object();

+ 5 - 0
manufacture/vesa.3.3D.scad

@@ -0,0 +1,5 @@
+include <../assets/vesa.scad>
+
+$fn = 100;
+
+vesa_wall_hinge_object();

+ 5 - 0
manufacture/vesa.4.3D.scad

@@ -0,0 +1,5 @@
+include <../assets/vesa.scad>
+
+$fn = 100;
+
+vesa_corner_hinge_object();

+ 28 - 1
renders/vesa.scad

@@ -1,4 +1,31 @@
 include <../assets/vesa.scad>
 
 $fn = 100;
-vesa_object();
+
+translate([0, 0, 0]) {
+    vesa_connector_object(true);
+}
+
+hinge_move_x = (
+    vesa_connector_length / 2 
+    + vesa_hinge_screw / 2 
+    + vesa_hinge_thickness
+);
+
+translate([hinge_move_x, 0, 0]) {
+    rotate([90, 0, 270]) {
+        vesa_wall_hinge_object();
+    }
+}
+
+translate([-hinge_move_x, 0, 0]) {
+    rotate([90, 0, 90]) {
+        vesa_corner_hinge_object();
+    }
+}
+
+translate([-hinge_move_x - vesa_hinge_full_height() * 1, 0, 0]) {
+    rotate([90, 0, 90]) {
+        vesa_plate_corner_object();
+    }
+}