Main Restorations Software Audio/Jukebox/MP3 Everything Else Buy/Sell/Trade
Project Announcements Monitor/Video GroovyMAME Merit/JVL Touchscreen Meet Up Retail Vendors
Driving & Racing Woodworking Software Support Forums Consoles Project Arcade Reviews
Automated Projects Artwork Frontend Support Forums Pinball Forum Discussion Old Boards
Raspberry Pi & Dev Board controls.dat Linux Miscellaneous Arcade Wiki Discussion Old Archives
Lightguns Arcade1Up Try the site in https mode Site News

Unread posts | New Replies | Recent posts | Rules | Chatroom | Wiki | File Repository | RSS | Submit news

  

Author Topic: Online electronics parts store?  (Read 13445 times)

0 Members and 1 Guest are viewing this topic.

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9397
  • Last login:Yesterday at 07:37:46 pm
  • Designated spam hunter
Re: Online electronics parts store?
« Reply #40 on: July 10, 2019, 12:20:16 am »
We can get a decent guestimate from that one pic.  I can check the relative dimensions between the two and give you a percentage difference...it's not going to be super accurate but it'll be in the ballpark.   I know that the height is the same as the ikari sticks at least.
Don't bother with this part, I'm already on it.   ;D

Between the extremely accurate measurements in the LS-30 model, these two pics above, and the left stick in this pic, I can get really close.

They have a different mounting style... I don't think the tops even come off, but I think I prefer the ikari top's method better anyway. 
True.  Looking for more/better pictures this evening, I noticed that both the Data East (cylinder) and Wico (balltop) rotary sticks used a split-pin to secure the handle to the shaft.

 


Scott

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9397
  • Last login:Yesterday at 07:37:46 pm
  • Designated spam hunter
Re: Online electronics parts store?
« Reply #41 on: July 10, 2019, 09:12:28 am »
Found another useful photo here, calculated the variables, and plugged them into the model.   ;D
- The measurements look accurate so far, but it would be good to confirm them.

Noticed several things while taking measurements from the photos:
- Upper and lower roundover diameters are very different.
- The upper roundover Z-axis is compressed.  The roundover cross-section is wider than it is tall.

The handle file is usable as-is, but should be updated to incorporate these observations.

That just leaves the logo.
- I can haz an exported png, plz?  :laugh:


Scott

Howard_Casto

  • Idiot Police
  • Trade Count: (+1)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 19400
  • Last login:Yesterday at 10:59:21 pm
  • Your Post's Soul is MINE!!! .......Again??
    • The Dragon King
Re: Online electronics parts store?
« Reply #42 on: July 10, 2019, 01:10:25 pm »
Sure....

I'm not sure about those arrows.... I can smooth them out a little more if need be. 

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9397
  • Last login:Yesterday at 07:37:46 pm
  • Designated spam hunter
Re: Online electronics parts store?
« Reply #43 on: July 10, 2019, 09:44:26 pm »
Thanks.   :cheers:


Scott

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9397
  • Last login:Yesterday at 07:37:46 pm
  • Designated spam hunter
Re: Online electronics parts store?
« Reply #44 on: July 11, 2019, 03:53:31 am »
The logo processing turned out great.   :woot

As hoped, starting from a new Inkscape file and following the step-by-step procedures worked perfectly.

The only minor setback was that vectorizing the original image resulted in a vector group that didn't reach the top/bottom/left/right sides of the Inkscape page.
- Not reaching the sides appears to cause the previously-mentioned X/Y-axis offset problem when importing the dxf to OpenSCAD.   :banghead:
- Added a dot in each corner of the png and now it works perfectly.   ;D
- For future reference, it probably would have worked with dots in two diagonal corners.
- The dots don't show up in the model because the logo is being subtracted from the round top.

Resizing works great.
- Blew it up to about 9x the default size.
- No problems with logo centering or jaggies.

Seems like the only things on this part that we might want to change are:
- Using a version of the logo with the circle since the seam between the handle body and removable top is smaller than the circle on the original handle.
- I'll edit the current logo to make the arrow-only version shown earlier in the thread.
- The logo might be a bit deep.

Current handle-top source files, code, and STL are in the attached zip file.   :cheers:


Scott
« Last Edit: July 11, 2019, 04:07:50 am by PL1 »

Howard_Casto

  • Idiot Police
  • Trade Count: (+1)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 19400
  • Last login:Yesterday at 10:59:21 pm
  • Your Post's Soul is MINE!!! .......Again??
    • The Dragon King
Re: Online electronics parts store?
« Reply #45 on: July 11, 2019, 03:38:08 pm »
Cool beans man.  It turned out pretty good.  I guess I'm up.  Gonna try and have something releasable this weekend in terms of software. 

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9397
  • Last login:Yesterday at 07:37:46 pm
  • Designated spam hunter
Re: Online electronics parts store?
« Reply #46 on: July 11, 2019, 08:13:15 pm »
Thanks.   :cheers:

Handle code is almost done.  Still working on documentation.

Code: [Select]
// Data East rotary joystick handle (balltop replacement) V0.02
// -- Handle

// Other prints needed:
// -- Test print
// -- Test print 2
// -- Handle top
// -- Eject pin (2 pins per handle)

// Required hardware:
// - M6 locknut (M6-1.0mm thread)

// Variable values are estimates.  Awaiting accurate measurements.

/////////////////////////////
//  Adjustable variables
/////////////////////////////

// Body
    BodyHeight = 39.89; // Default = 39.89
    // Height of the body

    BodyDiameter = 33.22; // Default = 33.22
    // Diameter of the body

    UpperRoundover = 1.2; // Default = 1.2
    // Radius of the cylinder upper edge roundover

    UpperRoundoverScale = 1.5; // Default = 1.5
    // Amount of horizontal stretch applied to the upper roundover radius of the handle

    LowerRoundover = 0.5; // Default = 0.5
    // Radius of the cylinder lower edge roundover

// Spaces to remove from body
    ShaftHeight = 21.8; // Default = ???mm - panel thickness. (This formula positions the bottom of the handle ???mm above the top of the panel, same as Heavy Barrel.)
    // ??? for a 3/4" wood panel (19.05mm)
    // ??? for a 1.6mm metal panel with 7mm spacers (8.6mm)
    // CRITICAL MEASUREMENT: ShaftHeight + ThreadedHeight must be <= ??? 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 https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Primitive_Solids#cylinder

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

    ThreadedDiameter = 6.2; // Default = 6.2
    // Outer diameter of the thread hole

    LocknutDiameter = 11.65;  // Default = 11.55 + wiggle room
    // 10mm flat-to-flat = 11.55mm point-to-point
    // (Height is automatically calculated below.)

    PinDistance = 11; // Default =
    // Horizontal distance from handle center to eject pin center
   
    PinDiameter = 4; // Default = 4
    // Diameter of the eject pin body

    TopDiameter = 29.2; // Default = 29.2
    // Hole for removable top.
   
    TopHeight = 2; // Default = 2
    // Hole for removable top.
   
// 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.


/////////////////////////////
//  Non-adjustable variables
/////////////////////////////

// Locknut cavity
    LocknutHeight = (BodyHeight - ShaftHeight - ThreadedHeight);
    // Height of the locknut cavity

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

// Make the main body
difference(){ // Body minus holes
// Body
    union ()
    {
        // Upper roundover
        scale([UpperRoundoverScale,UpperRoundoverScale,1])
        minkowski()
        {
        cylinder(d=(BodyDiameter/UpperRoundoverScale)-(UpperRoundover*2),h=0.01);
        translate ([0, 0, BodyHeight-(UpperRoundover)-0.02])
    sphere(r=UpperRoundover);
        }
        // Center cylinder
        translate ([0, 0, LowerRoundover])
        cylinder (BodyHeight-UpperRoundover-LowerRoundover,d=BodyDiameter);

        // Lower roundover
        minkowski()
        {
        cylinder(d=BodyDiameter-(LowerRoundover*2),h=0.01);
        translate ([0, 0, LowerRoundover])
    sphere(r=LowerRoundover);
        }
    } // End body
//
// Holes
    color("limegreen") translate ([0, 0, ShaftHeight/2]) cylinder (ShaftHeight+.001, d = ShaftDiameter, center=true); // Hole for Shaft

    color("blue") translate ([0, 0, ShaftHeight+ThreadedHeight/2]) cylinder (ThreadedHeight + .001, d = ThreadedDiameter, center=true); // Hole for threaded

    color("white") hull() {  // Locknut hexagon hull
    translate ([0, 0, ShaftHeight + ThreadedHeight + LocknutHeight/2])
    rotate ([0, 0, 0]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);

    translate ([0, 0, ShaftHeight + ThreadedHeight + LocknutHeight/2])
    rotate ([0, 0, 60]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);

    translate ([0, 0, ShaftHeight + ThreadedHeight + LocknutHeight/2])
    rotate ([0, 0, 120]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);

    translate ([0, 0, ShaftHeight + ThreadedHeight + LocknutHeight/2])
    rotate ([0, 0, 180]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);

    translate ([0, 0, ShaftHeight + ThreadedHeight + LocknutHeight/2])
    rotate ([0, 0, 240]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);

    translate ([0, 0, ShaftHeight + ThreadedHeight + LocknutHeight/2])
    rotate ([0, 0, 300]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);
    }
    // Hole for locknut

    color("red") translate ([0, 0, BodyHeight - TopHeight/2]) cylinder (TopHeight, d = TopDiameter, center=true);
    // Hole for removable top

    color("aqua") translate ([0, -PinDistance, 1]) cylinder (2.01, d1 = 3.5, d2 = 2, center=true);
    // Eject pin access hole 1

    color("aqua") translate ([0, PinDistance, 1]) cylinder (2.01, d1 = 3.5, d2 = 2, center=true);
    // Eject pin access hole 2

    color("purple") translate ([0, -PinDistance, BodyHeight/2 + 2]) cylinder (BodyHeight, d = PinDiameter, center=true);
    // Eject pin hole 1

    color("purple") translate ([0, PinDistance, BodyHeight/2 + 2]) cylinder (BodyHeight, d = PinDiameter, center=true);
    // Eject pin hole 2
} // End body minus holes
//

Two questions:
1. Is the shaft diameter 9mm or 10mm on the joystick you're modding?

2. How far from the top of the mounting plate to the top of the unthreaded part of the shaft on that stick? (46mm in this diagram)




Scott

Howard_Casto

  • Idiot Police
  • Trade Count: (+1)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 19400
  • Last login:Yesterday at 10:59:21 pm
  • Your Post's Soul is MINE!!! .......Again??
    • The Dragon King
Re: Online electronics parts store?
« Reply #47 on: July 12, 2019, 12:02:22 am »
Sorry had to find my calipers. 

The shaft is 9mm wide.  From the mounting plate to the start of the threads is 32mm.  Just for reference it's a Sanwa JLF, or at least that's what's on the box (long story). 

I really need to learn open scad btw.  It's been amazing what you've been able to pull off in terms of having a user-defined top.

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9397
  • Last login:Yesterday at 07:37:46 pm
  • Designated spam hunter
Re: Online electronics parts store?
« Reply #48 on: July 12, 2019, 02:12:11 am »
The shaft is 9mm wide.
That variable is already set to the correct value.   ;D
- Same shaft diameter as the Ultimarc mechanical rotary upgrade.

From the mounting plate to the start of the threads is 32mm.
ShaftHeight + panel thickness + 15.6mm (clearance) = 32mm

ShaftHeight + panel thickness = 16.4mm

For anyone else following along, here are a few good ways to mount that stick and still have enough support (ShaftHeight) for handle strength.

  1. A metal or acrylic panel.

  2.  "Under mount (support blocks)" as described here in the FAQ.

  3. A layered panel like Slagcoin shows here.

  4. Top-mount in a wood panel.

If you go the top-mount approach, you may want something like this fully-parametric mounting plate cover with a Japanese (40x84mm) mount pattern.

Code: [Select]
// Triggerstick mounting plate cover for top-mounted short shaft triggerstick

// Cut a square in the control panel for the body of the stick.

// Countersink the mount plate into the control panel so the cover sits flush.

// To NOT create a screw hole, comment out both the "translate" and "cylinder" code lines for that hole -- located on lines 71 - 84 below

/////////////////////////////
// Define variables
/////////////////////////////
cornerdiameter = 2.5; // Corner diameter and plate thickness
stickdiameter = 30;   // Stick hole diameter
Xplate = 75;          // Plate width (metal is 65)
Yplate = 107;         // Plate length (metal is 97)
Xscrew = 40;          // X-axis distance between screws
Yscrew = 84;          // Y-axis distance between screws
screwbody = 4;        // Screw body diameter
screwhead = 4;        // Screw head diameter -- same as screwbody for non-countersunk screws

// 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
/////////////////////////////

difference(){ // Plate minus stick and screw holes
    hull() {
    translate([Xplate/2 - cornerdiameter/2, Yplate/2 - cornerdiameter/2, cornerdiameter/4])
    cylinder(d=cornerdiameter, cornerdiameter/2, center=true);
    // Corner cylinder 1 (upper right)

    translate([- Xplate/2 + cornerdiameter/2, Yplate/2 - cornerdiameter/2, cornerdiameter/4])
    cylinder(d=cornerdiameter, cornerdiameter/2, center=true);
    // Corner cylinder 2 (upper left)

    translate([Xplate/2 - cornerdiameter/2, - Yplate/2 + cornerdiameter/2, cornerdiameter/4])
    cylinder(d=cornerdiameter, cornerdiameter/2, center=true);
    // Corner cylinder 3 (lower right)

    translate([- Xplate/2 + cornerdiameter/2, - Yplate/2 + cornerdiameter/2, cornerdiameter/4])
    cylinder(d=cornerdiameter, cornerdiameter/2, center=true);
    // Corner cylinder 4 (lower left)

    translate([Xplate/2 - cornerdiameter/2, Yplate/2 - cornerdiameter/2, cornerdiameter/2])
    sphere(d=cornerdiameter, center=true);
    // Corner sphere 1 (upper right)

    translate([- Xplate/2 + cornerdiameter/2, Yplate/2 - cornerdiameter/2, cornerdiameter/2])
    sphere(d=cornerdiameter, center=true);
    // Corner sphere 2 (upper left)

    translate([Xplate/2 - cornerdiameter/2, - Yplate/2 + cornerdiameter/2, cornerdiameter/2])
    sphere(d=cornerdiameter, center=true);
    // Corner sphere 3 (lower right)

    translate([- Xplate/2 + cornerdiameter/2, - Yplate/2 + cornerdiameter/2, cornerdiameter/2])
    sphere(d=cornerdiameter, center=true);
    // Corner sphere 4 (lower left)

    } // End plate hull

    // Stick hole
    translate([0, 0, cornerdiameter/2])
    cylinder(d=stickdiameter, cornerdiameter + 0.01, center=true);

    // Screw hole 1 (upper right)
    translate([Xscrew/2, Yscrew/2, cornerdiameter/2])
    cylinder(h=cornerdiameter + 0.01, d1=screwbody, d2=screwhead, center=true);

    // Screw hole 2 (upper left)
    translate([- Xscrew/2, Yscrew/2, cornerdiameter/2])
    cylinder(h=cornerdiameter + 0.01, d1=screwbody, d2=screwhead, center=true);

    // Screw hole 3 (lower right)
    translate([Xscrew/2, - Yscrew/2, cornerdiameter/2])
    cylinder(h=cornerdiameter + 0.01, d1=screwbody, d2=screwhead, center=true);

    // Screw hole 4 (lower left)
    translate([- Xscrew/2, - Yscrew/2, cornerdiameter/2])
    cylinder(h=cornerdiameter + 0.01, d1=screwbody, d2=screwhead, center=true);

     } // End plate minus stick and screw holes
//

I really need to learn open scad btw.
It's really easy to get started.

There are lots of great introduction tutorials like this one, a fantastic cheatsheet here that links each command to the corresponding user manual entry, and a ton of well-documented code samples out there.


Scott

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9397
  • Last login:Yesterday at 07:37:46 pm
  • Designated spam hunter
Re: Online electronics parts store?
« Reply #49 on: July 12, 2019, 07:27:15 am »
Files are almost all done:
- Test Print (shaft diameter) - Done
- Test Print 2 (hex locknut) - Done
- Eject pins - Done
- Handle top - Done, but might add CircleLogo option added
- DE_Arrow.svg (Inkscape) - Done
- DE_Arrow.dxf (Inkscape) - Done
- DE_Logo.svg (Inkscape) - Done
- DE_Logo.dxf (Inkscape) - Done
- DE_CircleLogo.svg (Inkscape) - Might add this option Done
- DE_CircleLogo.dxf (Inkscape) - Might add this option Done
- Diagram - Done
- Handle - Confirm your panel thickness measurement, set ShaftHeight variable, and add comments

These two test prints confirm whether several important variable values will or will not work with your particular combination of printer and joystick/hardware.

Test Print -- hardware tested:
 - Joystick M6 threaded diameter (clears without engaging threads)
 - Joystick shaft diameter (snug fit)

Code: [Select]
// Data East rotary joystick handle (balltop replacement)
// - Test print

// Other prints needed:
// -- Test print2
// -- Handle
// -- Handle top
// -- Eject pin (2 pins per handle)

// This test print allows you to verify the correct variable values for your specific hardware and your slicer software before you render/export/print the whole handle.

// Hardware tested:
// - Joystick M6 threaded diameter (clears without engaging threads)
// - Joystick shaft diameter (snug fit)

// This part is oriented upside-down compared to the handle so print supports are not needed.

/////////////////////////////
//      Define variables
/////////////////////////////

ShaftDiameter = 9.35;  // Default = 9.35
ShaftHeight = 9;        // Default = 9
ThreadedDiameter = 6.2; // Default = 6.2
// The diameter values may need to be *very slightly* larger to account for the 180-sided polygon used to render circles -- see "undersized holes" at https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Primitive_Solids#cylinder
$fn=180; // Number of fragments (polygon sides) used to render a circle

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

// Make the shaft test layer
difference() {
    cylinder(ShaftHeight, d=ShaftDiameter+6, center=true);   // Shaft outer cylinder
    cylinder(ShaftHeight+2, d=ShaftDiameter, center=true);
    // Remove Shaft Collar hole
    }
//
// Make the thread test layer (red)
difference() {
    color("red") translate([0,0,-1 - ShaftHeight/2]) cylinder(2, d=ShaftDiameter + 6, center=true);
    // Outer cylinder
    translate([0,0,-1 - ShaftHeight/2]) cylinder(ShaftHeight, d=ThreadedDiameter, center=true);
    // Remove threaded hole
}

Test Print 2 -- hardware tested:
- Joystick M6 threaded diameter (clears without engaging threads)
- Locknut (snug fit)

Code: [Select]
// Data East rotary joystick handle (balltop replacement)
// - Test print 2

// Other prints needed:
// -- Test print
// -- Handle
// -- Handle top
// -- Eject pin (2 pins per handle)

// This test print allows you to verify the correct variable values for your specific hardware and your slicer software before you render/export/print the whole handle.

// Hardware tested:
// - Joystick M6 threaded diameter (clears without engaging threads)
// - Locknut (snug fit)


/////////////////////////////
//      Define variables
/////////////////////////////

LocknutDiameter = 11.65;  // Default = 11.55 + wiggle room
    // 10mm flat-to-flat = 11.55mm point-to-point
LocknutHeight = 9;        // Default = 9
ThreadedDiameter = 6.2; // Default = 6.2
// The diameter values may need to be *very slightly* larger to account for the 180-sided polygon used to render circles -- see "undersized holes" at https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Primitive_Solids#cylinder
$fn=180; // Number of fragments (polygon sides) used to render a circle

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

// Make the locknut test layer
difference() {
    hull() {  // Make outer hexagon
    rotate ([0, 0, 0]) translate ([3 + LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight, d = 0.01, center=true);

    rotate ([0, 0, 60]) translate ([3 + LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight, d = 0.01, center=true);

    rotate ([0, 0, 120]) translate ([3 + LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight, d = 0.01, center=true);

    rotate ([0, 0, 180]) translate ([3 + LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight, d = 0.01, center=true);

    rotate ([0, 0, 240]) translate ([3 + LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight, d = 0.01, center=true);

    rotate ([0, 0, 300]) translate ([3 + LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight, d = 0.01, center=true);
    }

    hull() {  // Remove inner hexagon
    translate ([0, 0, 0])
    rotate ([0, 0, 0]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);

    translate ([0, 0, 0])
    rotate ([0, 0, 60]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);

    translate ([0, 0, 0])
    rotate ([0, 0, 120]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);

    translate ([0, 0, 0])
    rotate ([0, 0, 180]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);

    translate ([0, 0, 0])
    rotate ([0, 0, 240]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);

    translate ([0, 0, 0])
    rotate ([0, 0, 300]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);
    }
}
//
// Make the thread test layer (red)
difference() {
    color("red") translate([0,0,-1 - LocknutHeight/2]) cylinder(2, d=LocknutDiameter + 6, center=true);
    // Outer cylinder
    translate([0,0,-1 - LocknutHeight/2]) cylinder(LocknutHeight, d=ThreadedDiameter, center=true);
    // Remove threaded hole
}


Scott
« Last Edit: July 12, 2019, 11:37:10 am by PL1 »

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9397
  • Last login:Yesterday at 07:37:46 pm
  • Designated spam hunter
Re: Online electronics parts store?
« Reply #50 on: July 12, 2019, 11:44:07 am »
Circle logo option added to handle top.

Related PNG, Inkscape, DXF, OpenSCAD, and STL files are in the attached zip.



Scott
EDIT: Just noticed that the circle logo has the "DE" slightly off-center compared to the other logo.  Will fix and repost.   :banghead:
« Last Edit: July 12, 2019, 10:24:38 pm by PL1 »

Howard_Casto

  • Idiot Police
  • Trade Count: (+1)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 19400
  • Last login:Yesterday at 10:59:21 pm
  • Your Post's Soul is MINE!!! .......Again??
    • The Dragon King
Re: Online electronics parts store?
« Reply #51 on: July 12, 2019, 01:28:15 pm »
Also they make shaft extension add-ons for the sanwa sticks, or you could go to your local hardware store/tractor supply and see if they have a 9mm coupler.  I'm probably just going to top mount it myself. 

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9397
  • Last login:Yesterday at 07:37:46 pm
  • Designated spam hunter
Re: Online electronics parts store?
« Reply #52 on: July 12, 2019, 10:23:38 pm »
Just noticed that the circle logo has the "DE" slightly off-center compared to the other logo.  Will fix and repost.   :banghead:

Also they make shaft extension add-ons for the sanwa sticks
Good call.   :cheers:

If someone wants to use those, blue (or red) Loctite is your friend.

Blue should hold during normal gameplay and is probably strong enough to hold if you have to replace the handle.

you could go to your local hardware store/tractor supply and see if they have a 9mm coupler.
A coupler would not be recommended for this application due to fit and leverage.

Something like that might work if you replace the shaft and remix the handle like the Happ Rotary stick here.


Scott

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9397
  • Last login:Yesterday at 07:37:46 pm
  • Designated spam hunter
Re: Online electronics parts store?
« Reply #53 on: July 13, 2019, 04:48:04 am »
Fixed circle logo by copy/pasting the "DE" and arrow points from Howard's cleaned-up logo.   ;D

Related files in zip.


Scott

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9397
  • Last login:Yesterday at 07:37:46 pm
  • Designated spam hunter
Re: Online electronics parts store?
« Reply #54 on: July 14, 2019, 12:24:10 am »
Updated comments in the handle code.   ;D

You might want to slightly adjust ShaftHeight on line 38, but the current value should work well with your joystick top-mounted.

Code: [Select]
// Data East rotary joystick handle (balltop replacement) V0.03
// -- Handle

// Other prints needed:
// -- Test print
// -- Test print 2
// -- Handle top
// -- Eject pin (2 pins per handle)

// Required hardware:
// - M6 locknut (M6-1.0mm thread)

// This part will work with the Ultimarc Ikari 12-way Rotary Upgrade.

// Variable values are estimates.  Awaiting accurate measurements.

/////////////////////////////
//  Adjustable variables
/////////////////////////////

// Body
    BodyHeight = 39.89; // Default = 39.89
    // Height of the body

    BodyDiameter = 33.22; // Default = 33.22
    // Diameter of the body

    UpperRoundover = 1.2; // Default = 1.2
    // Radius of the cylinder upper edge roundover

    UpperRoundoverScale = 1.5; // Default = 1.5
    // Amount of horizontal stretch applied to the upper roundover radius of the handle

    LowerRoundover = 0.5; // Default = 0.5
    // Radius of the cylinder lower edge roundover

// Spaces to remove from body
    ShaftHeight = 14; // Default = Unthreaded Shaft - panel thickness - 15.6mm clearance (See diagram)
    // Height of the unthreaded shaft cavity
    // Default for Ultimarc Ikari 12-way Rotary Upgrade = 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)
    // 25.8 for a 1.6mm metal panel with 3mm spacers (4.6mm)
    // CRITICAL MEASUREMENT: BodyHeight - ShaftHeight - ThreadedHeight - TopHeight must be >= the thickness of the locknut (~5.9mm) to allow enough room under the top

    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 https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Primitive_Solids#cylinder

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

    ThreadedDiameter = 6.2; // Default = 6.2
    // Outer diameter of the thread hole

    LocknutDiameter = 11.65;  // Default = 11.55 + wiggle room
    // An M6 nut is 10mm flat-to-flat = 11.55mm point-to-point
    // (Height is automatically calculated below.)

    PinDistance = 11; // Default =
    // Horizontal distance from handle center to eject pin center
   
    PinDiameter = 4; // Default = 4
    // Diameter of the eject pin body

    TopDiameter = 29.2; // Default = 29.2
    // Hole for removable top.
   
    TopHeight = 2; // Default = 2
    // Hole for removable top.
   
// 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.


/////////////////////////////
//  Non-adjustable variables
/////////////////////////////

// Locknut cavity
    LocknutHeight = (BodyHeight - ShaftHeight - ThreadedHeight);
    // Height of the locknut cavity

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

// Make the main body
difference(){ // Body minus holes
// Body
    union () // Upper roundover + Center cylinder + Lower roundover
    {
        // Upper roundover
        scale([UpperRoundoverScale,UpperRoundoverScale,1])
        minkowski()
        {
        cylinder(d=(BodyDiameter/UpperRoundoverScale)-(UpperRoundover*2),h=0.01);
        translate ([0, 0, BodyHeight-(UpperRoundover)-0.02])
        sphere(r=UpperRoundover);
        }
       
        // Center cylinder
        translate ([0, 0, LowerRoundover])
        cylinder (BodyHeight-UpperRoundover-LowerRoundover,d=BodyDiameter);

        // Lower roundover
        minkowski()
        {
        cylinder(d=BodyDiameter-(LowerRoundover*2),h=0.01);
        translate ([0, 0, LowerRoundover])
        sphere(r=LowerRoundover);
        }
       
    } // End body
//
// Holes
    color("limegreen") translate ([0, 0, ShaftHeight/2]) cylinder (ShaftHeight+.001, d = ShaftDiameter, center=true); // Hole for Shaft

    color("blue") translate ([0, 0, ShaftHeight+ThreadedHeight/2]) cylinder (ThreadedHeight + .001, d = ThreadedDiameter, center=true); // Hole for threaded

    color("white") hull() {  // Locknut hexagon hull
    translate ([0, 0, ShaftHeight + ThreadedHeight + LocknutHeight/2])
    rotate ([0, 0, 0]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);

    translate ([0, 0, ShaftHeight + ThreadedHeight + LocknutHeight/2])
    rotate ([0, 0, 60]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);

    translate ([0, 0, ShaftHeight + ThreadedHeight + LocknutHeight/2])
    rotate ([0, 0, 120]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);

    translate ([0, 0, ShaftHeight + ThreadedHeight + LocknutHeight/2])
    rotate ([0, 0, 180]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);

    translate ([0, 0, ShaftHeight + ThreadedHeight + LocknutHeight/2])
    rotate ([0, 0, 240]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);

    translate ([0, 0, ShaftHeight + ThreadedHeight + LocknutHeight/2])
    rotate ([0, 0, 300]) translate ([LocknutDiameter/2, 0, 0]) cylinder (LocknutHeight + 0.01, d = 0.01, center=true);
    }
    // Hole for locknut

    color("red") translate ([0, 0, BodyHeight - TopHeight/2]) cylinder (TopHeight, d = TopDiameter, center=true);
    // Hole for removable top

    color("aqua") translate ([0, -PinDistance, 1]) cylinder (2.01, d1 = 3.5, d2 = 2, center=true);
    // Eject pin access hole 1

    color("aqua") translate ([0, PinDistance, 1]) cylinder (2.01, d1 = 3.5, d2 = 2, center=true);
    // Eject pin access hole 2

    color("purple") translate ([0, -PinDistance, BodyHeight/2 + 2]) cylinder (BodyHeight, d = PinDiameter, center=true);
    // Eject pin hole 1

    color("purple") translate ([0, PinDistance, BodyHeight/2 + 2]) cylinder (BodyHeight, d = PinDiameter, center=true);
    // Eject pin hole 2
} // End body minus holes
//

It appears that there are only two things left to do for the OpenSCAD part of this project:

1. Confirm that the circle logo version of the top looks and fits right when installed.
- May need to reduce the TopWiggleRoom value  from 0.65 to 0.55.  (Circle removes the upper half of the taper.  TopTaper/2 = 0.1.)

2. Get accurate measurements from an original handle and control panel.


Scott

Howard_Casto

  • Idiot Police
  • Trade Count: (+1)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 19400
  • Last login:Yesterday at 10:59:21 pm
  • Your Post's Soul is MINE!!! .......Again??
    • The Dragon King
Re: Online electronics parts store?
« Reply #55 on: July 14, 2019, 01:04:06 am »
Great work as always.  I need to get busy but as per usual I have the attention span of a particularly nervous gnat, so I went off on a tangent last night looking up racing rigs for my wheel set that'll come in next week.  Assuming I don't run into any issues though, writing a configurable bit of code for the uno shouldn't take more than an afternoon.... I'm just trying to figure out the most painless method to update it's firmware so that it'll show up as a HID device(s).