chiark / gitweb /
powerbank-bike-clamp: wip
[reprap-play.git] / powerbank-bike-clamp.scad
1 // -*- C -*-
2
3 tube_dia = 22.4;
4
5 hinge_around = 2.5;
6 hinge_pin = 1.5; // xxx
7 main_th = 3;
8 minor_wall_min = 1;
9
10 screw = 5.0 + 0.75;
11 screw_nut_across = 10; // xxx
12 knob_behind_across = 15; // xxx
13
14 clamp_width = 15;
15
16 clamp_gap = 2;
17
18 lower_th = 1;
19
20 overlap_l = 0.1;
21
22 // calculated
23
24 main_r = tube_dia/2 + main_th;
25
26 hinge_outer_r = hinge_around + hinge_pin/2
27 hinge_y = tube_dia/2 + hinge_outer_r;
28
29 screw_max_y_lhs = -main_r -screw_nut_across/2;
30 screw_max_y_rhs = -main_r -knob_behind_across/2;
31
32 screw_y = min(screw_max_y_lhs,
33               screw_max_y_rhs);
34
35 bot_y = -screw_y -max( screw_nut_across, knob_behind_across/2 )
36   -minor_wall_min;
37
38
39 module TubePlan(){ circle(r = tube_dia/2); }
40 module HingePlan(){ translate([0, hinge_y]) circle(r= hinge_pin/2); }
41 module HingeBodyPlan(){ translate([0, hinge_y]) circle(r= hinge_outer_r); }
42
43 module TubeClampLeftPlan(){
44   difference(){
45     union(){
46       polygon([[ 0,                         hinge_y + hinge_outer_r ],
47                [ -main_outer_r + overlap_l, hinge_y + hinge_outer_r ],
48                [ -main_outer_r + overlap_l, bot_y                   ],
49                [ -clamp_gap/2,              bot_y                   ],
50                [ -clamp_gap/2,              0,                      ],
51                [ 0,                         0,                      ],
52                ]);
53       HingeBodyPlan();
54     }
55     TubePlan();
56     HingePinPlan();
57   }
58 }
59
60 module TubeClampLeft() { ////toplevel
61   linextr(-clamp_width/2, clamp_width/2)
62     TubeClampLeftPlan();
63 }
64
65 TubeClampLeft();