// Number of fragments (polygon sides) used to render a full circle. $fn = 180; // Default = 180 Typical range = 6 - 360 // 6 will render a circular hole as a hexagon, 8 will render a circular hole as an octagon. // Lower the number for faster rendering, raise the number for smoother rendering.

LowerLargeArccosine = LowerRoundSphere * 1.0823922002923939687994464107328; // Calculates distance from point of lower octagon to center of lower large sphere [radius*acos(22.5)]

LowerLargeSphereCenter = LowerBodyDiameter/2 - SideRoundSphere + LowerSmallArccosine - LowerLargeArccosine; // Rounded octagon point - side (small) sphere radius + distance from center of small sphere to point of octagon - distance from point of octagon to center of large sphere

// Top octagon UpperSmallArccosine = SideRoundSphere * 1.0823922002923939687994464107328; // Calculates distance from center of upper small sphere to point of upper octagon [radius*acos(22.5)]

UpperLargeArccosine = UpperRoundSphere * 1.0823922002923939687994464107328; // Calculates distance from point of upper octagon to center of upper large sphere [radius*acos(22.5)]

UpperLargeSphereCenter = UpperBodyDiameter/2 - SideRoundSphere + UpperSmallArccosine - UpperLargeArccosine; // Rounded octagon point - side (small) sphere radius + distance from center of small sphere to point of octagon - distance from point of octagon to center of large sphere

/////////////////////////////// Make the part/////////////////////////////

Items remaining:- Print a handle and two pins to confirm two tiny changes.

- Get a 6mm locknut and star washer to confirm, but it looks like there is enough clearance even on a 1.6mm metal panel + 5mm spacers. (panel + spacers = 6.6mm total thickness)

- Review documentation for errors and typos.

I'd greatly appreciate if someone (Deven? ) with a 3d printer and the Ultimarc Upgrade Kit or other Ultimarc 9mm shaft stick can do a test print to check if ShaftDiameter = 9.35 is good default value for a 9mm shaft stick.-- ShaftDiameter is set on line 21 of LS30_Test_Print_Ultimarc.scad and line 45 of LS30_Handle_Ultimarc.scad.-- ShaftDiameter = 10.35 works for the 10mm shaft on a Zippyy.

ShaftDiameter = 9.35; // Default = 9.35 for a 9mm shaft // Diameter of the joystick unthreaded shaft cavity. This value needs to be *very slightly* larger than the actual joystick shaft diameter to allow for the 180-sided polygon used to render circles -- see "undersized holes" at [url]https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Primitive_Solids#cylinder[/url]

// Number of fragments (polygon sides) used to render a full circle. $fn = 180; // Default = 180 Typical range = 6 - 360 // 6 will render a circular hole as a hexagon, 8 will render a circular hole as an octagon. // Lower the number for faster rendering, raise the number for smoother rendering.

LowerLargeArccosine = LowerRoundSphere * 1.0823922002923939687994464107328; // Calculates distance from point of lower octagon to center of lower large sphere [radius*acos(22.5)]

LowerLargeSphereCenter = LowerBodyDiameter/2 - SideRoundSphere + LowerSmallArccosine - LowerLargeArccosine; // Rounded octagon point - side (small) sphere radius + distance from center of small sphere to point of octagon - distance from point of octagon to center of large sphere

// Top octagon UpperSmallArccosine = SideRoundSphere * 1.0823922002923939687994464107328; // Calculates distance from center of upper small sphere to point of upper octagon [radius*acos(22.5)]

UpperLargeArccosine = UpperRoundSphere * 1.0823922002923939687994464107328; // Calculates distance from point of upper octagon to center of upper large sphere [radius*acos(22.5)]

UpperLargeSphereCenter = UpperBodyDiameter/2 - SideRoundSphere + UpperSmallArccosine - UpperLargeArccosine; // Rounded octagon point - side (small) sphere radius + distance from center of small sphere to point of octagon - distance from point of octagon to center of large sphere

TopWiggleRoom = 0.65; // Default = 0.65 // Amount to decrease the body diameter for easier insertion/removal of top. It also allows for the 180-sided polygon used to render circles -- see "undersized holes" at [url]https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Primitive_Solids#cylinder[/url]

// Number of fragments (polygon sides) used to render a full circle. $fn = 180; // Default = 180 Typical range = 6 - 360 // 6 will render a circular hole as a hexagon, 8 will render a circular hole as an octagon. // Lower the number for faster rendering, raise the number for smoother rendering.

/////////////////////////////// Make the part/////////////////////////////

// Make the SNK Logo (Optional)// Comment out the next three lines to skip the logotranslate([-6, -3, 0])linear_extrude(height = LogoDepth, convexity = 10)import(file = "SNK_Logo.dxf", layer="Logo");// The "SNK_Logo.dxf" file needs to be in the same directory as this SCAD file.//

PinWiggleRoom = 0.5; // Default = 0.5// Amount to decrease pin diameter and tips for easier insertion/removal. It also allows for the 180-sided polygon used to render circles -- see "undersized holes" at [url]https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Primitive_Solids#cylinder[/url]

Did a super rough print. The inner diameter has enough play that you can wiggle it back and forth. Im thinking bringing it down to maybe 9.15-9.20 would be enough so it doesn't have much play but still slides on and off.

****JUST NOTICED THE TEST IS DIFFERENT FROM THE ACTUAL ONE****

I printed it at .2 mm layer height, the top part gets a little rough. Im not sure if adding the cap would help smooth it out. Might try doing .1mm layer height to smooth it out but adds another hour to the print.Also the bottom curve had to much overhang, printing at .1mm might fix that.

I need to get some hardware from the store, printing another one out with other settings. Need more top layers, 2 was not enough.

Did a super rough print. The inner diameter has enough play that you can wiggle it back and forth. Im thinking bringing it down to maybe 9.15-9.20 would be enough so it doesn't have much play but still slides on and off.

Yeah, there are lots of little tweaks to the variables that will dial-in these prints for your slicer/firmware-settings/printer.

A firmware setting that I changed on my printer possibly causes it to over-extrude by about 4-6%.

Once you get a good clean print for the handle, it's easy to adjust variables and reprint the smaller pin and handle top prints to fit the handle.

You can probably reduce the "WiggleRoom" variables in the eject pin and handle top OpenSCAD files.

I printed it at .2 mm layer height, the top part gets a little rough. Im not sure if adding the cap would help smooth it out. Might try doing .1mm layer height to smooth it out but adds another hour to the print.Also the bottom curve had to much overhang, printing at .1mm might fix that.

The overhang on the bottom prints OK here.

The cap should help to smooth the top, but you might also want to slightly reduce TopDiameter so you get a circle connecting the inside of the top layer's 8 triangles. (red circle)

If you do that, you might also need to reduce PinDistance. (handle file, line 57)

I've been working on the design and here's a change that will keep the handle from turning separately from the shaft when the friction between the shaft, handle, and nut isn't high enough.

Instead of using a cylindrical cavity for a socket or nut-driver, use a hexagonal cavity so the handle is the nut-driver for tightening the locknut.- Use cardboard padded vise-grips to keep the shaft from turning while installing the handle and locknut

A locknut won't easily spin off the threads and with this design change the handle can't turn without also turning the locknut and shaft.

Here's a test print to verify that the hexagonal cavity is a snug fit for the locknut . . .

ShaftDiameter = 9.35; // Default = 9.35 for a 9mm shaft // Diameter of the joystick unthreaded shaft cavity. This value needs to be *very slightly* larger than the actual joystick shaft diameter to allow for the 180-sided polygon used to render circles -- see "undersized holes" at [url]https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Primitive_Solids#cylinder[/url]

// Number of fragments (polygon sides) used to render a full circle. $fn = 180; // Default = 180 Typical range = 6 - 360 // 6 will render a circular hole as a hexagon, 8 will render a circular hole as an octagon. // Lower the number for faster rendering, raise the number for smoother rendering.

LowerLargeArccosine = LowerRoundSphere * 1.0823922002923939687994464107328; // Calculates distance from point of lower octagon to center of lower large sphere [radius*acos(22.5)]

LowerLargeSphereCenter = LowerBodyDiameter/2 - SideRoundSphere + LowerSmallArccosine - LowerLargeArccosine; // Rounded octagon point - side (small) sphere radius + distance from center of small sphere to point of octagon - distance from point of octagon to center of large sphere

// Top octagon UpperSmallArccosine = SideRoundSphere * 1.0823922002923939687994464107328; // Calculates distance from center of upper small sphere to point of upper octagon [radius*acos(22.5)]

UpperLargeArccosine = UpperRoundSphere * 1.0823922002923939687994464107328; // Calculates distance from point of upper octagon to center of upper large sphere [radius*acos(22.5)]

UpperLargeSphereCenter = UpperBodyDiameter/2 - SideRoundSphere + UpperSmallArccosine - UpperLargeArccosine; // Rounded octagon point - side (small) sphere radius + distance from center of small sphere to point of octagon - distance from point of octagon to center of large sphere

// Spaces to remove from body ShaftHeight = 21.8; // Default = 30.4mm - panel thickness. (This formula positions the bottom of the handle 15.6mm above the top of the panel, same as Ikari Warriors.) // 11.35 for a 3/4" wood panel (19.05mm) // 21.8 for a 1.6mm metal panel with 7mm spacers (8.6mm) // CRITICAL MEASUREMENT: ShaftHeight + ThreadedHeight must be <= 27.8 to allow enough room for the locknut under the top // Height of the unthreaded shaft cavity

ShaftDiameter = 9.35; // Default = 9.35 for a 9mm shaft // Diameter of the joystick unthreaded shaft cavity. This value needs to be *very slightly* larger than the actual joystick shaft diameter to allow for the 180-sided polygon used to render circles -- see "undersized holes" at [url]https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Primitive_Solids#cylinder[/url]

ThreadedHeight = 6; // Default = 6 // CRITICAL MEASUREMENT: ShaftHeight + ThreadedHeight must be <= 27.8 to allow enough room for the locknut under the top // Height of the thread hole

// Number of fragments (polygon sides) used to render a full circle. $fn = 180; // Default = 180 Typical range = 6 - 360 // 6 will render a circular hole as a hexagon, 8 will render a circular hole as an octagon. // Lower the number for faster rendering, raise the number for smoother rendering.

LowerLargeArccosine = LowerRoundSphere * 1.0823922002923939687994464107328; // Calculates distance from point of lower octagon to center of lower large sphere [radius*acos(22.5)]

LowerLargeSphereCenter = LowerBodyDiameter/2 - SideRoundSphere + LowerSmallArccosine - LowerLargeArccosine; // Rounded octagon point - side (small) sphere radius + distance from center of small sphere to point of octagon - distance from point of octagon to center of large sphere

// Top octagon UpperSmallArccosine = SideRoundSphere * 1.0823922002923939687994464107328; // Calculates distance from center of upper small sphere to point of upper octagon [radius*acos(22.5)]

UpperLargeArccosine = UpperRoundSphere * 1.0823922002923939687994464107328; // Calculates distance from point of upper octagon to center of upper large sphere [radius*acos(22.5)]

UpperLargeSphereCenter = UpperBodyDiameter/2 - SideRoundSphere + UpperSmallArccosine - UpperLargeArccosine; // Rounded octagon point - side (small) sphere radius + distance from center of small sphere to point of octagon - distance from point of octagon to center of large sphere

Things left to do:- Reposition the eject pins Done- Re-size the removable top diameter so the handle's top layer doesn't have those 8 points- Review/clarify the code documentation- Write a step-by-step tutorial- Compile handle .STLs for common panel thicknesses (3/4", 5/8", 1/2", 18mm, 15mm, and 12mm)-- Are these the most commonly available metric lumber sizes? Any other sizes?- Post everything on Thingiverse (the handle .STLs are too large to upload here )

I'm about to place an Ultimarc order for a pair of J-Stiks and the 12-way Rotary kits for J-Stik, so I am also very interested in either purchasing a set of finished handles from a 3rd party, or providing specs to a company that can print the parts out.

I've been lurking back and forth in this thread for a little while, and am looking forward to the finished product. Is there an update to this project?

I'm about to place an Ultimarc order for a pair of J-Stiks and the 12-way Rotary kits for J-Stik, so I am also very interested in either purchasing a set of finished handles from a 3rd party, or providing specs to a company that can print the parts out.

I've been lurking back and forth in this thread for a little while, and am looking forward to the finished product. Is there an update to this project?

Thanks for your interest and encouragement.

There isn't much left to do, but I've been a bit sidetracked between projects around the house, helping Saint with the new server to-do list and dealing with a relatively high-volume three-week-long spam-account-creation attack.

I hope to find better default values for the TopDiameter, TopWiggleRoom, and TopTaper variables in the next week or two.

Once those are dialed-in, the rest should fall into place pretty quickly.