| Main > Project Announcements |
| 3d Printed Star Wars Yoke Mounts -- Countersunk and Standalone |
| (1/1) |
| PL1:
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. --- Code: ---// 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); --- End code --- 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. |
| PL1:
Updated Countersunk Mount to v1.1 -- The .zip file contains the OpenSCAD files for 45 and 25 degree mounts/drill templates and .STL files. https://forum.arcadecontrols.com/index.php?action=dlattach;topic=164992.0;attach=397964. - Fixed several minor code errors. - Added variable "BaseBoltInsetY" to move the carriage bolt holes closer to the center of the mount's Y-axis. - Added variable "MountAngle" for the yoke mount. Default is 45 degrees minus the angle of the control panel. - Made a 25 degree version for Telengard since he has a steep 20 degree pitch on his control panel. (45-20=25) Countersunk Mount v 1.1: --- Code: ---// SW Yoke Countersunk Mount for Star Wars or Alan-1 yoke v1.1. // Use the template to drill holes one at a time. Put a 1/4"-20 carriage bolt into each hole after you drill it to ensure proper alignment. After all four holes are drilled, cut the hole for the yoke mechanism. // Attach the yoke to the mount then use 1/4"-20 x 1-1/2" carriage bolts to attach the mount to the control panel. ///////////////////////////// // 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 MountAngle = 45; // Angle of the face where the yoke is attached -- usually 45 minus the angle of the control panel MountOffsetY = 70; // Mount distance from front edge BaseX = 180; // Overall base width BaseZ = 4; // Base flange thickness BaseBolt = 7; // Base carriage bolt hole size BaseBoltInset = 10; // Base carriage bolt hole inset distance from corner BaseBoltInsetY = 0; // Base carriage bolt hole additional Y-axis inset distance (moves holes closer to center) // 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 + BaseBoltInsetY, BaseZ/2]) cube ([BaseBolt, BaseBolt, BaseZ + 0.1], center=true); // Front left flange carriage bolt hole translate([BaseX - BaseBoltInset, BaseBoltInset + BaseBoltInsetY, BaseZ/2]) cube ([BaseBolt, BaseBolt, BaseZ + 0.1], center=true); // Front right flange carriage bolt hole translate([BaseX - BaseBoltInset, HousingY - BaseBoltInset - BaseBoltInsetY, BaseZ/2]) cube ([BaseBolt, BaseBolt, BaseZ + 0.1], center=true); // Back right flange carriage bolt hole translate([BaseBoltInset, HousingY - BaseBoltInset - BaseBoltInsetY, 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([MountAngle, 0, 0]) translate([0, MountOffsetY, 0]) cube ([76, 90, SideThick*4], center=true);// 76x90 main hole translate([BaseX/2, RoundoverDia/2, VertZ]) rotate([MountAngle, 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([MountAngle, 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([MountAngle, 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([MountAngle, 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, yoke mechanism hole, and player label hull (){ // Drill plate hull translate([BaseZ/2, BaseZ/2, 1]) cylinder (2, d = BaseZ, center=true); // Front left drill plate corner translate([BaseX - BaseZ/2, BaseZ/2, 1]) cylinder (2, d = BaseZ, center=true); // Front right drill plate corner translate([BaseX - BaseZ/2, HousingY - BaseZ/2, 1]) cylinder (2, d = BaseZ, center=true); // Back right drill plate corner translate([BaseZ/2, HousingY - BaseZ/2, 1]) cylinder (2, d = BaseZ, center=true); // Back left drill plate corner } // End drill plate hull // FlangeHoles(); // Drill plate carriage bolt holes translate([BaseX/2 + 14.5, RoundoverDia/2, VertZ]) rotate([MountAngle, 0, 0]) translate([0, MountOffsetY, -70]) cube ([105, 70, 150], center=true); // Drill plate yoke mechanism hole translate([BaseX/2, 20, 1]) Label("Player"); // Call the label module for Player on the drill plate } // End drill plate minus carriage bolt holes, yoke mechanism hole, and player label // } // 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 base translate([BaseX - BaseZ/2, BaseZ/2, BaseZ/2]) sphere (d=BaseZ); // Front right middle base translate([BaseX - BaseZ/2, HousingY - BaseZ/2, BaseZ/2]) sphere (d=BaseZ); // Back right middle base translate([BaseZ/2, HousingY - BaseZ/2, BaseZ/2]) sphere (d=BaseZ); // Back left middle base } // 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 outer translate([BaseX/2 + HousingX/2 - RoundoverDia/2, RoundoverDia/2, 1]) cylinder (2, d = RoundoverDia, center=true); // Front right base outer translate([BaseX/2 + HousingX/2 - RoundoverDia/2, HousingY - RoundoverDia/2, 1]) cylinder (2, d = RoundoverDia, center=true); // Back right base outer translate([BaseX/2 - HousingX/2 + RoundoverDia/2, HousingY - RoundoverDia/2, 1]) cylinder (2, d = RoundoverDia, center=true); // Back left base outer translate([BaseX/2 - HousingX/2 + RoundoverDia/2, RoundoverDia/2, VertZ]) sphere (d=RoundoverDia); // Front left middle outer translate([BaseX/2 + HousingX/2 - RoundoverDia/2, RoundoverDia/2, VertZ]) sphere (d=RoundoverDia); // Front right middle outer translate([BaseX/2 + HousingX/2 - RoundoverDia/2, HousingY - RoundoverDia/2, VertZ]) sphere (d=RoundoverDia); // Back right middle outer translate([BaseX/2 - HousingX/2 + RoundoverDia/2, HousingY - RoundoverDia/2, VertZ]) sphere (d=RoundoverDia); // Back left middle outer translate([BaseX/2 - HousingX/2 + RoundoverDia/2, RoundoverDia/2, VertZ]) rotate([MountAngle, 0, 0]) translate([0, 135, 0]) sphere (d=RoundoverDia); // Top left outer translate([BaseX/2 + HousingX/2 - RoundoverDia/2, RoundoverDia/2, VertZ]) rotate([MountAngle, 0, 0]) translate([0, 135, 0]) sphere (d=RoundoverDia); // Top right outer } // 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 inner translate([BaseX/2 + HousingX/2 - RoundoverDia/2, RoundoverDia/2, 0.9]) cylinder (2, d = RoundoverDia - (SideThick * 2), center=true); // Front right base inner translate([BaseX/2 + HousingX/2 - RoundoverDia/2, HousingY - RoundoverDia/2, 0.9]) cylinder (2, d = RoundoverDia - (SideThick * 2), center=true); // Back right base inner translate([BaseX/2 - HousingX/2 + RoundoverDia/2, HousingY - RoundoverDia/2, 0.9]) cylinder (2, d = RoundoverDia - (SideThick * 2), center=true); // Back left base inner translate([BaseX/2 - HousingX/2 + RoundoverDia/2, RoundoverDia/2, VertZ]) sphere (d=RoundoverDia - (SideThick * 2)); // Front left middle inner translate([BaseX/2 + HousingX/2 - RoundoverDia/2, RoundoverDia/2, VertZ]) sphere (d=RoundoverDia - (SideThick * 2)); // Front right middle inner translate([BaseX/2 + HousingX/2 - RoundoverDia/2, HousingY - RoundoverDia/2, VertZ]) sphere (d=RoundoverDia - (SideThick * 2)); // Back right middle inner translate([BaseX/2 - HousingX/2 + RoundoverDia/2, HousingY - RoundoverDia/2, VertZ]) sphere (d=RoundoverDia - (SideThick * 2)); // Back left middle inner translate([BaseX/2 - HousingX/2 + RoundoverDia/2, RoundoverDia/2, VertZ]) rotate([MountAngle, 0, 0]) translate([0, 135, 0]) sphere (d=RoundoverDia - (SideThick * 2)); // Top left inner translate([BaseX/2 + HousingX/2 - RoundoverDia/2, RoundoverDia/2, VertZ]) rotate([MountAngle, 0, 0]) translate([0, 135, 0]) sphere (d=RoundoverDia - (SideThick * 2)); // Top right inner } // 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([MountAngle, 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([MountAngle, 0, 0]) translate([0, MountOffsetY - Clearance, RoundoverDia/2-0.2]) color("blue") *cube ([120, 120, 2.01], center=true); // Test carriage bolt cylinder translate([BaseBoltInset, BaseBoltInset + BaseBoltInsetY, BaseZ]) color("white") *cylinder (6, d = (14.4), center=true); --- End code --- Telengard 25 degree version with shorter Y-axis (200==>165mm) and closer carriage bolts (180==>115mm center-to-center): --- Code: ---// SW Yoke Countersunk Mount for Star Wars or Alan-1 yoke v1.1. // Use the template to drill holes one at a time. Put a 1/4"-20 carriage bolt into each hole after you drill it to ensure proper alignment. After all four holes are drilled, cut the hole for the yoke mechanism. // Attach the yoke to the mount then use 1/4"-20 x 1-1/2" carriage bolts to attach the mount to the control panel. ///////////////////////////// // 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 = 165; // Housing depth MountAngle = 25; // Angle of the face where the yoke is attached -- usually 45 minus the angle of the control panel MountOffsetY = 70; // Mount distance from front edge BaseX = 180; // Overall base width BaseZ = 4; // Base flange thickness BaseBolt = 7; // Base carriage bolt hole size BaseBoltInset = 10; // Base carriage bolt hole inset distance from corner BaseBoltInsetY = 15; // Base carriage bolt hole additional Y-axis inset distance (moves holes closer to center) // 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 + BaseBoltInsetY, BaseZ/2]) cube ([BaseBolt, BaseBolt, BaseZ + 0.1], center=true); // Front left flange carriage bolt hole translate([BaseX - BaseBoltInset, BaseBoltInset + BaseBoltInsetY, BaseZ/2]) cube ([BaseBolt, BaseBolt, BaseZ + 0.1], center=true); // Front right flange carriage bolt hole translate([BaseX - BaseBoltInset, HousingY - BaseBoltInset - BaseBoltInsetY, BaseZ/2]) cube ([BaseBolt, BaseBolt, BaseZ + 0.1], center=true); // Back right flange carriage bolt hole translate([BaseBoltInset, HousingY - BaseBoltInset - BaseBoltInsetY, 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([MountAngle, 0, 0]) translate([0, MountOffsetY, 0]) cube ([76, 90, SideThick*4], center=true);// 76x90 main hole translate([BaseX/2, RoundoverDia/2, VertZ]) rotate([MountAngle, 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([MountAngle, 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([MountAngle, 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([MountAngle, 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, yoke mechanism hole, and player label hull (){ // Drill plate hull translate([BaseZ/2, BaseZ/2, 1]) cylinder (2, d = BaseZ, center=true); // Front left drill plate corner translate([BaseX - BaseZ/2, BaseZ/2, 1]) cylinder (2, d = BaseZ, center=true); // Front right drill plate corner translate([BaseX - BaseZ/2, HousingY - BaseZ/2, 1]) cylinder (2, d = BaseZ, center=true); // Back right drill plate corner translate([BaseZ/2, HousingY - BaseZ/2, 1]) cylinder (2, d = BaseZ, center=true); // Back left drill plate corner } // End drill plate hull // FlangeHoles(); // Drill plate carriage bolt holes translate([BaseX/2 + 14.5, RoundoverDia/2, VertZ]) rotate([MountAngle, 0, 0]) translate([0, MountOffsetY, -70]) cube ([105, 70, 150], center=true); // Drill plate yoke mechanism hole translate([BaseX/2, 20, 1]) Label("Player"); // Call the label module for Player on the drill plate } // End drill plate minus carriage bolt holes, yoke mechanism hole, and player label // } // 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 base translate([BaseX - BaseZ/2, BaseZ/2, BaseZ/2]) sphere (d=BaseZ); // Front right middle base translate([BaseX - BaseZ/2, HousingY - BaseZ/2, BaseZ/2]) sphere (d=BaseZ); // Back right middle base translate([BaseZ/2, HousingY - BaseZ/2, BaseZ/2]) sphere (d=BaseZ); // Back left middle base } // 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 outer translate([BaseX/2 + HousingX/2 - RoundoverDia/2, RoundoverDia/2, 1]) cylinder (2, d = RoundoverDia, center=true); // Front right base outer translate([BaseX/2 + HousingX/2 - RoundoverDia/2, HousingY - RoundoverDia/2, 1]) cylinder (2, d = RoundoverDia, center=true); // Back right base outer translate([BaseX/2 - HousingX/2 + RoundoverDia/2, HousingY - RoundoverDia/2, 1]) cylinder (2, d = RoundoverDia, center=true); // Back left base outer translate([BaseX/2 - HousingX/2 + RoundoverDia/2, RoundoverDia/2, VertZ]) sphere (d=RoundoverDia); // Front left middle outer translate([BaseX/2 + HousingX/2 - RoundoverDia/2, RoundoverDia/2, VertZ]) sphere (d=RoundoverDia); // Front right middle outer translate([BaseX/2 + HousingX/2 - RoundoverDia/2, HousingY - RoundoverDia/2, VertZ]) sphere (d=RoundoverDia); // Back right middle outer translate([BaseX/2 - HousingX/2 + RoundoverDia/2, HousingY - RoundoverDia/2, VertZ]) sphere (d=RoundoverDia); // Back left middle outer translate([BaseX/2 - HousingX/2 + RoundoverDia/2, RoundoverDia/2, VertZ]) rotate([MountAngle, 0, 0]) translate([0, 135, 0]) sphere (d=RoundoverDia); // Top left outer translate([BaseX/2 + HousingX/2 - RoundoverDia/2, RoundoverDia/2, VertZ]) rotate([MountAngle, 0, 0]) translate([0, 135, 0]) sphere (d=RoundoverDia); // Top right outer } // 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 inner translate([BaseX/2 + HousingX/2 - RoundoverDia/2, RoundoverDia/2, 0.9]) cylinder (2, d = RoundoverDia - (SideThick * 2), center=true); // Front right base inner translate([BaseX/2 + HousingX/2 - RoundoverDia/2, HousingY - RoundoverDia/2, 0.9]) cylinder (2, d = RoundoverDia - (SideThick * 2), center=true); // Back right base inner translate([BaseX/2 - HousingX/2 + RoundoverDia/2, HousingY - RoundoverDia/2, 0.9]) cylinder (2, d = RoundoverDia - (SideThick * 2), center=true); // Back left base inner translate([BaseX/2 - HousingX/2 + RoundoverDia/2, RoundoverDia/2, VertZ]) sphere (d=RoundoverDia - (SideThick * 2)); // Front left middle inner translate([BaseX/2 + HousingX/2 - RoundoverDia/2, RoundoverDia/2, VertZ]) sphere (d=RoundoverDia - (SideThick * 2)); // Front right middle inner translate([BaseX/2 + HousingX/2 - RoundoverDia/2, HousingY - RoundoverDia/2, VertZ]) sphere (d=RoundoverDia - (SideThick * 2)); // Back right middle inner translate([BaseX/2 - HousingX/2 + RoundoverDia/2, HousingY - RoundoverDia/2, VertZ]) sphere (d=RoundoverDia - (SideThick * 2)); // Back left middle inner translate([BaseX/2 - HousingX/2 + RoundoverDia/2, RoundoverDia/2, VertZ]) rotate([MountAngle, 0, 0]) translate([0, 135, 0]) sphere (d=RoundoverDia - (SideThick * 2)); // Top left inner translate([BaseX/2 + HousingX/2 - RoundoverDia/2, RoundoverDia/2, VertZ]) rotate([MountAngle, 0, 0]) translate([0, 135, 0]) sphere (d=RoundoverDia - (SideThick * 2)); // Top right inner } // 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([MountAngle, 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([MountAngle, 0, 0]) translate([0, MountOffsetY - Clearance, RoundoverDia/2-0.2]) color("blue") *cube ([120, 120, 2.01], center=true); // Test carriage bolt cylinder translate([BaseBoltInset, BaseBoltInset + BaseBoltInsetY, BaseZ]) color("white") *cylinder (6, d = (14.4), center=true); --- End code --- 25 degree mount: 25 degree test print currently in progress. Scott |
| PL1:
25 degree test print worked great. - Perfect fit. - Gears/wiring only sticks out about 3.5" below the mount. A question came up via PM about calculating the mount angle on a tilted control panel. - Red plus yellow equals orange. - Yellow is the variable "MountAngle" in the OpenSCAD code. Scott |
| PL1:
Yoke and 25 degree test print mounted on scrap 1/2" plywood using 1/4"-20 x 1-1/2" carriage bolts. Scott |
| PL1:
Telengard used the countersunk mount on his cab with swappable panels. He says that the template makes the jigsaw cuts easy and the mount works great. Pic posted with his permission. Scott |
| Navigation |
| Message Index |