Commit 8452d1a7 by Hubert

updated version, added seperated config for milling/printing

the first version broke after five minutes of light riding.
The recess for the hub screw was too small, so in the printed version i was not
able to remove the material. Instead of adding another washer i just forced the
hub screw into the material.

I suspect this was the problem, but in this updated version everything is more butch
anyway. :)
And the recess is farther from the printing bed, so i sould be able to remove
any excess material this time
1 parent a06e40fb
...@@ -3,39 +3,59 @@ ...@@ -3,39 +3,59 @@
## be aware that this is just a flimsy 3d Printed part and can't really be compared to the real deal made out of Aluminum. ## be aware that this is just a flimsy 3d Printed part and can't really be compared to the real deal made out of Aluminum.
- released under the GNU General Public License (GPL) v3. A copy of the license is available in LICENSE.txt - released under the GNU General Public License (GPL) v3.<br>
A copy of the license is available in LICENSE.txt
If you want me to print you a copy feel free to drop me a mail on inspired_hanger at berezowski de <br>
<br>
I have no clue which type of Aluminum alloy is used for hangers, but you'll get an general idea what performance you can expect from a printed version here:<br>
https://www.makeitfrom.com/compare/3003-AlMn1Cu-3.0517-A93003-Aluminum/Polylactic-Acid-PLA-Polylactide<br>
<br>
The printed part will probably break as soon as you land on the chain tensioner.<br>
As soon as i have more experience with it i will update this readme.<br>
<br>
<!-- ![washer](README/IMG_20180419_224613.jpg) -->
I have no clue which type of Aluminum alloy is used for hangers, but you'll get the idea here: ### [printable.stl](printable.stl)
https://www.makeitfrom.com/compare/3003-AlMn1Cu-3.0517-A93003-Aluminum/Polylactic-Acid-PLA-Polylactide This is the pre rendered version for your 3d printer. This updated version has not been tested yet.
<br>
you will need 3 washers<br>
The printed part will probably break as soon as you land on the chain tensioner. * 1 x 20x1.8<br>
As soon as i have more experience with it i will update this readme. * 2 x 16x1.5<br>
![washer](README/IMG_20180419_224613.jpg) If you want me to print you a copy feel free to drop me a mail on inspired_hanger at berezowski de<br>
<br>
### [millable.stl](millable.stl)
As close to the original as possible. Use this if you have a cnc mill and the right materials.
### hanger.stl
the current version i've installed on my fourplay. This file get's upated as soon as the hanger breaks ### [hanger.scad](hanger.scad)
you will need 3 washers
* 1 x 20x1.8
* 2 x 16x1.5
### hanger.scad
this is the parametrized source file
if you wish to modify the 'default' version, you can easily do it via this file
you'll need openscad to view your changes and export a mill/printable stl
this is the parametrized source file<br>
if you wish to modify the 'default' version, you can easily do it via this file<br>
you'll need openscad to view your changes and export a mill/printable stl<br>
<br>
http://www.openscad.org http://www.openscad.org
<br>
<br>
If you are milling the part you probably dont want to mill the holes.<br>
just comment the holes in the output section like this:
11
12 // output
13 difference() {
14 hanger_wedge_plate();
15 hub_grove();
16 // fixing_pin();
17 // tensioner_thread();
18 }
19
<br>
the washers can be modified via those variables: the washers can be modified via those variables:
HUB_DIAMETER_SPACER HUB_DIAMETER_SPACER
...@@ -45,21 +65,20 @@ the washers can be modified via those variables: ...@@ -45,21 +65,20 @@ the washers can be modified via those variables:
if you improved this file somehow please send me a pull request to inspired_hanger at berezowski de if you improved this file somehow please send me a pull request to inspired_hanger at berezowski de
Thanks !! Thanks !!
## comparison <!-- ## comparison -->
![top](README/IMG_20180419_224425.jpg) <!-- ![top](README/IMG_20180419_224425.jpg) -->
![bottom](README/IMG_20180419_224442.jpg) <!-- ![bottom](README/IMG_20180419_224442.jpg) -->
## mounted <!-- ## mounted -->
![mounted 90](README/IMG_20180419_232335.jpg) <!-- ![mounted 90](README/IMG_20180419_232335.jpg) -->
![mounted 45](README/IMG_20180419_232313.jpg) <!-- ![mounted 45](README/IMG_20180419_232313.jpg) -->
![mounted 0](README/IMG_20180419_232304.jpg) <!-- ![mounted 0](README/IMG_20180419_232304.jpg) -->
TYPE = "MILLING";
TOLLERANCE = 0.15;
THREAD_TOLLERANCE = 0.3 ;
T = TOLLERANCE;
TT = THREAD_TOLLERANCE;
fn=20;
// FRAME PARAMETERS
FRAME_INNER_RADIUS_NEAR_HUB = 10;
FRAME_OUTER_RADIUS_NEAR_HANGER = 10;
// PLATE PARAMETERS
FIX_PLATE_SPAN_X = 56.7;
FIX_PLATE_SPAN_Y = 27;
FIX_PLATE_HEIGHT = 3;
FIX_PLATE_EDGE = 2;
// HUB GROOVE
HUB_DIAMETER = 8.5;
HUB_OFFSET_X = 14.5 + HUB_DIAMETER / 2;
HUB_OFFSET_Y = 9.3 + HUB_DIAMETER / 2;
HUB_DIAMETER_SPACER = 0;
// HANGER PARAMETERS
HANGER_HEIGHT = 8;
HANGER_THREAD_OFFSET = 14.5;
HANGER_THREAD_DIAMETER = 10; // todo
HANGER_SAFETY_WIDTH = 0; // it looks so flimsy
HANGER_WIDTH = HUB_OFFSET_X - HUB_DIAMETER / 2;
HANGER_SPAN = HANGER_THREAD_OFFSET + HANGER_WIDTH / 2;
// FIXING PIN HOLE
FIX_PIN_DIAMETER = 10.3;
FIX_PIN_HEAD_DIAMETER = 12.5;
FIX_PIN_HEAD_RECESS_HEIGHT = 1.5; // HEIGHT OF THE RECESS THAT GRABS THE PIN !!, PINHEAD DISTANCE TO FRAME !!
// semi computed
// SET OFFSET OR BORDER
// OFFSET
/* FIX_OFFSET = 8; // center of fixation pin */
// BORDER
FIX_BORDER = 2.5; // border of plate to fixation pin distance
FIX_OFFSET = FIX_PIN_DIAMETER / 2 + FIX_BORDER; // computed center of fixation pin
TYPE = "PRINTING";
TOLLERANCE = 0.15;
THREAD_TOLLERANCE = 0.3 ;
T = TOLLERANCE;
TT = THREAD_TOLLERANCE;
fn=20;
// FRAME PARAMETERS
FRAME_INNER_RADIUS_NEAR_HUB = 10;
FRAME_OUTER_RADIUS_NEAR_HANGER = 10;
// PLATE PARAMETERS
FIX_PLATE_SPAN_X = 56.7;
FIX_PLATE_SPAN_Y = 27;
FIX_PLATE_HEIGHT = 8;
FIX_PLATE_EDGE = 1.5;
// HUB GROOVE
HUB_DIAMETER = 8.5;
HUB_OFFSET_X = 14.5 + HUB_DIAMETER / 2;
HUB_OFFSET_Y = 9.3 + HUB_DIAMETER / 2;
HUB_DIAMETER_SPACER = 16;
HUB_DIAMETER_SPACER_HEIGHT = 3;
HUB_DIAMETER_FRAME_SPACER = 20;
HUB_DIAMETER_FRAME_SPACER_HEIGHT = 1.8;
// HANGER PARAMETERS
HANGER_HEIGHT = 16;
HANGER_THREAD_OFFSET = 14.5;
HANGER_THREAD_DIAMETER = 10; // todo
HANGER_SAFETY_WIDTH = 6; // it looks so flimsy
HANGER_WIDTH = HUB_OFFSET_X - HUB_DIAMETER / 2;
HANGER_SPAN = HANGER_THREAD_OFFSET + HANGER_WIDTH / 2;
// FIXING PIN HOLE
FIX_PIN_DIAMETER = 10.3;
FIX_PIN_HEAD_DIAMETER = 12.5;
FIX_PIN_HEAD_RECESS_HEIGHT = 1.5; // HEIGHT OF THE RECESS THAT GRABS THE PIN !!, PINHEAD DISTANCE TO FRAME !!
// semi computed
// SET OFFSET OR BORDER
// OFFSET
/* FIX_OFFSET = 8; // center of fixation pin */
// BORDER
FIX_BORDER = 2.5; // border of plate to fixation pin distance
FIX_OFFSET = FIX_PIN_DIAMETER / 2 + FIX_BORDER; // computed center of fixation pin
...@@ -4,77 +4,37 @@ include <libs/uploads_6f_12_f1_10_d2_ISOThread.scad> ...@@ -4,77 +4,37 @@ include <libs/uploads_6f_12_f1_10_d2_ISOThread.scad>
// Copyright: 2018 // Copyright: 2018
// License: GPL 3 // License: GPL 3
TOLLERANCE = 0.15; /////////////////////////////////////////////////////////////////// switch settings:
T = TOLLERANCE; // milling or printing ?? //////////////////////////////////////////////////////////
THREAD_TOLLERANCE = 0.3 ; /* include <conf.milling.scad> */
TT = THREAD_TOLLERANCE; include <conf.printing.scad>
fn=20;
// FRAME PARAMETERS
FRAME_INNER_RADIUS_NEAR_HUB = 10;
FRAME_OUTER_RADIUS_NEAR_HANGER = 10;
// PLATE PARAMETERS
FIX_PLATE_SPAN_X = 56.7;
FIX_PLATE_SPAN_Y = 27;
FIX_PLATE_HEIGHT = 4.8;
FIX_PLATE_EDGE = 1.5;
// HUB GROOVE
HUB_DIAMETER = 8.5;
HUB_OFFSET_X = 14.5 + HUB_DIAMETER / 2;
HUB_OFFSET_Y = 9.3 + HUB_DIAMETER / 2;
HUB_DIAMETER_SPACER = 16;
HUB_DIAMETER_SPACER_HEIGHT = 3;
HUB_DIAMETER_FRAME_SPACER = 20;
HUB_DIAMETER_FRAME_SPACER_HEIGHT = 1.8;
// HANGER PARAMETERS
HANGER_HEIGHT = 8;
HANGER_THREAD_OFFSET = 14.5;
HANGER_THREAD_DIAMETER = 10; // todo
HANGER_SAFETY_WIDTH = 6; // it looks so flimsy
HANGER_WIDTH = HUB_OFFSET_X - HUB_DIAMETER / 2;
HANGER_SPAN = HANGER_THREAD_OFFSET + HANGER_WIDTH / 2;
// FIXING PIN HOLE
FIX_PIN_DIAMETER = 10.3;
FIX_PIN_HEAD_DIAMETER = 12.5;
FIX_PIN_HEAD_RECESS_HEIGHT = 1.5; // HEIGHT OF THE RECESS THAT GRABS THE PIN !!, PINHEAD DISTANCE TO FRAME !!
// semi computed
// SET OFFSET OR BORDER
// OFFSET
/* FIX_OFFSET = 8; // center of fixation pin */
// BORDER
FIX_BORDER = 2.5; // border of plate to fixation pin distance
FIX_OFFSET = FIX_PIN_DIAMETER / 2 + FIX_BORDER; // computed center of fixation pin
// output // output
difference() { difference() {
hanger_wedge_plate(); hanger_wedge_plate();
fixing_pin();
hub_grove(); hub_grove();
fixing_pin();
tensioner_thread(); tensioner_thread();
} }
// tensioner thread hole // tensioner thread hole
module tensioner_thread() { module tensioner_thread() {
difference() { difference() {
translate([HANGER_WIDTH / 2, FIX_PLATE_SPAN_Y + HANGER_THREAD_OFFSET ,-1]){ translate([HANGER_WIDTH / 2, FIX_PLATE_SPAN_Y + HANGER_THREAD_OFFSET , -1]){
cylinder(h = 20, d = HANGER_THREAD_DIAMETER + TT, center = false, $fn = fn); cylinder(h = 20, d = HANGER_THREAD_DIAMETER + TT, center = false, $fn = fn);
} }
translate([HANGER_WIDTH / 2, FIX_PLATE_SPAN_Y + HANGER_THREAD_OFFSET ,-1]) if ( TYPE == "PRINTING" ){
thread_in_pitch(HANGER_THREAD_DIAMETER + TT,HANGER_HEIGHT+3, 1); translate([HANGER_WIDTH / 2, FIX_PLATE_SPAN_Y + HANGER_THREAD_OFFSET , -1])
thread_in_pitch(HANGER_THREAD_DIAMETER + TT, HANGER_HEIGHT+3, 1);
}
} }
} }
// fixing pin hole // fixing pin hole
module fixing_pin() { module fixing_pin() {
ankathete = FIX_OFFSET / tan(22.5); ankathete = FIX_OFFSET / tan(22.5);
translate([FIX_PLATE_SPAN_X,0,0]){ translate([FIX_PLATE_SPAN_X, 0, 0]){
translate([ -ankathete, FIX_OFFSET, -1 ]){ translate([ -ankathete, FIX_OFFSET, -1 ]){
cylinder(h = 20, d = FIX_PIN_DIAMETER + TT, center = false, $fn = fn); cylinder(h = 20, d = FIX_PIN_DIAMETER + TT, center = false, $fn = fn);
cylinder(h = FIX_PLATE_HEIGHT - FIX_PIN_HEAD_RECESS_HEIGHT + 1, d = FIX_PIN_HEAD_DIAMETER + TT, center = false, $fn = fn); cylinder(h = FIX_PLATE_HEIGHT - FIX_PIN_HEAD_RECESS_HEIGHT + 1, d = FIX_PIN_HEAD_DIAMETER + TT, center = false, $fn = fn);
...@@ -86,37 +46,51 @@ module fixing_pin() { ...@@ -86,37 +46,51 @@ module fixing_pin() {
// hub groove // hub groove
module hub_grove() { module hub_grove() {
union() { union() {
hull() { if ( TYPE == "MILLING" ){
translate([ HUB_OFFSET_X, HUB_OFFSET_Y, 0 ]){ hull() {
cylinder(h = 20, d = HUB_DIAMETER + T, center = true, $fn = fn); translate([ HUB_OFFSET_X, HUB_OFFSET_Y, 0 ]){
} cylinder(h = 20, d = HUB_DIAMETER + T, center = true, $fn = fn);
translate([ HUB_OFFSET_X, FIX_PLATE_SPAN_Y + T, 0 ]){ }
cylinder(h = 20, d = HUB_DIAMETER + T, center = true, $fn = fn); translate([ HUB_OFFSET_X, FIX_PLATE_SPAN_Y + T, 0 ]){
cylinder(h = 20, d = HUB_DIAMETER + T, center = true, $fn = fn);
}
} }
} }
translate([ HUB_OFFSET_X, HUB_OFFSET_Y, FIX_PLATE_HEIGHT - HUB_DIAMETER_FRAME_SPACER_HEIGHT]){ if ( HUB_DIAMETER_SPACER > 0 ) {
cylinder(h = HUB_DIAMETER_FRAME_SPACER_HEIGHT + 1, d = HUB_DIAMETER_FRAME_SPACER + TT, center = false, $fn = fn); translate([ HUB_OFFSET_X, HUB_OFFSET_Y, FIX_PLATE_HEIGHT - HUB_DIAMETER_FRAME_SPACER_HEIGHT]){
} cylinder(h = HUB_DIAMETER_FRAME_SPACER_HEIGHT + 1, d = HUB_DIAMETER_FRAME_SPACER + TT, center = false, $fn = fn);
translate([ HUB_OFFSET_X, HUB_OFFSET_Y, -1]){ }
cylinder(h = 10, d = HUB_DIAMETER_SPACER + TT, center = false, $fn = fn); translate([ HUB_OFFSET_X, HUB_OFFSET_Y, -1]){
} cylinder(h = 10, d = HUB_DIAMETER_SPACER + TT, center = false, $fn = fn);
translate([ HUB_OFFSET_X, HUB_OFFSET_Y, FIX_PLATE_HEIGHT - ( HUB_DIAMETER_FRAME_SPACER_HEIGHT + HUB_DIAMETER_SPACER_HEIGHT + 10) ]){ }
cylinder(h = 10, d = 20 + TT, center = false, $fn = fn); translate([ HUB_OFFSET_X, HUB_OFFSET_Y, FIX_PLATE_HEIGHT - ( HUB_DIAMETER_FRAME_SPACER_HEIGHT + HUB_DIAMETER_SPACER_HEIGHT + 10) ]){
cylinder(h = 10, d = 20 + TT, center = false, $fn = fn);
}
} }
} }
} }
// hanger wedge plate // hanger wedge plate
module hanger_wedge_plate() { module hanger_wedge_plate() {
fix_plate_shape = [ [ FIX_PLATE_EDGE + T, FIX_PLATE_EDGE + T, FRAME_INNER_RADIUS_NEAR_HUB]
union() { // combine fixation plate with hangerblock , [ FIX_PLATE_SPAN_X - ( FIX_PLATE_EDGE / tan(22.5) + T / tan(22.5) )
// fix plate , FIX_PLATE_EDGE + T
, FIX_OFFSET-FIX_PLATE_EDGE ]
fix_plate_shape = [ [FIX_PLATE_EDGE + T,FIX_PLATE_EDGE + T,FRAME_INNER_RADIUS_NEAR_HUB] , [ FIX_PLATE_EDGE + T, FIX_PLATE_SPAN_X - ( FIX_PLATE_EDGE / tan(22.5) + T / tan(22.5) ),0]
, [FIX_PLATE_SPAN_X - ( FIX_PLATE_EDGE / tan(22.5) + T / tan(22.5) ),FIX_PLATE_EDGE + T,FIX_OFFSET-FIX_PLATE_EDGE] ];
, [FIX_PLATE_EDGE + T,FIX_PLATE_SPAN_X - ( FIX_PLATE_EDGE / tan(22.5) + T / tan(22.5) ),0]
]; hanger_shape = [ [ T, FIX_PLATE_SPAN_Y - FRAME_OUTER_RADIUS_NEAR_HANGER + T, 0]
, [ FRAME_OUTER_RADIUS_NEAR_HANGER - cos(45) * FRAME_OUTER_RADIUS_NEAR_HANGER + T
, FIX_PLATE_SPAN_Y - FRAME_OUTER_RADIUS_NEAR_HANGER + sin(45)*FRAME_OUTER_RADIUS_NEAR_HANGER + T
, 0
]
, [ FRAME_OUTER_RADIUS_NEAR_HANGER + T, FIX_PLATE_SPAN_Y + T, 0]
, [ HANGER_WIDTH - T, FIX_PLATE_SPAN_Y + T, 0]
, [ HANGER_WIDTH - T, FIX_PLATE_SPAN_Y + HANGER_SPAN - T, HANGER_WIDTH/2 - T]
, [ T, FIX_PLATE_SPAN_Y + HANGER_SPAN - T, HANGER_WIDTH / 2 - T]
];
module fix_plate() {
difference() { // cut shape where the bike frame ends difference() { // cut shape where the bike frame ends
minkowski() {// combine fixation plate with edged corner minkowski() {// combine fixation plate with edged corner
linear_extrude( height = FIX_PLATE_HEIGHT - FIX_PLATE_EDGE) linear_extrude( height = FIX_PLATE_HEIGHT - FIX_PLATE_EDGE)
...@@ -128,40 +102,76 @@ module hanger_wedge_plate() { ...@@ -128,40 +102,76 @@ module hanger_wedge_plate() {
linear_extrude(height = FIX_PLATE_EDGE, scale=0) linear_extrude(height = FIX_PLATE_EDGE, scale=0)
circle(r = FIX_PLATE_EDGE); circle(r = FIX_PLATE_EDGE);
} }
// shape where the bike frame ends
crop_y = FIX_PLATE_SPAN_Y + HANGER_THREAD_OFFSET + T;
// if hanger is milled, the baseplate ends where the frame ends
// else it encapsulates the hub screw
if ( TYPE == "MILLING" ) {
crop_y = FIX_PLATE_SPAN_Y + T;
}
translate([ 0 translate([ 0
, FIX_PLATE_SPAN_Y + T , crop_y
, -1 , -1
])cube(50,50,100); ])cube(50, 50, 100);
} }
/* FRAME_OUTER_CURVE_NEAR_HANGER */ }
// hangerblock
hanger_shape = [ [ T, FIX_PLATE_SPAN_Y - FRAME_OUTER_RADIUS_NEAR_HANGER + T, 0] module hangerblock() {
, [ FRAME_OUTER_RADIUS_NEAR_HANGER - cos(45) * FRAME_OUTER_RADIUS_NEAR_HANGER + T difference() {
, FIX_PLATE_SPAN_Y - FRAME_OUTER_RADIUS_NEAR_HANGER + sin(45)*FRAME_OUTER_RADIUS_NEAR_HANGER + T union() { // combine base block with safety cylinder
, 0
]
, [FRAME_OUTER_RADIUS_NEAR_HANGER + T,FIX_PLATE_SPAN_Y + T,0]
, [HANGER_WIDTH - T ,FIX_PLATE_SPAN_Y + T,0]
, [HANGER_WIDTH - T,FIX_PLATE_SPAN_Y + HANGER_SPAN - T, HANGER_WIDTH/2 - T]
, [T,FIX_PLATE_SPAN_Y + HANGER_SPAN - T, HANGER_WIDTH / 2 - T]
];
difference() {
// hanger // hanger
linear_extrude( height = HANGER_HEIGHT) linear_extrude( height = HANGER_HEIGHT)
polygon( polygon(
polyRound( polyRound(
hanger_shape, fn hanger_shape, fn
)); ));
// cut out dropout frame corner // safety diameter probabaly unnecessary
translate([FRAME_OUTER_RADIUS_NEAR_HANGER - T * 3 /*better safe than sorry*/ , FIX_PLATE_SPAN_Y - FRAME_OUTER_RADIUS_NEAR_HANGER,0]) if (HANGER_THREAD_DIAMETER + HANGER_SAFETY_WIDTH > HANGER_WIDTH) {
cylinder(h = HANGER_HEIGHT + 1, d = HANGER_THREAD_DIAMETER*2 +T, center = false, $fn = fn*2); translate([
} HANGER_WIDTH / 2
// safety diameter probabaly unnecessary , FIX_PLATE_SPAN_Y + HANGER_THREAD_OFFSET
if (HANGER_THREAD_DIAMETER + HANGER_SAFETY_WIDTH > HANGER_WIDTH) { , 0])cylinder(
translate([HANGER_WIDTH / 2, FIX_PLATE_SPAN_Y + HANGER_THREAD_OFFSET , 0]) h = HANGER_HEIGHT
cylinder(h = HANGER_HEIGHT, d = HANGER_THREAD_DIAMETER + HANGER_SAFETY_WIDTH, center = false, $fn = fn); , d = HANGER_THREAD_DIAMETER + HANGER_SAFETY_WIDTH
, center = false
, $fn = fn
);
}
} }
// cut out dropout frame corner
translate([
FRAME_OUTER_RADIUS_NEAR_HANGER - T * 3 /*better safe than sorry*/
, FIX_PLATE_SPAN_Y - FRAME_OUTER_RADIUS_NEAR_HANGER
, FIX_PLATE_HEIGHT - FIX_PLATE_EDGE
])cylinder(
h = HANGER_HEIGHT - FIX_PLATE_HEIGHT + FIX_PLATE_EDGE + 1
, d = HANGER_THREAD_DIAMETER*2 +T
, center = false
, $fn = fn*2
);
}
}
difference() {
union() { // combine fixation plate with hangerblock
fix_plate();
hangerblock();
}
// make some space for the Tensioner
if ( TYPE == "PRINTING" ){
translate([
- HANGER_SAFETY_WIDTH /2 - T
, FIX_PLATE_SPAN_Y + HANGER_HEIGHT - 12
, -1
])cube([
50
, 40
, FIX_PLATE_HEIGHT / 2
]);
}
} }
} }
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!