verzameling oude spullen

This commit is contained in:
Manfred 2017-07-09 19:58:38 +02:00
commit 7ed9544283
119 changed files with 1288059 additions and 0 deletions

View file

@ -0,0 +1,47 @@
// PRUSA Mendel
// Belt clamp
// GNU GPL v3
// Josef Průša
// josefprusa@me.com
// prusadjs.cz
// http://www.reprap.org/wiki/Prusa_Mendel
// http://github.com/prusajr/PrusaMendel
//
// modified by neurofun
include <configuration.scad>
module beltclamp(){
clamp_height = 3;
clamp_width = 10;
clamp_length = 16; // distance between the center of the 2 holes
belt_pitch = 2;
belt_width = 10;
tooth_width = 1.3;
tooth_heigth = .75;
offset = belt_pitch/4;
// uncomment next line for a symetric clamp
//offset = 0;
difference(){
// basic shape
union(0){
translate(v = [0,0,clamp_height/2]) cube([clamp_length,clamp_width,clamp_height], center=true);
translate(v = [-clamp_length/2, 0, 0]) cylinder(r=clamp_width/2,h=clamp_height);
translate(v = [clamp_length/2, 0, 0]) cylinder(r=clamp_width/2,h=clamp_height);
}
// screw holes
translate(v = [-clamp_length/2, 0, -1])polyhole(m3_diameter, clamp_height+2);
translate(v = [clamp_length/2, 0, -1]) polyhole(m3_diameter, clamp_height+2);
// belt grip
translate(v = [0,offset,clamp_height-tooth_heigth])
for ( i = [round(-clamp_width/belt_pitch/2) : round(clamp_width/belt_pitch/2)]){
translate(v = [0,belt_pitch*i,tooth_heigth])cube(size = [belt_width, tooth_width, tooth_heigth*2], center = true);
}
}
}
beltclamp();

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,62 @@
// PRUSA Mendel
// Configuration file
// GNU GPL v3
// Josef Průša
// josefprusa@me.com
// prusadjs.cz
// http://www.reprap.org/wiki/Prusa_Mendel
// http://github.com/prusajr/PrusaMendel
// PLEASE SELECT ONE OF THE CONFIGURATIONS BELOW
// BY UN-COMMENTING IT
// Uncomment for metric settings
// METRIC METRIC METRIC METRIC METRIC METRIC METRIC METRIC
include <metric.scad>;
// CUSTOM CUSTOM CUSTOM CUSTOM CUSTOM CUSTOM CUSTOM CUSTOM CUSTOM
thin_wall = 3;
// Linear bearing version
linear = false;
// set false for LM-8UU, true for LM-E-8UU (ignore if linear is set to false)
lme8uu = false;
// CHANGE ONLY THE STUFF YOU KNOW
// IT WILL REPLACE DEFAULT SETTING
// RODS
// threaded_rod_diameter = 0;
// threaded_rod_diameter_horizontal = 0;
// smooth_bar_diameter = 0;
// smooth_bar_diameter_horizontal = 0;
// Nuts and bolts
// m8_diameter = 0;
// m8_nut_diameter = 0;
// m4_diameter = 0;
// m4_nut_diameter = 0;
// m3_diameter = 0;
// m3_nut_diameter = 0;
// Bushing holder
// bushing_core_diameter = smooth_bar_diameter;
// bushing_material_thickness = 0;
///counted stuff
m3_nut_diameter_bigger = ((m3_nut_diameter / 2) / cos (180 / 6))*2;
// functions
include <functions.scad>

View file

@ -0,0 +1,35 @@
// PRUSA Mendel
// Functions used in many files
// GNU GPL v3
// Josef Průša
// josefprusa@me.com
// prusadjs.cz
// http://www.reprap.org/wiki/Prusa_Mendel
// http://github.com/prusajr/PrusaMendel
module nut(d,h,horizontal=true){
cornerdiameter = (d / 2) / cos (180 / 6);
cylinder(h = h, r = cornerdiameter, $fn = 6);
if(horizontal){
for(i = [1:6]){
rotate([0,0,60*i]) translate([-cornerdiameter-0.2,0,0]) rotate([0,0,-45]) cube(size = [2,2,h]);
}}
}
// Based on nophead research
module polyhole(d,h) {
n = max(round(2 * d),3);
rotate([0,0,180])
cylinder(h = h, r = (d / 2) / cos (180 / n), $fn = n);
}
module roundcorner(diameter){
difference(){
cube(size = [diameter,diameter,99], center = false);
translate(v = [diameter, diameter, 0]) cylinder(h = 100, r=diameter, center=true);
}
}

View file

@ -0,0 +1,38 @@
// PRUSA Mendel
// Default metric sizes
// GNU GPL v3
// Josef Průša
// josefprusa@me.com
// prusadjs.cz
// http://www.reprap.org/wiki/Prusa_Mendel
// http://github.com/prusajr/PrusaMendel
// DONT CHANGE THIS FILE! ALTER VALUES IN CONFIGURATION.SCAD INSTEAD
// RODS
threaded_rod_diameter = 8.7;
threaded_rod_diameter_horizontal = 8.7;
smooth_bar_diameter = 8;
smooth_bar_diameter_horizontal = 8.5;
// Nuts and bolts
m8_diameter = 9;
m8_nut_diameter = 14.1;
m4_diameter = 4.5;
m4_nut_diameter = 9;
m3_diameter = 3.6;
m3_nut_diameter = 5.3;
m3_nut_diameter_horizontal = 6.1;
// Bushing holder
bushing_core_diameter = smooth_bar_diameter;
bushing_material_thickness = 1;
// Motors
motor_shaft = 5.5;

View file

@ -0,0 +1,782 @@
use <vwheel_single_bearing_b17001_rev_2.scad>;
use <makerslide.scad>;
use <carriage_plate_standard_c14005_rev_2.scad>;
use <misumi_2020.scad>;
use <misumi_2040.scad>;
use <skins.scad>;
PI=3.14159265358979323846;
// Specify the dimensions of the usable cutting envelope you need:
xtravel = 1300;
ytravel = 640;
ztravel = 60;
// That's it. Configured. Hit F5.
// Check the console window for parts list with scaled dimensions.
// Check the display to see if everything really does line up.
// Set the folowing items to 1 or 0 to display or hide different
// sections of the assembly. Probaly the first thing you want to
// turn off is the skins, to get a better look at everything
// else inside.
xy_gantry = 0 ;
xbelt = 1 ;
ybelts = 1 ;
driveshafts = 1 ;
zsystem = 0 ;
frame = 1 ;
cover = 0 ; cover_is_open = 1 ;
skins = 0 ;
skins_flat = 1 ; // hi-res 2D layout, for DXF export
//(disables rendering of everything else)
// press F6 for this one, then "Design"
// menu --> "Export as DXF".
//////////////////////////////////
// bitlair additions //
//////////////////////////////////
tube = 1;
reservoir = 1;
voeding = 1;
luchtcompressor = 1;
waterpomp = 1;
radiator = 1;
///////////
// INTRO //
///////////
// This is a parametric three axis motion system
// based on Barton Dring's Buildlog.net Laser 2.0 design
// and MakerSlide V rail system.
// (www.buildlog.net) (www.makerslide.com)
// I've tried to identify all the parts that need to scale
// to adjust the cutting envelope. This script calculates
// the new dimensions required just for the parts that need
// to change, and lists those results in the console window.
// Combine these results with the Laser 2.0 BOM at Buildlog.net
// to work up your parts orders for your own custom-sized machine.
// (To copy the text in the console, you might have to
// right click --> Select All --> Copy.)
// The scaled skin panels can be rendered flat and exported as
// 2D DXF files, suitable for generating cut files for a CNC
// router, or patterns to print and cut by hand.
// Is it all correct? Will this really give a workable set of
// scaled parts? Explore the model and consider it. I'm not
// making any claims - I can only attest to my intent. I'll
// be using it though, if I come up with money for a build soon.
// This work is Copyright 2011 by Michael Sheldrake
// and licensed under a Creative Commons Attribute-Share Alike 3.0 License
// http://creativecommons.org/licenses/by-sa/3.0/
// Thanks go to Barton Dring for releasing his designs under
// that same license.
////////////////////////////////
// SPECIFYING AXIS DIMENSIONS //
////////////////////////////////
// The Buildlog 2.0 Laser claims "just under" a 20"x12"x4"
// working envelope (508mm x 304.8mm x 101.6mm).
// If you specify those dimensions here (in millimeters), the parts
// generated should match the dimensions in bdring's Laser 2.0
// drawings.
//xtravel = 508.0; // everything in millimeters
//ytravel = 304.8; // These are the Buildlog.net
//ztravel = 101.6; // Laser 2.0 standard dimensions.
//// DON'T GO TOO BIG ///
// You want a 2'x2' system? 4'x4'? You can model that here.
// But don't count on that design to actually work.
// Maybe, though? Every extra inch makes it that much more
// difficult to align and maintain rigity of the system.
// Surely the Laser 2.0 design can add a half inch here or
// there and work about as well. But 12"? Yards?
// Probably not, but it's fun to look and dream:
//xtravel = 1500; // Way too big,
//ytravel = 1500; // probably.
//ztravel = 2500; // Or is it?
//// DON'T GO TOO SMALL ///
// ... because a laser tube and electronics won't fit in there.
// But if you're adapting the Laser 2.0 design to work as a
// plotter, or something else, here's a pretty small system:
//xtravel = 1; // We call this
//ytravel = 1; // "tugging the
//ztravel = 1; // envelope".
// OpenSCAD FUN //
// Animate the envelope - grow from 1x1x1 to standard Laser 2.0 size.
// Use OpenSCAD's Animate option in the View menu.
// (Normally animate just makes the x and y axes move.)
// (Make sure all other lines above that set
// xtravel, ytravel and ztravel are commented
// out before trying this animated version.)
//ztarg=101.6;
//xfact=508.0/ztarg;
//yfact=304.8/ztarg;
//xtravel = $t*ztarg * xfact;
//ytravel = $t*ztarg * yfact;
//ztravel = $t*ztarg;
/////////////////////////
// Constant Dimensions //
/////////////////////////
// Some frame dimensions don't change as we scale
// the cutting envelope. These are candidates for
// becoming parameters too, but I didn't do all the
// math with changing these in mind. So inspect
// results closely if you alter them.
beam_width = 20; // width of square aluminum extrusions
half_beam_width = beam_width/2; // handy
shaftmotorspan = 82; // stepper motor between two drive shafts
skinThickness = 3; // Alupanel, 3mm thick
control_space_X = 210; // width of where electroncs go
tube_space_Y = 80; // space for laser tube behind cutting area
top_space_Z = 140; // parts above z=0 don't scale
wheel_plate_thk = 0.125*25.4; // MakerSlide wheel plates / brackets, 1/8" Al
wheel_standoff = 0.25 *25.4; //
wheel_center_off= 3; // for single-bearing delrin vwheel
imperialFudge = 1.95; // Gantry assembly v wheel center to v wheel center comes
// out to 728.05mm on ref design. Frame bars that seem to
// match that length don't - they're 730mm.
// So this little extra gets us even frame dims that match
// reference, based on a metric span of MakerSlide, and then
// plates and vwheels that have some imperial dimensions mixed in.
///////////////////////////
/// THE SCALING MATH ///
///////////////////////////
// Here's the math to make the the Buildlog 2.0 reference dimensions adjustable,
// xyz reference frame parts - travel you get from that = base xyz vals to add your own desired travel dimensions to
// (x rail,y rail,frame height) - ( 12" , 20" , 4" )
// ( 703 , 560 , 310 ) - ( 508 , 304.8 , 101.6) = ( 195 , 255.2 , 208.4 )
// Note that we snap up to next whole mm:
MakerSlideXLength = ceil( 195.0 + xtravel ); // Note that we snap
MakerSlideYLength = ceil( 255.2 + ytravel ); // up to next whole
FrameHeight = ceil( 208.4 + ztravel ); // millimeter.
// similar for belts, except relative to roughly 1/2 belt length, since they loop
// original x,y = 60",40" (1524mm,1016mm); half: (762 , 508)
//(762 , 508) - ( 508 , 304.8 ) = ( 254 , 203.2)
BeltXLength = 2 * (254 + xtravel);
BeltYLength = 2 * (203.2 + ytravel);
// similar for Y drive shafts
// recently updated to 14" and 12"
// just split the difference of requested and reference ytravel between the shafts,
// but note that these shafts at McMaster mostly come in 2" increments (and 9 and 15, and not 22)
// original shaft sum - original xtravel
// 26" - 20" = 6"
shaftsum=ceil(6+(xtravel/25.4)); // inches here
ShaftOneLength=25.4 * floor(shaftsum/2 + 1); // longer shaft, back to mm
ShaftTwoLength=25.4 * ceil(shaftsum/2 - 1); // short shaft - there's more space
// in assy to make this one longer
///////////////////////////////////
// Derived and Scaled Dimensions //
///////////////////////////////////
to_vwheel_center= wheel_plate_thk + wheel_standoff + wheel_center_off;
scaledX = MakerSlideXLength + 2 * to_vwheel_center + imperialFudge;
halfScaledX = scaledX/2;
halfScaledXPlus = halfScaledX + half_beam_width;
scaledY = MakerSlideYLength;
halfScaledY = scaledY/2;
halfScaledYPlus = halfScaledY + half_beam_width;
shortHalfScaledY= halfScaledY - tube_space_Y - beam_width; // not really a half of anything
scaledZDown = FrameHeight - top_space_Z;
activeMakerSlideYLength = MakerSlideYLength - // this is just the portion that
tube_space_Y - // you would use if the beam didn't
beam_width; // reach back in to the tube space
// to the back of the machine
// and now ...
///////////////////////////////////
// RENDER THE SCALED SUBSECTIONS //
///////////////////////////////////
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
// ///
///
if (skins_flat==1) {skins_flat();}
else {
if (xy_gantry==1) xy_gantry();
if (xbelt==1) xbelt(BeltXLength);
if (ybelts==1) ybelts(BeltYLength);
if (driveshafts==1) driveshafts(ShaftOneLength,ShaftTwoLength);
if (zsystem==1) zsystem();
if (frame==1) frame();
if (cover==1) cover(open=(cover_is_open==1));
if (skins==1) skins();
if (tube==1) tube();
if (reservoir==1) reservoir();
if (voeding==1) voeding();
if (luchtcompressor==1) luchtcompressor();
if (waterpomp==1) waterpomp();
if (radiator==1) radiator();
}
///
///
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
///////////////////////////
// MakerSlide components //
///////////////////////////
makerslide_color=[0.6,0.6,0.7];
// These two modules are not used
// for the laser design, but might
// be useful for visualizing other
// non-laser concepts that use the
// standard MakerSlide wheel plates.
module wheel_plate_assy(flip=false) {
wheelelevation= (flip ? -1 : 1) * to_vwheel_center;
color([0.6,0.2,0.2]) rotate(a=180) translate([-55,-80,0])
import_stl("standard_wheel_carriage_plate.stl", convexity = 5);
translate([42.3, -70, wheelelevation]) vwheel();
translate([42.3, 70, wheelelevation]) vwheel();
translate([-22.3, 0, wheelelevation]) vwheel();
}
module tool_carriage_assy() {
wheelelevation= -(wheel_standoff + wheel_center_off);
translate([0.6,0,beam_width + -wheelelevation]) {
color([0.6,0.2,0.2]) translate([-80,45,0]) rotate([0,0,-90])
import_stl("standard_wheel_carriage_plate.stl",convexity=5);
translate([-32.663,0,wheelelevation]) rotate([180,0,0]) vwheel();
translate([32.3,-32.3,wheelelevation]) rotate([180,0,0]) vwheel();
translate([32.3, 32.3,wheelelevation]) rotate([180,0,0]) vwheel();
}
}
// These three modules bring in the laser-specific
// MakerSlide plates for the gantry assembly.
module left_bracket_assy() {
color([0.6,0.2,0.2]) import_stl("gantry_end_bracket_left_rev4_mm.stl", convexity = 10);
// Warning:
// The bracket plus the first wheel alone, cause OpenSCAD to crash on CGAL render.
// That region of the bracket is like a Bermuda Triangle for CGAL.
// There should be no need to CGAL-render this assembly, but if you do,
// comment out this first wheel.
translate([10 + 0.315 * 25.4 , -10 - 0.719 * 25.4 , to_vwheel_center]) vwheel();
translate([10 + 0.315 * 25.4 , 10 + 1.574 * 25.4 , to_vwheel_center]) vwheel();
translate([10 - 2.221 * 25.4 - 0.94 , 10 - 0.01 * 25.4 , to_vwheel_center]) vwheel();
}
module right_bracket_assy() {
color([0.6,0.2,0.2]) import_stl("gantry_end_bracket_right_rev_3_mm.stl", convexity = 5);
translate([10 + 0.315 * 25.4 , -10 - 0.719 * 25.4 , -to_vwheel_center]) rotate([180,0,0]) vwheel();
translate([10 + 0.315 * 25.4 , 10 + 1.574 * 25.4 , -to_vwheel_center]) rotate([180,0,0]) vwheel();
translate([10 - 2.221 * 25.4 - 0.94 , 10 + 0.236 * 25.4 , -to_vwheel_center]) rotate([180,0,0]) vwheel();
}
module laser_carriage_assy() {
wheelelevation= -(wheel_standoff + wheel_center_off);
translate([0.6,0,20 + -wheelelevation]) {
color([0.2,0.2,0.2]) rotate([0,0,-90]) import_stl("laser_carriage_plate_rev_4_mm.stl",convexity=5);
translate([ 32.163 , -34.925 , wheelelevation]) rotate([180,0,0]) vwheel();
translate([ 32.163 , 34.925 , wheelelevation]) rotate([180,0,0]) vwheel();
translate([-32.663 - 0.94 , 0 , wheelelevation]) rotate([180,0,0]) vwheel();
}
}
// Gantry assembly from wheel plates above and a piece of MakerSlide V rail extrusion.
module gantry(xref=400) {
echo(str("GANTRY"));
echo(str(" MakerSlide: 1 x ",MakerSlideXLength,"mm (",(MakerSlideXLength/25.4),"in)"));
translate([0,0,25])
rotate([0,0,-90])
rotate([-90,-90,0]) {
color(makerslide_color) makerslide(xref - 0.02); // minus 0.02 to avoid co-planar display glitches with end plates
translate([0,0, xref/2]) left_bracket_assy();
translate([0,0,-xref/2]) right_bracket_assy();
// you might use these standard plates instead, for a non-laser assembly
//translate([0,0, xref/2]) wheel_plate_assy();
//translate([0,0,-xref/2]) wheel_plate_assy(flip=true);
}
rotate([0,0,-90])
translate([0,sin(2*$t*360) * (xref/2 - 85),25]) { // for optional animation
//tool_carriage_assy(); // standard plate option
laser_carriage_assy();
}
}
// Gantry, with two pieces of MakerSlide to ride on.
// Note the belt model thrown in, so it can ride with the gantry when animated.
module xy_gantry() {
animlowy = -MakerSlideYLength/2 + 80;
animhalfspan = (MakerSlideYLength - (tube_space_Y+beam_width) - 160)/2;
translate([-imperialFudge/2,0,0]) { // to align the whole thing with the frame assembly
translate([0,(animlowy+animhalfspan)+sin(180+$t*360)*animhalfspan,0]) { // for animation
gantry(MakerSlideXLength);
}
echo(str(" MakerSlide: 2 x ",MakerSlideYLength,"mm (",(MakerSlideYLength/25.4),"in)"));
translate([-(MakerSlideXLength/2 + beam_width + to_vwheel_center),0,half_beam_width]) rotate([-90,0,0]) color(makerslide_color) makerslide(MakerSlideYLength);
translate([ (MakerSlideXLength/2 + beam_width + to_vwheel_center),0,half_beam_width]) rotate([-90,0,180]) color(makerslide_color) makerslide(MakerSlideYLength);
}
}
///////////////////////////
// Misumi components //
///////////////////////////
module frame(xref=MakerSlideXLength,yref=MakerSlideYLength,zref=FrameHeight) {
echo(str("FRAME"));
echo(str(" Misumi 2040:"));
d30027r3_9_length = scaledX + control_space_X + beam_width;
d30027r3_9_partno = str("HFS5-2040-",d30027r3_9_length);
d30027r3_9_count = 2;
echo(str(" ",d30027r3_9_count," x ",d30027r3_9_partno," ",d30027r3_9_length,"mm (",(d30027r3_9_length/25.4),"in)"));
for(i=[
[-halfScaledX , halfScaledYPlus , 0],
[-halfScaledX ,-halfScaledYPlus , 0],
]) {
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2040( d30027r3_9_length );
}
echo(str(" Misumi 2020:"));
d30027r3_4_length = zref;
d30027r3_4_partno = str("HFS5-2020-",d30027r3_4_length);
d30027r3_4_count = 4;
echo(str(" ",d30027r3_4_count," x ",d30027r3_4_partno," ",d30027r3_4_length,"mm (",(d30027r3_4_length/25.4),"in)"));
for(i=[
[-halfScaledXPlus , halfScaledYPlus ,-scaledZDown],
[-halfScaledXPlus ,-halfScaledYPlus ,-scaledZDown],
[ halfScaledXPlus + control_space_X + beam_width , halfScaledYPlus ,-scaledZDown],
[ halfScaledXPlus + control_space_X + beam_width ,-halfScaledYPlus ,-scaledZDown]
]) {
translate(i) misumi_2020(d30027r3_4_length);
}
d30027r3_8_length = scaledX + control_space_X + beam_width;
d30027r3_8_partno = str("HFS5-2020-",d30027r3_8_length);
d30027r3_8_count = 3;
echo(str(" ",d30027r3_8_count," x ",d30027r3_8_partno," ",d30027r3_8_length,"mm (",(d30027r3_8_length/25.4),"in)"));
for(i=[
[-halfScaledX ,-halfScaledYPlus ,-scaledZDown],
[-halfScaledX , halfScaledYPlus ,-scaledZDown],
[-halfScaledX , halfScaledYPlus , top_space_Z - beam_width],
]) {
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30027r3_8_length );
}
d30027r3_6_length = scaledX;
d30027r3_6_partno = str("HFS5-2020-",d30027r3_6_length);
d30027r3_6_count = 3;
echo(str(" ",d30027r3_6_count," x ",d30027r3_6_partno," ",d30027r3_6_length,"mm (",(d30027r3_6_length/25.4),"in)"));
for(i=[
[-halfScaledX ,-halfScaledYPlus , top_space_Z - 2*beam_width],
[-halfScaledX , halfScaledYPlus - (tube_space_Y+beam_width),-scaledZDown],
[-halfScaledX , halfScaledYPlus - (tube_space_Y+beam_width), top_space_Z - beam_width],
]) {
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30027r3_6_length );
}
d30027r3_notshown_length = scaledX - 5;
d30027r3_notshown_partno = str("HFS5-2020-",d30027r3_notshown_length);
d30027r3_notshown_count = 1;
echo(str(" ",d30027r3_notshown_count," x ",d30027r3_notshown_partno," ",d30027r3_notshown_length,"mm (",(d30027r3_notshown_length/25.4),"in)"));
for(i=[
[-halfScaledX ,halfScaledYPlus - (tube_space_Y+beam_width), half_beam_width],
]) {
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30027r3_notshown_length );
}
d30027r3_5_length = yref;
d30027r3_5_partno = str("HFS5-2020-",d30027r3_5_length);
d30027r3_5_count = 7; // drawing shows 6, coming revision has one more
echo(str(" ",d30027r3_5_count," x ",d30027r3_5_partno," ",d30027r3_5_length,"mm (",(d30027r3_5_length/25.4),"in)"));
for(i=[
[-halfScaledXPlus , halfScaledY ,-scaledZDown],
[-halfScaledXPlus , halfScaledY , top_space_Z-beam_width],
[ halfScaledXPlus , halfScaledY ,-scaledZDown],
[ halfScaledXPlus , halfScaledY , top_space_Z-beam_width],
[ halfScaledXPlus + control_space_X + beam_width , halfScaledY ,-scaledZDown],
[ halfScaledXPlus + control_space_X + beam_width , halfScaledY , half_beam_width],
[ halfScaledXPlus + control_space_X + beam_width , halfScaledY , top_space_Z-beam_width]
]) {
translate(i) translate([0,0,half_beam_width]) rotate([90,0,0]) misumi_2020(d30027r3_5_length);
}
d30027r3_3_length = control_space_X + beam_width;
d30027r3_3_partno = str("HFS5-2020-",d30027r3_3_length);;
d30027r3_3_count = 1;
echo(str(" ",d30027r3_3_count," x ",d30027r3_3_partno," ",d30027r3_3_length,"mm (",(d30027r3_3_length/25.4),"in)"));
translate([halfScaledX,-halfScaledYPlus, top_space_Z-half_beam_width]) rotate([0,90,0]) misumi_2020( d30027r3_3_length );
d30027r3_7_length = top_space_Z - beam_width - beam_width - half_beam_width;
d30027r3_7_partno = str("HFS5-2020-",d30027r3_7_length);
d30027r3_7_count = 1;
echo(str(" ",d30027r3_7_count," x ",d30027r3_7_partno," ",d30027r3_7_length,"mm (",(d30027r3_7_length/25.4),"in)"));
translate([halfScaledXPlus,-halfScaledYPlus,3*half_beam_width]) misumi_2020( d30027r3_7_length );
d30027r3_2_length = scaledZDown - half_beam_width;
d30027r3_2_partno = str("HFS5-2020-",d30027r3_2_length);
d30027r3_2_count = 1;
echo(str(" ",d30027r3_2_count," x ",d30027r3_2_partno," ",d30027r3_2_length,"mm (",(d30027r3_2_length/25.4),"in)"));
translate([half_beam_width,halfScaledYPlus - (tube_space_Y+beam_width),-scaledZDown + 2*half_beam_width]) misumi_2020( d30027r3_2_length );
}
/////////////////////
// cover, or lid //
/////////////////////
module cover(open=false) {
lidSideGap = 2.5; //mm
lidHingeGap = 0; //mm, maybe up to 1mm , based on Misumi hinge drawing
lidYPartLength=scaledY - tube_space_Y - 2*beam_width;
echo(str("COVER"));
d30013r3_8_length = scaledX - 2 * lidSideGap;
d30013r3_8_partno = str("HFS5-2020-",d30013r3_8_length);
d30013r3_8_count = 2;
echo(str(" ",d30013r3_8_count," x ",d30013r3_8_partno," ",d30013r3_8_length,"mm (",(d30013r3_8_length/25.4),"in)"));
d30013r3_7_length = lidYPartLength;
d30013r3_7_partno = str("HFS5-2020-",d30013r3_7_length);
d30013r3_7_count = 2;
echo(str(" ",d30013r3_7_count," x ",d30013r3_7_partno," ",d30013r3_7_length,"mm (",(d30013r3_7_length/25.4),"in)"));
// cover window panel
echo(str("COVER WINDOW PANEL"));
echo(str(" ",(2 * (halfScaledX - lidSideGap)),"mm x ",(lidYPartLength+2*beam_width),"mm (",((2 * (halfScaledX - lidSideGap))/25.4),"in x ",((lidYPartLength+2*beam_width)/25.4),"in)"));
ot=[0,-shortHalfScaledY,-top_space_Z-5];
or=[-92*(open?1:0),0,0];
translate(-1*ot) rotate(or) translate(ot) {
for(i=[
[-halfScaledX + lidSideGap , shortHalfScaledY - half_beam_width - lidHingeGap - beam_width - lidYPartLength, top_space_Z-beam_width],
[-halfScaledX + lidSideGap , shortHalfScaledY - half_beam_width - lidHingeGap, top_space_Z-beam_width],
]) {
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30013r3_8_length );
}
for(i=[
[-(halfScaledXPlus - 2*half_beam_width - lidSideGap) , shortHalfScaledY - beam_width - lidHingeGap , top_space_Z-beam_width],
[ (halfScaledXPlus - 2*half_beam_width - lidSideGap) , shortHalfScaledY - beam_width - lidHingeGap , top_space_Z-beam_width],
]) {
translate(i) translate([0,0,half_beam_width]) rotate([90,0,0]) misumi_2020( d30013r3_7_length );
}
color([0.7,0.7,1.0,0.5]) translate([-halfScaledX + lidSideGap,-halfScaledY - beam_width - lidHingeGap ,top_space_Z]) cube([(2 * (halfScaledX - lidSideGap)),(lidYPartLength+2*beam_width),skinThickness]);
}
}
///////////////////////////
// gantry timing belts //
///////////////////////////
module xbelt(beltlength=20) {
echo(str(" EconoBelt: 1 x ",beltlength,"mm (cut) (",ceil(beltlength/25.4),"in, rounded up)"));
animlowy = -MakerSlideYLength/2 + 80;
animhalfspan = (MakerSlideYLength - (tube_space_Y+beam_width) - 160)/2;
translate([-imperialFudge/2,(animlowy+animhalfspan)+sin(180+$t*360)*animhalfspan,0]) { // animation - should correspond to gantry motion
translate([-MakerSlideXLength/2 + 4,35,65]) rotate([90,0,0]) belt(beltlength);
}
}
module ybelts(beltlength=20) {
echo(str(" EconoBelt: 2 x ",beltlength,"mm (cut) (",ceil(beltlength/25.4),"in, rounded up)"));
translate([-MakerSlideXLength/2 + 5 ,(MakerSlideYLength)/2-55,-34]) rotate([90,0,-90]) belt(beltlength);
translate([ MakerSlideXLength/2 - 5 - imperialFudge,(MakerSlideYLength)/2-55,-34]) rotate([90,0,-90]) belt(beltlength);
}
module belt(ref) {
geardiam=25.4 * 0.489; //0.489" OD, but that might be for flange?
beltwidth=25.4/4;
beltthick=25.4/16;
halflength=ref/2;
gearcenter=(ref - (PI * geardiam)) / 2;
color([0.2,0.2,0.2])
difference() {
intersection() {
union() {
cylinder(r=geardiam/2,h=beltwidth*1.1,center=true);
translate([gearcenter,0,0]) cylinder(r=geardiam/2,h=beltwidth*1.1,center=true);
translate([0,-geardiam/2,-beltwidth*1.11/2]) cube([gearcenter,geardiam,beltwidth*1.11],center=false);
}
translate([(gearcenter + geardiam*2.2)/2 - geardiam,0,0]) cube([gearcenter + geardiam*2.2,geardiam*2.2,beltwidth],center=true);
}
union() {
translate([0,0,0]) cylinder(r=geardiam/2 - beltthick,h=beltwidth*1.2,center=true);
translate([gearcenter,0,0]) cylinder(r=geardiam/2-beltthick,h=beltwidth*1.2,center=true);
translate([0,-(geardiam-2*beltthick)/2,-beltwidth*1.12/2]) cube([gearcenter,geardiam-2*beltthick,beltwidth*1.21],center=false);
}
}
}
///////////////////////
// y drive shafts //
//////////////////////
module driveshafts(shaftlengthone=14*25.4,shaftlengthtwo=12*25.4) {
echo(str(" (shaft src): 1 x ",ShaftOneLength,"mm (",(ShaftOneLength/25.4),"in)"));
echo(str(" (shaft src): 1 x ",ShaftTwoLength,"mm (",(ShaftTwoLength/25.4),"in)"));
translate([-12.525,MakerSlideYLength/2 - (tube_space_Y+beam_width) + half_beam_width + 32.766,-34]) {
translate([-MakerSlideXLength/2,0,0]) driveshaft(shaftlengthone);
translate([-MakerSlideXLength/2+shaftlengthone+shaftmotorspan,0,0]) driveshaft(shaftlengthtwo);
}
}
module driveshaft(length=254) {
color([0.35,0.35,0.4]) rotate([0,90,0]) cylinder(r=25.4*0.125,h=length,center=false);
}
///////////////////////////////////////
// z table, leadscrews, drive belt //
///////////////////////////////////////
module zsystem() {
// z table frame - ref is 580 wide, with 370s butting
halfZsX = halfScaledX - 100;
halfZsOtherX = halfScaledX - 50; // from original specs, where 730 - (580 + 100) = right side spacing of z table = 50
zXSpan=halfZsOtherX + halfZsX;
zYGap=25;//from original specs, where[ (halfScaledY + (halfScaledYPlus - 100 - half_beam_width)) - (370+2*20) ] * 0.5 = gap
//[ (280 + (290 - 100 - 10)) - (370+2*20) ] * 0.5 = gap = (460 - 410) *0.5 = 25 = nice.
zYSpan=(halfScaledY + (halfScaledYPlus - (tube_space_Y+beam_width) - half_beam_width)) - 2*zYGap;
echo(str("Z TABLE"));
d30014r2_4_length = zXSpan;
d30014r2_4_partno = str("HFS5-2020-",d30014r2_4_length);
d30014r2_4_count = 2;
echo(str(" ",d30014r2_4_count," x ",d30014r2_4_partno," ",d30014r2_4_length,"mm (",(d30014r2_4_length/25.4),"in)"));
for(i=[
[-halfZsX , -halfScaledY + half_beam_width + zYGap , -scaledZDown/6],
[-halfZsX ,-(halfScaledY-half_beam_width - zYGap) + zYSpan - 2*half_beam_width , -scaledZDown/6],
]) {
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30014r2_4_length );
}
d30014r2_3_length = zYSpan-2*beam_width;
d30014r2_3_partno = str("HFS5-2020-",d30014r2_3_length);
d30014r2_3_count = 2;
echo(str(" ",d30014r2_3_count," x ",d30014r2_3_partno," ",d30014r2_3_length,"mm (",(d30014r2_3_length/25.4),"in)"));
for(i=[
[-(halfZsX - half_beam_width) , -(halfScaledY - zYGap) + zYSpan - 2*half_beam_width , -scaledZDown/6],
[(halfZsOtherX - half_beam_width) , -(halfScaledY - zYGap) + zYSpan - 2*half_beam_width , -scaledZDown/6],
]) {
translate(i) translate([0,0,half_beam_width]) rotate([90,0,0]) misumi_2020( d30014r2_3_length );
}
// z table panel
echo(str("Z TABLE PANEL"));
echo(str(" 1 x C19010 ",zXSpan,"mm x ",zYSpan,"mm (",(zXSpan/25.4),"in x ",(zYSpan/25.4),"in)"));
// (not shown)
// z lead screws
zLeadScrewHeight=scaledZDown - 2*half_beam_width + (11/16)*25.4 + 3*half_beam_width + 5.7375;
echo(str("Z LEADSCREWS"));
B18009_0800_length = zLeadScrewHeight;
B18009_0800_partno = str("B18009-xxxx (0.25in,20tpi threaded rod)");
B18009_0800_count = 3;
echo(str(" ",B18009_0800_count," x ",B18009_0800_partno," ",B18009_0800_length,"mm (",(B18009_0800_length/25.4),"in)"));
for(i=[
[-halfZsX + zXSpan*(85/580) , -halfScaledY + half_beam_width ,0],
[-halfZsX + zXSpan*(435/580), -halfScaledY + half_beam_width ,0],
[-halfZsX + zXSpan*(435/580), (halfScaledY - half_beam_width) - (tube_space_Y+beam_width),0],
]) {
translate(i) translate([0,0,-scaledZDown+(2*half_beam_width - (11/16)*25.4)]) color([0.3,0.3,0.5]) cylinder(r=25.4/8,h=B18009_0800_length,center=false);
}
B18009_1000_length = zLeadScrewHeight+(2*25.4);
B18009_1000_partno = str("B18009-xxxx (0.25in,20tpi threaded rod)");
B18009_1000_count = 1;
echo(str(" ",B18009_1000_count," x ",B18009_1000_partno," ",B18009_1000_length,"mm (",(B18009_1000_length/25.4),"in)"));
for(i=[
[-halfZsX + zXSpan*(85/580) , (halfScaledY - half_beam_width) - (tube_space_Y+beam_width),0],
]) {
translate(i) translate([0,0,-scaledZDown+(2*half_beam_width - (11/16)*25.4)]) color([0.3,0.3,0.5]) cylinder(r=25.4/8,h=B18009_1000_length,center=false);
}
//z belt - belt display is more approximate than actual length calculation
beltthick=1.14;//mm
pd=0.48*25.4 + beltthick;
pext=PI*pd;
zby1=(((halfScaledY - half_beam_width) - (tube_space_Y+beam_width)) + (halfScaledY - half_beam_width)); //yspans
zby2=zby1;
zbx1=(zXSpan*(435/580) - zXSpan*(85/580)); // straight xspan
zbx2=sqrt(pow(30,2)+pow(pd,2)) + sqrt( pow( (zXSpan*(435/580) - zXSpan*(85/580)) - 30 , 2 ) + pow(pd,2)); // xspan with slack for tensioner
zbl = zby1 +
zby2 +
zbx1 +
zbx2 +
pext // extra around corners of pulleys
;
echo(str("Z CLOSED BELT"));
B28035_length = zbl;
B28035_partno = str("B28035 (loop timing belt)");
B28035_count = 1;
echo(str(" EconoBelt: ",B28035_count," x ",B28035_partno," : close to ",B28035_length,"mm (~",(round(10*B28035_length/25.4)/10),"in, rounded)"));
color([0.2,0.2,0.2])
translate([(zbx1+pd)/2 + (-halfZsX + zXSpan*(85/580)) - pd/2,- ((zby1+pd)/2 + (-(halfScaledY - half_beam_width)+ (tube_space_Y+beam_width)) - pd/2),-scaledZDown+5.5/16*25.4]) {
difference() {
difference() {
cube([zbx1+pd,zby1+pd,25.4/4],center=true);
translate([-(zbx1+pd)/2 + 30+pd,(zby1+pd)/2 - pd,-25.4/4.5])
rotate([0,0,90 - atan2(0.48*25.4,30)])
cube([zbx1+pd,zby1+pd,25.4/2]);
translate([-(zbx1+pd)/2 + 30+pd,(zby1+pd)/2 - pd,-25.4/4.5])
rotate([0,0,90 - atan2( (zXSpan*(435/580) - zXSpan*(85/580)) - 30 ,0.48*25.4)])
cube([zbx1+pd,zby1+pd,25.4/2]);
}
difference() {
cube([zbx1+pd-4,zby1+pd-4,25.4/2],center=true);
translate([-(zbx1+pd+4)/2 + 30+pd,(zby1+pd-4)/2 - pd,-25.4/4.5])
rotate([0,0,90 - atan2(0.48*25.4,30)])
cube([zbx1+pd,zby1+pd,25.4/2]);
translate([-(zbx1+pd+4)/2 + 30+pd,(zby1+pd-4)/2 - pd,-25.4/4.5])
rotate([0,0,90 - atan2((zXSpan*(435/580) - zXSpan*(85/580)) - 30,0.48*25.4)])
cube([zbx1+pd,zby1+pd,25.4/2]);
}
}
}
}
///////////////////////
// skins //
//////////////////////
module skins(xref=MakerSlideXLength,yref=MakerSlideYLength,zref=FrameHeight,skinThickness=skinThickness) {
S_L = -2 + beam_width + scaledX + beam_width + control_space_X + beam_width;
S_W = -2 + yref + beam_width + beam_width;
S_H = -2 + zref;
//echo(str("SKIN DIMS LxWxH: ",S_L," x ",S_W," x ",S_H)); // s/b 998 x 598 x 308 for reference design
color([0.25,0.30,0.45]) {
translate([1 + -halfScaledX-2*half_beam_width,-halfScaledY-2*half_beam_width,1 + -scaledZDown])
rotate([90,0,0])
linear_extrude(height=skinThickness)
skin_front(S_L,S_H);
translate([1 + -halfScaledX-2*half_beam_width + S_L,halfScaledY+2*half_beam_width,1 + -scaledZDown])
rotate([90,0,180])
linear_extrude(height=skinThickness)
skin_back(S_L,S_H);
translate([1 + -halfScaledX-2*half_beam_width + S_L-1,-halfScaledY-2*half_beam_width + 1,1 + -scaledZDown])
rotate([90,0,90])
linear_extrude(height=skinThickness)
skin_side(S_W,S_H);
translate([1 + -halfScaledX-2*half_beam_width -1 , halfScaledY+2*half_beam_width - 1,1 + -scaledZDown])
rotate([90,0,-90])
linear_extrude(height=skinThickness)
skin_side(S_W,S_H);
translate([1 + -halfScaledX-2*half_beam_width,1 + -halfScaledY-2*half_beam_width,-scaledZDown-skinThickness])
linear_extrude(height=skinThickness)
skin_bottom(S_L,S_W);
translate([ -halfScaledX-2*half_beam_width , halfScaledY - 99,zref-scaledZDown])
linear_extrude(height=skinThickness)
skin_top_back(S_L,S_W);
translate([1 + -halfScaledX-2*half_beam_width + S_L ,1 + -halfScaledY-2*half_beam_width,zref-scaledZDown])
rotate([0,0,90])
linear_extrude(height=skinThickness)
skin_top_right(S_W);
translate([1 + -halfScaledX-2*half_beam_width + 18,1 + -halfScaledY-2*half_beam_width,zref-scaledZDown])
rotate([0,0,90])
linear_extrude(height=skinThickness)
skin_top_left(S_W);
}
}
//////////////////////////////////
// skins for DXF - 2D layout //
//////////////////////////////////
module skins_flat(xref=MakerSlideXLength,yref=MakerSlideYLength,zref=FrameHeight) {
// Turn up the resolution on this one
$fa=2;
$fs=0.2;
echo("\nCGAL RENDER MIGHT TAKE A FEW MINUTES\n(resolution turned up to get smooth circles)\n");
//!linear_extrude(height=10) cable_slot();
S_L = -2 + beam_width + scaledX + beam_width + control_space_X + beam_width;
S_W = -2 + yref + beam_width + beam_width;
S_H = -2 + zref;
//echo(str("SKIN DIMS LxWxH: ",S_L," x ",S_W," x ",S_H)); // s/b 998 x 598 x 308 for reference design
margin=25.4;
color([0.25,0.30,0.45]) {
skin_bottom(S_L,S_W);
translate([0,S_W + margin + 0 * (S_H + margin)]) 2D_stack_layout(S_H + margin) {
skin_front(S_L,S_H);
skin_back(S_L,S_H);
skin_side(S_W,S_H);
skin_side(S_W,S_H);
skin_top_back(S_L,S_W);
skin_top_right(S_W);
skin_top_left(S_W);
}
}
}
//////////////////////////////////////////////////////////
// tube //
//////////////////////////////////////////////////////////
module tube() {
echo(str("tube"));
translate([-720,405,70])rotate([0,90,0])cylinder(r=28,h=1600);
}
module reservoir() {
echo(str("reservoir"));
color([0,0,10])translate([915,80,-110])rotate([0,0,90])cylinder(r=62,h=210);
}
module voeding() {
echo(str("voeding 173 * 97 * 280"));
translate([980,180,-110])rotate([0,0,90])cube([280,173,97]);
}
module luchtcompressor() {
echo(str("luchtcompressor 182*95*116"));
color([0.3,0.2,0.9])translate([920,-400,-100])rotate([0,0,90])cube([182,95,116]);
}
module waterpomp() {
echo(str("waterpomp 147*115*75"));
color([0,0,10])translate([850,-150,-100])rotate([90,0,90])cube([147,115,75]);
}
module radiator() {
echo(str("radiator 396*120*30 ==> 60 incl fans"));
color([0,0,10])translate([950,-380,-105])rotate([90,0,90])cube([396,120,60]);
}
module 2D_stack_layout(step) {for (i=[0:$children-1]) {translate([0,i*step]) child(i);}}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,83 @@
// MakerSlide Component
// http://www.makerslide.com
// c14005_rev_2
// Standard Wheel Carriage Plate
// Original by Barton Dring
// OpenSCAD model by Mike Sheldrake
standard_wheel_carriage_plate();
module standard_wheel_carriage_plate(thickness=3.175) {
color([175/255,178/255,183/255])
difference() {
// 90mm by 160mm plate
// 3.175mm thick by default,
// but you can pass a different thickness to this module
cube([90,160,3.175],center=false);
// 5mm diam. holes
for(i=[
[12.7,10],
[12.7,30],
[12.7,70],
[12.7,80],
[12.7,90],
[12.7,112.3],
[12.7,130],
[12.7,150],
[35,10],
[35,60],
[35,80],
[35,100],
[35,150],
[45,70],
[45,90],
[55,10],
[55,60],
[55,80],
[55,100],
[55,150],
[77.3,30],
[77.3,70],
[77.3,90],
[77.3,112.3],
[77.3,130],
//These are 5mm holes in the 7mm hole spots that we will do next.
//For some reason including them here too makes the OpenCSG display look right.
//Not needed for CGAL render though.
[12.7,47.7],
[45,47.7],
[77.3,10],
[77.3,47.7],
[77.3,80],
[77.3,150]
]) { translate([i[0],i[1],-0.2]) cylinder(h=thickness+1,r=5/2,center=false); }
// 7mm diam. holes
for(i=[
[12.7,47.7],
[45,47.7],
[77.3,10],
[77.3,47.7],
[77.3,80],
[77.3,150]
]) { translate([i[0],i[1],-0.2]) cylinder(h=thickness+1,r=7/2,center=false); }
// rounded corners on plate
for(i=[
[0,0,0],
[90,160,180],
[90,0,90],
[0,160,270]
]
) {
translate([i[0],i[1],0]) rotate(a=[0,0,i[2]]) translate([10,10,-0.1]) rotate(a=[0,0,180]) difference() {
cube([11,11,thickness+1],center=false);
translate([0,0,-0.1]) cylinder(h=thickness+2,r=10,center=false);
}
}
}
}

View file

@ -0,0 +1,5 @@
module makerslide(h=100) {
linear_extrude(file="makerslide_extrusion_profile.dxf", layer="makerslide",height=h, center=true, convexity=10);
}
makerslide(100);

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,2 @@
module misumi_2020(h=100) {color([0.7,0.7,0.7]) linear_extrude(file="misumi_2020_extrusion_profile.dxf", layer="8",height=h, center=false, convexity=10);}
misumi_2020();

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,2 @@
module misumi_2040(h=100) {color([0.7,0.7,0.7]) linear_extrude(file="misumi_2040_extrusion_profile.dxf", layer="0",height=h, center=false, convexity=10);}
misumi_2040();

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,740 @@
use <vwheel_single_bearing_b17001_rev_2.scad>;
use <makerslide.scad>;
use <carriage_plate_standard_c14005_rev_2.scad>;
use <misumi_2020.scad>;
use <misumi_2040.scad>;
use <skins.scad>;
PI=3.14159265358979323846;
// Specify the dimensions of the usable cutting envelope you need:
xtravel = 26.5 * 25.4; // The dims I need.
ytravel = 13.5 * 25.4; // Over-spec'd a bit.
ztravel = 2.5 * 25.4; // Millimeters.
// That's it. Configured. Hit F5.
// Check the console window for parts list with scaled dimensions.
// Check the display to see if everything really does line up.
// Set the folowing items to 1 or 0 to display or hide different
// sections of the assembly. Probaly the first thing you want to
// turn off is the skins, to get a better look at everything
// else inside.
xy_gantry = 1 ;
xbelt = 1 ;
ybelts = 1 ;
driveshafts = 1 ;
zsystem = 1 ;
frame = 1 ;
cover = 1 ; cover_is_open = 1 ;
skins = 1 ;
skins_flat = 0 ; // hi-res 2D layout, for DXF export
//(disables rendering of everything else)
// press F6 for this one, then "Design"
// menu --> "Export as DXF".
///////////
// INTRO //
///////////
// This is a parametric three axis motion system
// based on Barton Dring's Buildlog.net Laser 2.0 design
// and MakerSlide V rail system.
// (www.buildlog.net) (www.makerslide.com)
// I've tried to identify all the parts that need to scale
// to adjust the cutting envelope. This script calculates
// the new dimensions required just for the parts that need
// to change, and lists those results in the console window.
// Combine these results with the Laser 2.0 BOM at Buildlog.net
// to work up your parts orders for your own custom-sized machine.
// (To copy the text in the console, you might have to
// right click --> Select All --> Copy.)
// The scaled skin panels can be rendered flat and exported as
// 2D DXF files, suitable for generating cut files for a CNC
// router, or patterns to print and cut by hand.
// Is it all correct? Will this really give a workable set of
// scaled parts? Explore the model and consider it. I'm not
// making any claims - I can only attest to my intent. I'll
// be using it though, if I come up with money for a build soon.
// This work is Copyright 2011 by Michael Sheldrake
// and licensed under a Creative Commons Attribute-Share Alike 3.0 License
// http://creativecommons.org/licenses/by-sa/3.0/
// Thanks go to Barton Dring for releasing his designs under
// that same license.
////////////////////////////////
// SPECIFYING AXIS DIMENSIONS //
////////////////////////////////
// The Buildlog 2.0 Laser claims "just under" a 20"x12"x4"
// working envelope (508mm x 304.8mm x 101.6mm).
// If you specify those dimensions here (in millimeters), the parts
// generated should match the dimensions in bdring's Laser 2.0
// drawings.
//xtravel = 508.0; // everything in millimeters
//ytravel = 304.8; // These are the Buildlog.net
//ztravel = 101.6; // Laser 2.0 standard dimensions.
//// DON'T GO TOO BIG ///
// You want a 2'x2' system? 4'x4'? You can model that here.
// But don't count on that design to actually work.
// Maybe, though? Every extra inch makes it that much more
// difficult to align and maintain rigity of the system.
// Surely the Laser 2.0 design can add a half inch here or
// there and work about as well. But 12"? Yards?
// Probably not, but it's fun to look and dream:
//xtravel = 1500; // Way too big,
//ytravel = 1500; // probably.
//ztravel = 2500; // Or is it?
//// DON'T GO TOO SMALL ///
// ... because a laser tube and electronics won't fit in there.
// But if you're adapting the Laser 2.0 design to work as a
// plotter, or something else, here's a pretty small system:
//xtravel = 1; // We call this
//ytravel = 1; // "tugging the
//ztravel = 1; // envelope".
// OpenSCAD FUN //
// Animate the envelope - grow from 1x1x1 to standard Laser 2.0 size.
// Use OpenSCAD's Animate option in the View menu.
// (Normally animate just makes the x and y axes move.)
// (Make sure all other lines above that set
// xtravel, ytravel and ztravel are commented
// out before trying this animated version.)
//ztarg=101.6;
//xfact=508.0/ztarg;
//yfact=304.8/ztarg;
//xtravel = $t*ztarg * xfact;
//ytravel = $t*ztarg * yfact;
//ztravel = $t*ztarg;
/////////////////////////
// Constant Dimensions //
/////////////////////////
// Some frame dimensions don't change as we scale
// the cutting envelope. These are candidates for
// becoming parameters too, but I didn't do all the
// math with changing these in mind. So inspect
// results closely if you alter them.
beam_width = 20; // width of square aluminum extrusions
half_beam_width = beam_width/2; // handy
shaftmotorspan = 82; // stepper motor between two drive shafts
skinThickness = 3; // Alupanel, 3mm thick
control_space_X = 210; // width of where electroncs go
tube_space_Y = 80; // space for laser tube behind cutting area
top_space_Z = 140; // parts above z=0 don't scale
wheel_plate_thk = 0.125*25.4; // MakerSlide wheel plates / brackets, 1/8" Al
wheel_standoff = 0.25 *25.4; //
wheel_center_off= 3; // for single-bearing delrin vwheel
imperialFudge = 1.95; // Gantry assembly v wheel center to v wheel center comes
// out to 728.05mm on ref design. Frame bars that seem to
// match that length don't - they're 730mm.
// So this little extra gets us even frame dims that match
// reference, based on a metric span of MakerSlide, and then
// plates and vwheels that have some imperial dimensions mixed in.
///////////////////////////
/// THE SCALING MATH ///
///////////////////////////
// Here's the math to make the the Buildlog 2.0 reference dimensions adjustable,
// xyz reference frame parts - travel you get from that = base xyz vals to add your own desired travel dimensions to
// (x rail,y rail,frame height) - ( 12" , 20" , 4" )
// ( 703 , 560 , 310 ) - ( 508 , 304.8 , 101.6) = ( 195 , 255.2 , 208.4 )
// Note that we snap up to next whole mm:
MakerSlideXLength = ceil( 195.0 + xtravel ); // Note that we snap
MakerSlideYLength = ceil( 255.2 + ytravel ); // up to next whole
FrameHeight = ceil( 208.4 + ztravel ); // millimeter.
// similar for belts, except relative to roughly 1/2 belt length, since they loop
// original x,y = 60",40" (1524mm,1016mm); half: (762 , 508)
//(762 , 508) - ( 508 , 304.8 ) = ( 254 , 203.2)
BeltXLength = 2 * (254 + xtravel);
BeltYLength = 2 * (203.2 + ytravel);
// similar for Y drive shafts
// recently updated to 14" and 12"
// just split the difference of requested and reference ytravel between the shafts,
// but note that these shafts at McMaster mostly come in 2" increments (and 9 and 15, and not 22)
// original shaft sum - original xtravel
// 26" - 20" = 6"
shaftsum=ceil(6+(xtravel/25.4)); // inches here
ShaftOneLength=25.4 * floor(shaftsum/2 + 1); // longer shaft, back to mm
ShaftTwoLength=25.4 * ceil(shaftsum/2 - 1); // short shaft - there's more space
// in assy to make this one longer
///////////////////////////////////
// Derived and Scaled Dimensions //
///////////////////////////////////
to_vwheel_center= wheel_plate_thk + wheel_standoff + wheel_center_off;
scaledX = MakerSlideXLength + 2 * to_vwheel_center + imperialFudge;
halfScaledX = scaledX/2;
halfScaledXPlus = halfScaledX + half_beam_width;
scaledY = MakerSlideYLength;
halfScaledY = scaledY/2;
halfScaledYPlus = halfScaledY + half_beam_width;
shortHalfScaledY= halfScaledY - tube_space_Y - beam_width; // not really a half of anything
scaledZDown = FrameHeight - top_space_Z;
activeMakerSlideYLength = MakerSlideYLength - // this is just the portion that
tube_space_Y - // you would use if the beam didn't
beam_width; // reach back in to the tube space
// to the back of the machine
// and now ...
///////////////////////////////////
// RENDER THE SCALED SUBSECTIONS //
///////////////////////////////////
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
// ///
///
if (skins_flat==1) {skins_flat();}
else {
if (xy_gantry==1) xy_gantry();
if (xbelt==1) xbelt(BeltXLength);
if (ybelts==1) ybelts(BeltYLength);
if (driveshafts==1) driveshafts(ShaftOneLength,ShaftTwoLength);
if (zsystem==1) zsystem();
if (frame==1) frame();
if (cover==1) cover(open=(cover_is_open==1));
if (skins==1) skins();
}
///
///
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
///////////////////////////
// MakerSlide components //
///////////////////////////
makerslide_color=[0.6,0.6,0.7];
// These two modules are not used
// for the laser design, but might
// be useful for visualizing other
// non-laser concepts that use the
// standard MakerSlide wheel plates.
module wheel_plate_assy(flip=false) {
wheelelevation= (flip ? -1 : 1) * to_vwheel_center;
color([0.6,0.2,0.2]) rotate(a=180) translate([-55,-80,0])
import_stl("standard_wheel_carriage_plate.stl", convexity = 5);
translate([42.3, -70, wheelelevation]) vwheel();
translate([42.3, 70, wheelelevation]) vwheel();
translate([-22.3, 0, wheelelevation]) vwheel();
}
module tool_carriage_assy() {
wheelelevation= -(wheel_standoff + wheel_center_off);
translate([0.6,0,beam_width + -wheelelevation]) {
color([0.6,0.2,0.2]) translate([-80,45,0]) rotate([0,0,-90])
import_stl("standard_wheel_carriage_plate.stl",convexity=5);
translate([-32.663,0,wheelelevation]) rotate([180,0,0]) vwheel();
translate([32.3,-32.3,wheelelevation]) rotate([180,0,0]) vwheel();
translate([32.3, 32.3,wheelelevation]) rotate([180,0,0]) vwheel();
}
}
// These three modules bring in the laser-specific
// MakerSlide plates for the gantry assembly.
module left_bracket_assy() {
color([0.6,0.2,0.2]) import_stl("gantry_end_bracket_left_rev4_mm.stl", convexity = 10);
// Warning:
// The bracket plus the first wheel alone, cause OpenSCAD to crash on CGAL render.
// That region of the bracket is like a Bermuda Triangle for CGAL.
// There should be no need to CGAL-render this assembly, but if you do,
// comment out this first wheel.
translate([10 + 0.315 * 25.4 , -10 - 0.719 * 25.4 , to_vwheel_center]) vwheel();
translate([10 + 0.315 * 25.4 , 10 + 1.574 * 25.4 , to_vwheel_center]) vwheel();
translate([10 - 2.221 * 25.4 - 0.94 , 10 - 0.01 * 25.4 , to_vwheel_center]) vwheel();
}
module right_bracket_assy() {
color([0.6,0.2,0.2]) import_stl("gantry_end_bracket_right_rev_3_mm.stl", convexity = 5);
translate([10 + 0.315 * 25.4 , -10 - 0.719 * 25.4 , -to_vwheel_center]) rotate([180,0,0]) vwheel();
translate([10 + 0.315 * 25.4 , 10 + 1.574 * 25.4 , -to_vwheel_center]) rotate([180,0,0]) vwheel();
translate([10 - 2.221 * 25.4 - 0.94 , 10 + 0.236 * 25.4 , -to_vwheel_center]) rotate([180,0,0]) vwheel();
}
module laser_carriage_assy() {
wheelelevation= -(wheel_standoff + wheel_center_off);
translate([0.6,0,20 + -wheelelevation]) {
color([0.2,0.2,0.2]) rotate([0,0,-90]) import_stl("laser_carriage_plate_rev_4_mm.stl",convexity=5);
translate([ 32.163 , -34.925 , wheelelevation]) rotate([180,0,0]) vwheel();
translate([ 32.163 , 34.925 , wheelelevation]) rotate([180,0,0]) vwheel();
translate([-32.663 - 0.94 , 0 , wheelelevation]) rotate([180,0,0]) vwheel();
}
}
// Gantry assembly from wheel plates above and a piece of MakerSlide V rail extrusion.
module gantry(xref=400) {
echo(str("GANTRY"));
echo(str(" MakerSlide: 1 x ",MakerSlideXLength,"mm (",(MakerSlideXLength/25.4),"in)"));
translate([0,0,25])
rotate([0,0,-90])
rotate([-90,-90,0]) {
color(makerslide_color) makerslide(xref - 0.02); // minus 0.02 to avoid co-planar display glitches with end plates
translate([0,0, xref/2]) left_bracket_assy();
translate([0,0,-xref/2]) right_bracket_assy();
// you might use these standard plates instead, for a non-laser assembly
//translate([0,0, xref/2]) wheel_plate_assy();
//translate([0,0,-xref/2]) wheel_plate_assy(flip=true);
}
rotate([0,0,-90])
translate([0,sin(2*$t*360) * (xref/2 - 85),25]) { // for optional animation
//tool_carriage_assy(); // standard plate option
laser_carriage_assy();
}
}
// Gantry, with two pieces of MakerSlide to ride on.
// Note the belt model thrown in, so it can ride with the gantry when animated.
module xy_gantry() {
animlowy = -MakerSlideYLength/2 + 80;
animhalfspan = (MakerSlideYLength - (tube_space_Y+beam_width) - 160)/2;
translate([-imperialFudge/2,0,0]) { // to align the whole thing with the frame assembly
translate([0,(animlowy+animhalfspan)+sin(180+$t*360)*animhalfspan,0]) { // for animation
gantry(MakerSlideXLength);
}
echo(str(" MakerSlide: 2 x ",MakerSlideYLength,"mm (",(MakerSlideYLength/25.4),"in)"));
translate([-(MakerSlideXLength/2 + beam_width + to_vwheel_center),0,half_beam_width]) rotate([-90,0,0]) color(makerslide_color) makerslide(MakerSlideYLength);
translate([ (MakerSlideXLength/2 + beam_width + to_vwheel_center),0,half_beam_width]) rotate([-90,0,180]) color(makerslide_color) makerslide(MakerSlideYLength);
}
}
///////////////////////////
// Misumi components //
///////////////////////////
module frame(xref=MakerSlideXLength,yref=MakerSlideYLength,zref=FrameHeight) {
echo(str("FRAME"));
echo(str(" Misumi 2040:"));
d30027r3_9_length = scaledX + control_space_X + beam_width;
d30027r3_9_partno = str("HFS5-2040-",d30027r3_9_length);
d30027r3_9_count = 2;
echo(str(" ",d30027r3_9_count," x ",d30027r3_9_partno," ",d30027r3_9_length,"mm (",(d30027r3_9_length/25.4),"in)"));
for(i=[
[-halfScaledX , halfScaledYPlus , 0],
[-halfScaledX ,-halfScaledYPlus , 0],
]) {
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2040( d30027r3_9_length );
}
echo(str(" Misumi 2020:"));
d30027r3_4_length = zref;
d30027r3_4_partno = str("HFS5-2020-",d30027r3_4_length);
d30027r3_4_count = 4;
echo(str(" ",d30027r3_4_count," x ",d30027r3_4_partno," ",d30027r3_4_length,"mm (",(d30027r3_4_length/25.4),"in)"));
for(i=[
[-halfScaledXPlus , halfScaledYPlus ,-scaledZDown],
[-halfScaledXPlus ,-halfScaledYPlus ,-scaledZDown],
[ halfScaledXPlus + control_space_X + beam_width , halfScaledYPlus ,-scaledZDown],
[ halfScaledXPlus + control_space_X + beam_width ,-halfScaledYPlus ,-scaledZDown]
]) {
translate(i) misumi_2020(d30027r3_4_length);
}
d30027r3_8_length = scaledX + control_space_X + beam_width;
d30027r3_8_partno = str("HFS5-2020-",d30027r3_8_length);
d30027r3_8_count = 3;
echo(str(" ",d30027r3_8_count," x ",d30027r3_8_partno," ",d30027r3_8_length,"mm (",(d30027r3_8_length/25.4),"in)"));
for(i=[
[-halfScaledX ,-halfScaledYPlus ,-scaledZDown],
[-halfScaledX , halfScaledYPlus ,-scaledZDown],
[-halfScaledX , halfScaledYPlus , top_space_Z - beam_width],
]) {
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30027r3_8_length );
}
d30027r3_6_length = scaledX;
d30027r3_6_partno = str("HFS5-2020-",d30027r3_6_length);
d30027r3_6_count = 3;
echo(str(" ",d30027r3_6_count," x ",d30027r3_6_partno," ",d30027r3_6_length,"mm (",(d30027r3_6_length/25.4),"in)"));
for(i=[
[-halfScaledX ,-halfScaledYPlus , top_space_Z - 2*beam_width],
[-halfScaledX , halfScaledYPlus - (tube_space_Y+beam_width),-scaledZDown],
[-halfScaledX , halfScaledYPlus - (tube_space_Y+beam_width), top_space_Z - beam_width],
]) {
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30027r3_6_length );
}
d30027r3_notshown_length = scaledX - 5;
d30027r3_notshown_partno = str("HFS5-2020-",d30027r3_notshown_length);
d30027r3_notshown_count = 1;
echo(str(" ",d30027r3_notshown_count," x ",d30027r3_notshown_partno," ",d30027r3_notshown_length,"mm (",(d30027r3_notshown_length/25.4),"in)"));
for(i=[
[-halfScaledX ,halfScaledYPlus - (tube_space_Y+beam_width), half_beam_width],
]) {
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30027r3_notshown_length );
}
d30027r3_5_length = yref;
d30027r3_5_partno = str("HFS5-2020-",d30027r3_5_length);
d30027r3_5_count = 7; // drawing shows 6, coming revision has one more
echo(str(" ",d30027r3_5_count," x ",d30027r3_5_partno," ",d30027r3_5_length,"mm (",(d30027r3_5_length/25.4),"in)"));
for(i=[
[-halfScaledXPlus , halfScaledY ,-scaledZDown],
[-halfScaledXPlus , halfScaledY , top_space_Z-beam_width],
[ halfScaledXPlus , halfScaledY ,-scaledZDown],
[ halfScaledXPlus , halfScaledY , top_space_Z-beam_width],
[ halfScaledXPlus + control_space_X + beam_width , halfScaledY ,-scaledZDown],
[ halfScaledXPlus + control_space_X + beam_width , halfScaledY , half_beam_width],
[ halfScaledXPlus + control_space_X + beam_width , halfScaledY , top_space_Z-beam_width]
]) {
translate(i) translate([0,0,half_beam_width]) rotate([90,0,0]) misumi_2020(d30027r3_5_length);
}
d30027r3_3_length = control_space_X + beam_width;
d30027r3_3_partno = str("HFS5-2020-",d30027r3_3_length);;
d30027r3_3_count = 1;
echo(str(" ",d30027r3_3_count," x ",d30027r3_3_partno," ",d30027r3_3_length,"mm (",(d30027r3_3_length/25.4),"in)"));
translate([halfScaledX,-halfScaledYPlus, top_space_Z-half_beam_width]) rotate([0,90,0]) misumi_2020( d30027r3_3_length );
d30027r3_7_length = top_space_Z - beam_width - beam_width - half_beam_width;
d30027r3_7_partno = str("HFS5-2020-",d30027r3_7_length);
d30027r3_7_count = 1;
echo(str(" ",d30027r3_7_count," x ",d30027r3_7_partno," ",d30027r3_7_length,"mm (",(d30027r3_7_length/25.4),"in)"));
translate([halfScaledXPlus,-halfScaledYPlus,3*half_beam_width]) misumi_2020( d30027r3_7_length );
d30027r3_2_length = scaledZDown - half_beam_width;
d30027r3_2_partno = str("HFS5-2020-",d30027r3_2_length);
d30027r3_2_count = 1;
echo(str(" ",d30027r3_2_count," x ",d30027r3_2_partno," ",d30027r3_2_length,"mm (",(d30027r3_2_length/25.4),"in)"));
translate([half_beam_width,halfScaledYPlus - (tube_space_Y+beam_width),-scaledZDown + 2*half_beam_width]) misumi_2020( d30027r3_2_length );
}
/////////////////////
// cover, or lid //
/////////////////////
module cover(open=false) {
lidSideGap = 2.5; //mm
lidHingeGap = 0; //mm, maybe up to 1mm , based on Misumi hinge drawing
lidYPartLength=scaledY - tube_space_Y - 2*beam_width;
echo(str("COVER"));
d30013r3_8_length = scaledX - 2 * lidSideGap;
d30013r3_8_partno = str("HFS5-2020-",d30013r3_8_length);
d30013r3_8_count = 2;
echo(str(" ",d30013r3_8_count," x ",d30013r3_8_partno," ",d30013r3_8_length,"mm (",(d30013r3_8_length/25.4),"in)"));
d30013r3_7_length = lidYPartLength;
d30013r3_7_partno = str("HFS5-2020-",d30013r3_7_length);
d30013r3_7_count = 2;
echo(str(" ",d30013r3_7_count," x ",d30013r3_7_partno," ",d30013r3_7_length,"mm (",(d30013r3_7_length/25.4),"in)"));
// cover window panel
echo(str("COVER WINDOW PANEL"));
echo(str(" ",(2 * (halfScaledX - lidSideGap)),"mm x ",(lidYPartLength+2*beam_width),"mm (",((2 * (halfScaledX - lidSideGap))/25.4),"in x ",((lidYPartLength+2*beam_width)/25.4),"in)"));
ot=[0,-shortHalfScaledY,-top_space_Z-5];
or=[-92*(open?1:0),0,0];
translate(-1*ot) rotate(or) translate(ot) {
for(i=[
[-halfScaledX + lidSideGap , shortHalfScaledY - half_beam_width - lidHingeGap - beam_width - lidYPartLength, top_space_Z-beam_width],
[-halfScaledX + lidSideGap , shortHalfScaledY - half_beam_width - lidHingeGap, top_space_Z-beam_width],
]) {
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30013r3_8_length );
}
for(i=[
[-(halfScaledXPlus - 2*half_beam_width - lidSideGap) , shortHalfScaledY - beam_width - lidHingeGap , top_space_Z-beam_width],
[ (halfScaledXPlus - 2*half_beam_width - lidSideGap) , shortHalfScaledY - beam_width - lidHingeGap , top_space_Z-beam_width],
]) {
translate(i) translate([0,0,half_beam_width]) rotate([90,0,0]) misumi_2020( d30013r3_7_length );
}
color([0.7,0.7,1.0,0.5]) translate([-halfScaledX + lidSideGap,-halfScaledY - beam_width - lidHingeGap ,top_space_Z]) cube([(2 * (halfScaledX - lidSideGap)),(lidYPartLength+2*beam_width),skinThickness]);
}
}
///////////////////////////
// gantry timing belts //
///////////////////////////
module xbelt(beltlength=20) {
echo(str(" EconoBelt: 1 x ",beltlength,"mm (cut) (",ceil(beltlength/25.4),"in, rounded up)"));
animlowy = -MakerSlideYLength/2 + 80;
animhalfspan = (MakerSlideYLength - (tube_space_Y+beam_width) - 160)/2;
translate([-imperialFudge/2,(animlowy+animhalfspan)+sin(180+$t*360)*animhalfspan,0]) { // animation - should correspond to gantry motion
translate([-MakerSlideXLength/2 + 4,35,65]) rotate([90,0,0]) belt(beltlength);
}
}
module ybelts(beltlength=20) {
echo(str(" EconoBelt: 2 x ",beltlength,"mm (cut) (",ceil(beltlength/25.4),"in, rounded up)"));
translate([-MakerSlideXLength/2 + 5 ,(MakerSlideYLength)/2-55,-34]) rotate([90,0,-90]) belt(beltlength);
translate([ MakerSlideXLength/2 - 5 - imperialFudge,(MakerSlideYLength)/2-55,-34]) rotate([90,0,-90]) belt(beltlength);
}
module belt(ref) {
geardiam=25.4 * 0.489; //0.489" OD, but that might be for flange?
beltwidth=25.4/4;
beltthick=25.4/16;
halflength=ref/2;
gearcenter=(ref - (PI * geardiam)) / 2;
color([0.2,0.2,0.2])
difference() {
intersection() {
union() {
cylinder(r=geardiam/2,h=beltwidth*1.1,center=true);
translate([gearcenter,0,0]) cylinder(r=geardiam/2,h=beltwidth*1.1,center=true);
translate([0,-geardiam/2,-beltwidth*1.11/2]) cube([gearcenter,geardiam,beltwidth*1.11],center=false);
}
translate([(gearcenter + geardiam*2.2)/2 - geardiam,0,0]) cube([gearcenter + geardiam*2.2,geardiam*2.2,beltwidth],center=true);
}
union() {
translate([0,0,0]) cylinder(r=geardiam/2 - beltthick,h=beltwidth*1.2,center=true);
translate([gearcenter,0,0]) cylinder(r=geardiam/2-beltthick,h=beltwidth*1.2,center=true);
translate([0,-(geardiam-2*beltthick)/2,-beltwidth*1.12/2]) cube([gearcenter,geardiam-2*beltthick,beltwidth*1.21],center=false);
}
}
}
///////////////////////
// y drive shafts //
//////////////////////
module driveshafts(shaftlengthone=14*25.4,shaftlengthtwo=12*25.4) {
echo(str(" (shaft src): 1 x ",ShaftOneLength,"mm (",(ShaftOneLength/25.4),"in)"));
echo(str(" (shaft src): 1 x ",ShaftTwoLength,"mm (",(ShaftTwoLength/25.4),"in)"));
translate([-12.525,MakerSlideYLength/2 - (tube_space_Y+beam_width) + half_beam_width + 32.766,-34]) {
translate([-MakerSlideXLength/2,0,0]) driveshaft(shaftlengthone);
translate([-MakerSlideXLength/2+shaftlengthone+shaftmotorspan,0,0]) driveshaft(shaftlengthtwo);
}
}
module driveshaft(length=254) {
color([0.35,0.35,0.4]) rotate([0,90,0]) cylinder(r=25.4*0.125,h=length,center=false);
}
///////////////////////////////////////
// z table, leadscrews, drive belt //
///////////////////////////////////////
module zsystem() {
// z table frame - ref is 580 wide, with 370s butting
halfZsX = halfScaledX - 100;
halfZsOtherX = halfScaledX - 50; // from original specs, where 730 - (580 + 100) = right side spacing of z table = 50
zXSpan=halfZsOtherX + halfZsX;
zYGap=25;//from original specs, where[ (halfScaledY + (halfScaledYPlus - 100 - half_beam_width)) - (370+2*20) ] * 0.5 = gap
//[ (280 + (290 - 100 - 10)) - (370+2*20) ] * 0.5 = gap = (460 - 410) *0.5 = 25 = nice.
zYSpan=(halfScaledY + (halfScaledYPlus - (tube_space_Y+beam_width) - half_beam_width)) - 2*zYGap;
echo(str("Z TABLE"));
d30014r2_4_length = zXSpan;
d30014r2_4_partno = str("HFS5-2020-",d30014r2_4_length);
d30014r2_4_count = 2;
echo(str(" ",d30014r2_4_count," x ",d30014r2_4_partno," ",d30014r2_4_length,"mm (",(d30014r2_4_length/25.4),"in)"));
for(i=[
[-halfZsX , -halfScaledY + half_beam_width + zYGap , -scaledZDown/6],
[-halfZsX ,-(halfScaledY-half_beam_width - zYGap) + zYSpan - 2*half_beam_width , -scaledZDown/6],
]) {
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30014r2_4_length );
}
d30014r2_3_length = zYSpan-2*beam_width;
d30014r2_3_partno = str("HFS5-2020-",d30014r2_3_length);
d30014r2_3_count = 2;
echo(str(" ",d30014r2_3_count," x ",d30014r2_3_partno," ",d30014r2_3_length,"mm (",(d30014r2_3_length/25.4),"in)"));
for(i=[
[-(halfZsX - half_beam_width) , -(halfScaledY - zYGap) + zYSpan - 2*half_beam_width , -scaledZDown/6],
[(halfZsOtherX - half_beam_width) , -(halfScaledY - zYGap) + zYSpan - 2*half_beam_width , -scaledZDown/6],
]) {
translate(i) translate([0,0,half_beam_width]) rotate([90,0,0]) misumi_2020( d30014r2_3_length );
}
// z table panel
echo(str("Z TABLE PANEL"));
echo(str(" 1 x C19010 ",zXSpan,"mm x ",zYSpan,"mm (",(zXSpan/25.4),"in x ",(zYSpan/25.4),"in)"));
// (not shown)
// z lead screws
zLeadScrewHeight=scaledZDown - 2*half_beam_width + (11/16)*25.4 + 3*half_beam_width + 5.7375;
echo(str("Z LEADSCREWS"));
B18009_0800_length = zLeadScrewHeight;
B18009_0800_partno = str("B18009-xxxx (0.25in,20tpi threaded rod)");
B18009_0800_count = 3;
echo(str(" ",B18009_0800_count," x ",B18009_0800_partno," ",B18009_0800_length,"mm (",(B18009_0800_length/25.4),"in)"));
for(i=[
[-halfZsX + zXSpan*(85/580) , -halfScaledY + half_beam_width ,0],
[-halfZsX + zXSpan*(435/580), -halfScaledY + half_beam_width ,0],
[-halfZsX + zXSpan*(435/580), (halfScaledY - half_beam_width) - (tube_space_Y+beam_width),0],
]) {
translate(i) translate([0,0,-scaledZDown+(2*half_beam_width - (11/16)*25.4)]) color([0.3,0.3,0.5]) cylinder(r=25.4/8,h=B18009_0800_length,center=false);
}
B18009_1000_length = zLeadScrewHeight+(2*25.4);
B18009_1000_partno = str("B18009-xxxx (0.25in,20tpi threaded rod)");
B18009_1000_count = 1;
echo(str(" ",B18009_1000_count," x ",B18009_1000_partno," ",B18009_1000_length,"mm (",(B18009_1000_length/25.4),"in)"));
for(i=[
[-halfZsX + zXSpan*(85/580) , (halfScaledY - half_beam_width) - (tube_space_Y+beam_width),0],
]) {
translate(i) translate([0,0,-scaledZDown+(2*half_beam_width - (11/16)*25.4)]) color([0.3,0.3,0.5]) cylinder(r=25.4/8,h=B18009_1000_length,center=false);
}
//z belt - belt display is more approximate than actual length calculation
beltthick=1.14;//mm
pd=0.48*25.4 + beltthick;
pext=PI*pd;
zby1=(((halfScaledY - half_beam_width) - (tube_space_Y+beam_width)) + (halfScaledY - half_beam_width)); //yspans
zby2=zby1;
zbx1=(zXSpan*(435/580) - zXSpan*(85/580)); // straight xspan
zbx2=sqrt(pow(30,2)+pow(pd,2)) + sqrt( pow( (zXSpan*(435/580) - zXSpan*(85/580)) - 30 , 2 ) + pow(pd,2)); // xspan with slack for tensioner
zbl = zby1 +
zby2 +
zbx1 +
zbx2 +
pext // extra around corners of pulleys
;
echo(str("Z CLOSED BELT"));
B28035_length = zbl;
B28035_partno = str("B28035 (loop timing belt)");
B28035_count = 1;
echo(str(" EconoBelt: ",B28035_count," x ",B28035_partno," : close to ",B28035_length,"mm (~",(round(10*B28035_length/25.4)/10),"in, rounded)"));
color([0.2,0.2,0.2])
translate([(zbx1+pd)/2 + (-halfZsX + zXSpan*(85/580)) - pd/2,- ((zby1+pd)/2 + (-(halfScaledY - half_beam_width)+ (tube_space_Y+beam_width)) - pd/2),-scaledZDown+5.5/16*25.4]) {
difference() {
difference() {
cube([zbx1+pd,zby1+pd,25.4/4],center=true);
translate([-(zbx1+pd)/2 + 30+pd,(zby1+pd)/2 - pd,-25.4/4.5])
rotate([0,0,90 - atan2(0.48*25.4,30)])
cube([zbx1+pd,zby1+pd,25.4/2]);
translate([-(zbx1+pd)/2 + 30+pd,(zby1+pd)/2 - pd,-25.4/4.5])
rotate([0,0,90 - atan2( (zXSpan*(435/580) - zXSpan*(85/580)) - 30 ,0.48*25.4)])
cube([zbx1+pd,zby1+pd,25.4/2]);
}
difference() {
cube([zbx1+pd-4,zby1+pd-4,25.4/2],center=true);
translate([-(zbx1+pd+4)/2 + 30+pd,(zby1+pd-4)/2 - pd,-25.4/4.5])
rotate([0,0,90 - atan2(0.48*25.4,30)])
cube([zbx1+pd,zby1+pd,25.4/2]);
translate([-(zbx1+pd+4)/2 + 30+pd,(zby1+pd-4)/2 - pd,-25.4/4.5])
rotate([0,0,90 - atan2((zXSpan*(435/580) - zXSpan*(85/580)) - 30,0.48*25.4)])
cube([zbx1+pd,zby1+pd,25.4/2]);
}
}
}
}
///////////////////////
// skins //
//////////////////////
module skins(xref=MakerSlideXLength,yref=MakerSlideYLength,zref=FrameHeight,skinThickness=skinThickness) {
S_L = -2 + beam_width + scaledX + beam_width + control_space_X + beam_width;
S_W = -2 + yref + beam_width + beam_width;
S_H = -2 + zref;
//echo(str("SKIN DIMS LxWxH: ",S_L," x ",S_W," x ",S_H)); // s/b 998 x 598 x 308 for reference design
color([0.25,0.30,0.45]) {
translate([1 + -halfScaledX-2*half_beam_width,-halfScaledY-2*half_beam_width,1 + -scaledZDown])
rotate([90,0,0])
linear_extrude(height=skinThickness)
skin_front(S_L,S_H);
translate([1 + -halfScaledX-2*half_beam_width + S_L,halfScaledY+2*half_beam_width,1 + -scaledZDown])
rotate([90,0,180])
linear_extrude(height=skinThickness)
skin_back(S_L,S_H);
translate([1 + -halfScaledX-2*half_beam_width + S_L-1,-halfScaledY-2*half_beam_width + 1,1 + -scaledZDown])
rotate([90,0,90])
linear_extrude(height=skinThickness)
skin_side(S_W,S_H);
translate([1 + -halfScaledX-2*half_beam_width -1 , halfScaledY+2*half_beam_width - 1,1 + -scaledZDown])
rotate([90,0,-90])
linear_extrude(height=skinThickness)
skin_side(S_W,S_H);
translate([1 + -halfScaledX-2*half_beam_width,1 + -halfScaledY-2*half_beam_width,-scaledZDown-skinThickness])
linear_extrude(height=skinThickness)
skin_bottom(S_L,S_W);
translate([ -halfScaledX-2*half_beam_width , halfScaledY - 99,zref-scaledZDown])
linear_extrude(height=skinThickness)
skin_top_back(S_L,S_W);
translate([1 + -halfScaledX-2*half_beam_width + S_L ,1 + -halfScaledY-2*half_beam_width,zref-scaledZDown])
rotate([0,0,90])
linear_extrude(height=skinThickness)
skin_top_right(S_W);
translate([1 + -halfScaledX-2*half_beam_width + 18,1 + -halfScaledY-2*half_beam_width,zref-scaledZDown])
rotate([0,0,90])
linear_extrude(height=skinThickness)
skin_top_left(S_W);
}
}
//////////////////////////////////
// skins for DXF - 2D layout //
//////////////////////////////////
module skins_flat(xref=MakerSlideXLength,yref=MakerSlideYLength,zref=FrameHeight) {
// Turn up the resolution on this one
$fa=2;
$fs=0.2;
echo("\nCGAL RENDER MIGHT TAKE A FEW MINUTES\n(resolution turned up to get smooth circles)\n");
//!linear_extrude(height=10) cable_slot();
S_L = -2 + beam_width + scaledX + beam_width + control_space_X + beam_width;
S_W = -2 + yref + beam_width + beam_width;
S_H = -2 + zref;
//echo(str("SKIN DIMS LxWxH: ",S_L," x ",S_W," x ",S_H)); // s/b 998 x 598 x 308 for reference design
margin=25.4;
color([0.25,0.30,0.45]) {
skin_bottom(S_L,S_W);
translate([0,S_W + margin + 0 * (S_H + margin)]) 2D_stack_layout(S_H + margin) {
skin_front(S_L,S_H);
skin_back(S_L,S_H);
skin_side(S_W,S_H);
skin_side(S_W,S_H);
skin_top_back(S_L,S_W);
skin_top_right(S_W);
skin_top_left(S_W);
}
}
}
module 2D_stack_layout(step) {for (i=[0:$children-1]) {translate([0,i*step]) child(i);}}

View file

@ -0,0 +1,992 @@
0
SECTION
2
HEADER
9
$ACADVER
1
AC1015
0
ENDSEC
0
SECTION
2
BLOCKS
0
ENDSEC
0
SECTION
2
ENTITIES
0
LWPOLYLINE
8
0
90
78
70
1
10
-12.500000
20
-2.000000
10
-12.500000
20
0.000000
10
-12.000000
20
0.000000
10
-12.000000
20
0.010000
10
-11.453000
20
0.030000
10
-10.735000
20
0.163000
10
-10.044000
20
0.398000
10
-9.395000
20
0.732000
10
-8.802000
20
1.157000
10
-8.276000
20
1.663000
10
-7.830000
20
2.241000
10
-7.473000
20
2.878000
10
-7.212000
20
3.560000
10
-7.053000
20
4.272000
10
-7.000000
20
5.000000
10
-7.000000
20
21.876000
10
-7.053000
20
22.604000
10
-7.212000
20
23.316000
10
-7.473000
20
23.998000
10
-7.744000
20
24.482000
10
-8.249000
20
25.237000
10
-8.800000
20
26.355000
10
-9.200000
20
27.535000
10
-9.444000
20
28.757000
10
-9.525000
20
30.000000
10
-9.444000
20
31.243000
10
-9.200000
20
32.465000
10
-8.800000
20
33.645000
10
-8.249000
20
34.763000
10
-7.557000
20
35.798000
10
-6.735000
20
36.735000
10
-5.798000
20
37.557000
10
-4.763000
20
38.249000
10
-3.645000
20
38.800000
10
-2.465000
20
39.200000
10
-1.243000
20
39.444000
10
0.000000
20
39.525000
10
1.243000
20
39.444000
10
2.465000
20
39.200000
10
3.645000
20
38.800000
10
4.763000
20
38.249000
10
5.798000
20
37.557000
10
6.735000
20
36.735000
10
7.557000
20
35.798000
10
8.249000
20
34.763000
10
8.800000
20
33.645000
10
9.200000
20
32.465000
10
9.444000
20
31.243000
10
9.525000
20
30.000000
10
9.444000
20
28.757000
10
9.200000
20
27.535000
10
8.800000
20
26.355000
10
8.249000
20
25.237000
10
7.843000
20
24.629000
10
7.640000
20
24.323000
10
7.330000
20
23.662000
10
7.120000
20
22.963000
10
7.013000
20
22.241000
10
7.013000
20
21.876000
10
7.000000
20
21.876000
10
7.000000
20
5.000000
10
7.013000
20
5.000000
10
7.013000
20
4.635000
10
7.120000
20
3.913000
10
7.330000
20
3.214000
10
7.640000
20
2.553000
10
8.043000
20
1.944000
10
8.530000
20
1.400000
10
9.091000
20
0.934000
10
9.714000
20
0.553000
10
10.386000
20
0.268000
10
11.092000
20
0.083000
10
11.817000
20
0.003000
10
12.000000
20
0.010000
10
12.000000
20
0.000000
10
12.500000
20
0.000000
10
12.500000
20
-2.000000
10
-12.500000
20
-2.000000
0
LWPOLYLINE
8
0
90
78
70
1
10
17.500000
20
-2.000000
10
17.500000
20
0.000000
10
18.000000
20
0.000000
10
18.000000
20
0.010000
10
18.547000
20
0.030000
10
19.265000
20
0.163000
10
19.956000
20
0.398000
10
20.605000
20
0.732000
10
21.198000
20
1.157000
10
21.724000
20
1.663000
10
22.170000
20
2.241000
10
22.527000
20
2.878000
10
22.788000
20
3.560000
10
22.947000
20
4.272000
10
23.000000
20
5.000000
10
23.000000
20
21.876000
10
22.947000
20
22.604000
10
22.788000
20
23.316000
10
22.527000
20
23.998000
10
22.256000
20
24.482000
10
21.751000
20
25.237000
10
21.200000
20
26.355000
10
20.800000
20
27.535000
10
20.556000
20
28.757000
10
20.475000
20
30.000000
10
20.556000
20
31.243000
10
20.800000
20
32.465000
10
21.200000
20
33.645000
10
21.751000
20
34.763000
10
22.443000
20
35.798000
10
23.265000
20
36.735000
10
24.202000
20
37.557000
10
25.237000
20
38.249000
10
26.355000
20
38.800000
10
27.535000
20
39.200000
10
28.757000
20
39.444000
10
30.000000
20
39.525000
10
31.243000
20
39.444000
10
32.465000
20
39.200000
10
33.645000
20
38.800000
10
34.763000
20
38.249000
10
35.798000
20
37.557000
10
36.735000
20
36.735000
10
37.557000
20
35.798000
10
38.249000
20
34.763000
10
38.800000
20
33.645000
10
39.200000
20
32.465000
10
39.444000
20
31.243000
10
39.525000
20
30.000000
10
39.444000
20
28.757000
10
39.200000
20
27.535000
10
38.800000
20
26.355000
10
38.249000
20
25.237000
10
37.843000
20
24.629000
10
37.640000
20
24.323000
10
37.330000
20
23.662000
10
37.120000
20
22.963000
10
37.013000
20
22.241000
10
37.013000
20
21.876000
10
37.000000
20
21.876000
10
37.000000
20
5.000000
10
37.013000
20
5.000000
10
37.013000
20
4.635000
10
37.120000
20
3.913000
10
37.330000
20
3.214000
10
37.640000
20
2.553000
10
38.043000
20
1.944000
10
38.530000
20
1.400000
10
39.091000
20
0.934000
10
39.714000
20
0.553000
10
40.386000
20
0.268000
10
41.092000
20
0.083000
10
41.817000
20
0.003000
10
42.000000
20
0.010000
10
42.000000
20
0.000000
10
42.500000
20
0.000000
10
42.500000
20
-2.000000
10
17.500000
20
-2.000000
0
LWPOLYLINE
8
0
90
78
70
1
10
47.500000
20
-2.000000
10
47.500000
20
0.000000
10
48.000000
20
0.000000
10
48.000000
20
0.010000
10
48.547000
20
0.030000
10
49.265000
20
0.163000
10
49.956000
20
0.398000
10
50.605000
20
0.732000
10
51.198000
20
1.157000
10
51.724000
20
1.663000
10
52.170000
20
2.241000
10
52.527000
20
2.878000
10
52.788000
20
3.560000
10
52.947000
20
4.272000
10
53.000000
20
5.000000
10
53.000000
20
21.876000
10
52.947000
20
22.604000
10
52.788000
20
23.316000
10
52.527000
20
23.998000
10
52.256000
20
24.482000
10
51.751000
20
25.237000
10
51.200000
20
26.355000
10
50.800000
20
27.535000
10
50.556000
20
28.757000
10
50.475000
20
30.000000
10
50.556000
20
31.243000
10
50.800000
20
32.465000
10
51.200000
20
33.645000
10
51.751000
20
34.763000
10
52.443000
20
35.798000
10
53.265000
20
36.735000
10
54.202000
20
37.557000
10
55.237000
20
38.249000
10
56.355000
20
38.800000
10
57.535000
20
39.200000
10
58.757000
20
39.444000
10
60.000000
20
39.525000
10
61.243000
20
39.444000
10
62.465000
20
39.200000
10
63.645000
20
38.800000
10
64.763000
20
38.249000
10
65.798000
20
37.557000
10
66.735000
20
36.735000
10
67.557000
20
35.798000
10
68.249000
20
34.763000
10
68.800000
20
33.645000
10
69.200000
20
32.465000
10
69.444000
20
31.243000
10
69.525000
20
30.000000
10
69.444000
20
28.757000
10
69.200000
20
27.535000
10
68.800000
20
26.355000
10
68.249000
20
25.237000
10
67.843000
20
24.629000
10
67.640000
20
24.323000
10
67.330000
20
23.662000
10
67.120000
20
22.963000
10
67.013000
20
22.241000
10
67.013000
20
21.876000
10
67.000000
20
21.876000
10
67.000000
20
5.000000
10
67.013000
20
5.000000
10
67.013000
20
4.635000
10
67.120000
20
3.913000
10
67.330000
20
3.214000
10
67.640000
20
2.553000
10
68.043000
20
1.944000
10
68.530000
20
1.400000
10
69.091000
20
0.934000
10
69.714000
20
0.553000
10
70.386000
20
0.268000
10
71.092000
20
0.083000
10
71.817000
20
0.003000
10
72.000000
20
0.010000
10
72.000000
20
0.000000
10
72.500000
20
0.000000
10
72.500000
20
-2.000000
10
47.500000
20
-2.000000
0
ENDSEC
0
SECTION
2
OBJECTS
0
DICTIONARY
0
ENDSEC
0
EOF

View file

@ -0,0 +1,334 @@
//
// Use this to prerender a set of tube slots for the back panel, so you can load them as dxf.
// Rendering these slots in combination with other geometry just kills opencsg,
// though CGAL didn't have a problem with them.
// Save the CGAL-rendered slot set as "prerendered_tube_slots.dxf", since that's what the
// code in skin_back() below expects.
// Just do this once any time you need to update just these slots, then comment out again.
prerender_cable_notches_space=30;
!for (i=[0:2]) {translate([i*prerender_cable_notches_space,0,0]) cable_slot();}
//skin_front();
//skin_back();
//skin_side();
//skin_top_back();
//skin_top_right();
//skin_top_left();
//skin_bottom();
module skin_front(S_L=998,S_H=308) { // based on c51004_1.dxf
S_SL=S_L-248-18; //figure size of span under lid cutout, so we can set up vent slots there
vent_strip_offset=[18+32,S_H - 20 - 86]; // lower left corner of vent area
vent_width = 4; // each vent slot
vent_height = 60; //
vent_space = 30; // space between slot centers
vent_span = S_SL-(32+40);// whole span to be filled with multiple slots
interface_pocket_width=170;
interface_pocket_height=65;
interface_center=[S_L-129,S_H-63];
interface_mount_holes=[
[interface_center[0]-50,interface_center[1]+interface_pocket_height/2+5],
[interface_center[0]+50,interface_center[1]+interface_pocket_height/2+5],
[interface_center[0]+50,interface_center[1]-interface_pocket_height/2-5],
[interface_center[0]-50,interface_center[1]-interface_pocket_height/2-5],
];
h_dist = (S_L-99-99)/5;
panel_mount_holes=[
[99 , 9], // first hole bottom
[99+h_dist , 9],
[99+(h_dist*2) , 9],
[99+(h_dist*3) , 9],
[99+(h_dist*4) , 9],
[S_L-99 , 9], //last hole bottom
[S_L-9 , S_H/2], // side
[S_L-50 , S_H-9], // first top
[S_L-198 , S_H-9], // top next to klep
[99 , S_H - 20 - 9],
[99+(h_dist) , S_H - 20 - 9],
[99+(h_dist*2) , S_H - 20 - 9],
[99+(h_dist*3) , S_H - 20 - 9],
[99+(h_dist*4) , S_H - 20 - 9],
// [18 + S_SL - S_SL*(200/732) , S_H - 20 - 9],
// [18 + S_SL*(200/732) , S_H - 20 - 9],
[9 , S_H-9],
[9 , S_H/2]
];
// now, set up a panel area, and then difference out all the drill holes, slots and pockets
difference() {
// front panel area
difference(){square([S_L,S_H]);translate([18,S_H-20]) square([S_SL,20]);}
// drill
drill(5,panel_mount_holes);
// drill(5,interface_mount_holes);
// route pockets
//pocket([interface_center]) roundedSquare(interface_pocket_width,interface_pocket_height,10,center=true);
pocket([vent_strip_offset]) roundedSlotSet( vent_span , vent_space , vent_width , vent_height);
}
}
module skin_back(S_L=998,S_H=308) { // based on c51004_2.dxf
S_SL=S_L-248-18; // this time we'll use this to place the air vent hole
pmsw=5.04;
h_dist = (S_L-99-99)/5;
panel_mount_slots=[
[99 , 5], // first hole bottom
[99+h_dist , 5],
[99+(h_dist*2) , 5],
[99+(h_dist*3) , 5],
[99+(h_dist*4) , 5],
[99+(h_dist*5) , 5],
// [120-pmsw/2 , 5 , 0],
// [S_L/2,5,0],
// [S_L - (120+pmsw/2) , 5 , 0],
[99 , S_H-5,180 ], // first hole bottom
[99+h_dist , S_H-5 , 180],
[99+(h_dist*2) , S_H-5 , 180],
[99+(h_dist*3) , S_H-5 , 180],
[99+(h_dist*4) , S_H-5 , 180],
[99+(h_dist*5) , S_H-5 , 180],
[S_L-5 ,S_H/2 , 180], //side
// [S_L - (120+pmsw/2) , S_H-5 , 180],
// [S_L/2,S_H-5,180],
// [120-pmsw/2 , S_H-5 , 180],
[5,S_H/2,-90], // side
];
cable_notches_offset=260;
cable_notches_space=30;
airvent_center=[S_L - (18+S_SL/2),90,0];
airvent_radius=2*25.4;
back_interface_hole_width=187;
back_interface_hole_height=115;
back_interface_hole_center=[121.5,83.5,0];
difference() {
// back panel area
square([S_L,S_H]);
//translate([(cable_notches_offset),0,0]) {import_dxf(file="prerendered_tube_slots.dxf", layer="0");}
//pocket([airvent_center]) circle(airvent_radius);
//pocket([airvent_center]) rotate(30) roundedSlotCircleSet(360,60,5.2,12,airvent_radius+8.7);
//pocket([back_interface_hole_center]) roundedSquare(back_interface_hole_width,back_interface_hole_height,12.5,center=true);
pocket(panel_mount_slots) translate([-5.04/2,0,0]) roundedSlot(5.04,8);
//drill
// drill(5,[[back_interface_hole_center[0]+6.5,back_interface_hole_center[1]+back_interface_hole_height/2+5]]);
}
}
module skin_side(S_W=598,S_H=308) {
h_dist = (S_W-200)/3;
panel_mount_slots=[
[100 , 5 , 0],
[100+h_dist , 5 , 0],
[100+(h_dist*2), 5 , 0],
// [100+(h_dist*3), 5 , 0],
[S_W - 100 , 5 , 0],
[S_W - 5 , S_H/2 , 90], //side
[S_W - 100 , S_H - 5 , 180],
[100 , S_H - 5 , 180],
[100+h_dist , S_H -5 , 180],
[100+(h_dist*2), S_H - 5 , 180],
// [100+(h_dist*3), S_H -5 , 180],
[5 , S_H/2 ,-90],
];
difference() {
square([S_W,S_H]);
pocket(panel_mount_slots) translate([-5.01/2,0,0]) roundedSlot(5.01,8);
}
}
module skin_top_back(S_L=998) {
S_SL=S_L-248-18; //
hinge_slot_pair_center_x_from_edge=round(10*S_SL*(144.5/730))/10;//or so
// hinge_slots=[
// [(19+hinge_slot_pair_center_x_from_edge) - 25/2 , 0 , 0],
// [(19+hinge_slot_pair_center_x_from_edge) + 25/2 , 0 , 0],
// [(19+S_SL) - hinge_slot_pair_center_x_from_edge - 25/2 , 0 , 0],
// [(19+S_SL) - hinge_slot_pair_center_x_from_edge + 25/2 , 0 , 0],
// ];
h_dist=(S_L-99)/5;
panel_mount_holes=[
[99 , 118 - 9 ],
[(99+h_dist) , 118 - 9 ],
[(99+(h_dist*2)) , 118 - 9 ],
[(99+(h_dist*3)) , 118 - 9 ],
[(99+(h_dist*4)) , 118 - 9 ],
[(S_L-99) , 118 - 9 ],
[99 , 9 ],
[(99+h_dist) , 9 ],
[(99+(h_dist*2)) , 9 ],
[(99+(h_dist*3)) , 9 ],
[(99+(h_dist*4)) , 9 ],
[(S_L-99) , 9 ],
];
difference() {
square([19+S_SL,118]);
drill(5,panel_mount_holes);
//pocket(hinge_slots) translate([-6/2,-4,0]) roundedSlot(6,12+4);
}
}
module skin_top_right(S_W=598) {
panel_mount_holes=[
[100 , 248 - 9 ],
[100 , 9 ],
[S_W/2 , 9 ],
[S_W-100 , 9 ],
[S_W/2 , 248 - 9 ],
[S_W-100 , 248 - 9 ],
];
difference() {
square([S_W,248]);
drill(5,panel_mount_holes);
}
}
module skin_top_left(S_W=598) {
L=S_W-(598-479);
panel_mount_holes=[
[9 , 9 ],
[L/2, , 9 ],
[L - 9 , 9 ],
];
difference() {
square([L,18]);
drill(5,panel_mount_holes);
}
}
module skin_bottom(S_L=998,S_W=598) {
L=S_W-(598-479);
S_SL=S_L-248-18;
S_SL_reference=998-248-18;
cab_guide_ystart =L*(180/479);
cab_guide_ystart2=L*(318/479);
foot_holes=[
[ 9, 9 ],
[S_L - 9, 9 ],
[S_L - 9, S_W - 9 ],
[ 9, S_W - 9 ],
];
cable_guide_holes=[
[S_L - 286 , cab_guide_ystart ],
[S_L - 286 , cab_guide_ystart - 8 ],
[S_L - 286 , cab_guide_ystart2 ],
[S_L - 286 , cab_guide_ystart2 - 8 ],
];
h_dist=(S_L-(99*2))/5;
h_dist2=(S_W-(99*2))/3;
panel_mount_slots=[
[99,5,0],
[99 ,5,0], // first hole bottom
[99+h_dist ,5,0],
[99+(h_dist*2) ,5,0],
[99+(h_dist*3) ,5,0],
[99+(h_dist*4) ,5,0],
[S_L-99 ,5,0], //last hole bottom
// [S_L/2,5,0],
// [S_L-120,5,0],
// [S_L-5,80,90],
// [S_L-5,S_W/2,90],
// [S_L-5,S_W-80,90],
[S_L-5,S_W-99,90],
[S_L-5,S_W-(99+h_dist2),90],
[S_L-5,S_W-99-(h_dist2*2),90],
[S_L-5,99,90],
// [S_L-120,S_W-5,180],
// [S_L/2,S_W-5,180],
// [120,S_W-5,180],
[99,5,180],
[99 ,S_W-5,180], // first hole bottom
[99+h_dist ,S_W-5,180],
[99+(h_dist*2) ,S_W-5,180],
[99+(h_dist*3) ,S_W-5,180],
[99+(h_dist*4) ,S_W-5,180],
[S_L-99 ,S_W-5,180], //last hole bottom
[5,S_W-99,-90],
[5,S_W-(99+h_dist2),-90],
[5,S_W-99-(h_dist2*2),-90],
[5,99,-90],
// [S_L-235,S_W/2,90],
// [18 + S_SL*((400-18)/S_SL_reference),S_W-105,180], // hopefully
];
difference() {
square([S_L,S_W]);
// drill(7,foot_holes);
// drill(3.1749492,cable_guide_holes);
pocket(panel_mount_slots) translate([-5.1/2,0,0]) roundedSlot(5.1,8);
}
}
module drill(d,dl) {for(i=dl) {
//echo(str("drill ",(d)," ",i));
translate(i) circle(d/2);}
}
module pocket(o=[[0,0,0]]) {
for ( i = [ 0 : $children-1 ] ) {
//echo(str("pocket",(($children>1)?str(" ",(j+1)," of ",$children," "):str(" ")), "at ",o));
for (j=o) {
translate([j[0],j[1]]) rotate (j[2]) child(i);
}
}
}
module cable_slot() { // nice, but for some reason really hard on OpenCSG (no problem in CGAL render)
// so use it to pre-render sets of these slots, then save as DXF, and import
// those for integration with models
blendnudge=0.06;
union() {
//translate([0,blendnudge])
difference() {
translate([-25/2,-2,0]) square([25,blendnudge+2+30-5.3666898]);
translate([ 7,0,0]) roundedSquare(16,blendnudge+16.8161462+10,5,$fn=43);
translate([-16-7,0,0]) roundedSquare(16,blendnudge+16.8161462+10,5,$fn=43);
}
translate([0,30]) circle(9.525,$fn=48);
}
}
module roundedSlot(w=4,h=30) {
$fn=20;
union() {
translate([w/2,w/2]) circle(r=w/2);
translate([0,w/2]) square([w,h-w]);
translate([w/2,h-w/2]) circle(r=w/2);
}
}
module roundedSlotSet(span,slot_spacing_base=30,slotwidth,slotheight) {
number_of_slots = span/slot_spacing_base;
rem = number_of_slots - floor(number_of_slots);
slot_spacing=slot_spacing_base + slot_spacing_base * (rem/number_of_slots);
for(i=[0:floor(number_of_slots)]) {translate([i*slot_spacing,0,0]) roundedSlot(slotwidth,slotheight);}
}
module roundedSlotCircleSet(span,slot_spacing_base=30,slotwidth,slotheight,slotoffset) {
number_of_slots = span/slot_spacing_base;
rem = number_of_slots - floor(number_of_slots);
slot_spacing=slot_spacing_base + slot_spacing_base * (rem/number_of_slots);
for(i=[0:floor(number_of_slots)]) {rotate([0,0,i*slot_spacing]) translate([0,slotoffset,0]) roundedSlot(slotwidth,slotheight);}
}
module roundedSquare(w,h,r,center=false) {
coffx=(center)?-w/2:0;
coffy=(center)?-h/2:0;
union() {
translate([coffx + 0 ,coffy + r]) square([w,h-2*r]);
translate([coffx + r ,coffy + 0]) square([w-2*r,h]);
translate([coffx + r ,coffy + r]) circle(r);
translate([coffx + r ,coffy + h-r]) circle(r);
translate([coffx + w-r,coffy + h-r]) circle(r);
translate([coffx + w-r,coffy + r]) circle(r);
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,50 @@
// MakerSlide Component
// http://www.makerslide.com
// b17001_rev_2
// Single Bearing Delrin V Wheel
// Original by Barton Dring
// OpenSCAD model by Mike Sheldrake
vwheel(false);
module vwheelbearing() { //id=5mm,od=16mm,width=5mm
color([0.5,0.5,0.5])
difference() {
cylinder(r=8,h=5,$fn=24);
translate([0,0,-0.05]) cylinder(r=2.5,h=5.1,$fn=12);
}
}
module vwheel(withbearing=true) { //MakerSlide.com delrin v wheel
id1=15.9743;
id2=14.8;
od1=23.5;
od2=18.75;
color([0.2,0.2,0.2])
rotate_extrude(convexity = 10,$fn=40)
translate([id1/2, 0, 0])
rotate([0,0,-90])
polygon(points = [
[3 - 0.3/sqrt(2),0],
[-2,0],
[-2,-(id1-id2)/2],
[-3,-(id1-id2)/2],
[-3,(od1-id1)/2 - 0.2/sqrt(2)],
[-3 + 0.2/sqrt(2),(od1-id1)/2],
[-3 + 0.75,(od1-id1)/2],
[-0.55/2, (od1-id1)/2 - (3 - (0.75+(0.55/2)))],
[-0.55/2,(od2-id1)/2],
[0.55/2,(od2-id1)/2],
[0.55/2, (od1-id1)/2 - (3 - (0.75+(0.55/2)))],
[3 - 0.75,(od1-id1)/2],
[3 - 0.2/sqrt(2),(od1-id1)/2],
[3,(od1-id1)/2 - 0.2/sqrt(2)],
[3,0.3/sqrt(2)]
],
paths = [
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
], convexity = 10);
if (withbearing) {translate([0,0,-3]) vwheelbearing();}
}

File diff suppressed because it is too large Load diff

1698
frame/amperemetertest.dxf Normal file

File diff suppressed because it is too large Load diff

16508
frame/draadklem.dxf Normal file

File diff suppressed because it is too large Load diff

1816
frame/line.dxf Normal file

File diff suppressed because it is too large Load diff

106
frame/line.svg Normal file
View file

@ -0,0 +1,106 @@
<?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="744.094488189"
height="1052.36220472"
id="svg3004"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="line.dxf">
<metadata
id="metadata3029">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="989"
inkscape:window-height="712"
id="namedview3027"
showgrid="false"
showborder="false"
inkscape:zoom="0.41172291"
inkscape:cx="372.04724"
inkscape:cy="-43.833323"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="0"
inkscape:current-layer="g3023" />
<desc
id="desc3006">/home/mro/lasercutter/lasercutter/frame/line.dxf - scale = 1.000000</desc>
<defs
id="defs3008">
<marker
id="DistanceX"
orient="auto"
refX="0.0"
refY="0.0"
style="overflow:visible">
<path
d="M 3,-3 L -3,3 M 0,-5 L 0,5"
style="stroke:#000000; stroke-width:0.5"
id="path3011" />
</marker>
<pattern
height="8"
id="Hatch"
patternUnits="userSpaceOnUse"
width="8"
x="0"
y="0">
<path
d="M8 4 l-4,4"
linecap="square"
stroke="#000000"
stroke-width="0.25"
id="path3014" />
<path
d="M6 2 l-4,4"
linecap="square"
stroke="#000000"
stroke-width="0.25"
id="path3016" />
<path
d="M4 0 l-4,4"
linecap="square"
stroke="#000000"
stroke-width="0.25"
id="path3018" />
</pattern>
<symbol
id="*Model_Space" />
<symbol
id="*Paper_Space" />
<symbol
id="*Paper_Space0" />
</defs>
<g
inkscape:groupmode="layer"
inkscape:label="0"
id="g3023">
<path
d="M 0.000000,1052.362205 354.330709,1052.362205"
style="stroke:#000000;fill:#000000;stroke-linecap:round;stroke-opacity:1;opacity:1"
id="path3025" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

2100
frame/onderbuislinks.dxf Normal file

File diff suppressed because it is too large Load diff

1956
frame/onderbuismidden.dxf Normal file

File diff suppressed because it is too large Load diff

2126
frame/onderbuisrechts.dxf Normal file

File diff suppressed because it is too large Load diff

2220
frame/outlets.dxf Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

1972
frame/warterflowmount.dxf Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff