Posts Tagged Sherline

Stereo Zoom Microscope: USB Camera Mount

My stereo zoom microscope neatly filled the entrance pupil of the late, lamented Casio EX-Z850, so that a simple adapter holding it on the eyepiece produced credible images:

Thinwall open boxes - side detail - 4.98 4.85 measured

Thinwall open boxes – side detail – 4.98 4.85 measured

Alas, the shutter failed after that image, leaving me with pictures untaken and naught to take them with.

The least-awful alternative seems to be gimmicking up an adapter for a small USB camera from the usual eBay source:

Fashion USB video - case vs camera

Fashion USB video – case vs camera

The camera’s 640×480 VGA resolution is marginally Good Enough for the purpose, as I can zoom the microscope to completely fill all those pixels. The optics aren’t up to the standard set by the microscope, but we can cope with that for a while.

A bit of doodling & OpenSCAD tinkering produced a suitable adapter:

USB Camera Microscope Mount - solid model

USB Camera Microscope Mount – solid model

To which Slic3r applied the usual finishing touches:

USB Camera Microscope Mount - Slic3r preview

USB Camera Microscope Mount – Slic3r preview

A bit of silicone tape holds the sloppy focusing thread in place:

USB Camera Microscope Mount - cap with camera

USB Camera Microscope Mount – cap with camera

Those are 2-56 screws that will hold the cap onto the tube. I drilled out the clearance holes in the cap and tapped the holes in the eyepiece adapter by hand, grabbing the bits with a pin vise.

Focus the lens at infinity, which in this case meant an old DDJ cover poster on the far wall of the Basement Laboratory, and then it’ll be just as happy with the image coming out of the eyepiece as a human eyeball would be.

I put a few snippets of black electrical tape atop the PCB locating tabs before screwing the tube in place. The tube ID is 1 mm smaller than the PCB OD, in order to hold the PCB perpendicular to the optical axis and clamp it firmly in place. Come to find out that the optical axis of the lens isn’t perfectly perpendicular to the PCB, but it’s close enough for my simple needs.

And then it fits just like you’d expect:

USB Camera Microscope Mount - on eyepiece

USB Camera Microscope Mount – on eyepiece

Actually, that’s the second version. The distance from the camera lens (equivalently: the PCB below the optical block, which I used as the datum plane) to the eyepiece is a critical dimension that determines whether the image fills the entrance pupil. I guesstimated the first version by hand-holding the camera and measuring with a caliper, tried it out, then iteratively whacked 2 mm off the tube until the image lit up properly:

USB Camera Microscope Mount - adjusting tube length

USB Camera Microscope Mount – adjusting tube length

Minus 4 mm made it slightly too short, but then I could measure the correct position, tweak that dimension in the code, and get another adapter, just like the first one (plus a few other minor changes), except that it worked:

USB Camera Microscope Mount - first light

USB Camera Microscope Mount – first light

That’s a screen capture from VLC, which plays from /dev/video0 perfectly. Some manual exposure & color balance adjustment may be in order, but it’s pretty good for First Light.

It turns out that removing the eyepiece and holding the bare sensor over the opening also works fine. The real image from the objective fills much more area than the camera’s tiny sensor: the video image covers about one digit in that picture, but gimmicking up a bare-sensor adapter might be useful.

The OpenSCAD source code:

// USB Camera mount for Microscope Eyepiece
// Ed Nisley KE4ZNU - August 2015

Layout = "Build";                    // Show Build Mount Cap

//- Extrusion parameters must match reality!
//  Print with 2 shells

ThreadThick = 0.25;
ThreadWidth = 0.40;

HoleWindage = 0.2;

Protrusion = 0.1;           // make holes end cleanly

function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);

inch = 25.4;

Tap2_56 = 0.070 * inch;
Clear2_56 = 0.082 * inch;
Head2_56 = 0.156 * inch;
Head2_56Thick = 0.055 * inch;
Nut2_56Dia = 0.204 * inch;
Nut2_56Thick = 0.065 * inch;
Washer2_56OD = 0.200 * inch;
Washer2_56ID = 0.095 * inch;

BuildGap = 5.0;

// Dimensions

//-- Camera

PCBThick = 1.1;
PCBDia = 24.5;
PCBClampDia = 23.0;

KeySize = [IntegerMultiple(27.6,ThreadWidth),IntegerMultiple(9.5,ThreadWidth),IntegerMultiple(PCBThick,ThreadThick)];
KeyOffset = [0.0,1.5,0];

CameraOffset = 22.3;                    // distance from eyepiece to camera PCB

WallThick = 4.0;

EyePieceOD = 30.0;
EyePieceLen = 30.0;

BodyOD = EyePieceOD + 2*WallThick;
BodyLen = CameraOffset + EyePieceLen - 5.0;

echo(str("Body length: ",BodyLen));

CapSocket = 10;
CapLen = CapSocket + WallThick;
CableOD = 3.7;

echo(str("Cap length: ",CapLen));

echo(str("Total length: ",BodyLen + CapLen));

NumScrews = 4;
ScrewAngle = 45;

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 + HoleWindage)/2,

// Components

module LensMount() {
    difference() {
            PolyCyl(PCBClampDia,(BodyLen + 2*Protrusion),NumSides);
        for (i=[0:NumScrews-1])
            rotate(ScrewAngle + i*360/NumScrews)
                translate([(BodyOD/2 - 1.5*Head2_56/2),0,-Protrusion])

module CamCap() {
    difference() {
        translate(KeyOffset + [0,0,(CapLen - KeySize[2]/2 + Protrusion/2)])
            cube((KeySize + [0,0,Protrusion]),center=true);
        if (false)
            translate([0,BodyOD/2,(CapLen - CableOD/2 + Protrusion/2)])
                    cube([CableOD,(CableOD + Protrusion),BodyOD],center=true);
        for (i=[0:NumScrews-1])
            rotate(ScrewAngle + i*360/NumScrews)
                translate([(BodyOD/2 - 1.5*Head2_56/2),0,-Protrusion])
                        PolyCyl(Clear2_56,(CapLen + 2*Protrusion),4);

// Build it!

if (Layout == "Mount")

if (Layout == "Cap")

if (Layout == "Show") {
    translate([0,0,CapLen + 5])
if (Layout == "Build") {
    translate([-(BodyOD/2 + BuildGap),0,0])
        translate([(BodyOD/2 + BuildGap),0,0])

, , ,


DC Motor Mounting Plate

The Squidwrench Power Wheels Racer needed a mounting bracket for its DC motor, so Matt handed me a precut steel slab and some drawings. I did a manual layout to get a feel for the sizes:

Motor Mount - dye layout

Motor Mount – dye layout

Yes, it’s slightly rhomboid & irregular on the sides; it’ll be welded to a U-channel. The front edge is the straightest and I scribed a perpendicular datum line over on the right, from which to measure the motor center point.

But then, realizing I’d have to mill the central hole anyway, I did what I should have done from the beginning and lined it up on the Sherline:

Motor Mount - Sherline laser centering

Motor Mount – Sherline laser centering

With the part zeroed at the center, everything has polar coordinates. The bolt holes are #10 on a 50 mm BCD, which is G0 @25^[45+90*i]. Rather than writing & debugging a program, I did it all by feeding manual instructions into the interpreter; the i gets typed as 0, 1, 2, and 3 by clicking on a previous command, backspacing, and retyping, which is both faster and easier than it sounds. The holes are drill cycles: G81 Z-7 R1 F30

This being steel on a Sherline, the rule of thumb that says you can drill at 100x the drill diameter (in inch/min or mm/min, as appropriate) at 3000 RPM gets derated by at least factor of 10. I settled on 30 mm/min for a #10 drill (0.194 inch = 4.9 mm → 500 mm/min = hogwash) after trying the first hole at 50 mm/min:

Motor Mount - bolt holes

Motor Mount – bolt holes

The least horrible way to cut out the hole for the motor mounting boss involved chain drilling to excavate the most steel with the least effort. These center drill points are at G0 @14 ^[15*i] with i in [0..23]:

Motor Mount - chain center drilling

Motor Mount – chain center drilling

I drilled every even hole #27, then every odd hole #28, both at 50 mm/min, to get a thin web:

Motor Mount - chain drilled

Motor Mount – chain drilled

Then helix-mill downward with a 1/8 inch end mill at 1 mm per pass:

Motor Mount - helix milling

Motor Mount – helix milling

That started at 14 mm from the origin to match the hole circle: G3 I-14 F100 Z-1

Then I switched to a 3/8 inch = 9.5 mm end mill to bring the hole up to size, ending with G3 I-12.75 F300

Motor Mount - center hole milled

Motor Mount – center hole milled

A trial fit showed the hole was slightly off-round, probably due to a few mils of backlash in both axes, and slightly too small, because that’s how I wanted it. Flipped back-to-front, reclamped, recentered, ran the cutter around at 12.75 mm to clear the ovalness, then crept out to 12.8 mm, and it was all good:

Motor Mount - test fit

Motor Mount – test fit

That’s an easy fit with maybe 0.1 mm = 4 mil radial play around the boss. Better than that, I cannot do.

Lacquer thinner stripped the layout dye and it’s ready for welding:

Motor Mount - with motor

Motor Mount – with motor

Reminders for next time…

The drill feed on a rigid machine with plenty of spindle power is 100 x (drill dia) @ 3000 RPM. On the Sherline, in steel, 10 x dia is optimistic. Aluminum feeds run higher, but don’t get stupid.

Re-centering to the accuracy required for this job is a matter of noting the coordinates where the cutter kisses the perimeter across a diameter along each axis, adding the coordinates, dividing by two, moving to that position, and zeroing the origin. Do that in X, Y, X, and Y and it’s good enough. You could automate that with a touch probe, of course. Hand-turning the spindle with the cutter in place to feel it kiss the workpiece is fine, but use the same cutting edge on both sides of the diameter.

Figure the chain drill diameter thusly:

  • Pick a reasonable drill diameter; #10 is about as large as you want on a Sherline
  • Drill circle dia = final milled hole diameter – drill dia – 2 mm, round down to lower integer
  • # holes = π x DCD / drill dia, rounded down to lower integer
  • Hole angle = 360 / # holes
  • Hole radius = DCD / 2

Wisely is it written that a man with a CNC milling machine has many friends.



Sony HDR-AS30V: AKA-SF1 Skeleton Frame Latch Repair

My Sony HDR-AS30V is an action camera, but requires an external case / frame to mount it on anything. Here’s the camera inside its AKA-SF1 Skeleton Frame atop my helmet:

Sony HDR-AS30V camera on bike helmet - inverted

Sony HDR-AS30V camera on bike helmet – inverted

Four 1 mm tall ramps on the inside of the black base (the part just above the yellow sled) snap into 2.6 mm square sockets in the skeleton frame surrounding the camera. For an unknown reason(s) that surely involves applying forces I don’t remember, an opposing pair of those ramps broke off, leaving the other pair to loosely hold one end of the camera in place.

In this picture, the left ramps (one visible) are missing, leaving a square-ish gray scar that’s nearly indistinguishable from the reflection on the intact ramp on the right:

Sony HDR-AS30V Skeleton Mount - broken latch ramps

Sony HDR-AS30V Skeleton Mount – broken latch ramps

Surprisingly, the round head of a brass 0-80 machine screw fits neatly inside the square socket on the frame; they’re a bit more than 1 mm deep. The approach ramps visible below the sockets guide the latches on the base:

Sony HDR-AS30V Skeleton Mount - frame sockets

Sony HDR-AS30V Skeleton Mount – frame sockets

So I figured I could just shave off the remaining two latch ramps, drill four holes at the proper spots, and replace the plastic ramps with metal screws.

I clamped the skeleton frame to the Sherline’s tooling plate, aligned it parallel to the X axis, put the laser spot dead center in the square socket, then snapped the base onto the frame. The laser spot shows where the drill will hit:

Sony HDR-AS30V Skeleton Mount - laser hole alignment

Sony HDR-AS30V Skeleton Mount – laser hole alignment

A carbide drill did the honors:

Sony HDR-AS30V Skeleton Mount - 0-80 hole drilling

Sony HDR-AS30V Skeleton Mount – 0-80 hole drilling

That’s a #55 = 0.0520 hole for 50% thread, rather than the proper 3/64 = 0.0469 hole for 75% thread, because that’s the closest short carbide drill I had; an ordinary steel twist drill, even in the screw-machine length I use on the Sherline, would probably scamper away. The hole isn’t quite on the sloped bottom edge of the base, but it’s pretty close.

The first hole didn’t emerge quite in the center of its ramp scar:

Sony HDR-AS30V Skeleton Mount - hole position - interior

Sony HDR-AS30V Skeleton Mount – hole position – interior

Which made sense after I thought about it: the ramp tapers to nothing in the direction of the offset, so the hole actually was in the middle of the matching socket.

Threading the holes required nothing more than finger-spinning an 0-80 tap:

Sony HDR-AS30V Skeleton Mount - tapping 0-80

Sony HDR-AS30V Skeleton Mount – tapping 0-80

The feeble thread engagement didn’t matter, because those mysterious tabs-with-slots (possibly for tie-down strings?) just above the holes were a perfect fit for 0-80 brass nuts:

Sony HDR-AS30V Skeleton Mount - reassembled

Sony HDR-AS30V Skeleton Mount – reassembled

The screw heads extend into the sockets, hold the frame solidly in the base, and make it impossible to pull out. Although the frame still slides / snaps into the base, that seems like it will wear out the sockets in fairly short order, so I’ll unlatch the frame (with the yellow slide latch on top), open it up, ease it into position, and then latch it in place. That was the only way to remove it from the original latches, so it’s not a big deal.

I should add a drop of epoxy to each of those nuts and perhaps fill the screw slots with epoxy to keep them from abrading the plastic inside the sockets. Maybe a dab of epoxy on the heads, followed by latching the frame in place, would form four square pegs to exactly fill the sockets.

This was a straightforward repair that should not have been necessary…

, ,


HP7475A Plotter: Never Throw Anything Out

Our Larval Engineer stopped by, on her way to a half-year co-op job out around Route 128, and devoted a few days to merge-sorting / triaging her possessions. Having shown her the HP 74754A plotter project, she later dropped a bag o’ stuff on my desk without comment:

HP7475A - My old pens racks doodles

HP7475A – My old pens racks doodles

The perforated pen holder stuck to the plotter case (hey, it would still fit!) in front of the carousel with a bit of foam tape on an angled bracket you can’t quite see. It held 15 pens at the ready: I really used that plotter.

The doodle on the yellow sheet sketches a bulky adapter between the spindle nose thread on the Sherline CNC mill and a plotter cartridge. The flange-less pen body might just fit into the spindle bore, but I remember concluding that machining pen bodies or adapters wasn’t worth the effort. Now it’s a simple matter of some OpenSCAD source code and a few hours of hands-off production, so perhaps I should re-think that.

No dates on anything, but I got the Sherline in 2004. The pen holder probably dates back to the late 80s, shortly after I got the plotter. Most likely, I gave her the bag o’ stuff and told her to make something interesting; it could still happen…



Leave a comment

Kenmore 158 LED Heatsink: Epoxy Sculpture

The LED mounting plate inside the sewing machine’s end cap sits 30° from the vertical axis of the needle. Even though the surface-mount LED emitters have a broad pattern, it seemed reasonable to aim them toward the needle to put the brightest spot where it’s needed.

The LEDs must have enough heatsinking to pull 2+ W out of the solder pads, so I figured I’d just epoxy them firmly to the mounting plate, rather than try to gimmick up a circuit board that would interpose a fiberglass slab in the thermal path.

Combine those two requirements and you (well, I) get a wire fixture that provides both power and alignment:

LED mount - wire fixture

LED mount – wire fixture

The LED body is 5 mm square, sin(30°) = 0.5, and the rear wire raises contact end by 2.5 mm. This still isn’t an exact science; if the center of the beam lands in the right time zone, that’s close enough.

Testing the LED assembly at low current before entombing it shows the emitters have six chips in series (clicky for more dots):

LED mount - lighting test

LED mount – lighting test

The grotendous solder job follows my “The Bigger the Blob, the Better the Job” principle, modulated by the difficulty of getting a smooth finish on bare wires. Indeed, the first wires I painstakingly bent, set up, and soldered turned out to have an un-solderable surface, much like the header pins from a while ago. That hank of wire now resides in the copper cable recycling bucket; you’re looking at Version 1.1.

Two strips of Kapton tape under the ends of the wires hold them off the (scoured and wiped clean!) aluminum plate, with more tape forming a dam around the nearest edges:

LED mount - epoxy pour

LED mount – epoxy pour

Despite being steel-filled, JB Weld remains nonconductive, the epoxy-filled gap under the wires insulates them from the plate, the wires aren’t shorted together, and there’s a great thermal bond to the heatsink. Good stuff, that JB Weld!

A view from the back side shows the epoxy sagging over the wires before I added another blob:

LED mount - epoxy pour - rear

LED mount – epoxy pour – rear

The LED assembly just sits there, without being anchored, until the epoxy cures. The epoxy remains thick enough (in the rather chilly Basement Laboratory) so that it doesn’t exactly pour, can be eased into place without too much muss & fuss, and stays pretty much where it’s put.

After the epoxy stiffened a bit, I gingerly positioned stranded wires not-quite-touching the LED wires and applied a dot of solder to each. Powering the LEDs from a bench supply at 500 mW each took the chill off the heatsink and encouraged proper curing:

LED mount - heated epoxy cure

LED mount – heated epoxy cure

Fast forward to the next day, return the heatsink to the Sherline, and drill a hole for the power cable. It’s centered between the wires in Y and between the fins in X, which is why I couldn’t drill before mounting the LEDs:

LED mount - drilling cable hole

LED mount – drilling cable hole

It’s not like I’m building this from any specs…

Trim the wires, solder the cable in place, cover the wire ends & joints with JB KwikWeld epoxy, and it’s done:

LED mount - final epoxy

LED mount – final epoxy

With the LEDs running their 230 mA rated current, the entire heatsink gets pleasantly warm and the mounting plate isn’t much warmer than that. I loves me a good JB Weld job…

However, I suspect they’ll shine too brightly at full throttle, which means an adjustable power supply looms on the horizon…



Kenmore 158 LED Heatsink: Machinable Wax FTW!

In the quest for More Light around the Kenmore 158’s needle, I’m replacing the pair of 10 mm LEDs with a pair of 21 V / 115 mA = 2.5 W surface-mount emitters that require a good heatsink. Because the heatsink must mount inside the sewing machine’s end cap, there’s not much air circulation: when sizing the heatsink, I figure that nothing exceeds like excess.

There doesn’t seem to be any way to measure the available space inside the hinged end cap, so the plan is to fit the largest possible heatsink, run it for a while, and then build a smaller (and presumably less awkward) heatsink based on those measurements.

I sawed a slice off an aluminum heatsink harvested from a junked PC, wrapped masking tape around it, and filled it with machinable wax to prevent the fins from chattering:

Heatsink filled with machinable wax

Heatsink filled with machinable wax

Pouring the wax into a cold heatsink worked about as poorly as you’d expect, so I held the heatsink over the stove burner, slowly remelted the wax into the bottom of the fins, and topped it off with more wax from the pot. I’m almost certainly using too little fire; the stuff melts at a bit under 300 °F and doesn’t really get liquid at any temperature I was comfortable with. The double boiler we use for candle wax won’t get nearly hot enough.

Clamped into the Sherline’s vise, it’s obvious that the slitting saw won’t quite reach all the way through:

Heatsink - slitting saw setup

Heatsink – slitting saw setup

I figured the height by working backwards from the outside of the end cap and forward from the bulkhead at the end of the arm. As it turned out, the middle fins fit and the outer two didn’t, but it was surprisingly close. The length turned out to be spot on, which is the sort of coincidence that tells me I’m on the right track. This is not an exact science.

One cut along the front, another along the rear, and the fins popped right off:

Heatsink - cut detail

Heatsink – cut detail

Those aren’t broken teeth on the blade, they’re just loaded with wax and aluminum dust.

I love the way Sherline’s little flycutter produces a nice finish with minimal effort:

Heatsink - flycut fins

Heatsink – flycut fins

My plan to secure the heatsink to the sewing machine by repurposing two convenient screws was foiled by the lower screw: it’s too short and sports a fine 6-40 thread. Not only does my heap lack 6-40 screws, Eks doesn’t have any, either; I would have lost big money on that bet.

Brownell’s has a fillister-head screw assortment including 6-40 threads, so that problem will Go Away in short order, but they’re out of stock at the moment. My other Brownell’s assortment (which they no longer carry) includes 5-40 screws, but …

This being a prototype, I simply milled a recess to accommodate the offending screw head:

Heatsink - screw head clearance slot

Heatsink – screw head clearance slot

The upper screw originally held the incandescent lamp socket in place and will be long enough to hold the heatsink.

In there somewhere, the ragged bandsawed edge on the far side got itself milled smooth.

Some trial fitting showed the two outer fins must be 2 mm shorter to fit inside the end cap, so the finish on those isn’t nearly as nice:

Heatsink - removing machinable wax

Heatsink – removing machinable wax

That shows the machinable wax on its way out of the fins, urged along by whacking the ends with a wooden stick. The wax doesn’t adhere to the aluminum and leaves a clean surface, although I’m sure I should scrub it down with solvent to remove any residue.

A bit of paper-doll cutout work provided a shape for the plate that will hold the LEDs, then some bandsaw and hand-filing and milling trimmed it to fit. The heatsink has a slot along the edge, barely visible at the right end of the previous photo, so I hand-filed a rabbet in the plate to let it sit flat against the bottom of the slot and the end of the fins.

Steel-filled epoxy (good old JB Weld) secures the plate and provides good thermal transfer. The steel bar holds the plate against the fins while the epoxy cures:

Heatsink - epoxying LED mount

Heatsink – epoxying LED mount

After some iterative abrasive adjustment on the belt sander, the assembly just barely fits inside the end cap. This view looks through the bobbin access hatch opening in the bed:

Heatsink - endcap trial fit

Heatsink – endcap trial fit

The two outer fins hit various mold sprues / vents / protrusions inside the cast (!) end cap. I think the next version will have three fins, as the cap rides right against the outer fin; the abrasive adjustment came into play on that fin and the end of the LED plate.

The plate could be a bit longer, but let’s see how this one works out.

The notch just barely clears the arm that moves the needle sideways during zig-zag stiches. The rectangular joint guides the arm left-to-right (vertically in this image), but doesn’t slide up-and-down. I think it’s as far out as it’ll ever get, but, again, this is a prototype.

Now, to mount LEDs on that plate…



Eyeglass Temple Re-Repair

Unfortunately, the smooth interior of the temple spring pocket and the smooth exterior of the hinge plate didn’t provide enough mechanical lock for the epoxy; the pieces pulled apart after a week.

So I put a stake in its heart:

Eyeglass temple - tapered pin

Eyeglass temple – tapered pin

That’s a tapered brass pin from the Box o’ Clock Parts, buttered up with a dab of epoxy, then shoved firmly into a 41 mil (#59) hole drilled through the pocket and the edge of the hinge plate.

Fast-forward overnight, apply a Dremel grinding bit, and it looks passable:

Eyeglass temple - ground tapered pin

Eyeglass temple – ground tapered pin

If that doesn’t hold, those glasses are gone.

, ,

Leave a comment