Gutting a Laser Pointer

A small and defunct laser pointer emerged from the back of the workbench. There being no way to repair the thing, I filed a slit in the soft aluminum case and peeled it back to extract the guts:

Gutted laser pointer
Gutted laser pointer

The corrosion on the spring adequately explains the “defunct” situation; that’s the – terminal for a trio of LR44 watch batteries. The + terminal is the glossy (aluminum flashed?) molded shape with the threads, which friction-jams into the outer tube with a tiny spur for “good” contact.

Hotwiring a power supply to the appropriate terminals shows that the laser still works fine, even if the contacts are shot.

The ribbed gray plastic ring on the business end of the laser adjusts a focusing lens. Behind that lies a cylindrical lens that corrects the beam’s astigmatism. It was a nice pointer, back in the day … and might work its way into an art project, if I ever get finished with the practical stuff.

Spam Volume

Here’s what happened when I shut down comments on posts older than a few days:

Softsolder Daily Spam Catch - 2014-04 to 2014-06
Softsolder Daily Spam Catch – 2014-04 to 2014-06

Apparently the spammers’ scripts can’t keep up with a short window and most comments happen in a few days, so this seems like a workable compromise. I know for a fact that spammers also employ humans to type comments, but that model doesn’t scale well at all.

Akismet disposes of most spam automatically, but presents me with a list of comments that it can’t classify. That list amounts to 10% of the daily catch, meaning I had to process that much junk every day just to keep up. I don’t know why Akismet can’t classify total gibberish as obvious spam and automatically delete it, but that’s how Akismet works.

As mentioned in the sidebar, send me a note to comment on an older post.

Now you know …

Silicone Caulk + Desiccant = Win!

After doing the second batch of quilting pin caps, I dropped the newly opened silicone caulk tube into a jar with some desiccant, which worked wonderfully well. Unlike the usual situation where the caulk under the cap hardens into a plug after a few weeks, the tube emerged in perfect condition. In fact, even the caulk in the middle of the conical nozzle was in good shape, with just a small cured plug on either end; it had been sitting inside a cloth wrap with no sealing at all.

Here’s what it looked like after finishing the last of the most recent caps:

Silicone caulk tube with silica gel
Silicone caulk tube with silica gel

The indicator card says the humidity remains under 10%, low enough to keep the caulk happy and uncured. Well worth the nuisance of having a big jar on the top shelf instead of a little tube next to the epoxy.

Although I thought the desiccant was silica gel, it’s most likely one of the clay or calcium desiccants.

Kenmore 158: AC Motor Running on DC!

The sewing machine had a three-contact plug / terminal block that joins all the wiring:

Kenmore 158 - terminal block
Kenmore 158 – terminal block

For completeness, the matching socket (not shown) joins two cords:

  • AC line cord (two wire, not polarized, no ground)
  • Foot pedal

Extract the motor wiring from that block and connect it to a 50 V / 3 A bench supply, with the positive lead to the marked wire conductor:

Kenmore 158 AC motor - DC power
Kenmore 158 AC motor – DC power

Cranking the voltage upward from zero:

Kenmore Model 158 AC Motor on DC - RPM vs V
Kenmore Model 158 AC Motor on DC – RPM vs V

So that’s about 200 RPM/V, offset by 2800 RPM. Totally unloaded, of course.

The original data:

15 0.29 690 Barely turning
20 0.28 1380 Finger-stoppable
25 0.29 2350
30 0.29 3450
35 0.30 4450
40 0.29 5740
45 0.29 6780 Still finger-holdable at start
50 0.29 8000

I can hold the shaft stopped between my fingers up through 45 V, with 0.54 A locked-rotor current at 25 V. The motor doesn’t have a lot of torque, although it’s operating at less than half the normal RMS voltage.

I should take those numbers with the motor driving the sewing machine to get an idea of the actual current under a more-or-less normal load.

Reversing the power supply leads shows that the motor rotates only counterclockwise, which is exactly what you’d expect: both polarities of the normal AC sine wave must turn the motor in the same direction.

Kenmore 158: Needle Position Sensing

Fancy new sewing machines can stop with the needle either up (so you can remove the fabric) or down (to nail it in place while you rotate it). This requires sensing the needle position, which prompted me to spend far too long contemplating all the mechanical gadgetry driven by the motor.

As nearly as I can tell, the crank counterweight behind the handwheel produces the most unambiguous position reports. Here’s what it looks like with the needle down:

Kenmore 158 - main shaft counterweight
Kenmore 158 – main shaft counterweight

As you’d expect, with the shaft rotated exactly 180° from that point, the needle is up.

The inviting space just above the shaft provides room for the bobbin winder that engages a knurled ring on the back of the handwheel, but the lower space seems to be available. The counterweight sits about halfway into the back of the handwheel, so the sensors must look at the frame side of the counterweight.

Two adjacent sensors could detect the edge of the counterweight, which would be enough to uniquely identify both positions. If they were spaced across the lower-left edge in that picture:

  • 01 = trailing edge = bottom dead center = needle down (as shown)
  • 00 = open air = needle rising
  • 10 = leading edge = top dead center = needle up
  • 11 = solid steel = needle falling

Either sensor gives you one pulse per handwheel revolution and the combination gives you a quadrature output of both position and direction. The top speed of 1000 RPM produces 17 Hz square waves.

An additional pulse/rev sensor on the motor shaft would give better control over the motor speed, as the handwheel runs at 1/10 the motor speed with belt slip built right in. Figure 10 kRPM → 170 Hz pulses.

From a cold start, you know the shaft angle to within a bit under 180°. If the motor can turn in both directions (as would a stepper or DC motor), you can always move the needle upward. If it turns only forward (as does the AC motor) and the needle is falling, then you probably don’t want to move the motor until you get a button push indicating that all fingers are clear.

A pair of Hall effect sensors might suffice to detect that big hunk of steel, perhaps with a pair of teeny magnets glued to the face or a magnetic circuit closed by the counterweight.

More pondering is in order.

Kenmore 158: NEMA 23 Motor Adapter

After removing the AC motor from the sewing machine, I wondered if a NEMA 23 stepper motor would fit:

Kenmore 158 - NEMA 23 stepper - trial fit
Kenmore 158 – NEMA 23 stepper – trial fit

Huh. Who’d’a thunk it? That’s just too good to pass up…

Although you wouldn’t use PLA for the real motor mount, this was easy:

Drive Motor Mount - solid model
Drive Motor Mount – solid model

And the whole affair fits pretty much like you’d expect:

Kenmore 158 - NEMA 23 stepper - on adapter
Kenmore 158 – NEMA 23 stepper – on adapter

The NEMA 23 motor doesn’t have the same end profile as the AC motor and the adapter plate gets in the way of the pulley, but flipping the pulley end-for-end perfectly aligned the belt.

For whatever it’s worth, here’s how I removed the pressed-on gear from the shaft:

NEMA 23 Stepper - removing gear
NEMA 23 Stepper – removing gear

I’m pretty sure I have a little gear puller somewhere, but it’s not where I expected to find it, which means it could be anywhere.

Much to my astonishment, the shafts on both motors are exactly 1/4″ inch. I filed a flat on the shaft to avoid having the setscrew goober the poor thing.

A stepper isn’t the right hammer for this job, because it can’t possibly reach 8000 rpm, but it’ll be good enough to explore the parameter space and weed out the truly stupid mistakes. A brushless DC motor from halfway around the planet would fit in the same spot.

The OpenSCAD source code:

// NEMA 23 Stepper Mounting Plate
// Ed Nisley - KE4ZNU - June 2014

Layout = "Build";			// Build Show 

//- Extrusion parameters must match reality!
//  Print with 4 shells and 3 solid layers

ThreadThick = 0.20;
ThreadWidth = 0.40;

HoleWindage = 0.2;			// extra clearance

Protrusion = 0.1;			// make holes end cleanly

AlignPinOD = 1.70;			// assembly alignment pins: filament dia

inch = 25.4;

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

// Dimensions
// Origin at bottom front corner of plate as mounted on machine
//	motor mounted on rear surface, so recess is on that side

PlateThick = 4.0;				// overall plate thickness

SlotOffset = [10.0,13.0,0];		// center nearest origin, motor in X+,Y+ direction
SlotSize = [8.0,25.0];			// diameter of mounting screw , overall end-to-end length

CutoutOffset = [0.0,40.0,0];	// cutout around machine casting
CutoutSize = [18.0,18.0];

MotorBase = 58.0;				// square base plate side
MotorHoleOC = 47.2;				// hole center-to-center spacing
MotorHoleOffset = MotorHoleOC/2;
MotorHoleDia = 5.0;
MotorBaseCornerRadius = (MotorBase - MotorHoleOC)/2;

FlangeWidth = 20.0;				// mounting flange

MotorCenter = [(FlangeWidth + MotorBase/2),(MotorBase/2),0];		// XY of shaft centerline

MotorShaftDia = 7.0;			// allow some clearance

HubDia = 38.5;					// allow some clearance
HubHeight = 1.8;

// 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,

module ShowPegGrid(Space = 10.0,Size = 1.0) {

  RangeX = floor(100 / Space);
  RangeY = floor(125 / Space);

	for (x=[-RangeX:RangeX])
	  for (y=[-RangeY:RangeY])


// Build it!

module BasePlate() {

	difference() {
//		cube([(MotorCenter[0] + MotorBase/2),MotorBase,PlateThick],center=false);
		linear_extrude(height = PlateThick) {
			hull() {
				translate([MotorBaseCornerRadius,MotorBase - MotorBaseCornerRadius])
				translate([FlangeWidth + MotorBase - MotorBaseCornerRadius,MotorBase - MotorBaseCornerRadius])
				translate([FlangeWidth + MotorBase - MotorBaseCornerRadius,MotorBaseCornerRadius])

		translate(MotorCenter - [0,0,Protrusion]) {
				PolyCyl(MotorShaftDia,(PlateThick + 2*Protrusion),8);		// shaft hole
			PolyCyl(HubDia,(HubHeight + Protrusion));						// hub recess
			for (x=[-1,1] , y=[-1,1]) {
						PolyCyl(MotorHoleDia,(PlateThick + 2*Protrusion),8);

		translate(SlotOffset - [0,0,Protrusion]) {							// adjustment slot
			linear_extrude(height = (PlateThick + 2*Protrusion))
				hull() {
					translate([0,(SlotSize[1] - SlotSize[0])])


		translate(CutoutOffset - [Protrusion,0,Protrusion])
			linear_extrude(height = (PlateThick + 2*Protrusion))
				square(CutoutSize + [Protrusion,Protrusion]);


if (Layout == "Show") {

if (Layout == "Build") {
	translate([-(SlotOffset[0] + MotorBase/2),MotorBase/2,PlateThick])

Kenmore 158: Motor, Belts, and Pulleys

The Kenmore Model 158 sewing machine contains a 120 VAC / 1 A motor that powers all the moving parts through a V belt:

Kenmore 158 - AC drive motor - overview
Kenmore 158 – AC drive motor – overview

Looking up through the body:

Kenmore 158 - AC motor and belt - bottom
Kenmore 158 – AC motor and belt – bottom

A double pulley on a jackshaft reduces the motor speed on the way to the handwheel:

Kenmore 158 - handwheel - jackshaft pulley
Kenmore 158 – handwheel – jackshaft pulley

The motor and handwheel turn counterclockwise in normal operation, but can be turned clockwise by hand as needed. The belt tension isn’t very high and the jackshaft pulleys can slip, but I’m not sure if that’s intentional or the result of several decades of runtime.

Despite the cogged belt, the pulleys are smooth; it’s not a positive-drive transmission with timing-belt pulleys.

The belts:

  • Sears part numbers: top 30083, bottom 28908 / 50013
  • 6 mm at the top of the pulley
  • 4 mm at the base of the V
  • 3.5 mm thick

You could, if you had to, run a belt from the handwheel directly to the motor, although the pulley would ride about 7 mm further out on the shaft. I have no way to measure the lengths with any confidence in the results; one could calculate the lengths based on pulley diameters and center spacing.

Sticking retroreflective tape on the pulleys and handwheel, then deploying the laser tachometer, provides some minimum and maximum speeds:

  • Motor: 2100 – 8500 rpm
  • Jackshaft: 800 – 3200 rpm
  • Handwheel: 200 – 930 rpm

Those aren’t entirely consistent, because I’m using the old foot pedal speed control with its defunct carbon disks; the low end, in particular, isn’t as slow as it can go.

In any event, there’s about a 10:1 speed reduction from motor to handwheel.

The motor label clearly states that it’s 100-120 V AC, but it has brushes, so it’s actually a universal-wound motor that should run happily on DC.