Main > Main Forum

World Series Baseball 99 - Arcade Build HELP!!

Pages: << < (8/9) > >>

PL1:

Here's the first draft for the top and bottom plates.

The top rectangle is the size of a Happ joystick mount plate and the white holes are in a standard Happ mount pattern.

Use four M3 x 50mm screws and locknuts to hold the top and bottom plates together on the long spacers.
- Blue countersink and red screw body holes.

Use one M3 x 50mm screw and locknut to hold the end of the spring between the short spacers.
- Purple countersink and aqua screw body holes.

Use one M4 x 50mm screw and locknut to hold the bumper.
- Pink countersink and black screw body holes.

The top and bottom shaft collars will hold the bearings -- one flange bearing for the top and one sleeve bearing for the bottom.


--- Code: ---// Top and Bottom Plates Happ  - Bat Controller (v0)


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

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

// Topplate variables
TopWidth = 80; // Topplate width

TopDepth = 91; // Topplate depth

TopThick = 5.1; // Topplate thickness

TopPlateCornerDia = 4; // Top plate corner diameter

MountHoleX = 66; // Mount hole distance X-axis

MountHoleY = 76; // Mount hole distance Y-axis

MountHoleDia = 6; // Mount hole diameter


// Spring arm variables
SpringArmHoleX = 22; // Spring arm hole X-axis offset
SpringArmHoleY = 50; // Spring arm hole Y-axis offset

SpringArmWidth = 10; //Spring arm width

SpringArmScrewHoleDia = 3.5; // Spring arm screw hole diameter
SpringArmScrewTopDia = 6; // Spring arm screw top diameter
SpringArmScrewTopDepth = 3.5; // Spring arm screw top depth

SpringArmSpacerThick = 12.5; // Spring arm spacer thickness


// Spacer variables
SpacerThick = 35; // Spacer thickness

SpacerDia = 9; // Spacer diameter

Spacer1X = 0; // Spacer1 X-axis position
Spacer1Y = 41; // Spacer1 Y-axis position

Spacer2X = 35.5; // Spacer2 X-axis position
Spacer2Y = 0; // Spacer2 Y-axis position

Spacer3X = 0; // Spacer3 X-axis position
Spacer3Y = -41; // Spacer3 Y-axis position

Spacer4X = -35.5; // Spacer4 X-axis position
Spacer4Y = 0; // Spacer4 Y-axis position

SpacerScrewHoleDia = 3.5; // Spacer screw hole diameter

SpacerScrewTopDia = 6; // Spacer screw top diameter

SpacerScrewTopDepth = 3.5; // Spacer screw top depth


// Bumper variables
BumperOffset = 14.5; // Bumper offset

BumperSpacerThick = 10; // Bumper spacer thickness

BumperSpacerDia = 9; // Bumper spacer diameter

BumperScrewHoleDia = 4.5; // Bumper screw hole diameter

BumperScrewTopDepth = 4; // Bumper screw top depth

BumperScrewTopDia = 7.5; // Bumper screw top diameter


// Shaft and shaft collar variables
ShaftDia = 13; // Shaft hole diameter, must be large enough for the end of flange bearing that sticks through the shaft collar

ShaftCollarDia = 19.5; // Shaft collar outer diameter

ShaftCollarWallThick = 4; // Shaft collar wall thickness

ShaftCollarHeight = 10; // Shaft collar height

ShaftCollarScrewDia = 5; // Shaft collar setscrew diameter, 5 for a #10-24, 7 for a 1/4"-20

ShaftCollarScrewAngle = 28; // Shaft collar setscrew angle


// Bottomplate variables
BottomThick = 4.1; // Bottomplate thickness

BottomVerticalOffset = 50; // Space between top and bottom pieces.  Set to 0 to see how the top and bottom fit.  Set more than 0 when rendering to separate the top and bottom.


// 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(){ // Topplate, bottomplate, shaft collar holders, spring arm, and spacers minus shaft hole, shaft collar holes, and screw holes

    union(){ // Topplate, shaft collar holder, spring arm, and spacers

        hull(){ // Topplate hull
            translate([TopWidth/2 - TopPlateCornerDia/2, TopDepth/2 - TopPlateCornerDia/2, SpacerThick + TopThick/2])
            cylinder (TopThick, d = TopPlateCornerDia, center=true); // Top right

            translate([TopWidth/2 - TopPlateCornerDia/2, - TopDepth/2 + TopPlateCornerDia/2, SpacerThick + TopThick/2])
            cylinder (TopThick, d = TopPlateCornerDia, center=true); // Bottom right

            translate([- TopWidth/2 + TopPlateCornerDia/2, - TopDepth/2 + TopPlateCornerDia/2, SpacerThick + TopThick/2])
            cylinder (TopThick, d = TopPlateCornerDia, center=true); // Bottom left

            translate([- TopWidth/2 + TopPlateCornerDia/2, TopDepth/2 - TopPlateCornerDia/2, SpacerThick + TopThick/2])
            cylinder (TopThick, d = TopPlateCornerDia, center=true); // Top left

        } // End topplate hull
//

        hull(){ // Bottomplate hull

        translate([Spacer1X, Spacer1Y, - BottomThick/2 - BottomVerticalOffset])
        cylinder (BottomThick + 0.02, d = SpacerDia, center=true); // Spacer 1

        translate([Spacer2X, Spacer2Y, - BottomThick/2 - BottomVerticalOffset])
        cylinder (BottomThick + 0.02, d = SpacerDia, center=true); // Spacer 2

        translate([Spacer3X, Spacer3Y, - BottomThick/2 - BottomVerticalOffset])
        cylinder (BottomThick + 0.02, d = SpacerDia, center=true); // Spacer 3

        translate([Spacer4X, Spacer4Y, - BottomThick/2 - BottomVerticalOffset])
        cylinder (BottomThick + 0.02, d = SpacerDia, center=true); // Spacer 4

            translate([SpringArmHoleX, SpringArmHoleY, - BottomThick/2 - BottomVerticalOffset])
            cylinder (BottomThick, d = SpringArmWidth, center=true); // Spring arm

        } // End Bottomplate hull
//


        translate([0, 0, SpacerThick - ShaftCollarHeight/2 + 0.01])
        cylinder (ShaftCollarHeight + 0.1, d = ShaftCollarDia + (ShaftCollarWallThick * 2), center=true); // Top shaft collar holder

        translate([0, 0, ShaftCollarHeight/2 - BottomVerticalOffset])
        cylinder (ShaftCollarHeight + 0.1, d = ShaftCollarDia + (ShaftCollarWallThick * 2), center=true); // Bottom shaft collar holder

        hull(){ // Spring arm hull
            translate([SpringArmHoleX, SpringArmHoleY, SpacerThick + TopThick/2])
            cylinder (TopThick, d = SpringArmWidth, center=true); // Top of spring arm

            translate([SpringArmHoleX, TopDepth/2 - 1, SpacerThick + TopThick/2])
            cube ([SpringArmWidth * 2, 0.2, TopThick - 0.001], center=true); // Base of spring arm

        } // End spring arm hull
//

            translate([SpringArmHoleX, SpringArmHoleY, SpacerThick - SpringArmSpacerThick/2])
            cylinder (SpringArmSpacerThick, d = SpringArmWidth, center=true); // Spring arm top spacer

            translate([SpringArmHoleX, SpringArmHoleY,  SpringArmSpacerThick/2 - BottomVerticalOffset])
            cylinder (SpringArmSpacerThick + .01, d = SpringArmWidth, center=true); // Spring arm bottom spacer

        translate([Spacer1X, Spacer1Y, SpacerThick/2 + 0.01])
        cylinder (SpacerThick + 0.02, d = SpacerDia, center=true); // Spacer 1

        translate([Spacer2X, Spacer2Y, SpacerThick/2 + 0.01])
        cylinder (SpacerThick + 0.02, d = SpacerDia, center=true); // Spacer 2

        translate([Spacer3X, Spacer3Y, SpacerThick/2 + 0.01])
        cylinder (SpacerThick + 0.02, d = SpacerDia, center=true); // Spacer 3

        translate([Spacer4X, Spacer4Y, SpacerThick/2 + 0.01])
        cylinder (SpacerThick + 0.02, d = SpacerDia, center=true); // Spacer 4

        translate([- BumperOffset, 0, SpacerThick - BumperSpacerThick/2 + 0.01])
        cylinder (BumperSpacerThick + 0.02, d = BumperSpacerDia, center=true); // Top bumper spacer

        translate([- BumperOffset, 0, BumperSpacerThick/2 - BottomVerticalOffset])
        cylinder (BumperSpacerThick + 0.1, d = BumperSpacerDia, center=true); // Bottom bumper spacer

    } // End topplate, shaft collar holder, spring arm, and spacers
    //

    translate([0, 0, TopThick/2 + SpacerThick/2 - BottomThick /2 - BottomVerticalOffset/2])
    cylinder (TopThick + SpacerThick + BottomThick + BottomVerticalOffset + 0.1, d = ShaftDia, center=true); // Shaft hole

    translate([0, 0, SpacerThick - ShaftCollarHeight/2 + 0.01])
    cylinder (ShaftCollarHeight + 0.2, d = ShaftCollarDia, center=true); // Top shaft collar hole

    rotate([0, 0, ShaftCollarScrewAngle])
    translate([0, ShaftCollarDia/2 + ShaftCollarWallThick/2, SpacerThick - ShaftCollarHeight/2 + 0.01])
    rotate([-90, 0, 0])
    cylinder (ShaftCollarWallThick * 2, d = ShaftCollarScrewDia, center=true); // Top shaft collar setscrew hole

    translate([0, 0, ShaftCollarHeight/2 + 0.01 - BottomVerticalOffset])
    cylinder (ShaftCollarHeight + 0.2, d = ShaftCollarDia, center=true); // Bottom shaft collar hole

    rotate([0, 0, ShaftCollarScrewAngle])
    translate([0, ShaftCollarDia/2 + ShaftCollarWallThick/2, ShaftCollarHeight/2 + 0.01- BottomVerticalOffset])
    rotate([-90, 0, 0])
    cylinder (ShaftCollarWallThick * 2, d = ShaftCollarScrewDia, center=true); // Bottom shaft collar setscrew hole

    translate([MountHoleX/2, MountHoleY/2, TopThick/2 + SpacerThick])
    color("white")
    cylinder (TopThick + 0.1, d = MountHoleDia, center=true); // Mounting screw hole 1

    translate([MountHoleX/2, - MountHoleY/2, TopThick/2 + SpacerThick])
    color("white")
    cylinder (TopThick + 0.1, d = MountHoleDia, center=true); // Mounting screw hole 2

    translate([- MountHoleX/2, - MountHoleY/2, TopThick/2 + SpacerThick])
    color("white")
    cylinder (TopThick + 0.1, d = MountHoleDia, center=true); // Mounting screw hole 3

    translate([- MountHoleX/2, MountHoleY/2, TopThick/2 + SpacerThick])
    color("white")
    cylinder (TopThick + 0.1, d = MountHoleDia, center=true); // Mounting screw hole 4

    translate([SpringArmHoleX, SpringArmHoleY, TopThick + SpacerThick - SpringArmScrewTopDepth/2])
    color("purple")
    cylinder (SpringArmScrewTopDepth + 0.1, d = SpringArmScrewTopDia, center=true); // Spring arm screw hole top

    translate([SpringArmHoleX, SpringArmHoleY, TopThick/2 + SpacerThick/2 - BottomThick/2 - BottomVerticalOffset/2])
    color("aqua")
    cylinder (TopThick + SpacerThick + BottomThick + BottomVerticalOffset + 0.1, d = SpringArmScrewHoleDia, center=true); // Spring arm screw hole

    translate([Spacer1X, Spacer1Y, TopThick + SpacerThick - SpacerScrewTopDepth/2])
    color("blue")
    cylinder (SpacerScrewTopDepth + 0.1, d = SpacerScrewTopDia, center=true); // Spacer 1 hole top

    translate([Spacer1X, Spacer1Y, TopThick/2 + SpacerThick/2 - BottomThick/2 - BottomVerticalOffset/2])
    color("red")
    cylinder (TopThick + SpacerThick + BottomThick + BottomVerticalOffset + 0.1, d = SpacerScrewHoleDia, center=true); // Spacer 1 hole

    translate([Spacer2X, Spacer2Y, TopThick + SpacerThick - SpacerScrewTopDepth/2])
    color("blue")
    cylinder (SpacerScrewTopDepth + 0.1, d = SpacerScrewTopDia, center=true); // Spacer 2 hole top

    translate([Spacer2X, Spacer2Y, TopThick/2 + SpacerThick/2 - BottomThick/2 - BottomVerticalOffset/2])
    color("red")
    cylinder (TopThick + SpacerThick + BottomThick + BottomVerticalOffset + 0.1, d = SpacerScrewHoleDia, center=true); // Spacer 2 hole

    translate([Spacer3X, Spacer3Y, TopThick + SpacerThick - SpacerScrewTopDepth/2])
    color("blue")
    cylinder (SpacerScrewTopDepth + 0.1, d = SpacerScrewTopDia, center=true); // Spacer 3 hole top

    translate([Spacer3X, Spacer3Y, TopThick/2 + SpacerThick/2 - BottomThick/2 - BottomVerticalOffset/2])
    color("red")
    cylinder (TopThick + SpacerThick + BottomThick + BottomVerticalOffset + 0.1, d = SpacerScrewHoleDia, center=true); // Spacer 3 hole

    translate([Spacer4X, Spacer4Y, TopThick + SpacerThick - SpacerScrewTopDepth/2])
    color("blue")
    cylinder (SpacerScrewTopDepth + 0.1, d = SpacerScrewTopDia, center=true); // Spacer 4 hole top

    translate([Spacer4X, Spacer4Y, TopThick/2 + SpacerThick/2 - BottomThick/2 - BottomVerticalOffset/2])
    color("red")
    cylinder (TopThick + SpacerThick + BottomThick + BottomVerticalOffset + 0.1, d = SpacerScrewHoleDia, center=true); // Spacer 4 hole

    translate([- BumperOffset, 0, TopThick + SpacerThick - BumperScrewTopDepth/2])
    color("pink")
    cylinder (BumperScrewTopDepth + 0.1, d = BumperScrewTopDia, center=true); // Bumper screw hole top

    translate([- BumperOffset, 0, TopThick/2 + SpacerThick/2 - BottomThick/2 - BottomVerticalOffset/2])
    color("black")
    cylinder (TopThick + SpacerThick + BottomThick + BottomVerticalOffset + 0.1, d = BumperScrewHoleDia, center=true); // Bumper screw hole

} // End topplate, bottomplate, shaft collar holders, spring arm, and spacers minus shaft hole, shaft collar holes, and screw holes
//

--- End code ---

Need to print a 6mm thick cam (updated the cam code above from 8mm thick) and the top and bottom plates.

Need to stop by Home Depot for the M4 hardware and Menards for the sleeve bearing.

The rest of the needed hardware should be here in the next week or so.

If everything fits together as expected, that just leaves the potentiometer bracket and Arduino code/wiring.   ;D


Scott

PL1:

Here's the second draft for the top and bottom plates.

Problems with the first draft:
- There was not quite enough room for the cam and spring between the spacers on the right and left sides.
- The four main spacers were so long and thin that they broke with barely any side pressure.   :banghead:
- The cam screws just barely fit with no vertical wiggle room.

Fixes in the second draft:
- Increased the X-axis size of the plate from 80mm to 91mm (same as Y-axis size), but kept the standard Happ mount pattern.
- Increased the spacer diameter from 9mm to 12mm and adjusted the positions.
- Made all of the spacers taper to a wider base to increase the strength.
- Increased vertical clearance for the cam screws by about 2mm.


--- Code: ---// Top and Bottom Plates Happ  - Bat Controller (v0)


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

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

// Topplate variables
TopWidth = 91; // Topplate width (original was 80)

TopDepth = 91; // Topplate depth

TopThick = 5.1; // Topplate thickness

TopPlateCornerDia = 4; // Top plate corner diameter

MountHoleX = 66; // Mount hole distance X-axis

MountHoleY = 76; // Mount hole distance Y-axis

MountHoleDia = 6; // Mount hole diameter


// Spring arm variables
SpringArmHoleX = 22; // Spring arm hole X-axis offset
SpringArmHoleY = 50; // Spring arm hole Y-axis offset

SpringArmWidth = 10; //Spring arm width

SpringArmScrewHoleDia = 3.5; // Spring arm screw hole diameter
SpringArmScrewTopDia = 6.2; // Spring arm screw top diameter
SpringArmScrewTopDepth = 3.5; // Spring arm screw top depth

SpringArmSpacerThick = 14.5; // Spring arm spacer thickness


// Spacer variables
SpacerThick = 36; // Spacer thickness (was 35)

SpacerDia = 12; // Spacer diameter (was 9)

SpacerBase = 25; // Spacer base cube width

Spacer1X = 0; // Spacer1 X-axis position
Spacer1Y = 39.5; // Spacer1 Y-axis position (was 41)

Spacer2X = 39.5; // Spacer2 X-axis position (was 35.5)
Spacer2Y = 0; // Spacer2 Y-axis position

Spacer3X = 0; // Spacer3 X-axis position
Spacer3Y = -39.5; // Spacer3 Y-axis position (was 41)

Spacer4X = -39.5; // Spacer4 X-axis position (was 35.5)
Spacer4Y = 0; // Spacer4 Y-axis position

SpacerScrewHoleDia = 3.5; // Spacer screw hole diameter

SpacerScrewTopDia = 6.2; // Spacer screw top diameter

SpacerScrewTopDepth = 3.5; // Spacer screw top depth


// Bumper variables
BumperOffset = 14.5; // Bumper offset

BumperSpacerThick = 9.8; // Bumper spacer thickness (was 10)

BumperSpacerDia = 9; // Bumper spacer diameter

BumperScrewHoleDia = 4.5; // Bumper screw hole diameter

BumperScrewTopDepth = 4; // Bumper screw top depth

BumperScrewTopDia = 7.5; // Bumper screw top diameter


// Shaft and shaft collar variables
ShaftDia = 13; // Shaft hole diameter, must be large enough for the end of flange bearing that sticks through the shaft collar

ShaftCollarDia = 19.7; // Shaft collar outer diameter (was 19.5)

ShaftCollarWallThick = 4; // Shaft collar wall thickness

ShaftCollarHeight = 9.8; // Shaft collar height (was 10)

ShaftCollarScrewDia = 5; // Shaft collar setscrew diameter, 5 for a #10-24, 7 for a 1/4"-20

ShaftCollarScrewAngle = 28; // Shaft collar setscrew angle


// Bottomplate variables
BottomThick = 3.5; // Bottomplate thickness (was 4.1)

BottomVerticalOffset = 30; // Space between top and bottom pieces.  Set to 0 to see how the top and bottom fit.  Set more than 0 when rendering to separate the top and bottom.


// 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(){ // Topplate, bottomplate, shaft collar holders, spring arm, and spacers minus shaft hole, shaft collar holes, and screw holes

    union(){ // Topplate, shaft collar holder, spring arm, and spacers

        hull(){ // Topplate hull
            translate([TopWidth/2 - TopPlateCornerDia/2, TopDepth/2 - TopPlateCornerDia/2, SpacerThick + TopThick/2])
            cylinder (TopThick, d = TopPlateCornerDia, center=true); // Top right

            translate([TopWidth/2 - TopPlateCornerDia/2, - TopDepth/2 + TopPlateCornerDia/2, SpacerThick + TopThick/2])
            cylinder (TopThick, d = TopPlateCornerDia, center=true); // Bottom right

            translate([- TopWidth/2 + TopPlateCornerDia/2, - TopDepth/2 + TopPlateCornerDia/2, SpacerThick + TopThick/2])
            cylinder (TopThick, d = TopPlateCornerDia, center=true); // Bottom left

            translate([- TopWidth/2 + TopPlateCornerDia/2, TopDepth/2 - TopPlateCornerDia/2, SpacerThick + TopThick/2])
            cylinder (TopThick, d = TopPlateCornerDia, center=true); // Top left

        } // End topplate hull
//

        hull(){ // Bottomplate hull

        translate([Spacer1X, Spacer1Y, - BottomThick/2 - BottomVerticalOffset])
        cylinder (BottomThick + 0.02, d = SpacerDia, center=true); // Spacer 1

        translate([Spacer2X, Spacer2Y, - BottomThick/2 - BottomVerticalOffset])
        cylinder (BottomThick + 0.02, d = SpacerDia, center=true); // Spacer 2

        translate([Spacer3X, Spacer3Y, - BottomThick/2 - BottomVerticalOffset])
        cylinder (BottomThick + 0.02, d = SpacerDia, center=true); // Spacer 3

        translate([Spacer4X, Spacer4Y, - BottomThick/2 - BottomVerticalOffset])
        cylinder (BottomThick + 0.02, d = SpacerDia, center=true); // Spacer 4

            translate([SpringArmHoleX, SpringArmHoleY, - BottomThick/2 - BottomVerticalOffset])
            cylinder (BottomThick, d = SpringArmWidth, center=true); // Spring arm

            translate([SpringArmHoleX, TopDepth/2 - 6, - BottomVerticalOffset - BottomThick/2])
            cube ([SpringArmWidth * 2, 0.2, BottomThick], center=true); // Spring arm cube

        } // End Bottomplate hull
//


        translate([0, 0, SpacerThick - ShaftCollarHeight/2 + 0.01])
        cylinder (ShaftCollarHeight + 0.1, d = ShaftCollarDia + (ShaftCollarWallThick * 2), center=true); // Top shaft collar holder

        translate([0, 0, ShaftCollarHeight/2 - BottomVerticalOffset])
        cylinder (ShaftCollarHeight + 0.1, d = ShaftCollarDia + (ShaftCollarWallThick * 2), center=true); // Bottom shaft collar holder


        hull(){ // Spring arm top hull

            translate([SpringArmHoleX, SpringArmHoleY, SpacerThick + TopThick/2 - SpringArmSpacerThick/2])
            cylinder (TopThick + SpringArmSpacerThick, d = SpringArmWidth, center=true); // Top spring arm cylinder

            translate([SpringArmHoleX, TopDepth/2 - 2, SpacerThick + TopThick/2])
            cube ([SpringArmWidth * 2, 0.2, TopThick - 0.001], center=true); // Top spring arm cube

        } // End spring arm top hull
//


        hull(){ // Spring arm bottom hull

            translate([SpringArmHoleX, SpringArmHoleY,  SpringArmSpacerThick/2 - BottomThick/2 - BottomVerticalOffset])
            cylinder (SpringArmSpacerThick + BottomThick - 0.01, d = SpringArmWidth, center=true); // Bottom spring arm cylinder

            translate([SpringArmHoleX, TopDepth/2 - 6, - BottomVerticalOffset - BottomThick/2])
            cube ([SpringArmWidth * 2, 0.2, BottomThick - 0.001], center=true); // Bottom spring arm cube

        } // End spring arm bottom hull
//


        hull(){ // Spacer 1 hull

            translate([Spacer1X, Spacer1Y, SpacerThick- 0.99])
            cube ([SpacerBase, SpacerDia, 2], center=true); // Spacer 1 cube

            translate([Spacer1X, Spacer1Y, 1])
            cylinder (2, d = SpacerDia, center=true); // Spacer 1 cylinder

        } // End spacer 1 hull
//


        hull(){ // Spacer 2 hull

            translate([Spacer2X, Spacer2Y, SpacerThick- 0.99])
            cube ([SpacerDia, SpacerBase, 2], center=true); // Spacer 2 cube

            translate([Spacer2X, Spacer2Y, 1])
            cylinder (2, d = SpacerDia, center=true); // Spacer 2 cylinder

        } // End spacer 2 hull
//


        hull(){ // Spacer 3 hull

            translate([Spacer3X, Spacer3Y, SpacerThick- 0.99])
            cube ([SpacerBase, SpacerDia, 2], center=true); // Spacer 3 cube

            translate([Spacer3X, Spacer3Y, 1])
            cylinder (2, d = SpacerDia, center=true); // Spacer 3 cylinder

        } // End spacer 3 hull
//


        hull(){ // Spacer 4 hull

            translate([Spacer4X, Spacer4Y, SpacerThick- 0.99])
            cube ([SpacerDia, SpacerBase, 2], center=true); // Spacer 4 cube

            translate([Spacer4X, Spacer4Y, 1])
            cylinder (2, d = SpacerDia, center=true); // Spacer 4 cylinder

        } // End spacer 4 hull
//


        translate([- BumperOffset, 0, SpacerThick - BumperSpacerThick/2 + 0.01])
        cylinder (BumperSpacerThick + 0.02, d = BumperSpacerDia, center=true); // Top bumper spacer

        translate([- BumperOffset, 0, BumperSpacerThick/2 - BottomVerticalOffset])
        cylinder (BumperSpacerThick + 0.1, d = BumperSpacerDia, center=true); // Bottom bumper spacer

    } // End topplate, shaft collar holder, spring arm, and spacers
    //

    translate([0, 0, TopThick/2 + SpacerThick/2 - BottomThick /2 - BottomVerticalOffset/2])
    cylinder (TopThick + SpacerThick + BottomThick + BottomVerticalOffset + 0.1, d = ShaftDia, center=true); // Shaft hole

    translate([0, 0, SpacerThick - ShaftCollarHeight/2 + 0.01])
    cylinder (ShaftCollarHeight + 0.2, d = ShaftCollarDia, center=true); // Top shaft collar hole

    rotate([0, 0, ShaftCollarScrewAngle])
    translate([0, ShaftCollarDia/2 + ShaftCollarWallThick/2, SpacerThick - ShaftCollarHeight/2 + 0.01])
    rotate([-90, 0, 0])
    cylinder (ShaftCollarWallThick * 2, d = ShaftCollarScrewDia, center=true); // Top shaft collar setscrew hole

    translate([0, 0, ShaftCollarHeight/2 + 0.01 - BottomVerticalOffset])
    cylinder (ShaftCollarHeight + 0.2, d = ShaftCollarDia, center=true); // Bottom shaft collar hole

    rotate([0, 0, ShaftCollarScrewAngle])
    translate([0, ShaftCollarDia/2 + ShaftCollarWallThick/2, ShaftCollarHeight/2 + 0.01- BottomVerticalOffset])
    rotate([-90, 0, 0])
    cylinder (ShaftCollarWallThick * 2, d = ShaftCollarScrewDia, center=true); // Bottom shaft collar setscrew hole

    translate([MountHoleX/2, MountHoleY/2, TopThick/2 + SpacerThick])
    color("white")
    cylinder (TopThick + 0.1, d = MountHoleDia, center=true); // Mounting screw hole 1

    translate([MountHoleX/2, - MountHoleY/2, TopThick/2 + SpacerThick])
    color("white")
    cylinder (TopThick + 0.1, d = MountHoleDia, center=true); // Mounting screw hole 2

    translate([- MountHoleX/2, - MountHoleY/2, TopThick/2 + SpacerThick])
    color("white")
    cylinder (TopThick + 0.1, d = MountHoleDia, center=true); // Mounting screw hole 3

    translate([- MountHoleX/2, MountHoleY/2, TopThick/2 + SpacerThick])
    color("white")
    cylinder (TopThick + 0.1, d = MountHoleDia, center=true); // Mounting screw hole 4

    translate([SpringArmHoleX, SpringArmHoleY, TopThick + SpacerThick - SpringArmScrewTopDepth/2])
    color("purple")
    cylinder (SpringArmScrewTopDepth + 0.1, d = SpringArmScrewTopDia, center=true); // Spring arm screw hole top

    translate([SpringArmHoleX, SpringArmHoleY, TopThick/2 + SpacerThick/2 - BottomThick/2 - BottomVerticalOffset/2])
    color("aqua")
    cylinder (TopThick + SpacerThick + BottomThick + BottomVerticalOffset + 0.1, d = SpringArmScrewHoleDia, center=true); // Spring arm screw hole

    translate([Spacer1X, Spacer1Y, TopThick + SpacerThick - SpacerScrewTopDepth/2])
    color("blue")
    cylinder (SpacerScrewTopDepth + 0.1, d = SpacerScrewTopDia, center=true); // Spacer 1 hole top

    translate([Spacer1X, Spacer1Y, TopThick/2 + SpacerThick/2 - BottomThick/2 - BottomVerticalOffset/2])
    color("red")
    cylinder (TopThick + SpacerThick + BottomThick + BottomVerticalOffset + 0.1, d = SpacerScrewHoleDia, center=true); // Spacer 1 hole

    translate([Spacer2X, Spacer2Y, TopThick + SpacerThick - SpacerScrewTopDepth/2])
    color("blue")
    cylinder (SpacerScrewTopDepth + 0.1, d = SpacerScrewTopDia, center=true); // Spacer 2 hole top

    translate([Spacer2X, Spacer2Y, TopThick/2 + SpacerThick/2 - BottomThick/2 - BottomVerticalOffset/2])
    color("red")
    cylinder (TopThick + SpacerThick + BottomThick + BottomVerticalOffset + 0.1, d = SpacerScrewHoleDia, center=true); // Spacer 2 hole

    translate([Spacer3X, Spacer3Y, TopThick + SpacerThick - SpacerScrewTopDepth/2])
    color("blue")
    cylinder (SpacerScrewTopDepth + 0.1, d = SpacerScrewTopDia, center=true); // Spacer 3 hole top

    translate([Spacer3X, Spacer3Y, TopThick/2 + SpacerThick/2 - BottomThick/2 - BottomVerticalOffset/2])
    color("red")
    cylinder (TopThick + SpacerThick + BottomThick + BottomVerticalOffset + 0.1, d = SpacerScrewHoleDia, center=true); // Spacer 3 hole

    translate([Spacer4X, Spacer4Y, TopThick + SpacerThick - SpacerScrewTopDepth/2])
    color("blue")
    cylinder (SpacerScrewTopDepth + 0.1, d = SpacerScrewTopDia, center=true); // Spacer 4 hole top

    translate([Spacer4X, Spacer4Y, TopThick/2 + SpacerThick/2 - BottomThick/2 - BottomVerticalOffset/2])
    color("red")
    cylinder (TopThick + SpacerThick + BottomThick + BottomVerticalOffset + 0.1, d = SpacerScrewHoleDia, center=true); // Spacer 4 hole

    translate([- BumperOffset, 0, TopThick + SpacerThick - BumperScrewTopDepth/2])
    color("pink")
    cylinder (BumperScrewTopDepth + 0.1, d = BumperScrewTopDia, center=true); // Bumper screw hole top

    translate([- BumperOffset, 0, TopThick/2 + SpacerThick/2 - BottomThick/2 - BottomVerticalOffset/2])
    color("black")
    cylinder (TopThick + SpacerThick + BottomThick + BottomVerticalOffset + 0.1, d = BumperScrewHoleDia, center=true); // Bumper screw hole

} // End topplate, bottomplate, shaft collar holders, spring arm, and spacers minus shaft hole, shaft collar holes, and screw holes
//

--- End code ---


Scott

PL1:

The new spacer design is much stronger.   ;D

Increased shaft collar outer diameter from 19.5 to 19.7 for easier assembly and alignment.

Everything on the cam and top/bottom plates fits together perfectly with the desired amount of clearance.   :w00t

Things left to do:
- Cut the shaft to length and drill two more setscrew holes.
- Adjust the height and angle variables in the potentiometer bracket code.
- Write and test the Arduino code.


Scott

Nitro0602:

Hey guys! I know it’s been months.. without getting into details life got in the way with some family emergencies that I’ve had to deal with. Anyways all is good and finally have some time to focus on this again. That being said.. I appreciate everyone’s input trying to help me get this machine going again. Big shoutout to Scott to trying to make this work months back! A couple of things I wanted to mention below as I had a few hours yesterday to do some testing:

-Unfortunately Sega Naomi doesn’t recognize Arduino boards and gives me an error in the controller settings.
-Currently using a 3D printed pinball micro switch plunger.. does the job, but not very reliable. Plugged into the down analog input in the encoder (works when I pull back pressing the microswitch, once released the batter will swing)
-Xbox 360 controller works well using the right thumbstick as analog
-Can’t bunt for the life of me as the original game requires you to pull the bat/lever half way down and release (potentiometer I believe?)

In short, I’m thinking of just doing a more durable heavy duty pinball plunger with a microswitch mod.. but would love to add 2 spring loaded bats like the game as well. I’d like to make things as simple as possible, so any further help would be great!

PL1:


--- Quote from: Nitro0602 on December 09, 2022, 09:16:45 am ---Big shoutout to Scott to trying to make this work months back!

--- End quote ---
Don't give up! I've already worked through the most difficult challenges for this bat controller.

The basic design and hardware items work -- just need to fabricate, dial in, and document the exact shaft measurements then adjust the potentiometer bracket height and rotation angle.

I just haven't had the time to do those things yet.   :embarassed:


--- Quote from: Nitro0602 on December 09, 2022, 09:16:45 am ----Unfortunately Sega Naomi doesn’t recognize Arduino boards and gives me an error in the controller settings.
. . .
-Xbox 360 controller works well using the right thumbstick as analog

--- End quote ---
These two observations appear to indicate that your emulator software is looking for an XInput encoder.


--- Quote from: Nitro0602 on December 09, 2022, 09:16:45 am ---would love to add 2 spring loaded bats like the game as well. I’d like to make things as simple as possible, so any further help would be great!

--- End quote ---
Two XInput encoder approaches to consider:

1. You might be able to get one of these two Xinput XBOXPadMicro firmwares to work with your Arduino.
- Bruno's XBOXPadMicro XInput version of the firmware for the Arduino Micro.
http://forum.arcadecontrols.com/index.php/topic,152687.msg1634808.html#msg1634808
- Imp's XBOXPadMicro XInput version of the firmware for the Arduino Pro Micro.
http://forum.arcadecontrols.com/index.php/topic,152687.msg1674092.html#msg1674092

Not sure if these firmwares are potentiometer-friendly or if the "analog" inputs use button inputs to output a fake analog signal.   :dunno

2. Do an X360 gamepad hack.
- HaRuMaN might be able to help you with this, but the X360 padhack shown in the OP of his B/S/T thread converts the L/R triggers to digital and doesn't break out Vcc/Wiper/Ground for the two thumbsticks.
http://forum.arcadecontrols.com/index.php/topic,76185.0.html
- If you can keep the L/R triggers analog and break out the thumbsticks, you should be able to use one padhack for the the whole control panel.   ;D


Scott
EDIT: Forgot to mention BadMouth's analog X360 padhack here.  Lots of good info in that thread.   :cheers:

Pages: << < (8/9) > >>

Go to full version