[OpenSCAD] Engineering Fits and Tolerance

Hugo Jackson hugo at apres.net
Thu Oct 31 14:41:23 EDT 2019


> On Oct 31, 2019, at 11:19 AM, nop head <nop.head at gmail.com> wrote:
> 
> I think you completely misunderstand what g6 tolerance means. It is isn't a clearance that you add to the nominal size and it certainly isn't 0.5mm.
> 
> A g6 5mm shaft has to be between 4.9960 and 4.9880mm. Good luck with that on a 3D printer with 0.2mm accuracy.
> 

I beg to differ. :)

As I apologized in an earlier post, g6 was a poor choice to provide as an example for the 3D printing environment, and then I provided a more practical choice of g12 which for a 5mm shaft has a 4.876mm min and 4.996mm max providing a .12mm spread… which is a tolerance range I can achieve with most of my 3d printers.

And of course, g6, g12… they’re not the only fits available… ISO standards cover the precision of a wide range of manufacturing environments.

No engineer specifies greater precision than is required for the application at hand, simply for the reason that the rule of thumb is that the more precise a part needs to be, the more expensive it’s going to be, but by the same token, you can’t reasonably expect interlocking pieces to fit properly if no attention is paid to what the actual printed dimension of a part is going to be. I’m not saying it has to be accurate, I’m just suggesting that the precision should be predictable.

I’m not saying that specifying tolerances a 3D printer is totally incapable of producing is going to somehow make a 3D printer a more precise machine, what I am saying is that by adopting a system of standardized tolerances would be a positive and useful endeavour. So okay, a printer owner can’t hold a g6 or a g12 tolerance… but the question is, what kind of tolerance CAN they achieve and as a consequence, what classification of fits are appropriate for 3D modellers who are designing parts for production on an FDM machine.


> On Thu, 31 Oct 2019 at 18:05, Hugo Jackson <hugo at apres.net <mailto:hugo at apres.net>> wrote:
> 
> > On Oct 31, 2019, at 4:28 AM, Alex Gibson <alex at alexgibson.net <mailto:alex at alexgibson.net>> wrote:
> > 
> > Going back to your original question Hugh, and your example:
> >       cylinder(d = 5, h = 2, $fit = “g6”);
> > 
> > The way I've seen a lot of machine parts (usually 3D printer) programmed in OpenSCAD is this:
> > 
> >       cylinder(d = g6, h = 2);
> > 
> > ...and above this at the top of the file...
> >       fit_tolerance = 0.5;
> >       machine_tolerance = 0.2;
> >       g6 = 5+fit_tolerance+machine_tolerance;
> > 
> > Rather than being 'piecemeal' I think building up layers of tolerance like this can be very helpful and reduce confusion and repetitive typing within the body of your design code.  Every time you want that size hole in your project, you just use d= g6 by name.  You can tune the tolerances after the initial design without re-coding.
> > 
> > The idea of a global $fit variable seems nice, but you would have to have it associated with a big table which defines what g6 and many other tolerances are, which you'd need to remember as you are designing the part.  Also it could not take into account multiple fudge factors, and to me that's the real beauty of OpenSCAD for this sort of thing.  
> 
> A very big table is exactly what I have,,, and it’s the table lookup and syntax parsing that would be nice to have handled faster and more efficiently by the core.
> 
> I guess it just comes down to personal style and one’s personal understanding of the OpenSCAD zeit. I think much is made of OpenSCAD’s parametric ability for resizing and substitution of dimensions and as different printing methodologies start being added, I think that the OpenSCAD core would benefit with a nod to ‘parametric’ tolerance.
> 
> In the example you sight, you identify g6 as a calculation involving the nominal dimensions, the fit tolerance and the machine tolerance… and to my way of thinking what’s going on would be clearer and more easily amended with the scheme I use… rather than:
> 
> >>      fit_tolerance = 0.5;
> >>      machine_tolerance = 0.2;
> >>      g6 = 5+fit_tolerance+machine_tolerance;
> 
> >       cylinder(d = g6, h = 2);
> 
> I think:
> 
>         cylinder(d = 5, h = 2, $fit = “g6”);
> 
> Is more straightforward, particularly if one declares the fit itself as a value, such as:
> 
>         runFit = “g6”;
> 
> And so:
> 
>         cylinder(d = 5, h = 2, $fit = runFit);
> 
> Provides the same opportunity to quickly amend all geometric constructions that use the runFit tolerance. This is particularly relevant to resizing as the ISO and ANSI standards reflect the reality that a 5mm hole requires a different tolerance than a 10mm hole to effect the same fit.
> 
> 
> 
> 
> > 
> > Have you tried a similar method, defining named dimensions?
> > 
> > One think I've started to do in my recent bigger projects is to break out dimensions and specific geometry modules into their own separate files:
> > 
> > 0_dimensions.scad             <named dimensions - for example m3_bolt_hole = 3.2;                     < this is where I do all tolerances etc.
> > 1_geometry.scad               <for example Nema 17 mount pattern holes, as a 2D pattern
> > 2_component                   <say a 3D printed mount for the motor
> > 3_subassembly                 <say the mount with motor, screws, pulley etc
> > 4_majorassembly               <say the whole axis
> > 5_render                      <the whole project for rendering.
> 
> Yes, good idea. I think as our projects get more complex we all start creating a fistful of files… and I’m also hoping some day that OpenSCAD will allow for use, include and import to use non literal string values… but that’s another topic. :)
> 
> > 
> > 
> > This has really helped me to improve version control and ease of navigation around complex projects - and made it easier to recycle code and incorporate scanned or downloaded parts.
> > 
> > Cheers
> > 
> > Alex Gibson
> > 
> > admg consulting
> > 
> > edumaker limited
> > 
> > • Project management
> > • Operations & Process improvement 
> > • 3D Printing
> > 
> > -----Original Message-----
> > From: Discuss [mailto:discuss-bounces at lists.openscad.org <mailto:discuss-bounces at lists.openscad.org>] On Behalf Of Hugo Jackson
> > Sent: 29 October 2019 22:00
> > To: OpenSCAD general discussion
> > Subject: [OpenSCAD] Engineering Fits and Tolerance
> > 
> > Has any thought been given to incorporating engineering fits and tolerances into OpenSCAD? As I understand it, OpenSCAD was originally conceived for the creation of STL files for a 3D printer and I’ve been thinking that the base functionality might be improved by a little more CAM in the CAD.
> > 
> > For some time I’ve been using wrappers around most of the OpenSCAD modules in order to introduce engineering fits into the parts I create as 3d printers on the whole offer increasing precision and repeatability.
> > 
> > Using a special variable $fit I can arbitrarily call up a module and it will adjust the the final size of the geometry according to the engineering fit I specify. e.g.
> > 
> >       cylinder(d = 5, h = 2, $fit = “g6”);
> > 
> > I think anyone who has created interconnecting parts is familiar with the requirement to adjust for tolerance, but the core language as it stands requires this to be accomplished on a piecemeal basis, but to my way of thinking fit and tolerance are integral to the original purpose of OpenSCAD.
> > 
> > I think this is particularly relevant as more and more users are acquiring machines that use different processes and that I might well wish to print a part on an FDM printer one day and a DLP the next, which I think would naturally call for a different fit specification.
> > 
> > I also created some constants: kLeft, kRight, kFront, kBack, kTop & kBottom and use 6 element arrays to selectively apply tolerance, and use a special variable $faces to pass on that information as required:
> > 
> >       cube([7,3,8], $fit = “H11”, $faces = kLeft + kRight);
> > 
> > And of course if I’m creating a project with lots of references to fit then I simply create an identifier for the fit, e.g.
> > 
> > shaftFit = “h7”;
> > 
> > So that if I move to a different type of machine where more or less tolerance is indicated, I only need to change the definition of shaftFit.
> > 
> > I did some poking around in the mailing list archives and couldn’t see any reference to a discussion on this, but I’m sure it’s occurred to others before me, I just thought I’d ask where the community stands on incorporating this kind of functionality into the core language.
> > 
> > 
> > _______________________________________________
> > OpenSCAD mailing list
> > Discuss at lists.openscad.org <mailto:Discuss at lists.openscad.org>
> > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org <http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org>
> > 
> > 
> > _______________________________________________
> > OpenSCAD mailing list
> > Discuss at lists.openscad.org <mailto:Discuss at lists.openscad.org>
> > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org <http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org>
> 
> 
> _______________________________________________
> OpenSCAD mailing list
> Discuss at lists.openscad.org <mailto:Discuss at lists.openscad.org>
> http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org <http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org>
> _______________________________________________
> OpenSCAD mailing list
> Discuss at lists.openscad.org
> http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscad.org/pipermail/discuss_lists.openscad.org/attachments/20191031/9b52cb1b/attachment.html>


More information about the Discuss mailing list