]> www.fi.muni.cz Git - things.git/commitdiff
808 camera lens holder for glasses
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Fri, 10 Nov 2017 14:20:54 +0000 (15:20 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Fri, 10 Nov 2017 14:20:54 +0000 (15:20 +0100)
808-glasses-holder.scad [new file with mode: 0644]
firefly-q6-case.scad
firefly-q6-hood.scad
firefly-q6-lens-cap.scad
mini-arrow-fuselage-front.scad
mini-arrow-spring2.scad
rc-plane-wheel.scad
rocket.scad
skysurfer-motor-cover.scad
skysurfer-motor-cover.svg

diff --git a/808-glasses-holder.scad b/808-glasses-holder.scad
new file mode 100644 (file)
index 0000000..c675f04
--- /dev/null
@@ -0,0 +1,51 @@
+infty = 100;
+eps = 0.01;
+
+wall = 1.5;
+
+lens_size = 9.2;
+lens_depth = 3;
+lens_side = 0.9;
+lens_angle = 0;
+
+cable_w = 7;
+
+stem_w = 2.75;
+slot_l = 8;
+slot_x_off = 6;
+slot_angle = 15;
+slot_y_angle = 10;
+
+// FIXME: Print rotated 180 degrees!
+module body() {
+       hull() {
+               rotate([lens_angle, 0, 0])
+               translate([-lens_size/2-wall, 0, 0])
+                       cube([lens_size+2*wall, 2*wall+lens_depth, wall+lens_size/2]);
+               rotate([0, 0, slot_angle])
+               translate([-stem_w-wall-slot_x_off, -slot_l, 0])
+                       cube([stem_w + 2*wall, slot_l, wall + lens_size/2]);
+       }
+}
+
+difference() {
+       body();
+       // bottom
+       translate([-infty/2, -infty/2, -infty]) cube(infty);
+       // lens body
+       rotate([lens_angle, 0, 0])
+       translate([-lens_size/2, wall, wall+(wall+lens_depth)*tan(-lens_angle)])
+               cube([lens_size, lens_depth, lens_size + eps]);
+       // lens front
+       rotate([lens_angle, 0, 0])
+       translate([-lens_size/2+lens_side, wall, wall+(wall+lens_depth)*tan(-lens_angle)])
+               cube([lens_size-2*lens_side, lens_depth+wall+eps, lens_size + wall + 2*eps]);
+       // cable hole
+       rotate([lens_angle, 0, 0])
+       translate([-cable_w/2, wall, -eps])
+               cube([cable_w, lens_depth+wall+eps, lens_size+wall+2*eps]);
+       rotate([0, 0, slot_angle])
+       rotate([0, slot_y_angle, 0])
+       translate([-stem_w-slot_x_off, -infty/2, lens_size/2-1.5-infty])
+               cube([stem_w, infty, infty]);
+}
index acc8ef656efe92bb751e270fe10a7688a44a0493..47b9a43097b7c8dad46aedbac28603aed6cc2239 100644 (file)
@@ -11,8 +11,11 @@ corner_side_h = 5;
 
 hook_w = 3.5;
 hook_l = 6;
-hook_hole_l = 2;
-hook_hole_w = 1.5;
+hook_hole_l = 3;
+hook_hole_w = 2;
+
+ziptie_w = 4;
+ziptie_h = 3;
 
 // base plate
 difference() {
@@ -26,6 +29,19 @@ difference() {
        //      cube([body_l-2*corner_r-2*hook_l, body_w - 2*corner_r, wall +2*eps]);
        translate([-body_l/2+corner_r, -body_w/2+corner_r, -eps])
                cube([body_l-2*corner_r, body_w - 2*corner_r, wall +2*eps]);
+
+       // ziptie angles
+       for (x = [-1, 1]) for (y = [-1, 1]) scale([x, y, 1])
+               translate([body_l/2-corner_r-hook_l-ziptie_w,
+                       body_w/2+wall/2-corner_r/2, wall])
+                       rotate([-40, 0, 0])
+                       translate([0, -ziptie_h/2, -infty/2])
+                       cube([ziptie_w, ziptie_h, infty]);
+               
+       // more space for lens
+       for (x = [-1, 1]) scale([x, 1, 1])
+               translate([body_l/2, -body_w/2+corner_r, -eps])
+                       cube([wall+eps, body_w-2*corner_r, wall+2*eps]);
 }
 
 // raised corner bottom
@@ -48,6 +64,8 @@ for (x = [-1, 1]) for (y = [-1, 1]) scale([x, y, 1])
                translate([0, 0,-eps])
                        cylinder(r = corner_r, h = infty);
                translate([-infty, -infty/2, -infty/2]) cube(infty);
+               // front edges cut
+               rotate([-30, 0, 0])
                translate([-infty/2, -infty, -infty/2]) cube(infty);
        }
 
index a62c8a7eacdfd1389c81b62f62dad5533f027b78..155e5d39b1f475c20b424a18a6b7871e0670f811 100644 (file)
@@ -3,21 +3,67 @@ eps = 0.01;
 // Q6 lens dimensions
 yellow_ring_d = 19.5 + 0.5;
 yellow_ring_h = 3.5;
+lens_d = 17;
 
 view_angle = 95;
 
 hood_h = 20;
-hood_top_d = 30;
+hood_top_d = 25;
 
-lens_d = 15;
+lens_d = 8;
 wall = 1.5;
-rectangle_h = 80;
+rectangle_h = 120;
 rectangle_w2h = 1.777;
 
 rect_d2 = rectangle_h * tan(view_angle/2);
 rect_x = 2*rect_d2/sqrt(1+rectangle_w2h*rectangle_w2h);
 rect_y = rectangle_w2h * rect_x;
 $fn = 128;
+
+module view_field() {
+       minkowski() {
+       hull() {
+               cube(eps);
+               translate([-rect_x/2, -rect_y/2, rectangle_h])
+                       cube([rect_x, rect_y, eps]);
+       }
+       cylinder(r=lens_d/2, h = eps);
+       }
+}
+
+
+hood_r = 30;
+hood_h = 60;
+
+hood_y = 80;
+hood_x = 50;
+
+difference() {
+/*
+       union() {
+               translate([hood_x/2-wall, -hood_y/2, 0])
+                       cube([wall, hood_y, hood_h]);
+               for (y = [-1,1]) scale([1, y, 1])
+                       translate([-hood_x/2, hood_y/2-wall, 0])
+                       cube([hood_x, wall, hood_h]);
+       }
+*/
+       scale([1, 1.5, 1])
+       cylinder(r = hood_r, h = hood_h);
+       scale([1, 1.5, 1])
+       translate([0, 0, -eps])
+               cylinder(r = hood_r-wall, h = hood_h+2*eps);
+
+       view_field();
+}
+
+difference() {
+       cylinder(r = yellow_ring_d/2+wall, h = yellow_ring_h);
+       translate([0, 0, -eps])
+               cylinder(r = yellow_ring_d/2, h = yellow_ring_h+2*eps);
+}
+               
+/*
 difference() {
        // body
        hull() {
@@ -44,5 +90,4 @@ difference() {
 
 }
        
-
-
+*/
index 993d2ad83b0ce3e26b077dca696fdf90751dfa0d..4962f6d8136841354dabea2ac82238da62711ca5 100644 (file)
@@ -2,13 +2,16 @@ eps = 0.01;
 
 // Q6 lens dimensions
 black_ring_d = 18.5 + 0.5;
-yellow_ring_d = 19.5 + 0.5;
+yellow_ring_d = 19.5 + 1;
 yellow_ring_d2 = 20.5;
 black_ring_h = 3.5;
 yellow_ring_h = 3.5;
 lens_overhang = 2;
 
-wall = 1.5;
+clip_h = 0.5;
+clip_w = 1;
+
+wall = 1;
 
 body_h = wall + lens_overhang + black_ring_h + yellow_ring_h;
 body_d = 2*wall + yellow_ring_d2;
@@ -20,8 +23,13 @@ difference() {
                cylinder(r = black_ring_d/2-wall, h = lens_overhang+eps);
        translate([0, 0, wall + lens_overhang])
                cylinder(r = black_ring_d/2, h = black_ring_h+eps);
-       translate([0, 0, wall + lens_overhang + black_ring_h])
+       translate([0, 0, wall + lens_overhang + black_ring_h]) difference() {
                cylinder(r = yellow_ring_d/2, h = yellow_ring_h+eps);
+               for (angle = [0:90:360]) rotate ([0, 0, angle])
+                       translate([yellow_ring_d/2 - clip_w, -yellow_ring_d/2,
+                               yellow_ring_h - clip_h])
+                               cube([clip_w + eps, yellow_ring_d, clip_h + 2*eps]);
+       }
 }
        
 
index be337d5bb8d756223a3502366da0be5c02458ab5..dbb27c19ab4bddf232a9c58b2edd21794f95dcb0 100644 (file)
@@ -3,7 +3,7 @@ infty = 300;
 
 fuse_w = 60;
 fuse_h = 33-3;
-fuse_l = 80;
+fuse_l = 100;
 
 wall = 2;
 
@@ -13,11 +13,19 @@ wing_hole_x = 25;
 wing_hole_l = 25;
 wing_hole_h = 8;
 
+rear_edge_w = 4;
+rear_edge_h = 19 -3 ; // see front_rod_h from mini-arrow-fuselage.scad
+rear_edge_l = 132-121.5; // fuse_l - front_rod_x from mini-arrow-fuselage.scad
+
+include <mini-arrow-spring2.scad>
+spring_width = 23;
+spring_beam_w = 3;
+
 difference() {
        translate([0, -fuse_w/2, 0]) intersection() {
-               cube([fuse_l, fuse_w, fuse_h]);
-               translate([0, 0, front_h])
-                       scale([fuse_l/(fuse_h-front_h), 1, 1])
+               cube([fuse_l - spring_width + spring_beam_w, fuse_w, fuse_h]);
+               translate([rear_edge_l, 0, front_h])
+                       scale([(fuse_l-rear_edge_l)/(fuse_h-front_h), 1, 1])
                        rotate([-90, 0, 0])
                                cylinder(r = fuse_h-front_h,
                                        h = fuse_w, $fn = 128);
@@ -35,17 +43,30 @@ difference() {
                translate([0, fuse_w/2, -10*0.707])
                        rotate([45, 0, 0])
                        cube([fuse_l, 10, 10]);
+               // rear end
+               for (y = [-1, 1]) scale([1, y, 1])
+               translate([0, fuse_w/2, 0])
+                       rotate([0, 0, 60])
+                       cylinder(r = rear_edge_w, h = rear_edge_h, $fn = 4);
        };
        // wing hole
        translate([wing_hole_x, -fuse_w/2-eps, wall])
                cube([wing_hole_l, fuse_w + 2*eps, wing_hole_h]);
 
        // center squares
-       for (x = [9:16:fuse_l - 15])
+       for (x = [9:16:fuse_l - 30])
        for (y = [0,16])
        for (n = [0, 16/2])
        for (s = [-1, 1])
                scale([1, s, 1])
                translate([x+n, y-n, -eps])
                        cylinder(r = 6, h = wall + 2*eps, $fn = 4);
+       // top underhang
+       translate([rear_edge_l-infty, -infty/2, rear_edge_h])
+               cube(infty);
 }
+
+translate([fuse_l - spring_width/2, 0, 0])
+rotate([0, 0, 90])
+       spring();
+
index 4961be6a36d34b4d08a53110f2b0f67b7ff54f11..708d3e359d48c7ea513b0e1bf7fcffd8cec58c6d 100644 (file)
@@ -108,6 +108,7 @@ module poly_path4309(h)
   }
 }
 
+module spring() {
 poly_path4339(5);
 poly_path4315(5);
 poly_path4321(5);
@@ -119,3 +120,4 @@ poly_path4285(5);
 poly_path4327(5);
 poly_path4297(5);
 poly_path4309(5);
+}
index b5d70f66b22e53f1420931aacaa396ec1a1744b4..cd843f9c79cf3d55d2cf798512bb6b73e9a5d0f6 100644 (file)
@@ -15,7 +15,7 @@ spoke_w =  3.5;
 spoke_h = 1.5;
 
 center_d = 5;
-center_hole = 1;
+center_hole = 1 + 0.5;
 center_h = 8;
 
 module body() {
index a48be5ed4b9f6bfc55f88bbe0545f222ced87193..c23fd5298b8fd1fbae2fc112d91b817bfb99a811 100644 (file)
@@ -7,10 +7,10 @@ motor_len  = 69.5 + 0.5;
 
 segment_overlap = 15;
 
-loose_fit_diam_diff = 0.5; // cylinder with outer diameter d1
+loose_fit_diam_diff = 1.0; // cylinder with outer diameter d1
        // will fit loosely into the hole with inner diameter
        // d1 + loose_fit_diam_diff
-tight_fit_diam_diff = 0.25; // cylinder with outer diameter d1
+tight_fit_diam_diff = 0.5; // cylinder with outer diameter d1
        // will fit tightly into the hole with inner diameter
        // d1 + tight_fit_diam_diff
 
index e865156bfef7195874afe02199d5197553efa561..418f48ceb69ed860bdeb79a3e4bae5c63437b8ad 100644 (file)
@@ -9,19 +9,33 @@
 // keep the resulting .stl file manifold.
 fudge = 0.1;
 
-module poly_path4306(h)
+module poly_outline()
 {
-    // linear_extrude(height=5)
-    rotate_extrude(angle = 210) rotate([0, 0, 90])
-       translate([35,-13, 0]){
-      polygon([[-35.333988,-11.375980],[-35.388672,-10.879880],[-19.400388,-8.881840],[-7.386879,-6.756644],[4.589842,-4.381840],[11.716397,-2.942169],[19.560552,-0.889650],[22.772022,0.412676],[26.967856,2.622476],[31.177810,5.551311],[32.984881,7.226479],[34.431642,9.010740],[34.818362,10.416990],[34.888672,11.375980],[35.388672,11.368160],[35.314452,10.356450],[34.845702,8.733400],[33.349661,6.878547],[31.503835,5.154443],[27.236641,2.175499],[22.991750,-0.049398],[19.716792,-1.366210],[11.819819,-3.433821],[4.687502,-4.874020],[-7.291714,-7.247646],[-19.322268,-9.374020],[-35.333988,-11.375980]]);
-  }
+translate([35.01, -17.5, 0])
+      polygon([[-34.993000,-7.750540],[-35.002600,-7.283950],[-30.390825,-6.787054],[-19.036880,-5.237750],[-5.577521,-2.848014],[4.953350,-0.739700],[12.407086,0.839569],[19.933820,2.756390],[29.405920,5.806369],[35.001720,7.750540],[35.002600,7.248370],[29.490142,5.319456],[20.070500,2.275930],[12.517434,0.353189],[5.050970,-1.227980],[-5.481264,-3.336864],[-18.958800,-5.729930],[-30.353692,-7.267481],[-34.993080,-7.750540]]);
 }
 
 infty = 200;
+
+module outline_border() {
+       rotate([0, -90, 0])
+       linear_extrude(height=0.5) poly_outline();
+}
+
+module body() {
+       // main shape
+       rotate_extrude(angle = 210)
+       rotate([0, 0, 90])
+       poly_outline();
+
+       // inner side supports
+       for (i = [-1,1]) scale([1, i, 1])
+       for (y = [0:0.25:3.5])
+               translate([0, y, 0])
+               outline_border();
+}
+
 difference() {
-       poly_path4306();
-       translate([-infty/2, -infty/2, -infty]) cube(infty);
-       rotate([7, 0, 0])
-       translate([-infty/2, 10, -infty/2]) cube(infty);
+       body();
+       translate([5, -infty/2,-infty/2]) cube(infty);
 }
index f2f7cab9a107a9e97f5b3d2b1d43f750d0b07222..9e055b76fc47fa9bc22246233926afd811eb104e 100644 (file)
@@ -25,9 +25,9 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="1.979899"
-     inkscape:cx="585.26214"
-     inkscape:cy="560"
+     inkscape:zoom="3.959798"
+     inkscape:cx="543.45808"
+     inkscape:cy="425.42546"
      inkscape:document-units="mm"
      inkscape:current-layer="layer1"
      inkscape:document-rotation="0"
      id="layer1">
     <path
        style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="m 99.999998,174.5 c 24.887072,-0.1539 52.990312,1.25242 62.500002,2.5 11.44956,1.92679 29.84519,3.48465 35,17.5"
-       id="path4279"
+       d="m 99.999997,172 c 0,0 7.001553,0.5954 16.000003,2 8.99845,1.4046 18.91741,3.47247 24,4.5 5.08259,1.02753 9.81101,2.01972 15,3.5 5.18899,1.48028 15,5 15,5"
+       id="outline"
        inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccc" />
+       sodipodi:nodetypes="czzzc"
+       inkscape:label="#path4268" />
   </g>
 </svg>