chiark / gitweb /
anglepoise-neck: wip headpart
[reprap-play.git] / anglepoise-neck.scad
1 // -*- C -*-
2
3 arm_depth = 25;
4 arm_pindepth = (16.15 + 18.00)/2;
5 arm_innerwidth = 9.60 - 0.50;
6 arm_innerheight = 8.90 - 0.50;
7
8 armpart_hex_rad = 15;
9 armpart_hex_thick = 8;
10
11 hingepin_dia = 3;
12
13 headpart_main_dia = 15 - 0.3;
14 headpart_main_len = 14;
15 headpart_stub_protrude = 2;
16 headpart_stub_width = 11.7 - 0.3;
17
18 headpart_flatten_angle = 45;
19
20 // computed
21
22 armpart_x_unit = armpart_hex_rad * tan(30);
23 headpart_flatten_z = headpart_main_dia/2 * cos(headpart_flatten_angle);
24 headpart_stub_support_x = headpart_stub_width * cos(59) / 2;
25 headpart_stub_len = headpart_stub_protrude + headpart_main_dia/2;
26
27 module ArmPart(){ ////toplevel
28   translate([-arm_innerwidth/2, 1, 0])
29     mirror([0,-1,0])
30     cube([arm_innerwidth, arm_depth+1, arm_innerheight]);
31   rotate([90,0,180])
32     linear_extrude(height=armpart_hex_thick)
33     for (mir=[0,1])
34       mirror([mir,0,0])
35         difference(){
36           polygon([[-1, 0],
37                    [armpart_x_unit, 0],
38                    [armpart_x_unit*2, armpart_hex_rad],
39                    [armpart_x_unit, armpart_hex_rad*2],
40                    [-1, armpart_hex_rad*2]]);
41           translate([0,armpart_hex_rad])
42             circle(hingepin_dia/2, $fn=20);
43         }
44 }
45
46 module HeadPart(){ ////toplevel
47   difference(){
48     union(){
49       translate([-headpart_main_len/2, 0,0])
50         rotate([0,90,0])
51         cylinder(r=headpart_main_dia/2, h=headpart_main_len, $fn=40);
52       rotate([90,0,0])
53         cylinder(h = headpart_stub_len,
54                  r = headpart_stub_width/2,
55                  $fn = 6);
56       translate([-headpart_stub_support_x,
57                  -headpart_stub_len,
58                  -headpart_main_dia/2])
59         cube([headpart_stub_support_x*2,
60               headpart_stub_len,
61               headpart_main_dia/2]);
62     }
63     translate([-100,-100,-100])
64       cube([200,200, 100 - headpart_flatten_z]);
65   }
66 }
67
68 //ArmPart();
69 HeadPart();