Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ednisley/826b482bf33219942cb7cf53606d1475 to your computer and use it in GitHub Desktop.
Save ednisley/826b482bf33219942cb7cf53606d1475 to your computer and use it in GitHub Desktop.
OpenSCAD source code and machine profile SVG: HQ Sixteen front-mount horizontal spool adapter
// HQ Sixteen - horizontal thread spool adapter for front pin
// Ed Nisley - KE4ZNU
// 2025-04-07
include <BOSL2/std.scad>
Layout = "Show"; // [Show,Build,Base,Wall,Frame]
/* [Hidden] */
Protrusion = 0.1;
HoleWindage = 0.2;
ID = 0;
OD = 1;
LENGTH = 2;
WallThick = 8.0;
BaseThick = 12.0;
Washer = [5.0,10.0,1.0]; // M5 washer
Spool = [0.25*INCH,50.0,55.0]; // maximum thread spool
SpoolClearance = [2.0,5.0,5.0]; // spool pin pointed to +X axis
SpoolPin = [Spool[ID],Spool[ID],Spool[LENGTH] + WallThick + SpoolClearance.x];
BasePlate = [WallThick + SpoolClearance.x + 13.0, // X flush with side of machine
Spool[OD]/2 + 2*SpoolClearance.y,
BaseThick];
BaseOffset = [-(BasePlate.x - Washer[OD]),-Washer[OD],0.0]; // left front corner w.r.t. pin
SpoolOC = [0, // relative to left front top of Base
BasePlate.y/2,
SpoolClearance.z + Spool[OD]/2 + BaseThick/2];
//----------
// Construct the pieces
// HQ Sixteen top frame profile
// Aligned with hole somewhere along X=0, front edge at Y=0
// Lengthened slightly to cut cleanly
module MachineFrame(Length=BasePlate.y + 2*Protrusion) {
back(BasePlate.y + Protrusion) xrot(90)
linear_extrude(height=Length,convexity=5,center=false)
import("HQ Sixteen - top profile curve.svg",layer="Top Profile");
}
// Baseplate
// Aligned with hole one washer diameter in from corner
module Base() {
$fn=18;
difference() {
fwd(Washer[OD])
difference() {
right(Washer[OD])
cuboid(BasePlate,anchor=RIGHT+FRONT+CENTER,rounding=BaseThick/2,edges=RIGHT);
MachineFrame();
}
down(BasePlate.z)
cylinder(d=SpoolPin[OD] + HoleWindage,h=2*BasePlate.z);
up(BasePlate.z/2 - Washer[LENGTH])
cylinder(d=Washer[OD] + HoleWindage,h=2*Washer[LENGTH]);
}
}
// Wall holding spool pin
module Wall() {
$fn=36;
translate(BaseOffset) {
difference() {
union() {
translate(SpoolOC)
right(WallThick)
cylinder(SpoolClearance.x,d=Spool[OD]/2,orient=RIGHT);
hull() {
translate(SpoolOC)
cylinder(WallThick,d=Spool[OD]/2,orient=RIGHT);
up(BasePlate.z/2 - 1)
cube([WallThick,BasePlate.y,1],center=false);
}
}
translate(SpoolOC) left(Protrusion)
cylinder(SpoolPin[LENGTH],d=SpoolPin[OD],orient=RIGHT);
}
}
}
module Adapter() {
Base();
Wall();
}
//----------
// Show & build the results
if (Layout == "Base")
Base();
if (Layout == "Wall")
Wall();
if (Layout == "Frame")
MachineFrame();
if (Layout == "Show") {
Adapter();
color("Gray",0.5)
MachineFrame(60);
color("Green",0.75)
translate(BaseOffset)
translate(SpoolOC)
cylinder(SpoolPin[LENGTH],d=SpoolPin[OD],orient=RIGHT,$fn=18);
}
if (Layout == "Build")
up(-BaseOffset.x)
yrot(-90)
Adapter();
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@ednisley
Copy link
Author

ednisley commented Apr 8, 2025

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment