Main > Main Forum
World Series Baseball 99 - Arcade Build HELP!!
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: