Genealogy / Archeology of the Prusa i3 X Motor End
In this page I will illustrate (to the best of my knowledge) how the original design for the Prusa i3 X Motor End printed part has been used (and has evolved) through some Prusa i3 variants. I have researched the evolution of this particular printed part - the X-axis motor end for the Prusa i3 - because I wanted the best possible design for my P3Steel.
I was surprised to find that in some cases the GPLV3 license under which the original design by Josef Prusa was released, was not exactly respected. This has the unfortunate effect of halting further development - or at the very least making it much more difficult - of a particular "evolutionary branch" i.e. we reach a development dead-end.
Enough preliminaries and let's see what is going on:
Contents
1st Gen: Josef Prusa's original design
As freely available from his GitHub repository since May 2013, although the design itself probably dates back to December 2012 / January 2013 or earlier:
File header:
- // PRUSA iteration3
- // X end motor
- // GNU GPL v3
- // Josef Průša <[email protected]> and contributors
2nd Gen: Misan's mods
Misan (a well-known and respected Spanish developer) added a few improvements to many of Josef's original printed part designs and made his OpenSCAD sources freely available, mainly on Thingiverse:
The main difference here is that the stepper holes are moved by a (parametric) configurable distance so that there is no interference between the stepper body and other parts of the printer.
File header:
Here is the header file from Misan's source:
- // PRUSA iteration3
- // X end motor
- // GNU GPL v3
- // Josef Průša <[email protected]> and contributors
As we can see, Misan kept the original header intact and quite modestly did not even add his name or a description of his contributions in the source code! This is Thingiverse thing #133922, published in August 2013.
2nd Gen Improved: Misan's mods improved
This is just Misan's source code with a few added cutouts (less than 5 lines of source code) and an added Z endstop adjustment screw (another 6~8 lines or so), by yours truly:
Unreleased design, I just wrote this in less than one hour to show how easy it is to modify the original source code. I have basic knowledge of OpenSCAD so I am pretty sure that somebody more knowledgeable could have done better in less time.
About the integrated Z endstop adjustment screw: after spending some time researching this, I was able to determine that in January 2013, a company called RP_One_Labs published the STL files for a complete set of printed parts for the Prusa i3 Twelvepro, a variant of the Prusa i3 (see Thingiverse thing #40064). The X motor end in this new set of Prusa i3 parts is the earliest occurrence of an integrated Z endstop adjustment screw that I could find. A few months later, Obijuan (see below) published a very similar add-on for the Prusa i3 (together with a matching endstop holder) on Thingiverse in April 2013, see Thingiverse thing #71538.
3rd Gen, J. Rodrigo / Mecan0 branch
Manuel Palacios (Mecan0) is another respected Spanish developer who created his own variant of the Prusa i3, which he called PowerCode. He designed the parts for the PowerCode Prusa i3 in Catia (a proprietary CAD program) and in early January 2014 had the Catia-generated .stl files translated to OpenSCAD by J. Rodrigo (see this thread: [1] ). The OpenSCAD source code by J. Rodrigo for these redesigned parts is freely available in his repository on GitHub since mid-January 2014, as far as I can tell. Here is his version of the X motor end:
Notice that my improved Misan design is not so different from Mecan0's design redrawn by J. Rodrigo (and I don't think it's a coincidence).
File header:
Here is the header file from J. Rodrigo's source:
- // Created from Code_Xend_Motor.stl
- // By J.Rodigo (www.jra.so)
- // Licence Creative commons atribution & share alike.
Ouch! The original license was changed and all mentions of previous authors have been removed. Now, it is true that Mr. Rodrigo practically rewrote from scratch the entire code for this and other Prusa i3 parts (with all comments in Spanish), and that he mentions the names of other developers (but not Josef Prusa) in one of the ReadMe files in his repository, but imho that is not nearly enough to comply with the GPLV3, which is the original license for Josef Prusa's source code.
4th Gen, J. Rodrigo / Mecan0 branch, for bq by Obijuan
The Prusa i3 Hephestos is bq's variant of the Prusa i3 (bq, for those who don't know it, is a very successful Spanish high-tech powerhouse). It seems bq asked Obijuan, yet another respected Spanish developer and my OpenSCAD guru (I learned OpenSCAD watching his excellent tutorial videos on YouTube), to develop the printed parts for the Prusa i3 Hephestos, as evidenced from bq's GitHub repository. Now I must mention that as far as I know bq has a relatively good history of compliance with Open Source licenses in general. That said, let's take a look at the Prusa i3 Hephestos X motor end printed part:
Notice that the bq part is clearly based on Mr. Rodrigo's design, itself in my opinion clearly based on Misan's design, itself decidedly based on Josef Prusa's original design. Actually the bq GitHub repository for the Prusa i3 Hephestos makes it clear that this part and others are based on their corresponding PowerCode versions - and Mr. Rodrigo's name is mentioned in the Attributions section of the README file, as of 16/01/2015.
There is no OpenSCAD source code available for any of the printed parts for the Prusa i3 Hephestos because it appears that Obijuan decided to migrate all the printed part designs to FreeCAD - thus halting all further development of this branch in OpenSCAD (there is no way to automatically translate a FreeCAD design back to OpenSCAD source code i.e. this is essentially a one-way migration).
- Nah, come on, FreeCAD is a fine application and certainly allows to continue development. :-) --Traumflug (talk) 16:01, 17 December 2014 (PST)
- FreeCAD sure is a fine application, no doubt about that. And my exact phrase is that development in OpenSCAD is stopped at this point, for no good reason as far as I can tell: the minor changes made in FreeCAD could as well have easily been done in OpenSCAD. :-( --AndrewBCN (talk) 20:56, 17 December 2014 (PST)
Also notice that the bq part has added a totally useless bridge (under the stepper motor "arm") which results in less than perfect finish when the part is printed:
Finally, I thought there was not enough material around the M3 nut (which has to be fit in its nut trap while being heated with a soldering iron). Apart from these two (small) design issues and the more important issue of non-compliance with the GPL (which has been fixed as of 16/01/2015), the bq X motor end is really nice.
BTW the matching Z endstop holder for Makerbot-style mechanical endstops that can be seen in the photo above (printed in blue PLA) is my own design, Thingiverse thing #597093, licensed under the GPLV3 and obviously with the OpenSCAD source with proper attribution.
5th Gen, reverse engineered from bq's .stl, by AndrewBCN
OpenSCAD has a nifty import function which allows the import of any .stl file. So I went ahead and imported the bq design, fixed the two issues I mention above and am in the process of rewriting / reverse-engineering back to a GPLV3-compliant status.
This is basically the same as the bq part without the useless bridge and with a little bit more material around the M3 nut. Here is my 5th Gen X motor end, printed in blue PLA with 40% infill, 0.2mm layer height, and 0.6mm walls and top/bottom layers, resulting in a relatively strong part.
I'll have the OpenSCAD source and .stl files available on Thingiverse and GitHub as soon as I have had time to properly reverse-engineer the OpenSCAD source and determine all the proper attributions, but in any case, I have temporarily published a Prusa i3 / P3Steel Improved X-axis Printed Parts Collection on Thingiverse as STL-only files, see Thingiverse thing #607891.
My latest (published) version of the Prusa i3 X motor end adds an extra reinforcement along the stepper "arm":