The Logitech notebook webcam that peers into the Thing-O-Matic has terrible dynamic range compensation; turning on the LED ring light washes out the image something awful. An old Logitech ball camera seems better, but it sits atop a rubbery dingus adapted to grip huge old laptops. So I built an adapter with a standard 1/4-20 tripod screw thread in the bottom that ought to make it more useful.
The old & new mounts compared:

The color change comes from switching to yellow filament for an upcoming larger object.
The solid model shows those tiny little notches will require a bit of riffler file work:

The bottom has a blind 1/4-20 tapped hole. Lacking a bottoming tap, not having any broken 1/4-20 taps, and being unwilling to grind the end off a perfectly good taper tap, I filed three notches along a bolt. Ran the taper tap in until it hit bottom, ran the bolt in likewise, and defined the result to be Good Enough:

On the other end, the most probable failure will leave that delicate little post jammed firmly inside the camera’s socket. There’s not enough post to allow printing a small guide hole, but there’s no real need for one; I drilled a #50 hole right down the middle, ran a 2-56 screw into it without tapping the hole, and filed the screw head flat:

After cleaning up those notches, it snapped solidly into place:

And then the camera sits neatly atop a cheap Gorillapod knockoff:

That tiny reddish dot in the middle of the imposing set of rings marks the actual lens, so it’s more of a pinhole camera than anything else. The fixed focus kicks in beyond a meter, but a bit of rummaging in the Box o’ Lenses produced a random meniscus lens that pulled the focus in to maybe 100 mm. Alas, that means the camera must float in mid-air about 15 mm inside the Thing-O-Matic’s box. If I can conjure up a mount that holds the ball inside the box, above-and-forward of the stage, that’d work great. VLC can allegedly rotate the image upside-down, so maybe I can mount it bottom-up.
Here’s everything I know about those two cameras, with the ball camera on top and the webcam on the bottom:

Apparently it’s easier to put that information on a tag than provide a good old data plate on the camera body.
The OpenSCAD source code:
// Tripod mount for Logitech ball camera
// Ed Nisley KE4ZNU - Oct 2011
include </home/ed/Thing-O-Matic/lib/MCAD/units.scad>
include </home/ed/Thing-O-Matic/Useful Sizes.scad>
include </home/ed/Thing-O-Matic/lib/visibone_colors.scad>
//-------
//- Extrusion parameters must match reality!
// Print with +0 shells and 3 solid layers
ThreadThick = 0.33;
ThreadWidth = 2.0 * ThreadThick;
HoleFinagle = 0.2;
HoleFudge = 1.02;
function HoleAdjust(Diameter) = HoleFudge*Diameter + HoleFinagle;
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
Protrusion = 0.1; // make holes end cleanly
//-------
// Dimensions
BallDia = 60.0; // camera ball
BallRad = BallDia/2;
BaseDia = 16.0; // interface at tripod surface
BaseRad = BaseDia/2;
BaseLength = 10.0; // to base of ball
BoltDia = Tap025_20; // standard 1/4-20 thread
BoltLength = 7.0;
StemLength = 8.5;
StemDia = 4.7;
StemRad = StemDia/2;
FlangeWidth = 6.6;
FlangeThick = 2.6;
NotchSectionDia = 1.4; // toroid cross-section diameter
NotchSectionRad = NotchSectionDia/2;
NotchOffset = 2.3; // from top of stem
//-------
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=HoleAdjust(FixDia)/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);
}
//-------
//
ShowPegGrid();
translate([0,0,BaseLength])
union() {
difference() {
translate([0,0,-BaseLength])
cylinder(r=BaseRad,h=2*BaseLength);
translate([0,0,BallRad])
sphere(r=BallRad);
translate([0,0,-(BaseLength + Protrusion)])
PolyCyl(BoltDia,(BoltLength + Protrusion));
}
rotate(180/16)
cylinder(r=StemRad,h=StemLength,$fn=16);
difference() {
translate([0,0,StemLength/2])
cube([FlangeWidth,FlangeThick,StemLength],center=true);
translate([0,0,(StemLength - NotchOffset)])
rotate_extrude(convexity=3,$fn=64)
translate([FlangeWidth/2,0,0])
circle(r=NotchSectionRad,$fn=16);
translate([0,-FlangeWidth/2,StemLength + sqrt(FlangeWidth)])
rotate([0,45,0])
cube(FlangeWidth + 2*Protrusion);
translate([0,FlangeWidth/2,StemLength + sqrt(FlangeWidth)])
rotate([0,45,180])
cube(FlangeWidth + 2*Protrusion);
}
}











