X frames improvements, added DXF template generation, etc
parent
8be38c4b62
commit
553f7ca35a
|
@ -13,6 +13,7 @@ use <libs/obiscad/obiscad/vector.scad>
|
|||
use <libs/obiscad/obiscad/attach.scad>
|
||||
use <libs/obiscad/obiscad/bcube.scad>
|
||||
use <libs/standard_parts.scad>
|
||||
use <MCAD/materials.scad>
|
||||
|
||||
// Functions for animations. Quick and dirty implementation, will need some cleanup
|
||||
animated_parts_number = 10;
|
||||
|
@ -27,6 +28,7 @@ base_size_Y = 261.62+animatePart(2);
|
|||
base_thickness = 8;
|
||||
base_corner_radius = 20;
|
||||
base_corner_res = 0;
|
||||
foot_offset = 40;
|
||||
|
||||
|
||||
// Parameters for the axes sizes
|
||||
|
@ -65,10 +67,6 @@ axes_Xsmooth_separation = 40+animatePart(9);
|
|||
axes_Zsmooth_separation = 35+animatePart(10,overlap=0);
|
||||
|
||||
|
||||
motor_sideLen = 42.20;
|
||||
axialBearingD = 22;
|
||||
|
||||
|
||||
// Carriage positions (for rendering)
|
||||
axes_Xcarriage_pos = axes_Xsmooth_rodLen/2+sin($t*360)*axes_Xsmooth_rodLen/3;
|
||||
axes_Ycarriage_pos = axes_Ysmooth_rodLen/2+sin($t*360)*axes_Ysmooth_rodLen/3;
|
||||
|
@ -82,6 +80,7 @@ axes_Y_smoothThreaded_verticalSeparation = axes_Yreference_height-axes_Y_threade
|
|||
|
||||
// Activate/Deactivate rendering auxiliary references (LCS axis, etc)
|
||||
draw_references = true;
|
||||
render_2D_plane = false;
|
||||
|
||||
// Include Cyclone parts
|
||||
include <Cyclone_X_carriage.scad>
|
||||
|
@ -91,147 +90,156 @@ include <Cyclone_Y_carriage.scad>
|
|||
include <Cyclone_Y_frames.scad>
|
||||
|
||||
|
||||
// BEGIN ASSEMBLING THE DESIGN
|
||||
if(draw_references) %frame();
|
||||
|
||||
// Main base for the machine
|
||||
beveledBase([base_size_X,base_size_Y,base_thickness], radius=base_corner_radius, res=base_corner_res, echoPart=true);
|
||||
//%color("brown") translate([0,0,-base_thickness/2]) bcube([base_size_X,base_size_Y,base_thickness], cr=base_corner_radius, cres=base_corner_res);
|
||||
|
||||
|
||||
// A4 paper sheet for reference
|
||||
standard_paperSheet_A4(echoPart=true);
|
||||
|
||||
|
||||
// Cyclone foot stands
|
||||
foot_offset = 40;
|
||||
translate([0,0,-base_thickness]) {
|
||||
translate([base_size_X/2-foot_offset,base_size_Y/2-foot_offset])
|
||||
rubberFoot(echoPart=true);
|
||||
translate([-base_size_X/2+foot_offset,base_size_Y/2-foot_offset])
|
||||
rubberFoot(echoPart=true);
|
||||
translate([-base_size_X/2+foot_offset,-base_size_Y/2+foot_offset])
|
||||
rubberFoot(echoPart=true);
|
||||
translate([base_size_X/2-foot_offset,-base_size_Y/2+foot_offset])
|
||||
rubberFoot(echoPart=true);
|
||||
// This small module is used to select if an object is rendered as a 2D plane or as a 3D object
|
||||
module render_2D_or_3D() {
|
||||
if(render_2D_plane) {
|
||||
projection(cut = true) children();
|
||||
} else children();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the RIGHT frame, Y smooth rod end
|
||||
translate([-axes_Ysmooth_separation/2,axes_Ysmooth_rodLen/2,axes_Yreference_height]) {
|
||||
// BEGIN ASSEMBLING THE DESIGN
|
||||
render_2D_or_3D() {
|
||||
if(draw_references) %frame();
|
||||
|
||||
// Draw right Y smooth rod
|
||||
rotate([0,0,180]) standard_rod(diam=axes_Ysmooth_rodD, length=axes_Ysmooth_rodLen, threaded=false, echoPart=true);
|
||||
|
||||
Cyclone_X_rightFrame();
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the LEFT frame, Y smooth rod end
|
||||
translate([axes_Ysmooth_separation,0,0]) {
|
||||
// Main base for the machine
|
||||
beveledBase([base_size_X,base_size_Y,base_thickness], radius=base_corner_radius, res=base_corner_res, echoPart=true);
|
||||
//%color("brown") translate([0,0,-base_thickness/2]) bcube([base_size_X,base_size_Y,base_thickness], cr=base_corner_radius, cres=base_corner_res);
|
||||
|
||||
|
||||
// A4 paper sheet for reference
|
||||
standard_paperSheet_A4(echoPart=true);
|
||||
|
||||
|
||||
// Cyclone foot stands
|
||||
translate([0,0,-base_thickness]) {
|
||||
translate([base_size_X/2-foot_offset,base_size_Y/2-foot_offset])
|
||||
rubberFoot(echoPart=true);
|
||||
translate([-base_size_X/2+foot_offset,base_size_Y/2-foot_offset])
|
||||
rubberFoot(echoPart=true);
|
||||
translate([-base_size_X/2+foot_offset,-base_size_Y/2+foot_offset])
|
||||
rubberFoot(echoPart=true);
|
||||
translate([base_size_X/2-foot_offset,-base_size_Y/2+foot_offset])
|
||||
rubberFoot(echoPart=true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the RIGHT frame, Y smooth rod end
|
||||
translate([-axes_Ysmooth_separation/2,axes_Ysmooth_rodLen/2,axes_Yreference_height]) {
|
||||
if(draw_references) %frame();
|
||||
|
||||
|
||||
// Draw right Y smooth rod
|
||||
rotate([0,0,180]) standard_rod(diam=axes_Ysmooth_rodD, length=axes_Ysmooth_rodLen, threaded=false, echoPart=true);
|
||||
|
||||
Cyclone_X_leftFrame();
|
||||
}
|
||||
|
||||
Cyclone_X_rightFrame();
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the right frame, X lower smooth rod end
|
||||
translate([axes_Xreference_posX,axes_Xreference_posY,axes_Xreference_height]) {
|
||||
if(draw_references) %frame();
|
||||
|
||||
// Draw bottom X smooth rod
|
||||
rotate([0,0,-90]) standard_rod(diam=axes_Xsmooth_rodD, length=axes_Xsmooth_rodLen, threaded=false, echoPart=true);
|
||||
// Draw X threaded rod
|
||||
translate([-(axes_Xthreaded_rodLen-axes_Xsmooth_rodLen)/2,axes_Xsmooth_separation,0])
|
||||
rotate([0,0,-90]) standard_rod(diam=axes_Xthreaded_rodD, length=axes_Xthreaded_rodLen, threaded=true, echoPart=true);
|
||||
// Draw top X smooth rod
|
||||
translate([0,axes_Xsmooth_separation,axes_Xsmooth_separation])
|
||||
rotate([0,0,-90]) standard_rod(diam=axes_Xsmooth_rodD, length=axes_Xsmooth_rodLen, threaded=false, echoPart=true);
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the X carriage (centered)
|
||||
translate([axes_Xcarriage_pos,0,0]) {
|
||||
// TRANSLATE REFERENCE POSITION to the LEFT frame, Y smooth rod end
|
||||
translate([axes_Ysmooth_separation,0,0]) {
|
||||
if(draw_references) %frame();
|
||||
|
||||
Cyclone_X_carriage();
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the Z axis origin (top of X carriage, right smooth rod)
|
||||
translate([-axes_Zsmooth_separation/2,axes_Zreference_posY,axes_Zreference_height]) {
|
||||
|
||||
// Draw right Y smooth rod
|
||||
rotate([0,0,180]) standard_rod(diam=axes_Ysmooth_rodD, length=axes_Ysmooth_rodLen, threaded=false, echoPart=true);
|
||||
|
||||
Cyclone_X_leftFrame();
|
||||
}
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the right frame, X lower smooth rod end
|
||||
translate([axes_Xreference_posX,axes_Xreference_posY,axes_Xreference_height]) {
|
||||
if(draw_references) %frame();
|
||||
|
||||
// Draw bottom X smooth rod
|
||||
rotate([0,0,-90]) standard_rod(diam=axes_Xsmooth_rodD, length=axes_Xsmooth_rodLen, threaded=false, echoPart=true);
|
||||
// Draw X threaded rod
|
||||
translate([-(axes_Xthreaded_rodLen-axes_Xsmooth_rodLen)/2,axes_Xsmooth_separation,0])
|
||||
rotate([0,0,-90]) standard_rod(diam=axes_Xthreaded_rodD, length=axes_Xthreaded_rodLen, threaded=true, echoPart=true);
|
||||
// Draw top X smooth rod
|
||||
translate([0,axes_Xsmooth_separation,axes_Xsmooth_separation])
|
||||
rotate([0,0,-90]) standard_rod(diam=axes_Xsmooth_rodD, length=axes_Xsmooth_rodLen, threaded=false, echoPart=true);
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the X carriage (centered)
|
||||
translate([axes_Xcarriage_pos,0,0]) {
|
||||
if(draw_references) %frame();
|
||||
|
||||
Cyclone_X_carriage();
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the Z axis origin (top of X carriage, right smooth rod)
|
||||
translate([-axes_Zsmooth_separation/2,axes_Zreference_posY,axes_Zreference_height]) {
|
||||
if(draw_references) %frame();
|
||||
|
||||
// Draw Z smooth rod (right)
|
||||
rotate([90,0,0]) standard_rod(diam=axes_Zsmooth_rodD, length=axes_Zsmooth_rodLen, threaded=false, echoPart=true);
|
||||
// Draw Z smooth rod (left)
|
||||
translate([axes_Zsmooth_separation,0,0])
|
||||
// Draw Z smooth rod (right)
|
||||
rotate([90,0,0]) standard_rod(diam=axes_Zsmooth_rodD, length=axes_Zsmooth_rodLen, threaded=false, echoPart=true);
|
||||
// Draw Z threaded rod
|
||||
translate([axes_Zsmooth_separation/2,0,0])
|
||||
rotate([90,0,0]) standard_rod(diam=axes_Zthreaded_rodD, length=axes_Zthreaded_rodLen, threaded=true, echoPart=true);
|
||||
// Draw Z smooth rod (left)
|
||||
translate([axes_Zsmooth_separation,0,0])
|
||||
rotate([90,0,0]) standard_rod(diam=axes_Zsmooth_rodD, length=axes_Zsmooth_rodLen, threaded=false, echoPart=true);
|
||||
// Draw Z threaded rod
|
||||
translate([axes_Zsmooth_separation/2,0,0])
|
||||
rotate([90,0,0]) standard_rod(diam=axes_Zthreaded_rodD, length=axes_Zthreaded_rodLen, threaded=true, echoPart=true);
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the Z axis reference
|
||||
translate([0,0,axes_Zcarriage_pos]) {
|
||||
if(draw_references) %frame();
|
||||
// TRANSLATE REFERENCE POSITION to the Z axis reference
|
||||
translate([0,0,axes_Zcarriage_pos]) {
|
||||
if(draw_references) %frame();
|
||||
|
||||
Cyclone_Z_carriage();
|
||||
}
|
||||
Cyclone_Z_carriage();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the FRONT RIGHT Y rod idler, Y smooth rod end
|
||||
translate([-axes_Ysmooth_separation/2,-axes_Ysmooth_rodLen/2,axes_Yreference_height]) {
|
||||
if(draw_references) %frame();
|
||||
|
||||
Cyclone_Y_rightSmoothRodIdler();
|
||||
}
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the FRONT LEFT Y rod idler, Y smooth rod end
|
||||
translate([axes_Ysmooth_separation/2,-axes_Ysmooth_rodLen/2,axes_Yreference_height]) {
|
||||
if(draw_references) %frame();
|
||||
|
||||
Cyclone_Y_leftSmoothRodIdler();
|
||||
}
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the FRONT Y frame, Y threaded rod end
|
||||
translate([0,-axes_Ythreaded_rodLen/2,axes_Y_threaded_height]) {
|
||||
if(draw_references) %frame();
|
||||
|
||||
// Draw Y threaded rod
|
||||
standard_rod(diam=axes_Ythreaded_rodD, length=axes_Ythreaded_rodLen, threaded=true, echoPart=true);
|
||||
|
||||
Cyclone_Y_frontFrame();
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the BACK Y frame, Y threaded rod end
|
||||
translate([0,axes_Ythreaded_rodLen,0]) {
|
||||
if(draw_references) %frame();
|
||||
|
||||
Cyclone_Y_backFrame();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the FRONT RIGHT Y rod idler, Y smooth rod end
|
||||
translate([-axes_Ysmooth_separation/2,-axes_Ysmooth_rodLen/2,axes_Yreference_height]) {
|
||||
if(draw_references) %frame();
|
||||
|
||||
Cyclone_Y_rightSmoothRodIdler();
|
||||
}
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the FRONT LEFT Y rod idler, Y smooth rod end
|
||||
translate([axes_Ysmooth_separation/2,-axes_Ysmooth_rodLen/2,axes_Yreference_height]) {
|
||||
if(draw_references) %frame();
|
||||
|
||||
Cyclone_Y_leftSmoothRodIdler();
|
||||
}
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the FRONT Y frame, Y threaded rod end
|
||||
translate([0,-axes_Ythreaded_rodLen/2,axes_Y_threaded_height]) {
|
||||
if(draw_references) %frame();
|
||||
|
||||
// Draw Y threaded rod
|
||||
standard_rod(diam=axes_Ythreaded_rodD, length=axes_Ythreaded_rodLen, threaded=true);
|
||||
|
||||
Cyclone_Y_frontFrame();
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the BACK Y frame, Y threaded rod end
|
||||
translate([0,axes_Ythreaded_rodLen,0]) {
|
||||
// TRANSLATE REFERENCE POSITION to the CENTERED Y carriage nut, Y threaded rod
|
||||
translate([0,-axes_Ysmooth_rodLen/2+axes_Ycarriage_pos,axes_Y_threaded_height]) {
|
||||
if(draw_references) %frame();
|
||||
|
||||
Cyclone_Y_backFrame();
|
||||
|
||||
Cyclone_Y_carriage();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the CENTERED Y carriage nut, Y threaded rod
|
||||
translate([0,-axes_Ysmooth_rodLen/2+axes_Ycarriage_pos,axes_Y_threaded_height]) {
|
||||
if(draw_references) %frame();
|
||||
|
||||
Cyclone_Y_carriage();
|
||||
}
|
||||
|
||||
|
|
|
@ -22,8 +22,12 @@
|
|||
/*}*/
|
||||
|
||||
|
||||
motor_sideLen = 42.20;
|
||||
|
||||
axes_XgearSeparation = 37;
|
||||
axes_XgearRatio = 0.6;
|
||||
axes_XgearRatio = 21/21; // Number of tooth (motor/rod)
|
||||
|
||||
X_frames_additional_thickness = 10;
|
||||
|
||||
module Cyclone_X_rightFrame() {
|
||||
scale([-1,1,1]) Cyclone_X_leftFrame(isLeft=false);
|
||||
|
@ -37,7 +41,7 @@ module Cyclone_X_leftFrame(isLeft=true) {
|
|||
motorRotatedOffset = 10;
|
||||
gearWallSeparation = 5;
|
||||
|
||||
partThickness = 10+screwSize*2;
|
||||
partThickness = X_frames_additional_thickness+screwSize*2;
|
||||
|
||||
dimX = partThickness;
|
||||
dimY = max(-axes_Xreference_posY,axes_Xsmooth_separation+axes_XgearSeparation*cos(motorRotatedOffset)+motor_sideLen/2+2);
|
||||
|
@ -81,11 +85,7 @@ module Cyclone_X_leftFrame(isLeft=true) {
|
|||
translate([0,-15,-40]) rotate([0,-90,0]) cylinder(r=15,h=partThickness*2);
|
||||
translate([0,30,-40]) rotate([0,-90,0]) cylinder(r=15,h=partThickness*2);
|
||||
translate([0,-15,-80]) rotate([0,-90,0]) cylinder(r=15,h=partThickness*2);
|
||||
rotate([0,-90,0]) {
|
||||
cylinder(r=axialBearingD/2,h=bearingDepth);
|
||||
translate([0,0,bearingDepth-0.01]) cylinder(r1=axialBearingD/2,r2=axialBearingD/2-1,h=1.5);
|
||||
cylinder(r=axialBearingD/2-1,h=partThickness*2);
|
||||
}
|
||||
rotate([0,-90,0]) bearingHole(depth=bearingDepth, thickness=partThickness);
|
||||
//rotate([0,0,90]) standard_rod(diam=axes_Xthreaded_rodD+10, length=partThickness*4, threaded=false, renderPart=true, center=true);
|
||||
// Translate to motor position
|
||||
if(isLeft)
|
||||
|
@ -127,14 +127,17 @@ hole_for_screw(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nut
|
|||
// TRANSLATE REFERENCE POSITION to the threaded rod
|
||||
translate([0,axes_Xsmooth_separation,0]) {
|
||||
if(draw_references) color("green") %frame(20);
|
||||
translate([-bearingDepth,0,0]) rotate([0,90,0])
|
||||
radialBearing(echoPart=true);
|
||||
if(isLeft) {
|
||||
translate([gearWallSeparation,0,0]) rotate([0,90,0]) rodGear(r=axes_XgearSeparation*(1-axes_XgearRatio), echoPart=true);
|
||||
translate([gearWallSeparation,0,0]) rotate([0,90,0])
|
||||
rodGear(r=axes_XgearSeparation/(1+1/axes_XgearRatio), echoPart=true);
|
||||
// Translate to motor position
|
||||
rotate([motorRotatedOffset,0,0]) {
|
||||
translate([0,axes_XgearSeparation,0])
|
||||
rotate([-motorRotatedOffset,0,0]) {
|
||||
translate([-motorWallSeparation,0,0]) rotate([0,90,0]) stepperMotor(screwHeight=motorWallSeparation, echoPart=true);
|
||||
translate([gearWallSeparation,0,0]) rotate([0,90,0]) rodGear(r=axes_XgearSeparation*axes_XgearRatio, echoPart=true);
|
||||
translate([gearWallSeparation,0,0]) rotate([0,90,0]) rodGear(r=axes_XgearSeparation/(1+axes_XgearRatio), echoPart=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -166,7 +169,7 @@ hole_for_screw(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nut
|
|||
module rodHolder(rodD=8.5, screwSize=3, height=0, sideLen=0, thickness=5, space=2, negative=false) {
|
||||
screwAditionalDistance = rodD/2;
|
||||
dimX = rodD+4*screwSize+screwAditionalDistance;
|
||||
dimY = 10+screwSize*2;
|
||||
dimY = X_frames_additional_thickness+screwSize*2;
|
||||
dimZ = rodD/2+thickness;
|
||||
if(negative) {
|
||||
translate([screwSize+screwAditionalDistance,-dimY/2,dimZ])
|
||||
|
|
|
@ -19,9 +19,34 @@ module Cyclone_Y_frontFrame() {
|
|||
cube([20,10,axes_Y_threaded_height+5]);
|
||||
}
|
||||
|
||||
use <MCAD/bearing.scad>
|
||||
|
||||
module Cyclone_Y_backFrame() {
|
||||
scale([1,-1,1]) Cyclone_Y_frontFrame();
|
||||
//scale([1,-1,1]) Cyclone_Y_frontFrame();
|
||||
rod_nut_len = 0.8*axes_Ythreaded_rodD;
|
||||
bearing_width = bearingWidth(608);
|
||||
bearingDepth = 3;
|
||||
partThickness = 10;
|
||||
|
||||
translate([0,0.01,0])
|
||||
rotate([90,0,0])
|
||||
rotate([0,0,45]) nut(size=axes_Ythreaded_rodD, chamfer=true, echoPart=true);
|
||||
translate([0,-rod_nut_len,0])
|
||||
rotate([90,0,0])
|
||||
nut(size=axes_Ythreaded_rodD, echoPart=true);
|
||||
|
||||
translate([0,-2*rod_nut_len,0]) {
|
||||
translate([0,bearingDepth-bearing_width,0]) {
|
||||
difference() {
|
||||
scale([1,-1,1]) translate([-15,0,-axes_Y_threaded_height])
|
||||
cube([30,partThickness,axes_Y_threaded_height+15]);
|
||||
rotate([90,0,0])
|
||||
bearingHole(depth=bearingDepth, thickness=partThickness);
|
||||
}
|
||||
}
|
||||
rotate([90,0,0])
|
||||
radialBearing(echoPart=true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -31,6 +56,12 @@ module Cyclone_Y_backFrame() {
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
module Cyclone_logo(sizemm = 30, thickness = 10, mirrorLogo = false) {
|
||||
dxf_logo_size = 50; // Real size of the logo in the DXF file
|
||||
scale_factor = sizemm/dxf_logo_size;
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 42 KiB |
|
@ -0,0 +1,136 @@
|
|||
/* Derived by Carlosgs from:
|
||||
* http://www.thingiverse.com/thing:12789
|
||||
* An extruder gear set for the TechZone Huxley,
|
||||
* featuring Herringbone teeth.
|
||||
* You will have to recalibrate your E_STEPS_PER_MM in
|
||||
* your firmware (ratio changing from original techzone
|
||||
* lasercut gears).
|
||||
* This use 2 modules from the MCAD library that you can
|
||||
* get from https://github.com/elmom/MCAD.
|
||||
*
|
||||
* Part - the motor gear mount hub with set screw hole -
|
||||
* derived from http://www.thingiverse.com/thing:3104
|
||||
* (thanks GilesBathgate) which is under GPL CC license.
|
||||
*
|
||||
* Copyright (C) 2011 Guy 'DeuxVis' P.
|
||||
*
|
||||
* August 2013 added 2 extra setscrews to ensure centered usage.
|
||||
* by Harry Binnema.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
* --
|
||||
* DeuxVis - device@ymail.com */
|
||||
|
||||
include <MCAD/materials.scad>
|
||||
include <MCAD/teardrop.scad>
|
||||
include <MCAD/involute_gears.scad>
|
||||
|
||||
motor_shaft_diameter=5.3;
|
||||
BigGear_N_Teeth = 21; // 24
|
||||
|
||||
nholes = 9; // 7
|
||||
holes_diam = 6;
|
||||
hole_distance_from_center = 13.5-4.5+holes_diam/2;
|
||||
|
||||
/* Herringbone gear module, adapted from MCAD/involute_gears */
|
||||
module herringbone_gear( teeth=12, circles=0, shaft=5 ) {
|
||||
twist=200;
|
||||
height=10;
|
||||
pressure_angle=30;
|
||||
|
||||
gear(
|
||||
number_of_teeth=teeth,
|
||||
circular_pitch=320,
|
||||
pressure_angle=pressure_angle,
|
||||
clearance = 0.2,
|
||||
gear_thickness = height/2,
|
||||
rim_thickness = height/2,
|
||||
rim_width = 1,
|
||||
hub_thickness = height/2,
|
||||
hub_diameter=1,
|
||||
bore_diameter=shaft,
|
||||
circles=circles,
|
||||
twist=twist/teeth
|
||||
);
|
||||
|
||||
mirror( [0,0,1] )
|
||||
gear(
|
||||
number_of_teeth=teeth,
|
||||
circular_pitch=320,
|
||||
pressure_angle=pressure_angle,
|
||||
clearance = 0.2,
|
||||
gear_thickness = height/2,
|
||||
rim_thickness = height/2,
|
||||
rim_width = 1,
|
||||
hub_thickness = height/2,
|
||||
hub_diameter=1,
|
||||
bore_diameter=shaft,
|
||||
circles=circles,
|
||||
twist=twist/teeth
|
||||
);
|
||||
}
|
||||
|
||||
module cyclone_motor_gear(with_extra_parts=false, exploded=false) {
|
||||
// Motor gear
|
||||
union() difference() {
|
||||
union() {
|
||||
|
||||
//gear
|
||||
herringbone_gear( teeth=BigGear_N_Teeth );
|
||||
|
||||
translate( [0, 0, 12] ) mirror( [0, 0, 1] ) difference() {
|
||||
//shaft
|
||||
cylinder( r=9, h=15, $fn=40 );
|
||||
//adapted to include 3 captive nuts for symmetrical positioning
|
||||
//adpted bij HJ Binnema on August 26 2013.
|
||||
for (i= [0:2]){
|
||||
rotate([0,0,i*120]){
|
||||
//captive nut and grub holes
|
||||
translate( [0, 20, 3.5] ) rotate( [90, 0, 0] ) union() {
|
||||
//enterance
|
||||
translate( [0, -3, 14.5] ) cube( [6, 6, 2.6], center=true );
|
||||
//nut
|
||||
translate( [0, 0, 13.3] ) rotate( [0, 0, 30] )
|
||||
cylinder( r=6/2+0.5, h=2.6, $fn=6 );
|
||||
//grub hole
|
||||
translate( [0, 0, 9] ) cylinder( r=3.2/2, h=10, $fn=6 );
|
||||
}}}
|
||||
}
|
||||
}
|
||||
|
||||
//holes to save plastic
|
||||
for(i=[0:nholes-1])
|
||||
rotate( [0, 0, i*360/(nholes)+45], $fn=20 )
|
||||
translate( [hole_distance_from_center, 0] )
|
||||
cylinder( r=holes_diam/2, h=11, center=true, $fn=30 );
|
||||
|
||||
//shaft hole
|
||||
translate( [0, 0, -6] ) cylinder( r=motor_shaft_diameter/2, h=20, $fn=30 );
|
||||
}
|
||||
|
||||
|
||||
if(with_extra_parts)
|
||||
cyclone_motor_gear_extras(exploded_distance=(exploded?20:0));
|
||||
|
||||
module cyclone_motor_gear_extras(exploded_distance=0) {
|
||||
echo("Non-Plastic Parts, 1, Grub Screw M3 x 8 mm to attach gear to motor shaft");
|
||||
translate([0,2.5+8+exploded_distance,12-3.5])
|
||||
rotate([90, 0, 0])
|
||||
color(Steel) cylinder(r=1.5, h=8, $fn=30);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
cyclone_motor_gear();
|
|
@ -0,0 +1,114 @@
|
|||
/* Derived by Carlosgs from:
|
||||
* http://www.thingiverse.com/thing:12789
|
||||
* An extruder gear set for the TechZone Huxley,
|
||||
* featuring Herringbone teeth.
|
||||
* You will have to recalibrate your E_STEPS_PER_MM in
|
||||
* your firmware (ratio changing from original techzone
|
||||
* lasercut gears).
|
||||
* This use 2 modules from the MCAD library that you can
|
||||
* get from https://github.com/elmom/MCAD.
|
||||
*
|
||||
* Part - the motor gear mount hub with set screw hole -
|
||||
* derived from http://www.thingiverse.com/thing:3104
|
||||
* (thanks GilesBathgate) which is under GPL CC license.
|
||||
*
|
||||
* Copyright (C) 2011 Guy 'DeuxVis' P.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
* --
|
||||
* DeuxVis - device@ymail.com */
|
||||
|
||||
include <MCAD/metric_fastners.scad>
|
||||
include <MCAD/materials.scad>
|
||||
include <MCAD/teardrop.scad>
|
||||
include <MCAD/involute_gears.scad>
|
||||
|
||||
M8_nut_diameter = 15.3;
|
||||
nut_separation = 3;
|
||||
|
||||
SmallGear_N_Teeth = 17; // 12
|
||||
M8_rod_diam = 8.4;
|
||||
|
||||
/* Herringbone gear module, adapted from MCAD/involute_gears */
|
||||
module herringbone_gear( teeth=12, circles=0, shaft=5 ) {
|
||||
twist=200;
|
||||
height=10;
|
||||
pressure_angle=30;
|
||||
|
||||
gear(
|
||||
number_of_teeth=teeth,
|
||||
circular_pitch=320,
|
||||
pressure_angle=pressure_angle,
|
||||
clearance = 0.2,
|
||||
gear_thickness = height/2,
|
||||
rim_thickness = height/2,
|
||||
rim_width = 1,
|
||||
hub_thickness = height/2,
|
||||
hub_diameter=1,
|
||||
bore_diameter=shaft,
|
||||
circles=circles,
|
||||
twist=twist/teeth
|
||||
);
|
||||
|
||||
mirror( [0,0,1] )
|
||||
gear(
|
||||
number_of_teeth=teeth,
|
||||
circular_pitch=320,
|
||||
pressure_angle=pressure_angle,
|
||||
clearance = 0.2,
|
||||
gear_thickness = height/2,
|
||||
rim_thickness = height/2,
|
||||
rim_width = 1,
|
||||
hub_thickness = height/2,
|
||||
hub_diameter=1,
|
||||
bore_diameter=shaft,
|
||||
circles=circles,
|
||||
twist=twist/teeth
|
||||
);
|
||||
}
|
||||
|
||||
module cyclone_rod_gear(with_extra_parts=false, exploded=false) {
|
||||
// Extruder Gear
|
||||
difference() {
|
||||
union() {
|
||||
//gear
|
||||
rotate([180,0,0]) herringbone_gear( teeth=SmallGear_N_Teeth, circles=0, shaft=M8_rod_diam, $fn=40 );
|
||||
|
||||
//M8 hobbed bolt head fit washer
|
||||
/*difference() {
|
||||
translate( [0, 0, 5] ) cylinder( r=8, h=3, $fn=60 );
|
||||
translate( [0, 0, 5-0.01] ) cylinder( r=M8_nut_diameter/2, h=7, $fn=6 );
|
||||
}*/
|
||||
/*rotate([180,0,0]) difference() {
|
||||
translate( [0, 0, 5] ) cylinder( r=13, h=3, $fn=60 );
|
||||
translate( [0, 0, 5+0.4] ) cylinder( r=M8_nut_diameter/2, h=7, $fn=6 );
|
||||
}*/
|
||||
}
|
||||
|
||||
translate( [0, 0, (nut_separation/2)] ) cylinder( r=M8_nut_diameter/2, h=7, $fn=6 );
|
||||
}
|
||||
|
||||
if(with_extra_parts)
|
||||
cyclone_rod_gear_extras(exploded_distance=(exploded?12:0));
|
||||
|
||||
module cyclone_rod_gear_extras(exploded_distance=0) {
|
||||
echo("Non-Plastic Parts, 2, Nut M8 to attach rod_gear on threaded rod");
|
||||
translate([0,0,-10/2-0.8*8-1.0*exploded_distance]) color(Steel) flat_nut(8);
|
||||
translate([0,0,nut_separation/2+0.8*8+1.0*exploded_distance]) rotate([180,0,0]) color(Steel) flat_nut(8);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
cyclone_rod_gear();
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,38 +0,0 @@
|
|||
// This file is part of Cyclone PCB Factory: an open-source 3D printable CNC machine for PCB manufacture
|
||||
// http://reprap.org/wiki/Cyclone_PCB_Factory
|
||||
// Original author: Carlosgs (http://carlosgs.es)
|
||||
// License: CC BY-SA 4.0 (Attribution-ShareAlike 4.0 International, http://creativecommons.org/licenses/by-sa/4.0/)
|
||||
// Designed with http://www.openscad.org/
|
||||
|
||||
include <MCAD/nuts_and_bolts.scad>
|
||||
|
||||
module hole_for_screw(size=3,length=20,nutDepth=5,nutAddedLen=0,captiveLen=0,tolerance=0.15) {
|
||||
radius = METRIC_NUT_AC_WIDTHS[size]/2+tolerance;
|
||||
height = METRIC_NUT_THICKNESS[size]+tolerance;
|
||||
translate([0,-length/2,0]) {
|
||||
translate([0,-length/2+height+nutAddedLen+nutDepth-0.01,0])
|
||||
scale([1,(height+nutAddedLen)/height,1])
|
||||
rotate([90,0,0])
|
||||
hull() {
|
||||
nutHole(size=size, tolerance=tolerance, proj=-1);
|
||||
translate([0,captiveLen,0])
|
||||
nutHole(size=size, tolerance=tolerance, proj=-1);
|
||||
}
|
||||
translate([0,length/2-height+0.01,0]) //TODO (from MCAD): proper screw cap values: instead of "height" will use METRIC_BOLT_CAP_HEIGHTS[size]+tolerance;
|
||||
rotate([90,0,0])
|
||||
render() boltHole(size=size, length=length-2.6+0.5, tolerance=tolerance, proj=-1);
|
||||
}
|
||||
}
|
||||
|
||||
module screw_and_nut(size=3,length=20,nutDepth=5,nutAddedLen=0,captiveLen=0,tolerance=0) {
|
||||
color("black")
|
||||
difference() {
|
||||
hole_for_screw(size,length,nutDepth,nutAddedLen,captiveLen,tolerance);
|
||||
rotate([0,45,0]) {
|
||||
cube([1,1,10],center=true);
|
||||
cube([10,1,1],center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
hole_for_screw(size=3,length=20,nutDepth=0,nutAddedLen=0,captiveLen=10);
|
|
@ -5,6 +5,19 @@
|
|||
// Designed with http://www.openscad.org/
|
||||
|
||||
use <obiscad/obiscad/bcube.scad>
|
||||
use <MCAD/metric_fastners.scad>
|
||||
|
||||
/*Oak = [0.65, 0.5, 0.4];*/
|
||||
/*Pine = [0.85, 0.7, 0.45];*/
|
||||
/*Birch = [0.9, 0.8, 0.6];*/
|
||||
/*FiberBoard = [0.7, 0.67, 0.6];*/
|
||||
/*BlackPaint = [0.2, 0.2, 0.2];*/
|
||||
/*Iron = [0.36, 0.33, 0.33];*/
|
||||
/*Steel = [0.65, 0.67, 0.72];*/
|
||||
/*Stainless = [0.45, 0.43, 0.5];*/
|
||||
/*Aluminum = [0.77, 0.77, 0.8];*/
|
||||
/*Brass = [0.88, 0.78, 0.5];*/
|
||||
/*Transparent = [1, 1, 1, 0.2];*/
|
||||
|
||||
// Activate to generate STL for the fully assembled machine
|
||||
render_all_parts = false;
|
||||
|
@ -25,17 +38,17 @@ module standard_paperSheet_A4(t=0.05, renderPart=false, echoPart=false) {
|
|||
module standard_rod(diam=8, length=10, threaded=true, center=false, renderPart=false, echoPart=false) {
|
||||
renderStandardPart(renderPart)
|
||||
if(threaded) {
|
||||
color("black") rotate([-90,0,0]) cylinder(r=diam/2, h=length, center=center);
|
||||
color(BlackPaint) rotate([-90,0,0]) cylinder(r=diam/2, h=length, center=center);
|
||||
if(echoPart) echo(str("BOM: Rod. Threaded. Diameter ", diam, "mm. Length ", length, "mm"));
|
||||
} else {
|
||||
color("grey") rotate([-90,0,0]) cylinder(r=diam/2, h=length, center=center);
|
||||
color(Stainless) rotate([-90,0,0]) cylinder(r=diam/2, h=length, center=center);
|
||||
if(echoPart) echo(str("BOM: Rod. Smooth. Diameter ", diam, "mm. Length ", length, "mm"));
|
||||
}
|
||||
}
|
||||
|
||||
module rubberFoot(diam=40, thickness=8, renderPart=false, echoPart=false) {
|
||||
renderStandardPart(renderPart)
|
||||
color("black")
|
||||
color(BlackPaint)
|
||||
translate([0,0,-thickness])
|
||||
cylinder(r=diam/2, h=thickness);
|
||||
if(echoPart) echo(str("BOM: Rubber foot. Diameter ", diam, "mm. Thickness ", thickness, "mm"));
|
||||
|
@ -55,7 +68,7 @@ module beveledBase(size=[100,200,10], radius=10, res=15, renderPart=false, echoP
|
|||
|
||||
include <MCAD/nuts_and_bolts.scad>
|
||||
|
||||
module hole_for_screw(size=3,length=20,nutDepth=5,nutAddedLen=0,captiveLen=0,tolerance=0.15, echoPart=false) {
|
||||
module hole_for_screw(size=3,length=20,nutDepth=5,nutAddedLen=0,captiveLen=0,tolerance=0.25, echoPart=false) {
|
||||
radius = METRIC_NUT_AC_WIDTHS[size]/2+tolerance;
|
||||
height = METRIC_NUT_THICKNESS[size]+tolerance;
|
||||
translate([0,-length/2,0]) {
|
||||
|
@ -77,7 +90,7 @@ module hole_for_screw(size=3,length=20,nutDepth=5,nutAddedLen=0,captiveLen=0,tol
|
|||
|
||||
module screw_and_nut(size=3,length=20,nutDepth=5,nutAddedLen=0,captiveLen=0,tolerance=0, autoNutOffset=false, renderPart=false, echoPart=false) {
|
||||
renderStandardPart(renderPart)
|
||||
color("black")
|
||||
color(BlackPaint)
|
||||
difference() {
|
||||
if(autoNutOffset)
|
||||
hole_for_screw(size,length+METRIC_NUT_THICKNESS[size],nutDepth,nutAddedLen,captiveLen,tolerance, echoPart=echoPart);
|
||||
|
@ -90,9 +103,21 @@ module screw_and_nut(size=3,length=20,nutDepth=5,nutAddedLen=0,captiveLen=0,tole
|
|||
}
|
||||
}
|
||||
|
||||
module nut(size=8, chamfer=false, renderPart=false, echoPart=false) {
|
||||
renderStandardPart(renderPart)
|
||||
color(steel)
|
||||
flat_nut(size, apply_chamfer=chamfer);
|
||||
if(echoPart) {
|
||||
if(chamfer)
|
||||
echo(str("BOM: Nut. M", size, ". With chamfer."));
|
||||
else
|
||||
echo(str("BOM: Nut. M", size, "."));
|
||||
}
|
||||
}
|
||||
|
||||
module screw_single(size=3,length=10,tolerance=0, renderPart=false, echoPart=false) {
|
||||
height = METRIC_NUT_THICKNESS[size]+tolerance;
|
||||
color("black")
|
||||
color(BlackPaint)
|
||||
renderStandardPart(renderPart)
|
||||
difference() {
|
||||
translate([0,-length/2,0]) {
|
||||
|
@ -126,6 +151,7 @@ module stepperMotor_mount(height, tolerance=0.15, slide_distance=5, sideLen=42.2
|
|||
module stepperMotor(screwHeight=10, renderPart=false, echoPart=false) {
|
||||
nema_screw_separation = lookup(NemaDistanceBetweenMountingHoles, Nema17);
|
||||
realScrewLength = screwHeight+METRIC_NUT_THICKNESS[3];
|
||||
echo("BOM:");
|
||||
scale([1,1,-1]) renderStandardPart(renderPart) {
|
||||
translate([0,0,-1]) motor(Nema17, size=NemaMedium, dualAxis=false);
|
||||
translate([nema_screw_separation/2,nema_screw_separation/2,-realScrewLength]) rotate([-90,0,0]) screw_single(size=3,length=realScrewLength+5,echoPart=echoPart);
|
||||
|
@ -133,21 +159,39 @@ module stepperMotor(screwHeight=10, renderPart=false, echoPart=false) {
|
|||
translate([-nema_screw_separation/2,-nema_screw_separation/2,-realScrewLength]) rotate([-90,0,0]) screw_single(size=3,length=realScrewLength+5,echoPart=echoPart);
|
||||
//translate([-nema_screw_separation/2,nema_screw_separation/2,-realScrewLength]) rotate([-90,0,0]) screw_single(size=3,length=realScrewLength+5,echoPart=echoPart);
|
||||
}
|
||||
if(echoPart) echo(str("BOM: Motor. Nema17"));
|
||||
//if(echoPart) echo(str("BOM: Motor. Nema17")); // The motor library already outputs motor information
|
||||
}
|
||||
|
||||
|
||||
|
||||
module motorGear(r=30,renderPart=false, echoPart=false) {
|
||||
renderStandardPart(renderPart)
|
||||
#color("lightgreen") cylinder(r=r,h=10)
|
||||
color("lightgreen") cylinder(r=r,h=10)
|
||||
if(echoPart) echo(str("BOM: Gear. Motor."));
|
||||
}
|
||||
|
||||
module rodGear(r=30,renderPart=false, echoPart=false) {
|
||||
renderStandardPart(renderPart)
|
||||
#color("lightgreen") cylinder(r=r,h=10)
|
||||
if(echoPart) echo(str("BOM: Gear. Rod."));
|
||||
color("lightgreen") cylinder(r=r,h=10)
|
||||
if(echoPart) echo(str("BOM: Gear. Rod."));
|
||||
}
|
||||
|
||||
|
||||
|
||||
use <MCAD/bearing.scad>
|
||||
module bearingHole(depth=3, thickness=10, model=608) {
|
||||
bearingD = bearingOuterDiameter(model);
|
||||
union() {
|
||||
cylinder(r=bearingD/2,h=depth);
|
||||
translate([0,0,depth-0.01]) cylinder(r1=bearingD/2,r2=bearingD/2-1,h=1.5);
|
||||
cylinder(r=bearingD/2-1,h=thickness+0.1);
|
||||
}
|
||||
}
|
||||
|
||||
module radialBearing(model=608,renderPart=false, echoPart=false) {
|
||||
renderStandardPart(renderPart)
|
||||
bearing(model=model, outline=false);
|
||||
if(echoPart) echo(str("BOM: Radial bearing. Model ",model));
|
||||
}
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue