verzameling oude spullen
This commit is contained in:
commit
7ed9544283
119 changed files with 1288059 additions and 0 deletions
47
frame/GT2_Belt_Clamp_For_Ecksbot/belt-clamp_GT2.scad
Normal file
47
frame/GT2_Belt_Clamp_For_Ecksbot/belt-clamp_GT2.scad
Normal 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();
|
1654
frame/GT2_Belt_Clamp_For_Ecksbot/belt-clamp_GT2.stl
Normal file
1654
frame/GT2_Belt_Clamp_For_Ecksbot/belt-clamp_GT2.stl
Normal file
File diff suppressed because it is too large
Load diff
62
frame/GT2_Belt_Clamp_For_Ecksbot/configuration.scad
Normal file
62
frame/GT2_Belt_Clamp_For_Ecksbot/configuration.scad
Normal 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>
|
||||
|
35
frame/GT2_Belt_Clamp_For_Ecksbot/functions.scad
Normal file
35
frame/GT2_Belt_Clamp_For_Ecksbot/functions.scad
Normal 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);
|
||||
}
|
||||
}
|
38
frame/GT2_Belt_Clamp_For_Ecksbot/metric.scad
Normal file
38
frame/GT2_Belt_Clamp_For_Ecksbot/metric.scad
Normal 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;
|
782
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutter.scad
Normal file
782
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutter.scad
Normal 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);}}
|
144848
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutter24-10.bak000.dxf
Normal file
144848
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutter24-10.bak000.dxf
Normal file
File diff suppressed because it is too large
Load diff
93254
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutter24-10.dxf
Normal file
93254
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutter24-10.dxf
Normal file
File diff suppressed because it is too large
Load diff
144622
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutter31-10.dxf
Normal file
144622
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutter31-10.dxf
Normal file
File diff suppressed because it is too large
Load diff
74408
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutterpanels.bak000.dxf
Normal file
74408
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutterpanels.bak000.dxf
Normal file
File diff suppressed because it is too large
Load diff
64210
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutterpanels.dxf
Normal file
64210
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutterpanels.dxf
Normal file
File diff suppressed because it is too large
Load diff
61246
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutterpanels17-10.dxf
Normal file
61246
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutterpanels17-10.dxf
Normal file
File diff suppressed because it is too large
Load diff
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
5
frame/Scalable_Buildlog_net_Laser_2/makerslide.scad
Normal file
5
frame/Scalable_Buildlog_net_Laser_2/makerslide.scad
Normal 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);
|
4134
frame/Scalable_Buildlog_net_Laser_2/makerslide_extrusion_profile.dxf
Normal file
4134
frame/Scalable_Buildlog_net_Laser_2/makerslide_extrusion_profile.dxf
Normal file
File diff suppressed because it is too large
Load diff
2
frame/Scalable_Buildlog_net_Laser_2/misumi_2020.scad
Normal file
2
frame/Scalable_Buildlog_net_Laser_2/misumi_2020.scad
Normal 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
2
frame/Scalable_Buildlog_net_Laser_2/misumi_2040.scad
Normal file
2
frame/Scalable_Buildlog_net_Laser_2/misumi_2040.scad
Normal 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
|
@ -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);}}
|
992
frame/Scalable_Buildlog_net_Laser_2/prerendered_tube_slots.dxf
Normal file
992
frame/Scalable_Buildlog_net_Laser_2/prerendered_tube_slots.dxf
Normal 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
|
334
frame/Scalable_Buildlog_net_Laser_2/skins.scad
Normal file
334
frame/Scalable_Buildlog_net_Laser_2/skins.scad
Normal 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
|
@ -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();}
|
||||
|
||||
}
|
75272
frame/Scalable_Buildlog_net_Laser_2/~bitlairlasercutterpanels.dxf
Normal file
75272
frame/Scalable_Buildlog_net_Laser_2/~bitlairlasercutterpanels.dxf
Normal file
File diff suppressed because it is too large
Load diff
1698
frame/amperemetertest.dxf
Normal file
1698
frame/amperemetertest.dxf
Normal file
File diff suppressed because it is too large
Load diff
16508
frame/draadklem.dxf
Normal file
16508
frame/draadklem.dxf
Normal file
File diff suppressed because it is too large
Load diff
1816
frame/line.dxf
Normal file
1816
frame/line.dxf
Normal file
File diff suppressed because it is too large
Load diff
106
frame/line.svg
Normal file
106
frame/line.svg
Normal 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
2100
frame/onderbuislinks.dxf
Normal file
File diff suppressed because it is too large
Load diff
1956
frame/onderbuismidden.dxf
Normal file
1956
frame/onderbuismidden.dxf
Normal file
File diff suppressed because it is too large
Load diff
2126
frame/onderbuisrechts.dxf
Normal file
2126
frame/onderbuisrechts.dxf
Normal file
File diff suppressed because it is too large
Load diff
2220
frame/outlets.dxf
Normal file
2220
frame/outlets.dxf
Normal file
File diff suppressed because it is too large
Load diff
4650
frame/rookanaalachterwandlinks.dxf
Normal file
4650
frame/rookanaalachterwandlinks.dxf
Normal file
File diff suppressed because it is too large
Load diff
3660
frame/rookanaalachterwandlinks2.dxf
Normal file
3660
frame/rookanaalachterwandlinks2.dxf
Normal file
File diff suppressed because it is too large
Load diff
3648
frame/rookanaalachterwandlinksboven.dxf
Normal file
3648
frame/rookanaalachterwandlinksboven.dxf
Normal file
File diff suppressed because it is too large
Load diff
4336
frame/rookanaalachterwandrechts.dxf
Normal file
4336
frame/rookanaalachterwandrechts.dxf
Normal file
File diff suppressed because it is too large
Load diff
4694
frame/rookanaalachterwandrechts2.dxf
Normal file
4694
frame/rookanaalachterwandrechts2.dxf
Normal file
File diff suppressed because it is too large
Load diff
3474
frame/rookanaalachterwandrechts3.dxf
Normal file
3474
frame/rookanaalachterwandrechts3.dxf
Normal file
File diff suppressed because it is too large
Load diff
3894
frame/rookanaalachterwandrechtsboven.dxf
Normal file
3894
frame/rookanaalachterwandrechtsboven.dxf
Normal file
File diff suppressed because it is too large
Load diff
2148
frame/rookanaalstaandnaastafzuiging.dxf
Normal file
2148
frame/rookanaalstaandnaastafzuiging.dxf
Normal file
File diff suppressed because it is too large
Load diff
1972
frame/warterflowmount.dxf
Normal file
1972
frame/warterflowmount.dxf
Normal file
File diff suppressed because it is too large
Load diff
1948
frame/warterflowmountfiller.dxf
Normal file
1948
frame/warterflowmountfiller.dxf
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue