diff options
| -rw-r--r-- | chain.scad | 19 | ||||
| -rw-r--r-- | lasttretrad.scad | 9 | ||||
| -rw-r--r-- | suspension_cube.scad | 45 | ||||
| -rw-r--r-- | suspension_cube.svg | 57 | ||||
| -rw-r--r-- | suspension_cube_stencil.scad | 10 | ||||
| -rw-r--r-- | suspension_fork.scad | 142 | 
6 files changed, 242 insertions, 40 deletions
diff --git a/chain.scad b/chain.scad new file mode 100644 index 0000000..d0d17e9 --- /dev/null +++ b/chain.scad @@ -0,0 +1,19 @@ +// a chain around two gears of given radii (r1, r2) and distance; +// coord origin is at the gear with r1 +module chain(r1, r2, dist, chain_width, chain_height) { +//    rotate([90, 0, 0]) +    difference() { +	 chain_template(r1 + chain_height, r2 + chain_height, dist, chain_width); +	 chain_template(r1, r2, dist, chain_width + 1); +    } +} + +module chain_template(r1, r2, dist, chain_width) +    hull () { +	cylinder(r=r1, h=chain_width, center=true); + +	translate([dist, 0, 0]) +	cylinder(r=r2, h=chain_width, center=true); +    } + +chain(20, 30, 100, 10, 5);
\ No newline at end of file diff --git a/lasttretrad.scad b/lasttretrad.scad index 9b29705..00cd3df 100644 --- a/lasttretrad.scad +++ b/lasttretrad.scad @@ -51,10 +51,11 @@ module wheel_position(fcb, lr) {  // specify (f)ront/(b)ack and (l)eft/(r)ight as -1/1  module steered_wheel(fb=-1, lr=-1, rot=0, suspension_depth=0) { -    rotate([ 0, 0, fb*rot]) suspension_fork(suspension_depth); - -    translate([0, 0, wheel_offset(suspension_depth)]) -    rotate([90, 0, fb*rot]) wheel(); +    rotate([ 0, 0, fb*rot]) { +        suspension_fork(suspension_depth); +        translate([45, 0, wheel_offset(suspension_depth)]) +        rotate([90, 0, 0]) wheel(); +    }  }  // specify (l)eft/(r)ight as -1/1 diff --git a/suspension_cube.scad b/suspension_cube.scad new file mode 100644 index 0000000..e3be454 --- /dev/null +++ b/suspension_cube.scad @@ -0,0 +1,45 @@ +cube_side = 100; +min_cube_height = 116; + +shaft_hole_rad=15; +blind_hole_depth = 5; // arbitrary value, TODO +clamp_hole_rad = 13/2; + +board_width=18; + +cube_height = board_width * ceil(min_cube_height / board_width); + +clamp_hole_excentricity = (shaft_hole_rad + cube_side/2 - clamp_hole_rad) / 2; + +module suspension_cube() { + +    difference() { +	translate([-cube_side/2, -cube_side/2, 0]) +	union() { +	    cube([cube_side, cube_side, cube_height]); +	    cube([cube_side + board_width, cube_side + board_width, board_width]); +	} + +	// bore hole for bike shaft (radius of the smallest available +	// tool larger than the shaft radius) +	cylinder(r=shaft_hole_rad, h=2*cube_height, center=true); + +	// blind holes to capture the bearing +	for (h = [-0.001, cube_height - blind_hole_depth + 0.001]) +	translate([0, 0, h]) +	cylinder(r=20, h=blind_hole_depth); + +	// holes for clamping screws +	for (i = [-1, 1]) +	for (j = [-1, 1]) +	rotate([0, 0, 45+j*45]) +	translate([i * clamp_hole_excentricity, +		   0, +		   board_width + (0.5 - i/4)*(cube_height - board_width) + j*clamp_hole_rad]) +	rotate([90, 0, 0]) +	cylinder(r=clamp_hole_rad, h=2*cube_height, center=true); +    } +} + +if (no_master == undef) +suspension_cube(); diff --git a/suspension_cube.svg b/suspension_cube.svg new file mode 100644 index 0000000..4f4716f --- /dev/null +++ b/suspension_cube.svg @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg +   xmlns:dc="http://purl.org/dc/elements/1.1/" +   xmlns:cc="http://creativecommons.org/ns#" +   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" +   xmlns:svg="http://www.w3.org/2000/svg" +   xmlns="http://www.w3.org/2000/svg" +   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" +   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" +   width="1033.15" +   height="532.46002" +   viewBox="-21 0 291.57772 150.27186" +   version="1.1" +   id="svg2" +   inkscape:version="0.48.3.1 r9886" +   sodipodi:docname="suspension_cube.svg"> +  <metadata +     id="metadata12"> +    <rdf:RDF> +      <cc:Work +         rdf:about=""> +        <dc:format>image/svg+xml</dc:format> +        <dc:type +           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> +      </cc:Work> +    </rdf:RDF> +  </metadata> +  <defs +     id="defs10" /> +  <sodipodi:namedview +     pagecolor="#ffffff" +     bordercolor="#666666" +     borderopacity="1" +     objecttolerance="10" +     gridtolerance="10" +     guidetolerance="10" +     inkscape:pageopacity="0" +     inkscape:pageshadow="2" +     inkscape:window-width="1198" +     inkscape:window-height="798" +     id="namedview8" +     showgrid="false" +     inkscape:zoom="0.37454771" +     inkscape:cx="476.5748" +     inkscape:cy="223.22835" +     inkscape:window-x="1200" +     inkscape:window-y="0" +     inkscape:window-maximized="0" +     inkscape:current-layer="svg2" /> +  <title +     id="title4">OpenSCAD Model</title> +  <path +     d="m 93.566518,30.969469 18.000002,0 0,-18.000016 -118.0000022,0 0,99.054307 100.0000002,0 z m -22.1964,26.837 -1.8036,-0.7078 -1.5148,-1.2081 -1.0915,-1.6009 -0.5711,-1.8514 0,-1.9376 0.5711,-1.8515 1.0915,-1.6008 1.5148,-1.2081 1.8036,-0.7078 1.9321,-0.1448 1.889,0.4311 1.678,0.9688 1.3178,1.4203 0.8407,1.7457 0.2888,1.9159 -0.2888,1.9159 -0.8407,1.7457 -1.3178,1.4203 -1.678,0.9688 -1.889,0.4311 z m -58.49998,53.999701 -1.80362,-0.70779 -1.5148302,-1.20808 -1.09146,-1.60087 -0.57111,-1.85137 0,-1.93756 0.57111,-1.85147 1.09146,-1.60077 1.5148302,-1.208084 1.80362,-0.70779 1.932113,-0.1448 1.888977,0.4311 1.67796,0.968784 1.31787,1.42027 0.84067,1.74567 0.28879,1.91587 -0.28879,1.91586 -0.84067,1.74567 -1.31787,1.42028 -1.67796,0.96878 -1.888977,0.43109 z m 230.696382,-80.836701 18,0 0,-18.000016 -118,0 0,32.054616 100,0 z m 0,107.999671 0,-81.054271 -100,0 0,81.054271 z m -22.196,-68.162671 -1.804,-0.7078 -1.515,-1.2081 -1.091,-1.6009 -0.571,-1.8514 0,-1.9376 0.571,-1.8515 1.091,-1.6008 1.515,-1.2081 1.804,-0.7078 1.932,-0.1448 1.889,0.4311 1.678,0.9688 1.318,1.4203 0.84,1.7457 0.289,1.9159 -0.289,1.9159 -0.84,1.7457 -1.318,1.4203 -1.678,0.9688 -1.889,0.4311 z m -58.5,53.999671 -1.804,-0.708 -1.515,-1.208 -1.091,-1.601 -0.571,-1.851 0,-1.938 0.571,-1.851 1.091,-1.601 1.515,-1.20819 1.804,-0.70779 1.932,-0.1448 1.889,0.43109 1.678,0.96869 1.318,1.42 0.84,1.746 0.289,1.916 -0.289,1.916 -0.84,1.746 -1.318,1.42 -1.678,0.969 -1.889,0.431 z m -69.304002,0.108 -100.0000002,0 0,14.055 100.0000002,0 z" +     id="path6" +     style="fill:none;stroke:#000000;stroke-width:0.5" +     inkscape:connector-curvature="0" /> +</svg> diff --git a/suspension_cube_stencil.scad b/suspension_cube_stencil.scad new file mode 100644 index 0000000..c950074 --- /dev/null +++ b/suspension_cube_stencil.scad @@ -0,0 +1,10 @@ +no_master = true; + +include<suspension_cube.scad>; + +for (i = [0, 1]) +translate([i*1.5*cube_side, 0]) +projection(cut=true) +translate([clamp_hole_excentricity, 0, clamp_hole_excentricity]) +rotate([90, i*90, 0]) +suspension_cube(); diff --git a/suspension_fork.scad b/suspension_fork.scad index 4c12d2f..dc2084c 100644 --- a/suspension_fork.scad +++ b/suspension_fork.scad @@ -1,46 +1,116 @@ -// all used measuress are pure phantasy -module suspension_fork(depth=0) { -    // from top to bottom ... +axe_shift=18.2; +shaft_distance=53; +dark=[.1,.1,.1]; +module fork_shaft(){ +    thread_height=38; +    thread_diameter=25.4; +     +    shaft_height1=110; +    shaft_diameter1=thread_diameter; +     +    shaft_height2=6; +    shaft_diameter2=27;     +     +     +    translate([0,0,-thread_height]) +        cylinder(h=thread_height,d=thread_diameter); +         +    translate([0,0,-(thread_height+shaft_height1)]) +        cylinder(h=shaft_height1,d=shaft_diameter1); +     +    translate([0,0,-(thread_height+shaft_height1+shaft_height2)]) +        cylinder(h=shaft_height2,d=shaft_diameter2); +     +} + +module forking(){ +    for (side = [-1,1]) +	hull() { +        translate([0,0,-34]) cylinder(d=39,h=34); +        translate([axe_shift, side * shaft_distance, -56]) cylinder(d=31.3, h=29); +    }     +    translate([0,0,-43]) cylinder(d=39,h=9); +} + +module side_shaft(){ +     +    color("Gainsboro",1)translate([0,0,-38.5])cylinder(d=25.5,h=38.5); +    color(dark,1){ +        translate([0,0,-(38.5+14.8)]) cylinder(d1=41.5,d2=25.5,h=14.8); +        translate([0,0,-(38.5+22)]) cylinder(d1=32.5,d2=41.5,h=22-14.8); +        translate([0,0,-(38.5+184)]) cylinder(d1=32,d2=32.5,h=176); +    } +} + +module wheel_holder(){ +    thick=4.5; +    color(dark,1) +    rotate([270,90,0]) +    translate([0,0,-thick/2]) +    difference(){ +        union(){         +            hull(){ +                cylinder(d=32.5,h=thick); +                translate([-57.35,5.35,0])cube([35.3,35.3,thick]); +            } +            translate([0,0,1.9-thick])cylinder(d=25,h=thick);     +        }     +        translate([0,0,1.9])cylinder(d=25,h=thick); +        hull(){ +            translate([0,0,-3])cylinder(d=10,h=15); +            translate([10,-5,-3])cube([10,10,15]); +        } +    } +} + -    translate([0, 0, -50]) cylinder(h=50, r=15); -    translate([0, 0, -60]) cylinder(h=10, r1=25, r2=15); -    translate([0, 0, -70]) cylinder(h=10, r=25); -    hull() { -	for (side = [-1,1]) -	translate([0, side * 50, -90]) -	    cylinder(r=27, h=20); +module bow_shape(){ +    polygon(points=[[0,0],[28,0],[22,8],[14,11],[6,8]]); +} + +module bow(){ +    translate([0,0,-68.5]){ +        difference(){ +            rotate([0,90,0]) +                rotate_extrude(convexity = 10) +                    translate([40.5,0,0]) bow_shape(); +            translate([-100,-100,-200])cube([200,200,200]); +        } +        translate([0,-40.5,-77.5])rotate([0,0,-90]) linear_extrude(height=77.5) bow_shape(); +        translate([0,68.5,-77.5])rotate([0,0,-90]) linear_extrude(height=77.5) bow_shape();      } +} + -    translate([0, -50/2, -110]) -    cube([5, 50, 20]); + +module brake_holder(){ +    color("gainsboro",1) +    rotate([0,90,0]){ +        translate([0,0,-20])cylinder(d=9.8,h=26); +        translate([0,0,6])cylinder(d=7.9,h=16); +    } +} +module suspension_fork(depth=0) { +    // from top to bottom ... -    for (side = [-1,1]) -    translate([0, side * 50, -210]) { -	cylinder(r=25, h=120); - -	translate([0, 0, depth - 100]) { -	    cylinder(r=20, h=120); - -	    difference() { -		translate([0, 0, -20]) -		rotate([90, 0, 0]) -		hull() { -		    cylinder(r=20, h=5, center=true); -		    translate([0, 20, 0]) cube([39, 39, 5], center=true); -		} - -		translate([0, 0, -20]) -		rotate([90, 0, 0]) -		hull() { -		    cylinder(r=5, h=50, center=true); -		    translate([0, -20, 0]) cube([10, 10, 50], center=true); -		} -	    } -	} +    color("gainsboro",1) fork_shaft(); +    color(dark,1) translate([0,0,-154]) forking(); +    // all following measuress are pure phantasy +     +    for (side=[-1,1]){ +        translate([axe_shift,side * shaft_distance,-(210)]) side_shaft();      } +     +    translate([45,shaft_distance,-460]) wheel_holder(); +    mirror([0,1,0])translate([45,shaft_distance,-460]) wheel_holder(); +    color(dark,1) translate([40,0,-207]) bow(); +    translate([51,-41.5,-340]) brake_holder(); +    translate([51,41.5,-340]) brake_holder(); +      } -function wheel_offset(depth=0) = depth - 330; + +function wheel_offset(depth=0) = depth - 510;  suspension_fork();  | 
