Permalink
Cannot retrieve contributors at this time
// This upper frame works with 2020 extrusions and 9mm wide belts (instead of | |
// the usuall 6mm wide ones). | |
// | |
// This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 | |
// International License. | |
// Visit: http://creativecommons.org/licenses/by-sa/4.0/ | |
// | |
// Haydn Huntley | |
// haydn.huntley@gmail.com | |
// 30% hexagonal infill with a 0.5mm nozzle is plenty strong enough. | |
$fn = 360/24; | |
include <configuration.scad>; | |
include <motor.scad>; | |
include <vertex.scad>; | |
// All measurements in mm. | |
debug = false; | |
height = extrusionWidth; | |
crossPieceOffset = -43; | |
// The standard 6mm belts use a pair of 623ZZ flanged bearings, separated by | |
// a 3mm washer, which has a total width of 8.6mm. | |
// For 9mm wide belts, use a pair of 623ZZ flanged bearings, separated by a | |
// normal (unflanged) 623ZZ bearing, which has a total width of 12.0mm. | |
// The 3.4mm below is the increase from 8.6mm to 12.0mm. | |
extraBeltWidth = 3.4; | |
// Draw the vertical extrusion. | |
if (debug) | |
rotate([0, 0, 45]) | |
translate([-extrusionWidth/2, -extrusionWidth/2, -smidge/2]) | |
%cube([extrusionWidth, extrusionWidth, height+smidge]); | |
// Draw the horizontal extrusions. | |
if (debug) | |
for (a = [1, -1]) | |
translate([a*20, -5, 0]) | |
rotate([0, 0, a*30]) | |
translate([-extrusionWidth/2, -2-4*extrusionWidth, 0]) | |
%cube([extrusionWidth, 4*extrusionWidth, extrusionWidth]); | |
module upperFrame() | |
{ | |
difference() | |
{ | |
union() | |
{ | |
vertex(height); | |
intersection() | |
{ | |
translate([-50, -100, 0]) | |
cube([100, 100, height]); | |
// Use two conic sections to hold the idler bearing. | |
union() | |
{ | |
// The part of the cone which is away from the crosspiece. | |
translate([0, -18.9, height/2]) | |
rotate([90, 0, 0]) | |
cylinder(r1=27.2/2, | |
r2=7/2, | |
h=11.1-extraBeltWidth/2, | |
$fn=90); | |
// The part of the cone which attaches to the crosspiece. | |
translate([0, | |
crossPieceOffset+dampenerOffset-1.6-smidge- | |
extraBeltWidth/2, | |
height/2]) | |
rotate([90, 0, 0]) | |
cylinder(r1=7/2, | |
r2=19.4/2, | |
h=6.2-extraBeltWidth/2, | |
$fn=90); | |
} | |
} | |
} | |
// Remove four M5x10 holes to attach the four horizontal extrusions. | |
for (x = [1, -1]) | |
for (d = [35, 70]) | |
translate([x*fnX(d), -fnY(d), height/2]) | |
rotate([90, 0, x*120]) | |
translate([0, 0, -0.2]) | |
cylinder(r=m5LooseRadius, h=5, $fn=24); | |
// Remove two M5x10 holes to attach the vertical extrusion. | |
for (x = [1, -1]) | |
for (a = [0, 1]) | |
rotate([0, 0, 45+a*90]) | |
translate([extrusionWidth/2, 0, height/2]) | |
rotate([0, 90, 0]) | |
{ | |
cylinder(r=m5LooseRadius, h=5, $fn=24); | |
translate([0, 0, 5-smidge]) | |
cylinder(r1=m5LowProfileHeadRadius, | |
r2=1.5+m5LowProfileHeadRadius, | |
h=9, $fn=24); | |
} | |
// Remove a hole for an M3x25 for the idler shaft. | |
translate([0, crossPieceOffset-7, height/2]) | |
rotate([90, 0, 0]) | |
rotate([180, 0, 0]) | |
cylinder(r1=m3LooseRadius, r2=m3Radius-0.2, h=35+1, $fn=36); | |
} | |
// Add a piece to hold a microswitch. | |
difference() | |
{ | |
intersection() | |
{ | |
translate([0, -10/2-5, 14/2+height]) | |
cube([20, 14, 14], true); | |
translate([0, -23, height]) | |
scale([0.50, 1, 1]) | |
cylinder(r=20, h=14, $fn=72); | |
} | |
// Show where the microswitch will go. | |
translate([0, -6.3/2-17, 10.6/2+height+6]) | |
%cube([20, 6.3, 10.6], true); | |
// Carve out tapered holes for the microswitch's M2.5x12 screws. | |
for (x = [1, -1]) | |
translate([x*9.5/2, -17-6.3, height+6+3]) | |
rotate([-90, 0, 0]) | |
cylinder(r1=(2.5+0.4)/2, r2=2.5/2, h=12+4, $fn=12); | |
// Carve space for the vertical extrusion. | |
translate([0, 0, extrusionWidth]) | |
rotate([0, 0, 45]) | |
cube([extrusionWidth+extraClearance, | |
extrusionWidth+extraClearance, | |
2*extrusionWidth], | |
true); | |
// Remove a vertical groove to make the inside corner sharp. | |
rotate([0, 0, 45+180]) | |
translate([extrusionWidth/2, extrusionWidth/2, -smidge/2]) | |
cylinder(r=grooveRadius, h=2*extrusionWidth, $fn=8); | |
} | |
} | |
difference() | |
{ | |
upperFrame(); | |
// Make wiring tunnels for the microswitch. | |
for (x = [1, -1]) | |
{ | |
rotate([25, 0, 0]) | |
translate([x*8, -7.5, -1]) | |
cylinder(r=4/2, h=height+15, $fn=12); | |
} | |
} | |
// Draw the motor, offset by the dampener. | |
//translate([0, crossPieceOffset-30-dampenerOffset, (height-43)/2+43/2]) | |
//rotate([0, 0, 90]) | |
//%nema17Motor(); | |
// Draw the idler bearing, which is composed of two 623ZZ flanged bearings with | |
// a 623ZZ normal (unflanged) bearing separating them. Together they are | |
// 12.0mm in width. | |
translate([0, crossPieceOffset+13+extraBeltWidth/2, height/2]) | |
%rotate([90, 0, 0]) | |
{ | |
h = 12.0; | |
cylinder(r=12/2, h=1); | |
cylinder(r=10/2, h=h); | |
translate([0, 0, h-1]) | |
cylinder(r=12/2, h=1); | |
} | |
// Show where the carriage will go. | |
if (debug) | |
{ | |
translate([0, -22, 62]) | |
%cube([50, 10, 50], true); | |
} |