Added extruder platform. Color coded parts for rendering.

This commit is contained in:
Revar Desmera
2014-09-01 10:53:32 -07:00
parent 60fce48dd8
commit c9134c7cf0
23 changed files with 299 additions and 176 deletions

View File

@@ -585,7 +585,42 @@ module thinning_wall(h=50, l=100, thick=5, ang=30, strut=5, wall=3, bracing=true
cube(size=[wall, l-0.1, h-0.1], center=true);
}
}
//!thinning_wall(, bracing=false);
//!thinning_wall(bracing=false);
// Makes a triangular wall which thins to a smaller width in the center,
// with angled supports to prevent critical overhangs.
// Example:
// thinning_triangle(h=50, l=100, thick=4, ang=30, strut=5, wall=2);
module thinning_triangle(h=50, l=100, thick=5, ang=30, strut=5, wall=3)
{
dang = atan((h-strut)/(l-strut));
dlen = (h-strut)/sin(dang);
difference() {
union() {
translate([0, 0, -h/2])
narrowing_strut(w=thick, l=l, wall=strut, ang=ang);
translate([0, -l/2, 0])
xrot(-90) narrowing_strut(w=thick, l=h-0.1, wall=strut, ang=ang);
intersection() {
cube(size=[thick, l, h], center=true);
translate([0, 0, 0]) {
xrot(-dang) yrot(180) {
narrowing_strut(w=thick, l=dlen, wall=strut, ang=ang);
}
}
}
cube(size=[wall, l-0.1, h-0.1], center=true);
}
xrot(-dang) {
translate([0, 0, h/2]) {
cube(size=[thick+0.1, l*2, h], center=true);
}
}
}
}
//!thinning_triangle(bracing=false);

View File

@@ -20,3 +20,9 @@ include $(wildcard *.deps)
clean:
rm -f ${TARGETS} *.deps
rendering:
${OPENSCAD} -o wiki/snappy_full.png --imgsize=3200,3200 --projection=p --csglimit=100000 --camera=0,-225,200,63,0,307,3500 full_assembly.scad
cp wiki/snappy_full.png wiki/snappy_small.png
sips -Z 800 wiki/snappy_full.png
sips -Z 200 wiki/snappy_small.png

View File

@@ -4,7 +4,6 @@ TODO:
* Z-axis cable chain.
* X-axis endstop.
* Z threaded rod shaft coupler.
* Extruder mount.
* Extruder base for J-head.
* Minimalist Mk7-esque Extruder Parts.
* Electronics container.

View File

@@ -5,7 +5,7 @@ use <GDMUtils.scad>
module cap(r=roller_axle/2-3, h=10, wall=3, cap=2, lip=1.5)
{
difference() {
color("Pink") difference() {
union() {
translate([0,0,-cap/2])
cylinder(r=r+lip+wall, h=cap, center=true, $fn=32);

View File

@@ -1,7 +1,7 @@
snappy_version = 0.90;
platform_length = 110; // mm
platform_length = 110; // mm. Must be a multiple of rack_tooth_size.
platform_width = 150; // mm
platform_height = 40; // mm
platform_thick = 7; // mm

View File

@@ -6,7 +6,7 @@ use <publicDomainGearV1.1.scad>
module drive_gear() {
h = 10;
shaft = 5.4;
render(convexity=10) union() {
color("Salmon") render(convexity=10) union() {
difference() {
// Herringbone gear
mirror_copy([0, 0, 1]) {

86
extruder_mount_part.scad Normal file
View File

@@ -0,0 +1,86 @@
include <config.scad>
use <GDMUtils.scad>
use <joiners.scad>
module extruder_mount()
{
color("LightSteelBlue") difference() {
union() {
difference() {
union() {
// Bottom.
translate([0,0,rail_thick/2])
cube(size=[rail_width, rail_length, rail_thick], center=true);
// Walls.
grid_of(
xa=[-(rail_spacing/2+joiner_width/2), (rail_spacing/2+joiner_width/2)],
za=[(rail_height+roller_thick)/2]
) {
thinning_triangle(h=rail_height+roller_thick, l=rail_length-2*12, thick=joiner_width, strut=rail_thick);
}
}
// Blunt off end of platform.
translate([0, rail_length/2+rail_thick*2, 0])
cube(size=[rail_width+1, rail_length/2, rail_height*3], center=true);
// Clear space out near clips.
grid_of(
xa=[-(rail_spacing+joiner_width)/2, (rail_spacing+joiner_width)/2],
ya=[-rail_length/2],
za=[(rail_height)/4, (rail_height)*3/4]
) {
scale([1, tan(joiner_angle), 1]) xrot(45)
cube(size=rail_height/2/sqrt(2), center=true);
}
// Extruder mount holes.
circle_of(r=25, n=4) {
cylinder(r=4.5/2, h=20, center=true);
}
// Extruder hole.
cylinder(r=16, h=20, center=true);
// Wiring Access hole.
grid_of(xa=[-30, 30], ya=[-40])
cylinder(r=10, h=20, center=true);
}
// Rail backing.
grid_of([-(rail_spacing+joiner_width)/2, (rail_spacing+joiner_width)/2])
translate([0,-(rail_length-12)/2,rail_height+roller_thick/2])
cube(size=[joiner_width, 12, roller_thick], center=true);
// Joiner clips.
translate([0,0,rail_height/2]) {
zrot_copies([180]) {
yrot_copies([0,180]) {
translate([rail_spacing/2+joiner_width/2, rail_length/2, 0]) {
joiner(h=rail_height, w=joiner_width, l=12, a=joiner_angle);
}
}
}
}
}
}
}
//!rail_structure();
module extruder_mount_part() { // make me
extruder_mount();
}
extruder_mount_part();
// vim: noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap

View File

@@ -16,6 +16,7 @@ use <xy_joiner_parts.scad>
use <xy_sled_part.scad>
use <z_platform_joint_part.scad>
use <z_sled_part.scad>
use <extruder_mount_part.scad>
@@ -30,16 +31,8 @@ module full_assembly()
joiner_length=15;
platform_vert_off = rail_height+roller_base+roller_thick/2+5;
x_rail_color = [1.0, 0.6, 0.6];
x_sled_color = [1.0, 0.4, 0.4];
y_rail_color = [0.6, 1.0, 0.6];
y_sled_color = [0.4, 0.8, 0.4];
z_rail_color = [0.6, 0.6, 1.0];
z_sled_color = [0.4, 0.4, 1.0];
e_color = [0.8, 0.6, 0.9];
// Y-axis to Z-axis corner joiner.
color((y_rail_color+z_rail_color)/2) rails_90deg_joint();
rails_90deg_joint();
// Z-Axis Stepper Motor
translate([0, rail_height+roller_thick/2-1, 0]) {
@@ -47,9 +40,10 @@ module full_assembly()
zrot(90) motor_mount_plate();
translate([0, 0, 5.9+rail_thick]) {
nema17_stepper(h=34, shaft_len=20.05);
translate([0, 0, lifter_rod_length/2+40])
translate([0, 0, lifter_rod_length/2+40]) {
color("silver")
cylinder(h=lifter_rod_length, r=lifter_rod_diam/2, center=true);
}
}
}
}
@@ -66,15 +60,13 @@ module full_assembly()
translate([0, platform_length, 0]) {
// Y-axis rails.
translate([0, rail_length/2, 0]) {
color(y_rail_color) rail_structure();
rail_structure();
translate([0, rail_length/2+motor_rail_length/2, 0]) {
color(y_rail_color) {
rail_with_motor_mount();
translate([0, motor_rail_length/2+rail_length/2, 0]) {
rail_structure();
translate([0, rail_length/2, 0]) {
zrot(180) rails_end();
}
rail_with_motor_mount();
translate([0, motor_rail_length/2+rail_length/2, 0]) {
rail_structure();
translate([0, rail_length/2, 0]) {
zrot(180) rails_end();
}
}
@@ -93,9 +85,12 @@ module full_assembly()
translate([0, rail_length+motor_rail_length/2, 0]) {
// Y-axis slider platform.
color(y_sled_color) translate([0, 0, platform_vert_off]) {
translate([0, 0, platform_vert_off]) {
grid_of(ya=[-platform_length/2, platform_length/2]) {
yrot(180) xy_sled(show_rollers=true);
yrot(180) {
xy_sled();
xy_sled_rollers();
}
}
}
@@ -109,16 +104,14 @@ module full_assembly()
}
zrot(90) translate([0, 0, platform_vert_off]) {
color(x_rail_color) {
// Horizontal X-axis rails.
grid_of(ya=[-(rail_length+motor_rail_length)/2, (rail_length+motor_rail_length)/2]) {
rail_structure();
}
rail_with_motor_mount();
zrot_copies([0, 180]) {
translate([0, rail_length+motor_rail_length/2, 0]) {
zrot(180) rails_end();
}
// Horizontal X-axis rails.
grid_of(ya=[-(rail_length+motor_rail_length)/2, (rail_length+motor_rail_length)/2]) {
rail_structure();
}
rail_with_motor_mount();
zrot_copies([0, 180]) {
translate([0, rail_length+motor_rail_length/2, 0]) {
zrot(180) rails_end();
}
}
@@ -133,9 +126,12 @@ module full_assembly()
}
// X-axis slider platform.
color(x_sled_color) translate([0, 0, platform_vert_off]) {
translate([0, 0, platform_vert_off]) {
grid_of(ya=[-platform_length/2, platform_length/2]) {
yrot(180) xy_sled(show_rollers=true);
yrot(180) {
xy_sled();
xy_sled_rollers();
}
}
zrot_copies([0, 180]) {
translate([0, -platform_length, 0]) {
@@ -148,21 +144,20 @@ module full_assembly()
}
translate([0, 0, platform_length]) {
color(z_rail_color) {
// Vertical Z-axis slider rails.
for(i = [0:1]) {
translate([0, 0, (i+0.5)*rail_length])
xrot(-90) rail_structure();
}
translate([0, 0, 2*rail_length]) {
xrot(-90) rails_end();
}
// Vertical Z-axis slider rails.
for(i = [0:1]) {
translate([0, 0, (i+0.5)*rail_length])
xrot(-90) rail_structure();
}
translate([0, 0, 2*rail_length]) {
xrot(-90) rails_end();
}
translate([0, platform_vert_off, rail_length]) {
color(z_sled_color) {
// Vertical Z-axis platform.
xrot(-90) yrot(180) z_sled(show_rollers=true);
// Vertical Z-axis platform.
xrot(-90) yrot(180) {
z_sled();
z_sled_rollers();
}
translate([0, 0, platform_length/2]) {
@@ -172,10 +167,10 @@ module full_assembly()
// Extruder cantilever.
translate([0, joiner_length, -rail_height]) {
translate([0, 0.5*rail_length, 0]) {
color(e_color) rail_structure();
rail_structure();
}
translate([0, 1.5*rail_length, 0]) {
color(e_color) rail_structure();
extruder_mount();
}
}
}

View File

@@ -6,7 +6,7 @@ use <joiners.scad>
module motor_mount_plate(thick=4, l=15)
{
union() {
color("Teal") union() {
translate([0, 0, l-thick/2]) {
difference() {
cube(size=[43+joiner_width+10, rail_height, 4], center=true);

View File

@@ -8,7 +8,7 @@ module rail_with_motor_mount()
{
joiner_length = 10;
difference() {
color("SpringGreen") difference() {
union() {
difference() {
union() {

View File

@@ -10,7 +10,7 @@ module rails_90deg_joint()
base_height = rail_height+roller_thick;
endstop_delta = platform_length - base_height;
difference() {
color("Turquoise") difference() {
union() {
difference() {
union() {

View File

@@ -7,7 +7,7 @@ module rails_end()
{
joiner_length=15;
base_height = rail_height+roller_thick;
difference() {
color("YellowGreen") difference() {
union() {
difference() {
union() {

View File

@@ -5,7 +5,7 @@ use <joiners.scad>
module rail_structure()
{
difference() {
color("Lavender") difference() {
union() {
difference() {
union() {

View File

@@ -5,7 +5,7 @@ use <joiners.scad>
module roller()
{
render(convexity=2) difference() {
color("Tan") render(convexity=2) difference() {
union() {
translate([0,0,-roller_thick/4])
cylinder(h=roller_thick/2, r1=roller_diam/2, r2=roller_diam/2+(roller_thick/2)*tan(roller_angle), center=true, $fn=32);

View File

@@ -6,7 +6,7 @@ use <joiners.scad>
module sled_end()
{
snap_width = 15;
union() {
color("DodgerBlue") union() {
difference() {
union() {
// Base.

View File

@@ -1,41 +1,13 @@
include <config.scad>
use <GDMUtils.scad>
use <publicDomainGearV1.1.scad>
use <joiners.scad>
use <roller_parts.scad>
use <cap_parts.scad>
module herringbone_rack(l=100, h=10, w=10, tooth_size=5, CA=30)
module slider_sled(show_rollers=false)
{
render(convexity=10) translate([-(rack_tooth_size/2), 0, 0]) {
mirror_copy([0,0,1]) {
skew_along_z(xang=CA) {
intersection() {
translate([-(l/2-rack_tooth_size/2), 0, h/4]) {
rack(
mm_per_tooth=rack_tooth_size,
number_of_teeth=floor(l/rack_tooth_size),
thickness=h/2,
height=w,
pressure_angle=20,
backlash=0
);
}
cube(size=[l, h*3, h*3], center=true);
}
}
}
}
}
//!herringbone_rack(l=100, h=10, tooth_size=5, CA=30);
module slider_sled(show_rollers=false, with_rack=false, nut_size=undef, nut_thick=undef)
{
platform_length=with_rack? ceil(platform_length/rack_tooth_size)*rack_tooth_size : platform_length; // quantize to rack tooth size, if needed.
axle_rad = (roller_axle/2) - 0.5;
axle_len = roller_thick;
@@ -83,54 +55,6 @@ module slider_sled(show_rollers=false, with_rack=false, nut_size=undef, nut_thic
// Roller axles
translate([0,0,axle_len/2+roller_base]) {
tube(h=axle_len+0.05, r=axle_rad, wall=2.5, center=true, $fn=32);
if (show_rollers) {
roller();
translate([0,0,axle_len/2]) xrot(180)
cap(r=roller_axle/2-3, h=10, lip=2, wall=3);
}
}
}
}
translate([0,0,platform_thick/2]) {
// Length-wise bracing.
if (with_rack == true) {
translate([-10, 0, 1])
cube(size=[14,platform_length,platform_thick+2], center=true);
} else {
cube(size=[14,platform_length,platform_thick], center=true);
}
}
// Drive rack
if (with_rack == true) {
translate([-8, 0, platform_thick+2+5]) {
zrot(-90) herringbone_rack(l=platform_length, h=10, tooth_size=rack_tooth_size, CA=30);
}
}
// Drive nut.
if (nut_size != undef) {
grid_of(ya=[-roller_spacing/2, roller_spacing/2]) {
difference() {
translate([0, 0, (nut_size+roller_base)/2])
cube(size=[nut_size+10, nut_thick+10, nut_size+roller_base], center=true);
translate([0, 0, roller_base+roller_thick/2]) {
hull() {
grid_of(za=[0, 20]) {
scale([1.05, 1.05, 1.00]) zrot(90) yrot(90)
cylinder(h=nut_thick, r=(nut_size/2)/cos(30), center=true, $fn=6);
}
}
}
translate([0, 0, roller_base+roller_thick/2]) {
hull() {
grid_of(za=[0, 20]) {
scale([0.65, 3, 0.65]) zrot(90) yrot(90)
cylinder(h=nut_thick, r=nut_size/2, center=true, $fn=24);
}
}
}
}
}
}
@@ -138,8 +62,28 @@ module slider_sled(show_rollers=false, with_rack=false, nut_size=undef, nut_thic
}
module slider_rollers()
{
axle_len = roller_thick;
slider_sled(show_rollers=true, nut_size=17.5, nut_thick=9.2);
grid_of(xa=[-roller_spacing/2,roller_spacing/2]) {
grid_of(ya=[-(platform_length/2)/2, (platform_length/2)/2]) {
translate([0,0,axle_len/2+roller_base]) {
// Rollers
roller();
// Caps
translate([0,0,axle_len/2]) xrot(180)
cap(r=roller_axle/2-3, h=10, lip=2, wall=3);
}
}
}
}
slider_sled(show_rollers=true);

View File

@@ -6,7 +6,7 @@ use <tslot.scad>
module support_leg(h=30, l=100, wall=3)
{
ang = atan((h-10)/l);
union() {
color("SandyBrown") union() {
translate([0, 5/2, h/2])
cube(size=[platform_length/2+6*wall, 5, h], center=true);
grid_of(xa=[-platform_length/4, platform_length/4]) {

View File

@@ -1,32 +0,0 @@
include <config.scad>
use <GDMUtils.scad>
use <tslot.scad>
module testslot(h=30, l=100, wall=3)
{
ang = atan((h-10)/l);
union() {
translate([0, -1, h/2])
cube(size=[platform_length/2+6*wall, 5, h], center=true);
grid_of(xa=[-platform_length/4, platform_length/4]) {
lock_slot(h=h, wall=wall);
}
}
}
//!testslot();
module testslot_part() { // make me
testslot();
}
testslot_part();
// vim: noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap

2
wiki

Submodule wiki updated: f37f67622d...df3d15f966

View File

@@ -8,7 +8,7 @@ module xy_joiner()
{
joiner_length=10;
hoff = (platform_length*2-rail_width)/2-3*3+1;
union() {
color("Sienna") union() {
// Joiners
translate([0, 0, -platform_height/2]) {
yrot_copies([0, 180]) {

View File

@@ -1,11 +1,59 @@
include <config.scad>
use <GDMUtils.scad>
use <publicDomainGearV1.1.scad>
use <slider_sled.scad>
module xy_sled(show_rollers=false)
module herringbone_rack(l=100, h=10, w=10, tooth_size=5, CA=30)
{
slider_sled(show_rollers=show_rollers, with_rack=true);
render(convexity=10) translate([-(rack_tooth_size/2), 0, 0]) {
mirror_copy([0,0,1]) {
skew_along_z(xang=CA) {
intersection() {
translate([-(l/2-rack_tooth_size/2), 0, h/4]) {
rack(
mm_per_tooth=rack_tooth_size,
number_of_teeth=floor(l/rack_tooth_size),
thickness=h/2,
height=w,
pressure_angle=20,
backlash=0
);
}
cube(size=[l, h*3, h*3], center=true);
}
}
}
}
}
//!herringbone_rack(l=100, h=10, tooth_size=5, CA=30);
module xy_sled()
{
color("MediumSlateBlue") union() {
// Base slider sled.
slider_sled();
// Length-wise bracing.
translate([0,0,platform_thick/2]) {
translate([-10, 0, 1])
cube(size=[14,platform_length,platform_thick+2], center=true);
}
// Drive rack
translate([-8, 0, platform_thick+2+5]) {
zrot(-90) herringbone_rack(l=platform_length, h=10, tooth_size=rack_tooth_size, CA=30);
}
}
}
module xy_sled_rollers()
{
slider_rollers();
}

View File

@@ -6,7 +6,7 @@ use <joiners.scad>
module z_platform_joint()
{
joiner_length=15;
xrot(-90) union() {
color("Chocolate") xrot(-90) union() {
translate([0, 0, platform_height/2]) {
yrot_copies([0, 180]) {
translate([-(platform_width-joiner_width)/2, 0, 0]) {

View File

@@ -4,9 +4,51 @@ use <slider_sled.scad>
module z_sled(show_rollers=false)
module z_sled()
{
slider_sled(show_rollers=show_rollers, with_rack=false, nut_size=lifter_nut_size, nut_thick=lifter_nut_thick);
nut_size=lifter_nut_size;
nut_thick=lifter_nut_thick;
color("DeepSkyBlue") union() {
// Base slider sled.
slider_sled(with_rack=false);
// Length-wise bracing.
translate([0,0,platform_thick/2]) {
cube(size=[14,platform_length,platform_thick], center=true);
}
// Drive nut capture.
grid_of(ya=[-roller_spacing/2, roller_spacing/2]) {
difference() {
translate([0, 0, (nut_size+roller_base)/2])
cube(size=[nut_size+10, nut_thick+10, nut_size+roller_base], center=true);
translate([0, 0, roller_base+roller_thick/2]) {
hull() {
grid_of(za=[0, 20]) {
scale([1.05, 1.05, 1.00]) zrot(90) yrot(90)
cylinder(h=nut_thick, r=(nut_size/2)/cos(30), center=true, $fn=6);
}
}
}
translate([0, 0, roller_base+roller_thick/2]) {
hull() {
grid_of(za=[0, 20]) {
scale([0.65, 3, 0.65]) zrot(90) yrot(90)
cylinder(h=nut_thick, r=nut_size/2, center=true, $fn=24);
}
}
}
}
}
}
}
module z_sled_rollers()
{
slider_rollers();
}