X frames improvements, added DXF template generation, etc

pull/20/head
Carlos Garcia Saura 2014-07-17 18:49:08 +02:00
parent 8be38c4b62
commit 553f7ca35a
19 changed files with 229733 additions and 152649 deletions

View File

@ -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();
}

View File

@ -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])

View File

@ -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

View File

@ -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();

View File

@ -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

View File

@ -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);

View File

@ -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