Commit f12e6e13 authored by Richard Bowman's avatar Richard Bowman 🔬

refactored base to separate file, and fixed height

Stage now has the correct 75mm beam height when used with standard fibre-alignment accessories, i.e. the top of the stage is 62.5mm from the bench.


Former-commit-id: a51eb1bedf83171f146a0efb132d98f47a93bc8f
Former-commit-id: 0da4df12dea8dc4b6930b0e77e7845e588e0d7d1
parent 22b9c47d
use <utilities.scad>;
use <compact_nut_seat.scad>;
use <fibre_stage_three_legs.scad>;
include <parameters.scad>;
module base(h=base_height){
// This isn't beautiful, but lifts the mechanism off the floor and anchors elastic bands
tilt = -asin(xy_stage_reduction/xy_reduction); // X/Y actuators are not vertical
xy_a_travel = xy_travel*xy_reduction*cos(tilt); // (Vertical) travel of X/Y actuators
z_a_travel = z_travel*z_reduction; // Travel of Z actuator
xy_nut_y = pushstick[1]+xy_lever*xy_reduction*cos(tilt); // centre of actuator columns
z_nut_y = z_actuator_pivot_y+zflex[1]+z_lever*z_reduction;
core = column_core_size();
// Check the base is being produced sufficiently high to accommodate the actuators
if(base_height < max_actuator_travel + 4) echo(str("WARNING: stage_height is too low, stage travel will be reduced! base height:",base_height," stage height:",stage_height," platform_z:",platform_z));
band = [11, 4, 2.5*2]; // Viton band slot size
echo("base height is ",h);
difference(){
union(){
// start off by extruding the bottom of the casing to make a bucket
thick_section(h, z=d) casing();
thick_section(0.75, z=d) casing(mechanism_void=false);
//add in properly tilted actuator columns
each_pushstick() translate([0,xy_nut_y,h]) intersection(){
mirror([0,0,1]) cylinder(r=999,h=h,$fn=8);
rotate([tilt,0,0]) screw_seat_outline(999, center=true);
}
//include a solid Z actuator column
translate([0,z_nut_y,0]) screw_seat_outline(h);
}
// remove the unnecessary thick floor from the box
translate([0,0,0.75]) thick_section(999) mechanism_void();
// cut-outs for elastic bands/springs
each_pushstick() translate([0,xy_nut_y+h*tan(tilt),0]) union(){
// holes either side of the actuator, for elastic band insertion
difference(){
nut_seat_void(99, tilt=tilt, center=true); // space inside the column
cube([pw+3,999,(h-xy_a_travel)*2],center=true); // elastic band mount
}
//elastic band slot (with rounded edges to equalise tension/avoid tearing)
rotate([tilt,0,0]) skew_flat(tilt) translate([0,0,0]){
filleted_bridge([2*column_base_radius()+1.5, 3, 2.5], roc_xy=4, roc_xz=3, $fn=16);
}
// cut the inside wall so the column can
// move downwards:
translate([0,-10,h]) cube([7+3,20,2*xy_a_travel-d],center=true);
// cut the outside of the base to remove the excess material
// from the outer edge of the column (will have been extruded
// vertically)
rotate([tilt,0,0]) difference(){
translate([-99,0,-99]) cube(999);
screw_seat_outline(999,adjustment=d,center=true);
}
}
translate([0,z_nut_y,0]) union(){
// holes either side of the actuator, for elastic band insertion
difference(){
translate([0,0,-d]) nut_seat_void(99,center=true);
cube([pw+3,999,(h-z_a_travel)*2],center=true);
}
//elastic band slot (with rounded edges to equalise tension/avoid tearing)
translate([0,0,0]){
filleted_bridge([2*column_base_radius()+1.5, 3, 2], roc_xy=4, roc_xz=3, $fn=16);
}
// remember to cut the inside wall so the column can
// move downwards:
translate([0,-10,h]) cube([7+3,20,2*z_a_travel-d],center=true);
}
}
}
base();
\ No newline at end of file
......@@ -199,7 +199,7 @@ module fixed_platform(){
translate([-d,0,0]) cube([2*d, d, fixed_platform[1]+fixed_platform[2]]);
}
//"bridge" part
#translate([0,0,casing_top-d])
translate([0,0,casing_top-d])
linear_extrude(platform_z-casing_top+d)
intersection(){
casing_outline_top();
......@@ -391,15 +391,18 @@ module thick_section(h, z=0, center=false){
}
}
module base(){
// This isn't beautiful, but lifts the mechanism off the floor. Needs somehwere for the elastic bands though.
t=max(xy_travel*xy_reduction, z_travel*z_reduction);
tilt = -asin(xy_stage_reduction/xy_reduction);
xy_nut_y = pushstick[1]+xy_lever*xy_reduction*cos(tilt);
module base(h=base_height){
// This isn't beautiful, but lifts the mechanism off the floor and anchors elastic bands
tilt = -asin(xy_stage_reduction/xy_reduction); // X/Y actuators are not vertical
xy_a_travel = xy_travel*xy_reduction*cos(tilt); // (Vertical) travel of X/Y actuators
z_a_travel = z_travel*z_reduction; // Travel of Z actuator
xy_nut_y = pushstick[1]+xy_lever*xy_reduction*cos(tilt); // centre of actuator columns
z_nut_y = z_actuator_pivot_y+zflex[1]+z_lever*z_reduction;
core = column_core_size();
h = t + 4;
band = [11, 4, 2.5*2];
// Check the base is being produced sufficiently high to accommodate the actuators
if(base_height < max_actuator_travel + 4) echo(str("WARNING: stage_height is too low, stage travel will be reduced! base height:",base_height," stage height:",stage_height," platform_z:",platform_z));
band = [11, 4, 2.5*2]; // Viton band slot size
echo("base height is ",h);
difference(){
union(){
......@@ -423,7 +426,7 @@ module base(){
// holes either side of the actuator, for elastic band insertion
difference(){
nut_seat_void(99, tilt=tilt, center=true); // space inside the column
cube([pw+3,999,(h-t)*2],center=true); // elastic band mount
cube([pw+3,999,(h-max_actuator_travel)*2],center=true); // elastic band mount
}
//elastic band slot (with rounded edges to equalise tension/avoid tearing)
rotate([tilt,0,0]) skew_flat(tilt) translate([0,0,0]){
......@@ -432,7 +435,7 @@ module base(){
// cut the inside wall so the column can
// move downwards:
translate([0,-10,h]) cube([7+3,20,2*t-d],center=true);
translate([0,-10,h]) cube([7+3,20,2*max_actuator_travel-d],center=true);
// cut the outside of the base to remove the excess material
// from the outer edge of the column (will have been extruded
......@@ -446,7 +449,7 @@ module base(){
// holes either side of the actuator, for elastic band insertion
difference(){
translate([0,0,-d]) nut_seat_void(99,center=true);
cube([pw+3,999,(h-t)*2],center=true);
cube([pw+3,999,(h-max_actuator_travel)*2],center=true);
}
//elastic band slot (with rounded edges to equalise tension/avoid tearing)
translate([0,0,0]){
......@@ -455,7 +458,7 @@ module base(){
// remember to cut the inside wall so the column can
// move downwards:
translate([0,-10,h]) cube([7+3,20,2*t-d],center=true);
translate([0,-10,h]) cube([7+3,20,2*max_actuator_travel-d],center=true);
}
}
}
......
......@@ -2,7 +2,11 @@
Useful settings/parameters for the OpenFlexure fibre stage
*/
version_numstring = "0.2.0";
stage = [37,20,5]; //dimensions of stage part
stage = [37,20,5]; // dimensions of stage part
beam_height = 75; // height of beam above the table
stage_height = beam_height - 12.5; //bottom of base to top surface of the stage
// NB platform_z sets the distance from bottom of the body to top of the stage
// stage_height determines the thickness of the base.
// Range of travel is lever length * flex_a
xy_lever = 10;
......@@ -53,4 +57,7 @@ platform_z = shelf_z2 + stage[2] + 7;
fixed_platform_standoff = 10;
fixed_platform = [50,40,4];
platform_gap = xy_travel + 1;
casing_top = shelf_z2 + stage[2] - z_travel; //top of the wall
\ No newline at end of file
casing_top = shelf_z2 + stage[2] - z_travel; // top of the wall
max_actuator_travel = max(xy_travel*xy_reduction, z_travel*z_reduction); // maximum distance the actuators protrude below the stage
base_height = stage_height - platform_z; // the base takes up any height not use by the body.
if(base_height < max_actuator_travel + 4) echo("WARNING: stage_height is too low, base will not compile properly!");
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment