Close

Parametric 40mm gas mask threads in OpenSCAD

A project log for 6800 Gas Mask Accessories

3D-printable parts and accessories for a 6800 series respirator (gas mask)

nsfwmakernsfw_maker 10/08/2023 at 08:060 Comments

The 40mm thread used by common filters is defined in NATO standardisation agreement (STANAG) 4155. Its thread profile is essentially a series of semi-circles. There are a lot of OpenSCAD thread libraries, but as far as I'm aware, none of them can do a thread like this. There are also a few STL models of the thread available, but I wanted a parametric model. Why? First so that I can adjust the tolerances to get something that can be 3D printed, but second so I can also create parts for the 40mm GOST thread profile.

What's the difference between 40mm NATO and 40mm GOST. Obviously the former is used by most NATO equipment, but the latter is used on most soviet and Russian equipment, including a lot of hoses available on Aliexpress. The physical difference between them the thread pitch: the thread pitch of STANAG 4155 is 3.629mm, aka 7 threads per inch (btw mixing metric and imperial in one part like this drives me up the wall), while the 40mm GOST thread pitch is 4mm. The larger pitch means either the radius of the semi-circles needs to be larger, or the thread angle (where the semi-circles go from concave to convex) needs to be lower. I've never found a handy chart like the one above for 40mm GOST, so I don't know which is correct, so I just chose to keep the thread angle the same and calculate the new radius.

But, how to implement this in OpenSCAD? It turns out this is pretty simple, we can use a series of linear extrusions to build up the thread. This is a bit similar to using a file to cut a thread into metal rod - a whole series of linear cuts. First, we need the profile of the thread:

Then we extrude this and place it a the right major diameter, and give it the right angle:

Then just repeat until we have a fully formed thread:

For the internal thread we don't even need to use any boolean operations, so this seems like a completely hack-y solution, but it actually renders quite quickly. The only other thing necessary is to intersect it with a cylinder to cleanly cut off the end of the threads.

There is one small mistake - when tiling the threads I haven't accounted for cosine error. But, as printed these seem to work just fine.

I need to clean up the code and add comments, but hopefully I'll upload the scad file for this thread soon

Discussions