-
Shuttles Board Game: Replacement Pegs
For reasons not relevant here, I made replacement pegs for the Shuttles board game:

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 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 Game on …
The OpenSCAD source code as a GitHub Gist:
Update: They’re a bit too large, so the Gist now produces tapered pegs.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters// 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();