chiark / gitweb /
filamenttrestle adjustments
[reprap-play.git] / filamenttrestle.scad
1 // -*- C -*-
2
3 spoolwidth = 80; // fixme needs to be measured
4 spoolinnerrad = 25; // fixme needs to be checked
5 spoolouterrad = 60; // fixme needs to be checked
6
7 include <doveclip.scad>
8 include <axlepin.scad>
9
10 spoolradclear = 10;
11
12 spoolinnerslop = 2;
13
14 barrad = 7;
15 barwasherrad = 17;
16
17 hubbasethick = 4;
18
19 legw = 12;
20 plugl = 20;
21 plugwmin = 3;
22 plugh = 10;
23 plugslope = 0.5;
24 plugwmax = plugwmin + plugh * plugslope * 2;
25
26 trestlelegw = 10;
27 trestlebaseh = 10;
28 trestleplugd = 1;
29
30 topblockthick = 4;
31 topblockbasedepth = 5;
32
33 pinbasew = 5.0;
34 pinminh = 1.5;
35 pinmaxh = 4.5;
36 pindh = 0.50;
37 pindwidth = 0.75;
38
39 pintaperlen = plugwmax * 0.85;
40 pinstraightlen = 10;
41
42 spoolouterpad = AxlePin_holerad()*2 * 1.5;
43 spoolbarlen = spoolwidth +
44   2*(Washer_thick() + hubbasethick + AxlePin_holerad()
45      + spoolinnerslop + spoolouterpad);
46   barz = barrad * 0.5;
47 axlepin_x = spoolwidth/2 + hubbasethick +
48   Washer_thick() + spoolinnerslop + AxlePin_holerad()*0.5;
49
50 trestleheight = spoolouterrad + spoolradclear - barz;
51 trestlebase = trestleheight * 1.2;
52
53 module Plug(d=0){
54   dw = d;
55   dh = d;
56   dhb = d*2;
57   a = atan(plugslope);
58   bdy = -dhb;
59   bdx = dw / cos(a) + bdy * plugslope;
60   tdy = dh;
61   tdx = bdx + tdy * plugslope;
62   translate([-d,0,0]) rotate([90,0,90]) linear_extrude(height=plugl+0.1+d*2){
63     polygon([[-(plugwmin/2 + bdx),  bdy],
64              [-(plugwmax/2 + tdx),  plugh + tdy],
65              [+(plugwmax/2 + tdx),  plugh + tdy],
66              [+(plugwmin/2 + bdx),  bdy]]);
67   }
68 }
69
70 module Bar(){ ////toplevel
71   spoolw = spoolbarlen;
72   biggestw = spoolw + 50;
73
74   intersection(){
75     for (mir=[0,1]) {
76       mirror([mir,0,0]) {
77         translate([spoolw/2, 0, 0])
78           Plug();
79         translate([-1, -50, -50])
80           cube([spoolw/2+1.1, 100, 100]);
81       }
82     }
83     difference(){
84       translate([-biggestw/2, -50, 0])
85         cube([biggestw, 100, 100]);
86       for (mir=[0,1]) {
87         mirror([mir,0,0])
88           translate([axlepin_x, 0, -50])
89           cylinder(r=AxlePin_holerad(), 100, $fn=15);
90       }
91     }
92     translate([0,0,barz]) {
93       translate([-100,0,0])
94         rotate([0,90,0]) cylinder(r=barrad, h=200, $fn=30);
95     }
96   }
97 }
98
99 module FtAxlePin(){ ////toplevel
100   AxlePin(barrad, (barrad + barwasherrad*2)/3 * 2);
101 }
102
103 module AxleWasher(){ ////toplevel
104   Washer(barrad, barwasherrad);
105 }
106
107 module Trestle(){ ////toplevel
108   legang = atan2(trestlebase/2, trestleheight);
109   eplen = sqrt(trestleheight*trestleheight + trestlebase*trestlebase*0.25);
110   topblockw = plugwmax + trestleplugd*2 + topblockthick*2;
111
112   pinholebasew = pinbasew + pindwidth*2;
113   pinholeh =     pinmaxh +  pindh;
114
115   difference(){
116     union(){
117       for (mir=[0,1]) {
118         mirror([mir,0,0]) {
119           rotate([0,0, -90-legang])
120             ExtenderPillars(length=eplen+trestlelegw,
121                             width=trestlelegw,
122                             height=legw,
123                             baseweb=true);
124
125           translate([-trestlebase/2, -trestleheight, 0])
126             cylinder(r=trestlelegw/2*1.2, h=plugl);
127         }
128       }
129       translate([-topblockw/2, -topblockbasedepth, 0])
130         cube([topblockw,
131               topblockbasedepth + plugh + topblockthick
132               + (pinmaxh - pinminh)*0.6 + pindh,
133               plugl]);
134
135       translate([-trestlebase/2, -trestleheight, 0])
136         ExtenderPillars(length=trestlebase, width=trestlebaseh*2, height=legw);
137     }
138     translate([-300, -trestleheight-50, -1])
139       cube([600, 50, plugl+2]);
140
141     rotate([-90,-90,0])
142       Plug(d=trestleplugd);
143
144     for (rot=[0,180]) {
145       translate([0,0,plugl/2]) rotate([0,rot,0]) translate([0,0,-plugl/2]) {
146         translate([-(topblockw*0.25+1),
147                    plugh + pindh - (pinmaxh - pinminh)*0.75,
148                    (plugl - pinholebasew*2)/3]) {
149           translate([0,0,pinholebasew/2]) rotate([-90,0,0]) %Pin();
150           rotate([0,90,0]) {
151             linear_extrude(height = topblockw*1.0+2) {
152               polygon([[-1.0 * pinholebasew, -0.01],
153                        [-0.5 * pinholebasew, pinholeh],
154                        [ 0                 , -0.01]]);
155             }
156           }
157         }
158       }
159     }
160   }
161 }
162
163 module Pin(){ ////toplevel
164   rotate([90,0,90]) {
165     hull(){
166       for (mir=[0,1]) {
167         mirror([mir,0,0]) {
168           linear_extrude(height=0.1) {
169             polygon([[-0.01, 0],
170                      [-0.01, pinminh],
171                      [pinbasew*0.5*(pinminh/pinmaxh), 0]]);
172           }
173           translate([0,0,pintaperlen])
174             linear_extrude(height=pinstraightlen) {
175             polygon([[-0.01, 0],
176                      [-0.01, pinmaxh],
177                      [pinbasew*0.5, 0]]);
178           }
179         }
180       }
181     }
182   }
183 }
184
185 module TestKit(){ ////toplevel
186   translate([30,0,0]) Pin();
187   translate([30,30,0]) Pin();
188   translate([0,40,0]) intersection(){
189     Trestle();
190     translate([-50,-10,-1]) cube([100,100,100]);
191   }
192   intersection(){
193     translate([-60,0,0]) Bar();
194     cube(50,center=true);
195   }
196 }
197
198 module DemoSpool(){
199   rotate([0,90,0]) translate([0,0,-spoolwidth/2])
200     difference(){
201       cylinder(r=spoolouterrad, h=spoolwidth);
202       translate([0,0,-1]) cylinder(r=spoolinnerrad, h=spoolwidth+2);
203     }
204 }
205
206 module Demo(){
207   Bar();
208   for (mir=[0,1]) {
209     mirror([mir,0,0]) {
210       translate([spoolbarlen/2,0,0]) rotate([90,0,90]) Trestle();
211       translate([spoolwidth/2 + hubbasethick + spoolinnerslop/4, 0, barz])
212         rotate([0,90,0]) AxleWasher();
213       translate([axlepin_x, 0, barz]) rotate([90,0,90]) FtAxlePin();
214     }
215   }
216   %translate([0,0,barz]) DemoSpool();
217 }
218
219 //Bar();
220 //FtAxlePin();
221 //AxleWasher();
222 //Trestle();
223 //Pin();
224 //TestKit();
225 //Plug(d=1);
226 //ExtenderPillars(80,12,8, baseweb=true);
227 Demo();