From 01e6a65b52fecc8aa3d269ece2a77539a818a538 Mon Sep 17 00:00:00 2001 From: Drew Rogge Date: Sun, 24 Mar 2013 16:01:59 -0700 Subject: [PATCH 1/2] Integrated versions of frame_motor/corner piece and frame_cheek, frame_endstop and frame_top from original kossel. Frame_integrated_45 is a copy of Johann's frame_integrated with two changes; vertical openbeam piece is rotate 45 degrees as with original kossel plus ends of horizontal openbeam pieces align with the center of the vertical. This cause the dimensions of the updated kossel to be the same as the original when used with existing 300 or 360 horizontal pieces The top_integrated_45 is based on frame_integrated_45 but with a single horizontal, endstop mount, arc cutout as with original frame_cheek/endstop and clearance for the tensioner_608 piece. --- frame_integrated_45.scad | 130 +++++++++++++++++++++++++++++++ top_integrated_45.scad | 163 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 293 insertions(+) create mode 100644 frame_integrated_45.scad create mode 100644 top_integrated_45.scad diff --git a/frame_integrated_45.scad b/frame_integrated_45.scad new file mode 100644 index 0000000..ee1740d --- /dev/null +++ b/frame_integrated_45.scad @@ -0,0 +1,130 @@ +// 2013-02-22 This file is still somewhat experimental +// and may go through more changes in the near future. + +include ; + +$fn=24; +extrusion = 15; +height = 43; +roundness=6; + +corner_rad = 43.5; +corner_off = 22; + +wedge_rad = 64; + motor_offset = 40; +motor_length = 56; + +module extrusion_cutout(h, extra) { + difference() { + cube([extrusion+extra, extrusion+extra, h], center=true); + for (a = [0:90:359]) rotate([0, 0, a]) { + translate([extrusion/2, 0, 0]) + cube([6, 2.5, h+1], center=true); + } + } +} + +module screw_socket() { + cylinder(r=1.65, h=20, center=true); + translate([0, 0, 3.6]) cylinder(r=3.5, h=20); + scale([1, 1, -1]) cylinder(r1=4, r2=8, h=4); + // translate([0, 10, 3.6]) cube([3.3, 20, 20], center=true); + // translate([0, 10, 13.6]) cube([8, 20, 20], center=true); +} + +module frame_integrated() { +union() { + translate([-45, 55, -height/2]) cylinder(r=8, h=0.5); + translate([45, 55, -height/2]) cylinder(r=8, h=0.5); + translate([-22, -17, -height/2]) cylinder(r=8, h=0.5); + translate([22, -17, -height/2]) cylinder(r=8, h=0.5); +difference() { + union() { + intersection() { + translate([0, corner_off, 0]) + cylinder(r=corner_rad, h=height, center=true, $fn=60); + translate([0, -50, 0]) rotate([0, 0, 30]) + cylinder(r=50, h=height+1, center=true, $fn=6); + } + translate([0, 38, 0]) intersection() { + rotate([0, 0, -90]) + cylinder(r=wedge_rad, h=height, center=true, $fn=3); + translate([0, 0, 0]) + cube([150, 100, 2*height], center=true); + translate([0, -10, 0]) rotate([0, 0, 30]) + cylinder(r=55, h=height+1, center=true, $fn=6); + } + } + translate([0, 58, 0]) minkowski() { + intersection() { + rotate([0, 0, -90]) + cylinder(r=wedge_rad, h=height, center=true, $fn=3); + translate([0, -32, 0]) + cube([100, 16, 2*height], center=true); + } + cylinder(r=roundness, h=1, center=true); + } + translate([0, 58, 0]) minkowski() { + intersection() { + rotate([0, 0, -90]) + cylinder(r=wedge_rad, h=height, center=true, $fn=3); + translate([0, 7, 0]) + cube([100, 30, 2*height], center=true); + } + cylinder(r=roundness, h=1, center=true); + } + rotate([0, 0, 45]) { + for (z = [-1, 1]) scale([1, 1, z]) { + translate([0, -7.5-extra_radius, 15]) rotate([90, 0, 0]) + screw_socket(); + } + extrusion_cutout(height+10, 2*extra_radius); + } + translate([0, motor_offset, 0]) { + rotate([90, 0, 0]) + # cylinder(r=12, h=20, center=true, $fn=60); + for (a = [0:90:359]) rotate([0, a, 0]) { + translate([15.5, 0, 15.5]) rotate([90, 0, 0]) + # cylinder(r=1.65, h=20, center=true); + } + } + for (a = [-1, 1]) rotate([0, 0, 30*a]) { + for (z = [-15, 15]) translate([0, 0, z]) { + %rotate([90, 0, 0]) + translate([a*-20.5, 0, -.50]) + extrusion_cutout(1, 0); + // Nut tunnels. + for (y = [0:3]) { + rotate([0, 0, a*-60]) + translate([a*20.5, -y, -4*z/15]) + scale([1, 1, -z/15]) + rotate([0, 0, a*30]) + cylinder(r=4, h=16, $fn=6); + rotate([0, 0, a*-60]) + scale([1, 1, z/15]) + translate([a*20.5, -y, 4]) + rotate([0, 0, a*30]) + #cylinder(r=4, h=8, $fn=6); + } + // Screw sockets. + for (y = [23, 67]) { + translate([a*-13, y, 0]) + rotate([0, a*90, 0]) + #screw_socket(); + } + } + } +} +} +*% translate([0, motor_offset + motor_length/2, 0]) intersection() { + cube([42.2, motor_length, 42.2], center=true); + rotate([0, 45, 0]) cube([52, motor_length, 52], center=true); +} +} + +translate([0, 0, height/2]) frame_integrated(); +///use ; +//use ; +//%frame_motor(); +//%corner(15); diff --git a/top_integrated_45.scad b/top_integrated_45.scad new file mode 100644 index 0000000..1e49f68 --- /dev/null +++ b/top_integrated_45.scad @@ -0,0 +1,163 @@ +// 2013-02-22 This file is still somewhat experimental +// and may go through more changes in the near future. + +include ; + +$fn=24; +extrusion = 15; +height = 43; +roundness=6; +corner_rad = 43.5; +corner_off = 22; + +wedge_rad = 64; + +motor_offset = 40; +motor_length = 56; + +module extrusion_cutout(h, extra) { + difference() { + cube([extrusion+extra, extrusion+extra, h], center=true); + for (a = [0:90:359]) rotate([0, 0, a]) { + translate([extrusion/2, 0, 0]) + cube([6, 2.5, h+1], center=true); + } + } +} + +module screw_socket() { + cylinder(r=1.65, h=20, center=true); + translate([0, 0, 3.6]) cylinder(r=3.5, h=20); + scale([1, 1, -1]) cylinder(r1=4, r2=8, h=4); + // translate([0, 10, 3.6]) cube([3.3, 20, 20], center=true); + // translate([0, 10, 13.6]) cube([8, 20, 20], center=true); +} + + +module top_integrated() { + union() { + translate([-45, 55, -height/2]) cylinder(r=8, h=0.5); + translate([44, 55, -height/2]) cylinder(r=8, h=0.5); + translate([-22, -17, -height/2]) cylinder(r=8, h=0.5); + translate([22, -17, -height/2]) cylinder(r=8, h=0.5); difference() { + union() { + intersection() { + translate([0, corner_off, 0]) + cylinder(r=corner_rad, h=height, center=true, $fn=60); + translate([0, -50, 0]) rotate([0, 0, 30]) + cylinder(r=50, h=height+1, center=true, $fn=6); + } + translate([0, 38, 0]) intersection() { + rotate([0, 0, -90]) + cylinder(r=wedge_rad, h=height, center=true, $fn=3); + translate([0, 0, 0]) + cube([150, 100, 2*height], center=true); + translate([0, -10, 0]) rotate([0, 0, 30]) + cylinder(r=55, h=height+1, center=true, $fn=6); + } + } + + translate([0, 58, 0]) minkowski() { + intersection() { + rotate([0, 0, -90]) + cylinder(r=wedge_rad, h=height, center=true, $fn=3); + translate([0, -36, 0]) + cube([100, 25, 2*height], center=true); + } + cylinder(r=roundness, h=1, center=true); + } + translate([0, 58, 0]) minkowski() { + intersection() { + rotate([0, 0, -90]) + cylinder(r=wedge_rad, h=height, center=true, $fn=3); + translate([0, 7, 0]) + cube([100, 30, 2*height], center=true); + } + cylinder(r=roundness, h=1, center=true); + } + + // Just a bit of clearance for 608 tensioner. + translate([0, 5, 0]) cube([12, 10, height*2], center=true); + + rotate([0, 0, -45]) { + for (z = [-1, 1]) scale([1, 1, z]) { + translate([0, -7.5-extra_radius, 15]) rotate([90, 0, 0]) + screw_socket(); + } + extrusion_cutout(height+10, 2*extra_radius); + } + + translate([-50, 60, 52]) + rotate([90, 0, 90]) + cylinder(r=60, h=100, $fn=60); + + for (a = [-1, 1]) rotate([0, 0, 30*a]) { + translate([a*-20.5, 0, -15]) { + %rotate([90, 0, 0]) + translate([0, 0, -.50]) + extrusion_cutout(1, 0); + // Nut tunnels. + for (y = [0:3]) { + translate([0, -y, 4]) + rotate([0, 0, -a*30]) + #cylinder(r=4, h=16, $fn=6); + translate([0, -y, -20]) + rotate([0, 0, -a*30]) + #cylinder(r=4, h=16, $fn=6); + + } + } + // Screw sockets. + for (y = [23, 67]) { + translate([a*-13, y, -15]) + rotate([0, a*90, 0]) + screw_socket(); + } } + // Clearance for HoneyWell ZM micro switch. + rotate([0, 0, -30]) translate([16, 2.5, height/2-5]) { + translate([(17-6.)/2, 0, 2-5]) + cube([17, 22, 20.6], center=true); + translate([0, 9.5/2, 0]) rotate([0, 90, 0]) + cylinder(r=1.25, h=30, center=true, $fn=12); + translate([0, -9.5/2, 0]) rotate([0, 90, 0]) + cylinder(r=1.25, h=30, center=true, $fn=12); + } + } + + } + + // Plate for tensioning screw of 608 tensioner. + translate([0, 0, -height/2+1.5]) { + difference() { + translate([0, 38, 0]) + rotate([0, 0, 30]) + cylinder(r=wedge_rad, h=3, center=true, $fn=3); + translate([0, 67, 0]) + cube([150, 100, 4], center=true); + translate([-5, 12.7, 0]) + cylinder(r=1.6, h=4, center=true, $fn=12); + translate([0, corner_off, 0]) { + difference() { + cylinder(r=corner_rad+10, h=height, center=true, $fn=60); + cylinder(r=corner_rad, h=height, center=true, $fn=60); + } + } + rotate([0, 0, 45]) extrusion_cutout(100, 2*extra_radius); + } + } +} + +translate([0, 0, height/2]) +top_integrated(); +%rotate([0, 0, 45]) + translate([0, 0, 30]) + extrusion_cutout(100, 2*extra_radius); + +//use ; %frame_integrated(); + +use ; +*%translate([0, 24.8, 10]) rotate([180, 0, 22.5]) tensioner_608(); +//use ; +//use ; +//%frame_motor(); +//%corner(15); From e816f81baae379e683a36648b246ed98c0b95e4e Mon Sep 17 00:00:00 2001 From: Drew Rogge Date: Wed, 10 Apr 2013 07:33:27 -0700 Subject: [PATCH 2/2] Socket for ball and socket diagonal rod connection --- socket.scad | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 socket.scad diff --git a/socket.scad b/socket.scad new file mode 100644 index 0000000..f30daca --- /dev/null +++ b/socket.scad @@ -0,0 +1,92 @@ + +socket_extra=2; + +module socket(ball_dia, screw_dia, adisp) { + +assign(ball_rad=ball_dia/2){ +assign(screw_rad=screw_dia/2){ +assign(body_height = ball_dia+socket_extra){ +assign(cone_min=screw_rad/cos(adisp)){ +assign(cone_max=body_height*tan(adisp)+cone_min){ + + %if (1) { + // Show ball and attachment screw + sphere(r=ball_rad, center=true, $fn=30); + for (a = [adisp, 0, -adisp]) { + rotate([0, a, 0]) + cylinder(r=screw_rad, h=ball_dia, $fn=30); + } + } + difference() { + union() { + translate([0, -body_height*.5, 0]) + cube([body_height, body_height, body_height], true); + rotate([0, 90, 0]) + cylinder(r=body_height/2, h=body_height, center=true, $fn=30); + } + + cube([screw_dia, 1000, 1000], true); + sphere(r=ball_rad, center=true, $fn=30); + + // relieve center of socketball_dia*tan(adisp)+ + rotate([0, 90, 0]) { + cylinder(r=ball_dia*.25, h=body_height+2, + center=true, $fn=30); + cylinder(r=ball_rad, h=ball_rad*cos(adisp)+screw_dia-2, + center=true, $fn=30); + } + + // create clearance for screw attaching ball to rod + intersection() { + rotate([0, 90, 0]) rotate_extrude($fn=30) + polygon(points=[[0, -cone_min], + [0, cone_min], + [body_height, cone_max], + [body_height, -cone_max]], + paths=[[0, 1, 2, 3]]); + translate([0, 50, 50]) cube(100, center=true); + } + + for (r = [0,-90]) { + rotate([r, 0, 0]) + cylinder(r1=cone_min, r2=cone_max, h=body_height, $fn=30); + } + translate([0, -(ball_rad+1.5+1), 0]) + rotate([0, 90, 0]) + cylinder(r=1.5, h=body_height+1, center=true, $fn=30); + + } +}}}}}} + + +ball_dia = .5*25.4; +screw_dia = .112*25.4; +adisp = 30; // Max angular displacement of rod to socket + +union() { + cube([ball_dia+socket_extra, + ball_dia+socket_extra, + ball_dia+socket_extra], center=true); + translate([0, (ball_dia+socket_extra)*1.5, 0]) + socket(ball_dia, screw_dia, adisp); +} + + + + + + + + + + + + + + + + + + + +