-
Bandsaw Worklight
Having hacked back the end of the USB gooseneck extension, a tweak of the COB LED heatsink mount for my desk lamp produces a smaller version for a 1.8 W LED:

Chip On Board Heatsink Mount – Bandsaw Lamp – solid model That fits half of a random heatsink, bandsawed just to the far side of the middle fin and milled flat.
Ream out the 5 mm hole with a #8 drill for a snug fit around the gooseneck, jam gooseneck in place, dab epoxy on the corners of the recess, mash the heatsink in place, solder wires to LED, smear epoxy on the aluminum backplate, clamp while curing:

USB Gooseneck – LED assembly And it looks pretty good, if I do say so myself:

USB Gooseneck – on bandsaw The hook-n-loop tape holding the cable to the bandsaw gotta go, but should suffice until I conjure a better mount.
The alert reader may wonder how a 9 V COB LED runs from a 5 V USB cable with nary a trace of a voltage booster to be seen. Well, that’s not really a USB cable any more; I paralleled the red+white and black+green wires for lower resistance, then hacked a 9 VDC power supply into an old USB hub:

Hacked USB hub – PCB mods I ripped out the upstream USB plug, hotwired the 9 V supply where the 5 V USB wires used to be, soldered jumpers on the downstream sockets to short the outer two pin pairs together, razor-knifed the power leads going into the epoxy-blobbed USB controller, and declared victory:

Hacked USB hub – in use Admittedly, that “In Use” LED runs a bit brighter now.
I have a few other tools on that bench in need of LED lights; when I build ’em, they can all plug into this hub. No reason to invent new connectors & cables & all that. It may need a power switch.
Turns your stomach, eh?
The OpenSCAD source code as a GitHub Gist:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters// Chip-on-board LED light heatsink mount for desk lamp // Ed Nisley KE4ZNU December 2015 // February 2017 – rectangular COB, smaller heatsink Layout = "Show"; // Show Build //- Extrusion parameters must match reality! ThreadThick = 0.25; ThreadWidth = 0.40; HoleWindage = 0.2; Protrusion = 0.1; // make holes end cleanly inch = 25.4; function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit); //———————- // Dimensions ID = 0; // for round things OD = 1; LENGTH = 2; Gooseneck = [3.0,5.0,15.0]; // anchor for end of gooseneck COB = [30.0,11.0,2.5]; // Chip-on-board LED module Heatsink = [37.1,19.2,10.0]; // overall HeatsinkBase = 2.0; // solid base below fins HSLip = 1.0; // width of lip under heatsink BaseMargin = 2*2*ThreadWidth; BaseRadius = 3*ThreadThick + Gooseneck[OD]/2; // defines slab thickness BaseSides = 2*4; Base = [(Gooseneck[LENGTH] + Gooseneck[OD] + Heatsink[0] + 2*BaseRadius + BaseMargin), (Heatsink[1] + 2*BaseRadius + 2*BaseMargin), 2*BaseRadius]; echo(str("Slab thickness: ",Base[2])); //———————- // 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); } //– Lamp heatsink mount module Lamp() { difference() { translate([(Base[0]/2 – BaseRadius – Gooseneck[LENGTH]),0,0]) hull() for (i=[-1,1], j=[-1,1]) translate([i*(Base[0]/2 – BaseRadius),j*(Base[1]/2 – BaseRadius),Base[2]/2]) sphere(r=BaseRadius/cos(180/BaseSides),$fn=BaseSides); translate([(Heatsink[0]/2 + Gooseneck[OD]), // main heatsink recess 0, (Base[2] + Heatsink[2]/2 – HeatsinkBase)]) cube((Heatsink + [HoleWindage,HoleWindage,0.0]),center=true); translate([(Heatsink[0]/2 + Gooseneck[OD]),0,HeatsinkBase]) // lower lip to shade lamp module scale([1,1,2]) cube(Heatsink – [2*HSLip,2*HSLip,0],center=true); translate([0,0,Base[2]/2]) // goooseneck insertion rotate([0,-90,0]) rotate(180/8) PolyCyl(Gooseneck[OD],Base[0],8); translate([0,0,Base[2]/2 + Gooseneck[ID]/2]) // wire exit rotate([180,0,0]) PolyCyl(Gooseneck[ID],Base[2],6); translate([Gooseneck[OD],0,(Base[2] – HeatsinkBase – Protrusion)/2]) // wire slot rotate([180,0,0]) cube([2*Gooseneck[OD],Gooseneck[ID],(Base[2] – HeatsinkBase + Protrusion)],center=true); } } //———————- // Build it if (Layout == "Show") { Lamp(); } if (Layout == "Build") { }