chiark / gitweb /
afe75a1bfe00645ef47f3aea195e62bb34745941
[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 hingenut_width = 6;
13 hingenut_depth = 4;
14
15 headpart_main_dia = 15 - 0.3;
16 headpart_main_len = 14;
17 headpart_stub_protrude = 2;
18 headpart_stub_width = 11.7 - 0.3;
19
20 headpart_flatten_angle = 45;
21
22 // computed
23
24 armpart_x_unit = armpart_hex_rad * tan(30);
25 headpart_flatten_z = headpart_main_dia/2 * cos(headpart_flatten_angle);
26 headpart_stub_support_x = headpart_stub_width * cos(59) / 2;
27 headpart_stub_len = headpart_stub_protrude + headpart_main_dia/2;
28 hingenut_depth_y =
29   sqrt(headpart_main_dia*headpart_main_dia/4 - hingenut_width*hingenut_width/4)
30   - hingenut_depth;
31
32 module ArmPart(){ ////toplevel
33   translate([-arm_innerwidth/2, 1, 0])
34     mirror([0,-1,0])
35     cube([arm_innerwidth, arm_depth+1, arm_innerheight]);
36   rotate([90,0,180])
37     linear_extrude(height=armpart_hex_thick)
38     for (mir=[0,1])
39       mirror([mir,0,0])
40         difference(){
41           polygon([[-1, 0],
42                    [armpart_x_unit, 0],
43                    [armpart_x_unit*2, armpart_hex_rad],
44                    [armpart_x_unit, armpart_hex_rad*2],
45                    [-1, armpart_hex_rad*2]]);
46           translate([0,armpart_hex_rad])
47             circle(hingepin_dia/2, $fn=20);
48         }
49 }
50
51 module HeadPart(){ ////toplevel
52   difference(){
53     union(){
54       translate([-headpart_main_len/2, 0,0])
55         rotate([0,90,0])
56         cylinder(r=headpart_main_dia/2, h=headpart_main_len, $fn=40);
57       rotate([90,0,0])
58         cylinder(h = headpart_stub_len,
59                  r = headpart_stub_width/2,
60                  $fn = 6);
61       translate([-headpart_stub_support_x,
62                  -headpart_stub_len,
63                  -headpart_main_dia/2])
64         cube([headpart_stub_support_x*2,
65               headpart_stub_len,
66               headpart_main_dia/2]);
67     }
68     translate([-100,-100,-100])
69       cube([200,200, 100 - headpart_flatten_z]);
70     rotate([90,0,0])
71       translate([0,0, -100])
72       cylinder(r=hingepin_dia/2, h = 200, $fn=20);
73     translate([0,hingenut_depth_y,0])
74       rotate([90,0,180])
75       cylinder(r=hingenut_width/2/cos(30), h=20, $fn=6);
76   }
77 }
78
79 //ArmPart();
80 HeadPart();