Shuttles Board Game: Replacement Pegs

For reasons not relevant here, I made replacement pegs for the Shuttles board game:

Shuttles Game - solid model - Slic3r
Shuttles Game – solid model – Slic3r

Not the most challenging solid model I’ve ever conjured from the vasty digital deep, but 3D printing is really good for stuff like this.

The OEM pegs have a hollow center, most likely to simplify stripping them from the injection mold, which I dutifully duplicated:

Shuttles Game pegs - hollow - solid model
Shuttles Game pegs – hollow – solid model

It turns out the additional perimeter length inside the pegs requires 50% more printing time, far offsetting the reduced 10% infill. Given that each solid set takes just under an hour, I decided to lose half an hour of verisimilitude.

I plunked a nice round cap atop the OEM peg’s flat end, but stopped short of printing & installing a round plug for the butt end.

While the 3D printer’s hot, ya may as well make a bunch:

Shuttles game pegs
Shuttles game pegs

Game on …

The OpenSCAD source code as a GitHub Gist:

Update: They’re a bit too large, so the Gist now produces tapered pegs.

// Shuttles game pegs
// Ed Nisley KE4ZNU - July 2020
/* [Layout Options] */
Layout = "Peg"; // [Build, Peg]
Hollow = false;
//-------
//- Extrusion parameters must match reality!
/* [Hidden] */
ThreadThick = 0.25;
ThreadWidth = 0.40;
HoleWindage = 0.2;
Protrusion = 0.1; // make holes end cleanly
ID = 0;
OD = 1;
LENGTH = 2;
//-------
// Dimensions
/* [Dimensions] */
Peg = [4.0,7.5,26.0]; // overall length, including the rounded Cap
Taper = 1.0;
CapRadius = Peg[OD]/2;
PegBaseLength = Peg[LENGTH] - CapRadius;
NumPegs = [1,6]; // lay out in array
ArrayCenter = [NumPegs[0] - 1,NumPegs[1] - 1] / 2;
NumSides = 6*4;
//-------
module PolyCyl(Dia,Height,ForceSides=0) { // based on nophead's polyholes
Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);
FixDia = Dia / cos(180/Sides);
cylinder(r=FixDia/2 + HoleWindage,h=Height,$fn=Sides);
}
//-------
// One peg
module Peg() {
union() {
translate([0,0,PegBaseLength])
difference() {
sphere(d=Peg[OD],$fn=NumSides);
translate([0,0,-Peg[OD]/2])
cube([2*Peg[OD],2*Peg[OD],Peg[OD]],center=true);
}
difference() {
cylinder(d1=Peg[OD] - Taper,d2=Peg[OD],h=PegBaseLength,$fn=NumSides);
if (Hollow)
translate([0,0,-Protrusion])
PolyCyl(Peg[ID],PegBaseLength+Protrusion,NumSides);
}
}
}
//-------
// Build it!
if (Layout == "Peg")
Peg();
if (Layout == "Build")
for (i=[0:NumPegs[0] - 1], j=[0:NumPegs[1] - 1])
translate([(i - ArrayCenter.x)*1.5*Peg[OD],(j - ArrayCenter.y)*1.5*Peg[OD],0])
Peg();

Comments are closed.