Large Spool Adapter: Right-angle Version

Mary recently learned that large spools of thread have a cross-wound lay that should feed over the end, not from the side as do ordinary stack-wound spools. So I built a right-angle adapter that fits over the not-quite-vertical spool pin on the sewing machine and aims directly at the thread tensioner:

Large spool adapter - on sewing machine

Large spool adapter – on sewing machine

The solid model shows off the fluted rod that passes through the spool:

Large Spool Adapter - solid model - mount

Large Spool Adapter – solid model – mount

It’s more impressive from the other end:

Large Spool Adapter - solid model - spool end

Large Spool Adapter – solid model – spool end

The first pass at the rod had six flutes, but that seemed unreasonably fine; now it has four. The round base on the rod provides more griptivity to the platform while building and has enough space for the two alignment pins that position it in the middle of the dome:

Large Spool Adapter - solid model - alignment holes

Large Spool Adapter – solid model – alignment holes

The dome gets glued to the rod base plate:

Large spool adapter - clamped

Large spool adapter – clamped

The spool pin hole is a snug fit around the pin on the sewing machine, because otherwise it would tend to rotate until the spool pointed to the rear of the machine. The fluted rod is a snug friction fit inside the (cardboard) spool. Some useful dimensions:

  • Spool pin (on Model 158): 5 mm OD, 40 mm tall
  • Large spool cores: 16 mm ID, 27 mm OD, 70 mm long

I had all manner of elaborate plans to make an expanding fluted rod, but came to my senses and built the simple version first. If that rod isn’t quite big enough, I can build another adapter, just like this one, only slightly larger. The source code includes a 0.5 mm taper, which may suffice.

Back in the day, shortly after the Thing-O-Matic started producing dependable results, one of the very first things I made was a simple adapter to mount large spools on the pin in the most obvious way:

Large spool adapter - old TOM version

Large spool adapter – old TOM version

Now we all know better than that, my OpenSCAD-fu has grown stronger, and the M2 produces precise results. Life is good!

The OpenSCAD source code:

// Large thread spool adapter
// Ed Nisley - KE4ZNU - August 2014

Layout = "Show";			// Build Show Spindle Spool

Gap = 10.0;					// between pieces in 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

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

//----------------------
// Dimensions

LEN = 0;											// subscripts for cylindrical objects
ID = 1;
OD = 2;

Spindle = [40.0,5.0,14.0];							// spool spindle on sewing machine
Spool = [70.0,16.0,27.0];							// spool core

Taper = 0.50;										// spool diameter increase at base

CottonRoll = [65.0,Spool[OD],45.0];					// thread on spool

Mount = [Spindle[LEN],(Spindle[ID] + 4*ThreadWidth),1.0*Spool[ID]];

Flutes = 4;
Flange = [2.0,Spool[OD],Spool[OD]];

ScrewHole = [10.0,4.0 - 0.7,5.0];					// retaining screw

PinOC = Spool[ID]/4;								// alignment pin spacing

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

}

//- Locating pin hole with glue recess
//  Default length is two pin diameters on each side of the split

module LocatingPin(Dia=AlignPinOD,Len=0.0) {
	
	PinLen = (Len != 0.0) ? Len : (4*Dia);
	
	translate([0,0,-ThreadThick])
		PolyCyl((Dia + 2*ThreadWidth),2*ThreadThick,4);

	translate([0,0,-2*ThreadThick])
		PolyCyl((Dia + 1*ThreadWidth),4*ThreadThick,4);
		
	translate([0,0,-(Len/2 + ThreadThick)])
		PolyCyl(Dia,(Len + 2*ThreadThick),4);

}

//----------------------
// Spindle 

module SpindleMount() {

	render(convexity=4)
	difference() {
		union() {
			resize([0,0,Mount[OD]])							// spool backing plate
				translate([0,CottonRoll[OD]/2,0])
					sphere(d=CottonRoll[OD],center=true);
			translate([0,CottonRoll[OD]/4,0])				// mounting post
				rotate([90,0,0])
					cylinder(d=Mount[OD],h=CottonRoll[OD]/2,center=true);
		}
		
		translate([0,(2*Mount[LEN] - Protrusion),Mount[OD]/4])				// punch spindle hole
			rotate([90,0,0])
//				PolyCyl(Spindle[ID],2*Mount[LEN],6);
				cylinder(d=Spindle[ID],h=2*Mount[LEN],$fn=6);
				
		for (i=[-1,1]) {									// punch alignment pin holes
			translate([i*PinOC,CottonRoll[OD]/2,0])
					LocatingPin(Len=Mount[OD]/3);
		}
				
		translate([0,0,-CottonRoll[OD]])					// remove half toward spool
			cube(2*CottonRoll[OD],center=true);
	}

}

//----------------------
// Spool holder

module SpoolMount() {	

	difference() {
	
		union() {
				
			translate([0,0,(Flange[LEN] - Protrusion)])
				difference() {
					cylinder(d1=(Spool[ID] + Taper),d2=Spool[ID],h=Spool[LEN],$fn=2*Flutes);						// fit spool ID
					
					for (a=[0 : 360/Flutes : 360-1])						// create flutes
						rotate(a + 180/Flutes)
							translate([Spool[ID]/2,0,-Protrusion])
								rotate(180/16)
								cylinder(r=Spool[ID]/4,h=(Spool[LEN] + 2*Protrusion),$fn=16);
								
					translate([0,0,(Spool[LEN] - ScrewHole[LEN])])			// punch screw hole
						PolyCyl(ScrewHole[ID],(ScrewHole[LEN] + Protrusion),6);

				}
			cylinder(d=Flange[OD],h=Flange[LEN]);							// base flange
		}
		
		for (i=[-1,1])												// punch alignment pin holes
			translate([0,i*PinOC,0])								//  ... orients solid flange up
					LocatingPin(Len=Flange[LEN]);	
	}

}


ShowPegGrid();

if (Layout == "Spindle") {
	SpindleMount();
}
if (Layout == "Spool") {
	SpoolMount();
}

if (Layout == "Show") {
	translate([0,Mount[OD]/4,2.0]) {
		rotate([90,0,0])
			SpindleMount();
		translate([0,Gap,CottonRoll[OD]/2])
			rotate([-90,0,0]) rotate(90)
				SpoolMount();
	}
	color("Orange") {
		translate([0,0,2])
			cylinder(d=Spindle[ID],h=Spindle[LEN],$fn=6);
		cylinder(d=Spindle[OD],h=2.0,$fn=18);
	}
		
}

if (Layout == "Build") {
	translate([-5,0,0])
		rotate(90)
			SpindleMount();
	translate([Flange[OD]/2,0,0])
			SpoolMount();
}

, ,

  1. #1 by Red County Pete on 2014-08-08 - 22:07

    Haven’t seen a basic Arduino post lately, and the Squidwrench presentation didn’t cover it, so here goes:

    How do you make sure Java doesn’t get a chance to let malefactors at your system? I’ll probably do most my stuff on a Linux box with only sneakernet access, but that could change. I’ve de-installed the JRE on my Win 7 box, and Pale Moon will disable JRE (I think IE 11 will do so, too), but it’s not a good feeling having that gubbage in a machine that looks at the ‘net.

    • #2 by Ed on 2014-08-09 - 08:51

      I think NoScript combined with AdBlock Plus is your friend: disable everything unless / until you need it for a particular website.

      Basically, you can’t navigate the contemporary Web without allowing active content, but you must have tight control over when it’s active.

      • #3 by Red County Pete on 2014-08-09 - 10:42

        I’ve been using that combination for a long time (Web 2.0 and dialup don’t play well together, but with NoScript and AdBlock+, I can get tolerable load times), though I haven’t seen any per-site way to block Java*. I disabled Java in Firefox when the alerts came out. When NOAA dropped it in favor of Flash** for radar loops, I was ready to de-install the JRE. If I do the Arduino software on the Windows box, I’ll disable at the browsers, or at Java directly. (I read this is possible with the JRE 7 package.)

        • Note for the casual reader: Java is not Javascript. Blame Sun and Oracle.
          ** I keep Flash up to date and use it as little as possible because of its own vulnerabilities.
        • #4 by Ed on 2014-08-09 - 10:53

          any per-site way to block Java

          But that’s what NoScript does, for both Javascript and Java, so you’re most of the way toward the goal. Combine it with Linux and you’re good to go!

        • #5 by Red County Pete on 2014-08-09 - 11:56

          both Javascript and Java

          Ah! Java has been getting rare enough that I overlooked that functionality in NoScript.

          Thanks!