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(); |