chiark / gitweb /
powerbank-bike-clamp: wip
[reprap-play.git] / powerbank-bike-clamp.scad
1 // -*- C -*-
2
3 include <utils.scad>
4
5 tube_dia = 22.4;
6
7 hinge_around = 2.5;
8 hinge_pin = 1.5; // xxx
9 main_th = 3;
10 minor_wall_min = 1;
11
12 screw = 5.0 + 0.75;
13 screw_nut_across = 10; // xxx
14 knob_behind_across = 15; // xxx
15 behind_knob_th = 5;
16
17 clamp_width = 15;
18
19 clamp_gap = 2;
20
21 lower_th = 1;
22
23 overlap_l = 0.1;
24
25 // calculated
26
27 main_r = tube_dia/2 + main_th;
28
29 hinge_outer_r = hinge_around + hinge_pin/2;
30 hinge_y = tube_dia/2 + hinge_outer_r;
31
32 screw_max_y_lhs = -main_r -screw_nut_across/2;
33 screw_max_y_rhs = -main_r -knob_behind_across/2;
34
35 screw_y = min(screw_max_y_lhs,
36               screw_max_y_rhs);
37
38 bot_y = screw_y -max( screw_nut_across, knob_behind_across/2 )
39   -minor_wall_min;
40
41 echo(bot_y);
42
43 module TubePlan(){ circle(r = tube_dia/2); }
44 module HingePinPlan(){ translate([0, hinge_y]) circle(r= hinge_pin/2); }
45 module HingeBodyPlan(){ translate([0, hinge_y]) circle(r= hinge_outer_r); }
46
47 module TubeClampLeftPlan(){
48   difference(){
49     union(){
50       polygon([[ 0,                    hinge_y + hinge_outer_r ],
51                [ -main_r + overlap_l,  hinge_y + hinge_outer_r ],
52                [ -main_r + overlap_l,  bot_y                   ],
53                [ -clamp_gap/2,         bot_y                   ],
54                [ -clamp_gap/2,         0,                      ],
55                [ 0,                    0,                      ],
56                ]);
57       HingeBodyPlan();
58     }
59     TubePlan();
60     HingePinPlan();
61   }
62 }
63
64 module TubeClampLeft() { ////toplevel
65   linextr(-clamp_width/2, clamp_width/2)
66     TubeClampLeftPlan();
67 }
68
69 module TubeClampRightPlan(){
70   difference(){
71     union(){
72       rectfromto([ clamp_gap/2,                   bot_y ],
73                  [ clamp_gap/2 + behind_knob_th,  0     ]);
74       intersection(){
75         circle(r= main_r);
76         union(){
77           rectfromto([0,0],
78                       main_r *  [5,5]);
79           rectfromto([ clamp_gap/2, main_r*5 ],
80                       main_r * [2,-5]);
81         }
82       }
83       HingeBodyPlan();
84     }
85     TubePlan();
86     HingePinPlan();
87   }
88 }
89
90 module SomeClamp(){
91   difference(){
92     linextr(-clamp_width/2, clamp_width/2)
93       children(0);
94
95     linextr_x_yz(-main_r*5, main_r*5)
96       translate([screw_y, 0])
97       circle(r= screw/2);
98   }
99 }
100
101 module TubeClampLeft() { ////toplevel
102   SomeClamp()
103     TubeClampLeftPlan();
104 }
105
106 module TubeClampRight() { ////toplevel
107   SomeClamp()
108     TubeClampRightPlan();
109 }
110
111 //TubeClampLeft();
112 TubeClampRight();
113