Archive for April 2nd, 2014

Kenmore Model 158 Sewing Machine: Cool White LED Strip Lights

The reel of cool-white LEDs finally arrived from halfway around the planet and, based on the ahem customer feedback concerning the earlier prototype warm white LED strip lights for Mary’s sewing machine, I went with two parallel strips on each mount:

Strip Light Mount - 2 wide - build layout

Strip Light Mount – 2 wide – build layout

Natural PLA provides a nice, crystalline appearance:

Kenmore 158 Sewing Machine - Cool white LEDs - rear no flash

Kenmore 158 Sewing Machine – Cool white LEDs – rear no flash

Cool white LEDs have somewhat higher lumen/watt efficiency, but the real gain came from doubling the number of LEDs:

Kenmore 158 Sewing Machine - Cool white LEDs - front flash

Kenmore 158 Sewing Machine – Cool white LEDs – front flash

I overvolted the warm white LEDs to 14 V to get closer to 20 mA/segment, but the cool white ones run pretty close to 20 mA at 12 V, so I didn’t bother.

That black Gorilla Tape remains butt-ugly:

Kenmore 158 Sewing Machine - Cool white LEDs - rear flash

Kenmore 158 Sewing Machine – Cool white LEDs – rear flash

Obviously, I must find some white duct tape…

Commercial versions of this hack secure the wiring with little white clips and foam tape, so I should conjure up something like that. Mary specifically did not want the lights affixed under the arm, though, so those things weren’t even in the running.

The OpenSCAD source code widens the mount and moves the wiring conduit a little bit, to simplify the connections to both strips, but is otherwise identical to the earlier version:

// LED Strip Lighting Brackets for Kenmore Model 158 Sewing Machine
// Ed Nisley - KE4ZNU - March 2014

Layout = "Build";			// Build Show Channels Strip

//- Extrusion parameters must match reality!
//  Print with 2 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

Segment = [25.0,10.0,3.0];		//  size of each LED segment
SEGLENGTH = 0;
SEGWIDTH = 1;
SEGHEIGHT = 2;

WireChannel = 3.0;				// wire routing channel

StripHeight = 12.0;				// sticky tape width
StripSides = 8*4;

DefaultLayout = [1,2,"Wire","NoWire"];
NUMSEGS = 0;
NUMSTRIPS = 1;
WIRELEFT = 2;
WIRERIGHT = 3;

EndCapSides = StripSides;

CapSpace = 2.0;						// build spacing for endcaps
BuildSpace = 3.0;					// spacing between objects on platform

//----------------------
// 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) {

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

	for (x=[-RangeX:RangeX])
	  for (y=[-RangeY:RangeY])
		translate([x*Space,y*Space,Size/2])
		  %cube(Size,center=true);

}

//-- The negative space used to thread wires into the endcap

module MakeWireChannel(Layout = DefaultLayout,Which = "Left") {
	
	EndCap = [(2*WireChannel + 1.0),Layout[NUMSTRIPS]*Segment[SEGWIDTH],StripHeight];	// radii of end cap spheroid
	
	HalfSpace = EndCap[0] * ((Which == "Left") ? 1 : -1);
	
	render(convexity=2)
	translate([0,Segment[SEGWIDTH]/2,0])
		intersection() {
			union() {
				cube([2*WireChannel,WireChannel,EndCap[2]],center=true);
				translate([-2*EndCap[0],0,EndCap[2]/2])
					rotate([0,90,0]) rotate(180/6)
						PolyCyl(WireChannel,4*EndCap[0],6);
			}
			translate([HalfSpace,0,(EndCap[2] - Protrusion)]) {
				cube(2*EndCap,center=true);
			}
		}
}

//-- The whole strip, minus wiring channels

module MakeStrip(Layout = DefaultLayout) {
	
	EndCap = [(2*WireChannel + 1.0),Layout[NUMSTRIPS]*Segment[SEGWIDTH],StripHeight];	// radii of end cap spheroid

	BarLength = Layout[NUMSEGS] * Segment[SEGLENGTH];				// central bar length

	hull()
		difference() {
			for (x = [-1,1])						// endcaps as spheroids
				translate([x*BarLength/2,0,0])
					resize(2*EndCap) rotate([0,90,0]) sphere(1.0,$fn=EndCapSides);
			translate([0,0,-EndCap[2]])
				cube([2*BarLength,3*EndCap[1],2*EndCap[2]],center=true);
			translate([0,-EndCap[1],0])
				cube([2*BarLength,2*EndCap[1],3*EndCap[2]],center=true);
		}

}

//-- Cut wiring channels out of strip

module MakeMount(Layout = DefaultLayout) {
	
	BarLength = Layout[NUMSEGS] * Segment[SEGLENGTH];
	
	difference() {
		MakeStrip(Layout);
		if (Layout[WIRELEFT] == "Wire")
			translate([BarLength/2,0,0])
				MakeWireChannel(Layout,"Left");
		if (Layout[WIRERIGHT] == "Wire")
			translate([-BarLength/2,0,0])
				MakeWireChannel(Layout,"Right");
	}
}

//- Build it

ShowPegGrid();

if (Layout == "Channels") {
	translate([ (2*WireChannel + 1.0),0,0]) MakeWireChannel(DefaultLayout,"Left");
	translate([-(2*WireChannel + 1.0),0,0]) MakeWireChannel(DefaultLayout,"Right");
}

if (Layout == "Strip") {
	MakeStrip(DefaultLayout);
}
	
if (Layout == "Show") {
	MakeMount(DefaultLayout);
}

if (Layout == "Build") {

	translate([0,(3*Segment[SEGWIDTH]),0]) MakeMount([1,2,"Wire","Wire"]);		// rear left side, vertical
	translate([0,0,0]) MakeMount([5,2,"Wire","NoWire"]);				// rear top, across arm
	translate([0,-(3*Segment[SEGWIDTH]),0]) MakeMount([6,2,"NoWire","Wire"]);	// front top, across arm
}

, ,

4 Comments