mirror of
https://github.com/revarbat/snappy-reprap.git
synced 2025-11-02 15:46:45 -08:00
493 lines
11 KiB
OpenSCAD
493 lines
11 KiB
OpenSCAD
$do_prerender=true;
|
|
|
|
include <config.scad>
|
|
include <GDMUtils.scad>
|
|
use <NEMA.scad>
|
|
use <acme_screw.scad>
|
|
|
|
use <cable_chain_link_parts.scad>
|
|
use <cable_chain_mount_parts.scad>
|
|
use <cooling_fan_shroud_parts.scad>
|
|
use <drive_gear_parts.scad>
|
|
use <extruder_fan_clip_parts.scad>
|
|
use <extruder_fan_shroud_parts.scad>
|
|
use <extruder_idler_parts.scad>
|
|
use <extruder_motor_clip_parts.scad>
|
|
use <jhead_platform_parts.scad>
|
|
use <lifter_lock_nut_parts.scad>
|
|
use <lifter_rod_coupler_parts.scad>
|
|
use <ramps_mount_parts.scad>
|
|
use <motor_mount_plate_parts.scad>
|
|
use <platform_support_parts.scad>
|
|
use <rail_endcap_parts.scad>
|
|
use <rail_segment_parts.scad>
|
|
use <rail_xy_motor_segment_parts.scad>
|
|
use <rail_z_motor_segment_parts.scad>
|
|
use <sled_endcap_parts.scad>
|
|
use <spool_holder_parts.scad>
|
|
use <support_leg_parts.scad>
|
|
use <xy_joiner_parts.scad>
|
|
use <xy_sled_parts.scad>
|
|
use <yz_joiner_parts.scad>
|
|
use <z_sled_parts.scad>
|
|
|
|
|
|
module arrow(size=10, headpart=0.4) {
|
|
color("orange")
|
|
yrot(90) {
|
|
down(size/2)
|
|
union() {
|
|
up(size*headpart/2) cylinder(d1=0, d2=size/2, h=size*headpart, center=true, $fn=18);
|
|
up(size/2+size*headpart/2) cylinder(d=size/6, h=size*(1-headpart), center=true, $fn=18);
|
|
}
|
|
}
|
|
}
|
|
//!arrow(size=200);
|
|
|
|
|
|
module x_sled_assembly(explode=0, arrows=false)
|
|
{
|
|
platform_vert_off = groove_height/2+rail_offset;
|
|
up(platform_vert_off) {
|
|
xspread(platform_length+explode) {
|
|
zrot(90) yrot(180) xy_sled();
|
|
}
|
|
zrot_copies([0,180]) {
|
|
right(platform_length+explode*1.5) {
|
|
zrot(90) xy_joiner();
|
|
}
|
|
}
|
|
children();
|
|
}
|
|
|
|
// Construction arrows.
|
|
if(arrows && explode>20) {
|
|
zring(r=platform_length+explode*3/4) {
|
|
arrow(size=explode/3);
|
|
}
|
|
}
|
|
}
|
|
//!x_sled_assembly(explode=100, arrows=true);
|
|
|
|
|
|
module y_sled_assembly(explode=0, arrows=false)
|
|
{
|
|
platform_vert_off = groove_height/2+rail_offset;
|
|
up(platform_vert_off) {
|
|
yspread(platform_length+explode) {
|
|
yrot(180) xy_sled();
|
|
}
|
|
zrot_copies([0,180]) {
|
|
fwd(platform_length+explode*1.5) {
|
|
sled_endcap();
|
|
fwd(20-joiner_width/2) {
|
|
right(platform_width/2+explode*1.5) {
|
|
zrot(90) platform_support2();
|
|
}
|
|
left(platform_width/2+explode*1.5) {
|
|
zrot(-90) platform_support1();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
children();
|
|
}
|
|
|
|
// Construction arrows.
|
|
if(arrows && explode>10) {
|
|
zrot(90) zring(r=platform_length+explode) {
|
|
arrow(size=explode/3);
|
|
}
|
|
yspread(platform_length*2+3*explode+20-joiner_width/2) {
|
|
zring(r=(platform_width+explode*1.5)/2) {
|
|
arrow(size=explode/3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//!y_sled_assembly(explode=100, arrows=true);
|
|
|
|
|
|
module xy_motor_segment_assembly(explode=0, arrows=false)
|
|
{
|
|
motor_width = nema_motor_width(17)+printer_slop*2;
|
|
|
|
rail_xy_motor_segment();
|
|
|
|
// Stepper Motor
|
|
up(motor_top_z) {
|
|
up(explode*2-motor_length/2) motor_mount_plate();
|
|
up(explode) {
|
|
nema17_stepper(h=motor_length, shaft_len=motor_shaft_length);
|
|
up(gear_base+rack_height/2+2.1+explode*2) {
|
|
drive_gear();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Construction arrows.
|
|
if(arrows && explode>10) {
|
|
up(rail_height+groove_height+explode/8) {
|
|
yrot(-90) arrow(size=explode/3);
|
|
up(motor_length+explode*7/8) {
|
|
yrot(-90) arrow(size=explode/3);
|
|
up(5+explode) {
|
|
yrot(-90) arrow(size=explode/3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//!xy_motor_segment_assembly(explode=100, arrows=true);
|
|
//!xy_motor_segment_assembly();
|
|
|
|
|
|
module z_motor_segment_assembly(slidepos=0, explode=0, arrows=false)
|
|
{
|
|
motor_width = nema_motor_width(17)+printer_slop*2;
|
|
|
|
zrot(90) xrot(90) rail_z_motor_segment();
|
|
|
|
right(rail_height+groove_height/2+explode) {
|
|
up(explode/2) {
|
|
zrot(90) motor_mount_plate();
|
|
up(motor_length/2-0.1) {
|
|
down(explode) nema17_stepper(h=motor_length, shaft_len=motor_shaft_length);
|
|
zrot(280-slidepos/lifter_rod_pitch*360.0) {
|
|
up(motor_shaft_length+explode) {
|
|
color("darkgrey") {
|
|
lifter_rod_coupler();
|
|
}
|
|
color("grey") {
|
|
up(30/2+10/2+explode) {
|
|
zrot(170) lifter_lock_nut();
|
|
}
|
|
}
|
|
up(lifter_rod_length/2+2*explode) {
|
|
zrot(-50)
|
|
color("silver") {
|
|
acme_threaded_rod(
|
|
d=lifter_rod_diam,
|
|
l=lifter_rod_length,
|
|
pitch=lifter_rod_pitch,
|
|
thread_depth=lifter_rod_pitch/2,
|
|
$fn=32
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Construction arrows.
|
|
if(arrows && explode>10) {
|
|
up(explode/4) {
|
|
right(explode) {
|
|
yrot(-45) xrot(-90) arrow(size=explode/3);
|
|
}
|
|
right(rail_height+groove_height/2+explode) {
|
|
down(explode/10) yrot(90) arrow(size=explode/3);
|
|
up(explode) {
|
|
yrot(-90) arrow(size=explode/3);
|
|
up(30+explode) {
|
|
yrot(-90) arrow(size=explode/3);
|
|
up(explode) {
|
|
yrot(-90) arrow(size=explode/3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//!z_motor_segment_assembly(explode=100, arrows=true);
|
|
//!z_motor_segment_assembly();
|
|
|
|
|
|
module x_axis_slider_assembly(slidepos=0, explode=0, arrows=false)
|
|
{
|
|
platform_vert_off = rail_height+groove_height/2;
|
|
|
|
zrot(90) xy_motor_segment_assembly();
|
|
zring(r=(motor_rail_length+rail_length+2*explode)/2, n=2) {
|
|
zrot(90) rail_segment();
|
|
}
|
|
|
|
// Construction arrows.
|
|
if(arrows && explode>10) {
|
|
up(rail_height/2+groove_height/2) {
|
|
zring(r=(motor_rail_length+explode)/2) {
|
|
arrow(size=explode/3);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Left Z Tower
|
|
left(motor_rail_length/2+rail_length+2*explode) {
|
|
if ($children > 0) children(0);
|
|
}
|
|
|
|
// Right Z Tower
|
|
right(motor_rail_length/2+rail_length+2*explode) {
|
|
if ($children > 1) children(1);
|
|
}
|
|
|
|
// Sled
|
|
up(platform_vert_off) {
|
|
left(slidepos) {
|
|
if ($children > 2) children(2);
|
|
}
|
|
}
|
|
}
|
|
//!x_axis_slider_assembly(slidepos=50, explode=100, arrows=true);
|
|
//!x_axis_slider_assembly(slidepos=0) {sphere(1); sphere(1); x_sled_assembly();}
|
|
|
|
|
|
module y_axis_slider_assembly(slidepos=0, hide_endcaps=false, explode=0, arrows=false)
|
|
{
|
|
platform_vert_off = rail_height+groove_height/2;
|
|
|
|
xy_motor_segment_assembly();
|
|
zrot(90) {
|
|
zring(r=(motor_rail_length+rail_length+2*explode)/2, n=2) {
|
|
zrot(90) rail_segment();
|
|
}
|
|
}
|
|
zrot(90) zring(r=(motor_rail_length+2*rail_length+4*explode)/2) {
|
|
if (hide_endcaps == false) {
|
|
zrot(90) rail_endcap();
|
|
}
|
|
}
|
|
|
|
// Construction arrows.
|
|
if(arrows && explode>10) {
|
|
up(rail_height/2+groove_height/2) {
|
|
zrot(90) zring(r=(motor_rail_length+explode)/2) {
|
|
arrow(size=explode/3);
|
|
}
|
|
zrot(90) zring(r=(motor_rail_length+2*rail_length+3*explode)/2) {
|
|
arrow(size=explode/3);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Sled
|
|
up(platform_vert_off) {
|
|
fwd(slidepos) {
|
|
children();
|
|
}
|
|
}
|
|
}
|
|
//!y_axis_slider_assembly(explode=100, arrows=true);
|
|
//!y_axis_slider_assembly(slidepos=90) y_sled_assembly();
|
|
|
|
|
|
module z_tower_assembly(slidepos=0, hide_endcaps=false, explode=0, arrows=false, isback=false)
|
|
{
|
|
left(platform_length)
|
|
zrot(-90) {
|
|
yz_joiner();
|
|
if (!isback && $children > 1) {
|
|
fwd(6+explode) {
|
|
children(1);
|
|
}
|
|
}
|
|
back(platform_length/3) {
|
|
zring(r=rail_width/2+14+explode) {
|
|
zrot(-90) support_leg();
|
|
}
|
|
}
|
|
up(rail_height+groove_height+motor_rail_length/2+explode) {
|
|
zrot(90) z_motor_segment_assembly(slidepos=slidepos);
|
|
|
|
up(motor_rail_length/2+rail_length+explode*1.5) {
|
|
zspread(rail_length+explode) {
|
|
xrot(-90) rail_segment();
|
|
}
|
|
up(slidepos) {
|
|
back(rail_height+groove_height/2) {
|
|
if (!isback && $children > 0) children(0);
|
|
}
|
|
}
|
|
up(rail_length+explode*1.5) {
|
|
if (hide_endcaps == false) {
|
|
if (isback) {
|
|
back(rail_height/2) {
|
|
zrot(90) {
|
|
spool_holder();
|
|
up(spool_holder_length-15/2*cos(30)+0.25+explode) {
|
|
spool_axle();
|
|
down(52.5/2-14) spool();
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
xrot(-90) rail_endcap();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Construction arrows.
|
|
if (arrows && explode>10) {
|
|
back(rail_height/2+groove_height/2) {
|
|
up(rail_height+groove_height+explode/2) {
|
|
yrot(-90) arrow(size=explode/3);
|
|
up(motor_rail_length+explode) {
|
|
yrot(-90) arrow(size=explode/3);
|
|
up(rail_length+explode) {
|
|
yrot(-90) arrow(size=explode/3);
|
|
up(rail_length+explode) {
|
|
yrot(-90) arrow(size=explode/3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
up(rail_height/2+groove_height/2) {
|
|
zring(r=rail_width/2+explode/2) {
|
|
arrow(size=explode/3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//!z_tower_assembly(slidepos=25.4/8/4, explode=0, arrows=true);
|
|
|
|
|
|
module extruder_assembly(explode=0, arrows=false)
|
|
{
|
|
motor_width = nema_motor_width(17);
|
|
|
|
jhead_platform();
|
|
down(explode) jhead_hotend();
|
|
fwd(explode) {
|
|
up(jhead_groove_thick+jhead_shelf_thick+motor_width/2+explode*1.5) {
|
|
right(extruder_drive_diam/2-0.5) {
|
|
fwd(extruder_shaft_len/2-0.05) {
|
|
xrot(-90) {
|
|
nema17_stepper(h=motor_length, shaft_len=motor_shaft_length);
|
|
up(4+explode) extruder_drive_gear();
|
|
fwd(explode) {
|
|
down(motor_length/2) {
|
|
xrot(90) extruder_motor_clip();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
zrot(90) {
|
|
up(explode*3) {
|
|
extruder_idler();
|
|
back(extruder_idler_diam/2) {
|
|
fwd(explode)
|
|
idler_bearing();
|
|
left(extruder_shaft_len/2/2+1+explode)
|
|
yrot(90) extruder_idler_axle();
|
|
right(extruder_shaft_len/2/2+1+explode)
|
|
yrot(-90) extruder_idler_axle_cap();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
back(extruder_length/4+explode) {
|
|
up(jhead_groove_thick+0.05+explode*2) {
|
|
zrot(90) extruder_fan_shroud() {
|
|
cooling_fan_shroud() {
|
|
extruder_fan();
|
|
}
|
|
}
|
|
up(jhead_shelf_thick+explode) {
|
|
extruder_fan();
|
|
up(12-extruder_fan_thick+2+0.05+explode) {
|
|
extruder_fan_clip();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//!extruder_assembly(explode=0);
|
|
|
|
|
|
module extruder_bridge_assembly(slidepos=0, explode=0, arrows=false)
|
|
{
|
|
platform_vert_off = groove_height/2+rail_offset;
|
|
|
|
back(extruder_length/2+rail_length+cantilever_length+2*explode)
|
|
down(platform_length/2-slidepos) {
|
|
extruder_assembly();
|
|
zrot(90) zring(r=(extruder_length+rail_length+2*explode)/2, n=2) {
|
|
zrot(-90) rail_segment();
|
|
}
|
|
zrot(90) zring(r=(extruder_length+2*rail_length+2*cantilever_length+4*explode)/2) {
|
|
zrot(180) z_sled();
|
|
}
|
|
|
|
|
|
// Construction arrows.
|
|
if(arrows && explode>10) {
|
|
up(rail_height/2+groove_height/2) {
|
|
zrot(90) zring(r=(extruder_length+explode)/2) {
|
|
arrow(size=explode/3);
|
|
}
|
|
zrot(90) zring(r=(extruder_length+2*motor_rail_length+3*explode)/2) {
|
|
arrow(size=explode/3);
|
|
}
|
|
}
|
|
right(platform_width/2+explode/2) {
|
|
arrow(size=explode/3);
|
|
}
|
|
}
|
|
|
|
up(platform_thick) children();
|
|
}
|
|
}
|
|
//!extruder_bridge_assembly(explode=100, arrows=true);
|
|
//!extruder_bridge_assembly();
|
|
|
|
|
|
// Borosilicate Glass. Render last to allow transparency to work.
|
|
module build_platform() {
|
|
up(3+glass_thick/2) {
|
|
color([0.75, 1.0, 1.0, 0.5]) {
|
|
cube(size=[glass_length, glass_width, glass_thick], center=true);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
module full_assembly(hide_endcaps=false, explode=0, arrows=false)
|
|
{
|
|
joiner_length=20;
|
|
xpos = 100*cos(360*$t);
|
|
ypos = 100*sin(360*$t);
|
|
zpos = 80*cos(240+360*$t)+10;
|
|
|
|
x_axis_slider_assembly(slidepos=xpos, explode=explode, arrows=arrows) {
|
|
z_tower_assembly(slidepos=zpos, hide_endcaps=hide_endcaps, explode=explode, arrows=arrows) {
|
|
extruder_bridge_assembly(explode=explode, arrows=arrows);
|
|
ramps_mount();
|
|
}
|
|
zrot(180) z_tower_assembly(slidepos=zpos, hide_endcaps=hide_endcaps, explode=explode, arrows=arrows, isback=true);
|
|
x_sled_assembly(explode=explode, arrows=arrows) {
|
|
y_axis_slider_assembly(slidepos=ypos, hide_endcaps=hide_endcaps, explode=explode, arrows=arrows)
|
|
y_sled_assembly(explode=explode, arrows=arrows)
|
|
build_platform();
|
|
}
|
|
}
|
|
|
|
//cable_chain_xy_joiner_mount();
|
|
}
|
|
|
|
|
|
full_assembly(hide_endcaps=false);
|
|
|
|
|
|
|
|
// vim: noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap
|