Here's a v1.0 OpenSCAD model for a panel mount countersunk SW yoke mount with a drill/cutout template.
- The base is 180mm wide x 200mm deep and the mount is 115mm tall.
- The mount is high enough that when the front housing of the yoke is turned 45 degrees, it will still clear the control panel.
- The gears only stick out about 1.5" below the mount.
- This version is a fixed 45 degree angle. I could remix it into a variable angle version if there's any interest.
- Use 1/4"-20 x 1-1/2" carriage bolts for mounting hardware.
// SW Yoke Countersunk Mount for Alan-1 yoke v1.0.
/////////////////////////////
// Define the variables
/////////////////////////////
// Housing variables
RoundoverDia = 10; // Edge roundover diameter
SideThick = 3.2; // Side thickness
VertZ = 15; // Vertical front/back panel height
HousingX = 140; // Housing width
HousingY = 200; // Housing depth
HousingZ = VertZ + (HousingY/2); // Overall housing height
MountOffsetY = 70; // Mount distance from front edge
BaseX = 180; // Overall base width
BaseY = 200; // Overall base depth
BaseZ = 6; // Overall base height
BaseBolt = 7; // Base carriage bolt hole size
BaseBoltInset = 10; // Base carriage bolt hole inset distance
// 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.
// Define modules
module FlangeHoles(){ //
translate([BaseBoltInset, BaseBoltInset, BaseZ/2])
cube ([BaseBolt, BaseBolt, BaseZ + 0.1], center=true); // Front left flange carriage bolt hole
translate([BaseX - BaseBoltInset, BaseBoltInset, BaseZ/2])
cube ([BaseBolt, BaseBolt, BaseZ + 0.1], center=true); // Front right flange carriage bolt hole
translate([BaseX - BaseBoltInset, BaseY - BaseBoltInset, BaseZ/2])
cube ([BaseBolt, BaseBolt, BaseZ + 0.1], center=true); // Back right flange carriage bolt hole
translate([BaseBoltInset, BaseY - BaseBoltInset, BaseZ/2])
cube ([BaseBolt, BaseBolt, BaseZ + 0.1], center=true); // Back left flange carriage bolt hole
} //
//
module YokeMount(){ //Yoke mount module -- 76x90 main hole, 90x90 8mm screw holes
translate([BaseX/2, RoundoverDia/2, VertZ])
rotate([45, 0, 0])
translate([0, MountOffsetY, 0])
cube ([76, 90, SideThick*4], center=true);// 76x90 main hole
translate([BaseX/2, RoundoverDia/2, VertZ])
rotate([45, 0, 0])
translate([0, MountOffsetY, 1])
translate([-45, 45, 0])
cylinder (SideThick*4, d = 8, center=true); // Yoke screw hole 1
translate([BaseX/2, RoundoverDia/2, VertZ])
rotate([45, 0, 0])
translate([0, MountOffsetY, 1])
translate([45, 45, 0])
cylinder (SideThick*4, d = 8, center=true); // Yoke screw hole 2
translate([BaseX/2, RoundoverDia/2, VertZ])
rotate([45, 0, 0])
translate([0, MountOffsetY, 1])
translate([45, -45, 0])
cylinder (SideThick*4, d = 8, center=true); // Yoke screw hole 3
translate([BaseX/2, RoundoverDia/2, VertZ])
rotate([45, 0, 0])
translate([0, MountOffsetY, 1])
translate([-45, -45, 0])
cylinder (SideThick*4, d = 8, center=true); // Yoke screw hole 4
} // End YokeMount module
//
module DrillTemplate(){ // Drill template module
difference(){ // Drill plate minus carriage bolt holes and yoke mechanism hole
hull (){ // Drill plate hull
translate([BaseZ/2, BaseZ/2, 1])
cylinder (2, d = BaseZ, center=true);
// Front left base
translate([BaseX - BaseZ/2, BaseZ/2, 1])
cylinder (2, d = BaseZ, center=true);
// Front right base
translate([BaseX - BaseZ/2, HousingY - BaseZ/2, 1])
cylinder (2, d = BaseZ, center=true);
// Back right base
translate([BaseZ/2, HousingY - BaseZ/2, 1])
cylinder (2, d = BaseZ, center=true);
// Back left base
} // End Drill plate hull
//
FlangeHoles(); // Carriage bolt holes
translate([BaseX/2 + 14.5, RoundoverDia/2, VertZ])
rotate([45, 0, 0])
translate([0, MountOffsetY, -70])
cube ([105, 70, 150], center=true); // Yoke mechanism hole
translate([BaseX/2, 20, 1])
Label("Player"); // Call the label module for Player
} // End drill plate minus carriage bolt holes and yoke mechanism hole
//
} // End Drill Template module
//
module Label(letter, size=12) {
rotate ([0, 0, 0]) {
color("black")
linear_extrude(height=1 + 0.01, convexity=4)
text(letter,
size=size*22/30,
font="Bitstream Vera Sans",
halign="center",
valign="center");
}
} // End Label module
//
/////////////////////////////
// Make the part
/////////////////////////////
translate([-BaseX - 30, 0, 0])
DrillTemplate(); // Make drill template
difference (){ // Difference of union of base flange and housing outer hull minus housing inner hull, yoke mount, and carriage bolt holes
union (){ // Union base flange and housing outer hull
hull (){ // Base flange hull
translate([BaseZ/2, BaseZ/2, 1])
cylinder (2, d = BaseZ, center=true);
// Front left base
translate([BaseX - BaseZ/2, BaseZ/2, 1])
cylinder (2, d = BaseZ, center=true);
// Front right base
translate([BaseX - BaseZ/2, HousingY - BaseZ/2, 1])
cylinder (2, d = BaseZ, center=true);
// Back right base
translate([BaseZ/2, HousingY - BaseZ/2, 1])
cylinder (2, d = BaseZ, center=true);
// Back left base
translate([BaseZ/2, BaseZ/2, BaseZ/2])
sphere (d=BaseZ);
// Front left middle
translate([BaseX - BaseZ/2, BaseZ/2, BaseZ/2])
sphere (d=BaseZ);
// Front right middle
translate([BaseX - BaseZ/2, HousingY - BaseZ/2, BaseZ/2])
sphere (d=BaseZ);
// Back right middle
translate([BaseZ/2, HousingY - BaseZ/2, BaseZ/2])
sphere (d=BaseZ);
// Back left middle
} // End base flange hull
//
hull (){ // Housing outer hull
translate([BaseX/2 - HousingX/2 + RoundoverDia/2, RoundoverDia/2, 1])
cylinder (2, d = RoundoverDia, center=true);
// Front left base
translate([BaseX/2 + HousingX/2 - RoundoverDia/2, RoundoverDia/2, 1])
cylinder (2, d = RoundoverDia, center=true);
// Front right base
translate([BaseX/2 + HousingX/2 - RoundoverDia/2, HousingY - RoundoverDia/2, 1])
cylinder (2, d = RoundoverDia, center=true);
// Back right base
translate([BaseX/2 - HousingX/2 + RoundoverDia/2, HousingY - RoundoverDia/2, 1])
cylinder (2, d = RoundoverDia, center=true);
// Back left base
translate([BaseX/2 - HousingX/2 + RoundoverDia/2, RoundoverDia/2, VertZ])
sphere (d=RoundoverDia);
// Front left middle
translate([BaseX/2 + HousingX/2 - RoundoverDia/2, RoundoverDia/2, VertZ])
sphere (d=RoundoverDia);
// Front right middle
translate([BaseX/2 + HousingX/2 - RoundoverDia/2, HousingY - RoundoverDia/2, VertZ])
sphere (d=RoundoverDia);
// Back right middle
translate([BaseX/2 - HousingX/2 + RoundoverDia/2, HousingY - RoundoverDia/2, VertZ])
sphere (d=RoundoverDia);
// Back left middle
translate([BaseX/2 - HousingX/2 + RoundoverDia/2, HousingY/2, HousingZ - RoundoverDia/2])
sphere (d=RoundoverDia);
// Top left
translate([BaseX/2 + HousingX/2 - RoundoverDia/2, HousingY/2, HousingZ - RoundoverDia/2])
sphere (d=RoundoverDia);
// Top right
} // End housing outer hull
//
} // End union base flange and housing outer hull
//
hull (){ // Housing inner hull
translate([BaseX/2 - HousingX/2 + RoundoverDia/2, RoundoverDia/2, 0.9])
cylinder (2, d = RoundoverDia - (SideThick * 2), center=true);
// Front left base
translate([BaseX/2 + HousingX/2 - RoundoverDia/2, RoundoverDia/2, 0.9])
cylinder (2, d = RoundoverDia - (SideThick * 2), center=true);
// Front right base
translate([BaseX/2 + HousingX/2 - RoundoverDia/2, HousingY - RoundoverDia/2, 0.9])
cylinder (2, d = RoundoverDia - (SideThick * 2), center=true);
// Back right base
translate([BaseX/2 - HousingX/2 + RoundoverDia/2, HousingY - RoundoverDia/2, 0.9])
cylinder (2, d = RoundoverDia - (SideThick * 2), center=true);
// Back left base
translate([BaseX/2 - HousingX/2 + RoundoverDia/2, RoundoverDia/2, VertZ])
sphere (d=RoundoverDia - (SideThick * 2));
// Front left middle
translate([BaseX/2 + HousingX/2 - RoundoverDia/2, RoundoverDia/2, VertZ])
sphere (d=RoundoverDia - (SideThick * 2));
// Front right middle
translate([BaseX/2 + HousingX/2 - RoundoverDia/2, HousingY - RoundoverDia/2, VertZ])
sphere (d=RoundoverDia - (SideThick * 2));
// Back right middle
translate([BaseX/2 - HousingX/2 + RoundoverDia/2, HousingY - RoundoverDia/2, VertZ])
sphere (d=RoundoverDia - (SideThick * 2));
// Back left middle
translate([BaseX/2 - HousingX/2 + RoundoverDia/2, HousingY/2, HousingZ - RoundoverDia/2])
sphere (d=RoundoverDia - (SideThick * 2));
// Top left
translate([BaseX/2 + HousingX/2 - RoundoverDia/2, HousingY/2, HousingZ - RoundoverDia/2])
sphere (d=RoundoverDia - (SideThick * 2));
// Top right
} // End housing inner hull
//
YokeMount(); // Yoke mount
FlangeHoles(); // Base flange carriage bolt holes
} // End difference of union of base flange and housing outer hull minus housing inner hull, yoke mount, and carriage bolt holes
//
// Test cube yoke mechanism 76x90x150
translate([BaseX/2, RoundoverDia/2, VertZ])
rotate([45, 0, 0])
translate([0, MountOffsetY, -70])
color("red")
*cube ([76, 90, 151], center=true);
// Test cube mount plate footprint
Clearance = 0; // Offset to check clearance for yoke front housing rotation. 0 = yoke centered. 30 = yoke turned 45 degrees)
translate([BaseX/2, RoundoverDia/2, VertZ])
rotate([45, 0, 0])
translate([0, MountOffsetY - Clearance, RoundoverDia/2-0.2])
color("blue")
*cube ([120, 120, 02.01], center=true);
// Test carriage bolt cylinder
translate([BaseBoltInset, BaseBoltInset, BaseZ/2])
color("white")
*cylinder (BaseZ + 4, d = (14.4), center=true);
When assembling the mount, connect the yoke to the mount then connect the mount to the panel.
Download link for OpenSCAD and .STL files:
Countersunk v1.0 - https://forum.arcadecontrols.com/index.php?action=dlattach;topic=164992.0;attach=397959
Countersunk v1.1 - https://forum.arcadecontrols.com/index.php?action=dlattach;topic=164992.0;attach=397964
The standalone version is almost done. Will post it after doing a test print.
Scott
EDIT: Updated D/L link.