summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Huwald <jh@sotun.de>2015-07-13 07:29:13 (GMT)
committerJan Huwald <jh@sotun.de>2015-07-13 07:29:13 (GMT)
commit6dc93ada6ed161468c240ff8c4a2a1147247b3bf (patch)
treee1f3be829ddd19a7db98d55f6768bca0ab3cb9af
parent2878fa2b7c059a95860bc5e6accc5f7f04ced9b0 (diff)
parent42fad9cc9817101d710c05c958a7e333088801aa (diff)
Merge branch 'gabelm'HEADmaster
-rw-r--r--chain.scad19
-rw-r--r--lasttretrad.scad9
-rw-r--r--suspension_cube.scad45
-rw-r--r--suspension_cube.svg57
-rw-r--r--suspension_cube_stencil.scad10
-rw-r--r--suspension_fork.scad142
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();
contact: Jan Huwald // Impressum