Our Larval Engineer received a logic probe / pulser set for Christmas:

They’re the low-cost RSR-611 and -620 from the usual eBay vendor, not my ancient HP10525/10526 set, but they should suffice. Perhaps nobody uses logic probes these days, what with most of the parts being too small for even a needle tip, but …
Anyhow, they didn’t have caps over the sharp probe tips, so I rummaged around until I found the stash of cigar tubes (some of which went into that air flow straightener) that were about the right size. I thought about 3D printing an adapter between tubes and probes:

It’s actually a subtractive kind of thing, with a model of the probe tip subtracted from a suitable cylindrical object:

But then I realized the tubes were thermoplastic, held each one over a stove burner until the open end went transparent and droopy, rammed it down over the probe tip, and trimmed off the ragged edge. Worked fine, fits securely, and even looks pretty good:

I’ll never print the adapters, but maybe one of us will tweak the model to do something else…
The OpenSCAD source code:
// RSR Logic Probe / Pulser Cap
// Ed Nisley KE4ZNU December 2012
// Adapts cigar tube to probe body
// Layout options
Layout = "Build";
// Overall layout: Show Build
// Parts: Probe
//- Extrusion parameters must match reality!
// Print with +1 shells and 3 solid layers
ThreadThick = 0.25;
ThreadWidth = 2.0 * ThreadThick;
HoleWindage = 0.2;
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
Protrusion = 0.1; // make holes end cleanly
//----------------------
// Dimensions
ProbeDia = 18.0; // dia of main body
ProbeTipDia = 6.8; // dia at end of plastic cone
ProbeTipLen = 30.0; // length of metal ferrule + tip
ProbeConeLen = 17.5; // cone taper length
TubeOD = 17.25;
TubeWall = 0.50;
TubeID = TubeOD - 2*TubeWall;
TubeLen = 15; // slip fit over tube body
BodyLen = 20; // slip fit over probe body
WallThick = 3.5*ThreadWidth; // basic adapter wall thickness
AdapterLen = TubeLen + BodyLen;
AdapterOD = ProbeDia + 2*WallThick;
AdapterSides = 4*4;
//----------------------
// Useful routines
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 + HoleWindage)/2,
h=Height,
$fn=Sides);
}
module ShowPegGrid(Space = 10.0,Size = 1.0) {
Range = floor(50 / Space);
for (x=[-Range:Range])
for (y=[-Range:Range])
translate([x*Space,y*Space,Size/2])
%cube(Size,center=true);
}
module Probe() {
union() {
cylinder(r=((ProbeDia + HoleWindage)/2),
h=(BodyLen + 1.2*Protrusion),$fn=2*AdapterSides);
translate([0,0,(BodyLen + Protrusion)])
cylinder(r1=(ProbeDia + HoleWindage)/2,
r2=ProbeTipDia/2,
h=ProbeConeLen,$fn=2*AdapterSides);
cylinder(r=ProbeTipDia/2,h=(BodyLen + ProbeConeLen + ProbeTipLen),$fn=2*AdapterSides);
}
}
module ProbeSleeve() {
difference() {
cylinder(r=AdapterOD/2,h=AdapterLen);
translate([0,0,-Protrusion])
Probe();
PolyCyl((TubeOD + HoleWindage),(AdapterLen + Protrusion),2*AdapterSides);
}
}
//----------------------
// Build it!
ShowPegGrid();
if (Layout == "Show")
ProbeSleeve();
if (Layout == "Build")
translate([0,0,AdapterLen])
rotate([180,0,0])
ProbeSleeve();
if (Layout == "Probe")
Probe();