Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
190 lines (161 sloc) 4.7 KB
// 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);
}