X5S Open Hardware Y Gantry plates, STLs finally hosted

After taking part in a discussion about which material would be best for printing the mechanical parts, most participants came to the conclusion, that PET-G was too flexible (in comparison to the other “plain vanilla” plastics). In my case, I could also remember how PET can creep under applied tension. And a look at my “ljbrumfield” gantry plates (“thing:2733592”) confirmed it:

IMAG0834

Not only had those plates deformed a bit, I was never really satisfied with the bolts being fixed on one side only. DKDaigle had already published the second revision of his “X5S MGN-12H Rail Mod”, which would have been the easiest drop-in replacement, but on the other hand I agree with Mark Rehorst, that stacking the idlers you will have less opportunity to get postions wrong. I absolutely trust DKDaigle to calculate the proper belt alignment, but after reading that CoreXY writeup, I wanted my idlers stacked. In the same way I want my car to have rear wheel drive. 😉
Additionally: After some investigation of artifacts on the surface of my parts, I suspected to find at least one bad bearing in one of those idler pulleys.
Time to make an own design and take it all apart once again…

From “free as in beer”…

But wait: Those Y gantry plates were published under a Creative Commons – Attribution – Non-Commercial – No Derivatives license, aka “Don’t remix me!”
Having whitnessed what made the RepRap project so awseome over the last years, I can only see these ungenerous terms as a thorn in our (the community’s) side. Nevertheless I tolerate them. As ljbrumfield made a lot of design consideration the way I would hve done it anyway, I opted to create my own version and go with his dimensioning (where that assertion applies – most coordinates come from the MGN12s and the 2020 profiles) as a starting point.

As already stated I’m not particularly fond of Makerbot, the way they behaved over the years and what Stratasys are doing with the brand now. So obviously I still don’t have a Thingiverse account. 😛

…to “free as in freedom”!

After searching quite some time and looking at different sites hosting STLs, I stumbled upon Libre3D and the fact that Adrian Bowyer himself is involved there.
At first I was shocked to see four years old interactions showing up there as “recently”, but it turned out they were just relocating their hosting. Many other sites out there immedialtely show “monetising” options (criterion for exclusion!), but seeing the work of (and Emailing with Andrew and Jonathan) showed me, that hope is not lost yet. 🙂
Libre3D has some interesting features, like automatically compiling uploaded OpenSCAD code – so you don’t have to upload the STLs seperately. But it also has limitations, like only supporting YouTube videos, not Vimeo (by now).

From now on you can find my stuff here: http://libre3d.com/other/1112/seller.html

To get around some special issues of L3D, I also signed up with YouMagine. Like Thingiverse it’s company owned, but Ultimaker still are some of the good guys (compared to the rest of the market, that is):
https://www.youmagine.com/burning-becks/designs

Designing an already obsolete part

To get startet with the new Y-Gantry I made a part not meant to be printed – except from others who like it better than the reference for some reason.

Originally I wanted to put the resulting code online as “CC0” unlicense, but YM didn’t support it – so I went for “3-Clause BSD” later. (YM-support so far didn’t answer my request to add it, BTW.) On L3D that’s not a problem, as you can enter your own license – e.g. if you want to use the Do What the Fuck You Want To Public License (yes, that exists!)
Anyway: The parts published are now licensed permissively enough for my demand.

Libre

There are some “globals”, but I wouldn’t call the code “parametric”.
As my linear rail on X is a 450mm version (which was somehow cheaper than 400mm) I added a “switch” to change versions. The implemented logos can also be switched – to “off” to speed up the preview window (generating heightmaps from PNGs seems to be burdensome for the CPU). The last switch adds mounting holes at the edges, for what I wanted to add later.

450mm

Using “modules” the code can be written a bit more overseeable. “cube_at_rot” and “cyl_at_rot” condense the regular “translate([1,2,3]) rotate([0,45,90]) cube([4,5,6]);” style commands and their annoying vector brackets.

One of the things I really like about OpenSCAD is that you can share your objects as code on a blog like this:

//	+---------------------------------------------------------------+
//	| TronXY X5S MGN12 linear rail on 2020 profile conversion:      |
//	| Y-gantry mounting plate for MGN12 (49mm carriage length)	|
//	| 								|
//	| UNPRINTED and UNTESTED Work in progress / draft, meant to be  |
//	| compatible with parts assigned to "TronXY X5S New Y Gantry    |
//      | bracket by ljbrumfield",                                      |
//	| https://www.thingiverse.com/thing:2733592                     |
//	|                                                               |
//	| This work is currently licensed under The "3-Clause BSD       |
//      | License" => https://opensource.org/licenses/BSD-3-Clause      |
//	|                                                               |
//	|   December 2nd, 2018                   Burning Becks          |
//	+---------------------------------------------------------------+

// Alpha-Version 0.1 (this means I don't intend to use it that way.)
// OpenSCAD version 2015.03; Manual:
// https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language

// +--------------------+
// |      Globals       |
// +--------------------+

// Global resolution:
resolution=50;
$fn=resolution;

// Version to generate:
Version = "400mm"; // "400mm" or "450mm" => Length of linear rail on X
Logos = 1; // 0 or 1 => Embossed logos (compiling works quicker without PNGs)
Mountingholes = 1; // 0 or 1 => Add 3mm holes at the edges for later additions

// Distance of the "motor side" idler pulley in X-direction, from center of "Y" 2020:
motor_pulley_x_offset = 19;
// Distance of the "corner guide side" pulley in X-direction, from center of "Y" 2020:
corner_pulley_x_offset = 19;
// Distance of the idler pulleys in Y-direction, from the center of "X" 2020:
idler_pulley_to_center = 40/2;

// +--------------------+
// |      Modules       |
// +--------------------+

// Directly set a cube to a certain position and rotation
module cube_at_rot (x,y,z,  t_x,t_y,t_z,    r_x,r_y,r_z)
{
	translate ([t_x,t_y,t_z]){
    rotate      ([r_x, r_y, r_z]){
	cube ([x,y,z],center=true); }}
};

// Directly set a cylinder to a certain position and rotation
module cyl_at_rot (h,r, t_x,t_y,t_z,    r_x,r_y,r_z)
{
    translate   ([t_x, t_y, t_z]){
    rotate      ([r_x, r_y, r_z]){
    cylinder(h,r,r,center=true); }}
};

// +------------------------------+
// | Object genertion starts here |
// +------------------------------+

difference()
{
	// This "union" adds features:
	union()
	{
		// base plate
		cube_at_rot (70,76,6.5,   0,2,-1);
		// external crosspiece (to mount MGN12 carriage)
		cube_at_rot (70,4,36,   0,-25,-15.75);
		// outer braces: four in Z-, one in X-direction
		cube_at_rot (3.25,11,36,    -15.65,-30.5,-15.75);
		cube_at_rot (3.25,11,36,    -24.5,-30.5,-15.75);
		cube_at_rot (3.25,11,36,    15.65,-30.5,-15.75);
		cube_at_rot (3.25,11,36,    24.5,-30.5,-15.75);
        cube_at_rot (52,3,3.6,  0,-26.75,-31.415,   -45,0,0);
		// perimeter for MGN12
		cube_at_rot (10,5,20,   -30,-21,-13.25);
		cube_at_rot (10,5,20,   30,-21,-13.25);
		// internal crosspieces
		cube_at_rot (5,28,26.5, -12.5,26,-11);
		cube_at_rot (5,28,26.5, 12.5,26,-11);
		// 2020 center guide (there is 1 mm Y-play for MGN12 and 2020 in total
        if (Version == "400mm")
        { color ("Magenta") {
		 cube_at_rot (6,28,6,   0,26,-6.5);
        }}
        if (Version == "450mm")
        { color ("Cyan") {
		 cube_at_rot (6,48,6,   0,36,-6.5);
        }}
		// braces at crosspieces
		cube_at_rot (20,4,22,   -21,14,-13.25);
		cube_at_rot (20,4,22,   -21, 38,-13.25);
		cube_at_rot (20,4,22,   21,14,-13.25);
		cube_at_rot (20,4,22,   21, 38,-13.25);
		// reinforcement sistering for idler position with nut recess
		cube_at_rot (18,26,4.5, -22,26,-6);
	} // union()
	// From here on "difference" subtracts features:

	// carve outer braces to slope
	cube_at_rot (80,11,36, -0,-37,-20, 17,0,0);
    // carve out MGN12 carriage
    cube_at_rot (50,10.5,2.1,   0,-17.75,-3.25);
	// carve edges of external crosspiece to slope
    cube_at_rot (70,20,36,  -49.8,-25,-17.4,    0,73,0);
	cube_at_rot (70,20,36,  49.8,-25,-17.4, 0,-73,0);
	// carve perimeter for MGN12 to slope on the inside
	cube_at_rot (80,5,9,    0,-18,-22,  -45,0,0);
	// recess for t-nut in X-axis 2020 profile
    if (Version == "400mm")
    { color ("Magenta") {
        cube_at_rot (8,12,6,    0,26,-7.25);
    }}
    if (Version == "450mm")
    { color ("Cyan") {
        cube_at_rot (8,12,6,    0,18,-7.25);
    }}
    // carve out 450mm linear X rail
    if (Version == "450mm")
    { color ("Cyan") {
        cube_at_rot (13,31,10,  0,45,0.75);
    }}
	// screw holes for t-nuts in X-axis 2020 profile
	cyl_at_rot (32,2,   0,26,-14.4,   0,90,0);
    if (Version == "400mm")
    { color ("Magenta") {
        cyl_at_rot (45,2,   0,26,-1);
        cyl_at_rot (2.55,3.5,   0,26,1); // sink screw head
    }}
    if (Version == "450mm")
    { color ("Cyan") {
        cyl_at_rot (45,2,   0,18,-1);
        cyl_at_rot (2.55,3.5,   0,18,1); // sink screw head
    }}
	// screw holes for Y-MGN12
	cyl_at_rot (5,1.5,  10,-25,-25.75,  90,0,0);
    cyl_at_rot (5,1.5,  -10,-25,-25.75, 90,0,0);
	cyl_at_rot (5,1.5,  10,-25,-5.75,   90,0,0);
	cyl_at_rot (5,1.5,  -10,-25,-5.75,  90,0,0);
	// make room for screw heads
	cyl_at_rot (10,4,   10,-32,-5.75,   90,0,0);
	cyl_at_rot (10,4,   -10,-32,-5.75,  90,0,0);
	// idler axle with nut recess
	cyl_at_rot (12,5/2, -idler_pulley_to_center,motor_pulley_x_offset,-4);
	translate([-idler_pulley_to_center, motor_pulley_x_offset,0]) { cylinder(h=4.6,r=5, $fn=6, center=true); }
	cyl_at_rot (20,5,   -idler_pulley_to_center, motor_pulley_x_offset,-18.25);
	// idler axle without nut recess
	cyl_at_rot (8,5/2,  idler_pulley_to_center,corner_pulley_x_offset,-1);
	cyl_at_rot (20,5,   idler_pulley_to_center,corner_pulley_x_offset,-14.3);
    // carve braces at internal crosspieces to slopes
    cube_at_rot (32,40,22,  -29.5,28,-23.65,    0,51,0);
    cube_at_rot (32,40,22,  29.5,28,-23.65, 0,-51,0);
	// carve 45° chamfers at outer corners
	cube_at_rot (5,5,10,    -35,-36,-1, 0,0,45);
	cube_at_rot (5,5,10,    35,-36,-1,  0,0,45);
	cube_at_rot (5,5,6.6,   -35,40,-1,  0,0,45);
	cube_at_rot (5,5,6.6,   35,40,-1,   0,0,45);
    // screw holes at outer corners and in the middle
    if (Mountingholes) {
    cyl_at_rot (15,1.5, 30.25,-31.25,-1);
    cyl_at_rot (15,1.5, -30.25,-31.25,-1);
    cyl_at_rot (15,1.5, 0,-31.25,-1);
    cyl_at_rot (15,1.5, -30.25,31.25,-1);
    cyl_at_rot (15,4.7, -30.25,31.25,-11.75);
    cyl_at_rot (15,1.5, 30.25,31.25,-1);
    cyl_at_rot (15,4.7, 30.25,31.25,-11.75);
    } // if (Mountingholes)

	// embossed logos
    if (Logos)
    { color("Maroon") {
        // Revised OSHW logo by Mateo Zlatar
        // Source: https://www.oshwa.org/open-source-hardware-logo
        translate([0,-8, 1.7]) {
        scale([0.2, 0.2, 0.02]) {
        surface(file = "OSHW_200px.png", center = true); }}

        // Your Logo goes here...
        translate([0,-28.6, -17]) {
        rotate([90,0,180]) {
        mirror([1,0,0]) {
        scale([0.2, 0.2, 0.02]) {
        surface(file = "BrennendesBier_128px.png", center = true); }}}}
    }}

} // difference()

Install (or unzip) OpenSCAD, save the code above to a .scad (text) file and you can compile it and generate STLs to export. If you want to emboss the logos, just add these pictures to the directory and the code will find them.

And now for the things I really wanted to do

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.