Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.
I picked up a pair of 12 V 4 W 3-LED floodlights (datasheet, newer datasheet, and catalog) with 34 degree and 24 degree beams from All Electronics, with the intent of making some task lighting fixtures for the shop. Somebody decommissioned the lamps by snipping off a pin, so they’re not immediately useful.
The back pulls off with a bit of difficulty, after removing the two obvious screws and holding the connector body in place while pulling. I didn’t try to remove the circuit board, which would require unsoldering the clearly marked Anode and Cathode LED wires that enter from the bottom of the board.
LED Floodlight – interior
I plan to build these lamps right into the fixtures, so soldering a wire directly onto the pin makes sense; I expect they’ll outlast my usage and a socket won’t add any value. As an intermediate step, I soldered a short brass tube onto the pin stump:
LED Floodlight – repaired pin
In new condition, these retail somewhere beyond $60, so cutting 6 mm from one pin shaved about fifty bucks off the price. I suspect they were extracted from somebody’s shiny new, recently abandoned, and probably foreclosed, office complex and were ruined to prevent resale-as-new. The fact that the reflectors got a bit scuffed up along the way wouldn’t help their value any, either.
They draw 330-odd mA from a 12 V supply, run from AC or DC (either polarity), and seem to have a constant-current driver inside. I wouldn’t buy ’em new, but for eight bucks a pop they’re a pretty good deal.
I’m not sure whether all unit prices must be converted to “per 100 count” or not, but it really doesn’t work out well for CFL bulbs (clicky for more dots):
CFL 2-bulb pack
That’s $549.50 per 100 bulbs, if you can’t make it out.
On the shelf below, however, a single-bulb pack priced out to $979 per 100 count, so the 2-pack is definitely a better deal!
Printing those fairing mounting plates gave me an opportunity to explore the Oozebane parameter space. I wasn’t quite sure how it would work and now I’m certain that it can’t.
Here’s the joint at the start/end of the perimeter extrusion around one of the plates, with Oozebane set for a 4 mm early shutdown:
Perimeter joint – Oozebane
You’re looking straight down at three edges (bottom = 2 layers, middle & top = 3 layers), but the shadow obscures the vertical faces; they’re firmly joined. The nozzle enters the picture from the left, slows and stops at the joint, then departs for another location.
The turd appears on the far side of this picture, just above the left hole:
Fairing mount – outside
Here’s the same joint, but with Oozebane turned off:
Perimeter joint – normal
Any questions?
Ah: layer thickness 0.3 mm, w/t=1.7 → width =0.56 mm, 45 mm/s feed, 255 PWM flow.
As nearly as I can tell, Oozebane can’t possibly work the way it’s currently defined, at least for the DC extruder on my Thing-O-Matic. The problem is that Oozebane simultaneously shuts off the extruder and slows the feed rate, but the pressure on the molten plastic inside the extruder continues to force it out at about the same rate for quite some time.
Thus, with the feed rate reduced to some unknown (and unprogrammable) value and the flow continuing at the original rate, each thread endpoint accumulates an oversized turd.
Maybe Oozebane works for somebody else, but a stepper extruder is the right solution…
The stock Zzipper fairing handlebar mount consists of an aluminum bar with a plate welded to each end at more-or-less the correct angle to match the fairing curve. The plate has a 1/4 inch hole in one end, wherein a 1/4-20 nylon machine screw clamps the fairing to the plate, with a nylon washer distributing the stress. That doesn’t cope well with the vibrations caused by riding around here, let alone our summer vacation trips on crushed-stone rail trails, and the fairings tend to stress-crack at the holes.
These 3D printed plates are just the latest in a long series of attempts to distribute the stress over a larger area. The outside view:
Fairing mount – outside
The open hole gets another screw to hold the plates in position. The bump on the far side is an Oozebane turd, about which more later.
The view from inside the fairing:
Fairing mount – inside
You can’t see the layer of black foam rubber salvaged from a mouse pad between each plate and the fairing. That should prevent any local stress concentration at the screw and ease the transition to the tapered plate edges.
The solid model looks about like you’d expect:
Fairing Mount Plates – Upper
The hole position depends on the fairing position, as the fairings have three holes. The pictures show the fairing on my bike; it’s in the lowest position, with the screw in the topmost hole. The OpenSCAD file has an option to put the holes where you need them.
The plates are only 8 layers thick, printed with 4 solid layers top and bottom to eliminate any fill. You could do the same by setting the fill to 100%, I suppose. Using 4 outer shells (3 additional) makes the flanged edge nice and flat and uniform.
The layer height is 0.33 mm, with w/t=1.7 for a width of 0.56 mm. Feed rate = 43 mm/s and flow rate = 255. DC Extruder, alas.
Running the first layer at feed = 0.5 and flow = 0.75 produces some fluffing in the fill, but there’s no way to get a lower flow from the DC extruder motor. Flow = 0.75 corresponds to PWM=191; anything lower sometimes fails to start the motor. If it starts, it’ll run, but … that’s not dependable.
I printed them on an aluminum plate for a nice flat bottom surface.
The OpenSCAD source code:
// Clamp plates for Zzipper fairing on Tour Easy recumbents
// Ed Nisley - KE4ZNU - Mar 2011
// Build with...
// extrusion parameters matching the values below
// 4 outer shells
// 4 solid surfaces at top + bottom
// slow feeds to ensure hole perimeters stick to fill
include </home/ed/Thing-O-Matic/lib/MCAD/boxes.scad>
include </home/ed/Thing-O-Matic/lib/MCAD/units.scad>
// Select hole layout
// The if statement seems to work only for CSG object trees
// Fortunately, I need only two different layouts...
HoleSelect = 1; // 0 = his, 1 = hers
HolesTop = (0 == HoleSelect) ? [0,1,1] : [1,0,1];
HolesBottom = (0 == HoleSelect) ? [0,1,1] : [1,0,1];
// Set these to match the extrusion parameters for successful building
ThreadZ = 0.33; // extrusion thickness
ThreadWidth = 0.57; // extrusion width = ThreadZ x w/t
HoleWindage = ThreadWidth; // enlarge hole dia by extrusion width
// Plate dimensions
HoleDia = 0.25 * inch; // these are 1/4-20 bolt holes
HoleSpace = (1) * inch; // center-to-center spacing
// usually 1 inch, but 15/16 on one bike
CornerR = 5.0; // corner rounding
Layer1X = 90; // against fairing surface
Layer1Y = 32;
Layer1Z = 2*ThreadZ;
Layer2Margin = 1.5; // uncovered edge
Layer2X = Layer1X - 2*Layer2Margin;
Layer2Y = Layer1Y - 2*Layer2Margin;
Layer2Z = 3*ThreadZ;
MountX = 46.3 + HoleWindage; // handlebar mounting bracket end plate
MountHoleSpace = 13.0; // end to hole center
MountY = 16.3 + HoleWindage;
MountZ = 4*ThreadZ; // recess depth
MountCap = 3.0; // endcap arc height
MountR = (pow(MountCap,2) + 0.25*pow(MountY,2)) / (2*MountCap); // ... radius
Layer3Margin = 1.5;
Layer3X = Layer2X - 2*Layer3Margin;
Layer3Y = max((Layer2Y - 2*Layer3Margin),(MountY + 8*ThreadWidth));
Layer3Z = 3*ThreadZ;
PlateZ = Layer1Z + Layer2Z + Layer3Z;
// Convenience settings
BuildOffset = 3.0 + Layer1Y/2; // build Y spacing between top & bottom plates
Protrusion = 0.1; // extend holes beyond surfaces for visibility
//---------------
// Create plate with selectable holes
module Plate(hs) {
difference() {
union() {
translate([0,0,Layer1Z/2])
roundedBox([Layer1X,Layer1Y,Layer1Z],CornerR,true);
translate([0,0,Layer1Z + Layer2Z/2])
roundedBox([Layer2X,Layer2Y,Layer2Z],CornerR,true);
translate([0,0,Layer1Z + Layer2Z + Layer3Z/2])
roundedBox([Layer3X,Layer3Y,Layer3Z],CornerR,true);
}
if (0 != hs[0]) {
translate([-HoleSpace,0,PlateZ/2])
cylinder(r=(HoleDia + HoleWindage)/2,
h=(PlateZ + 2*Protrusion),
center=true,$fn=10);
}
if (0 != hs[1]) {
translate([0,0,PlateZ/2])
cylinder(r=(HoleDia + HoleWindage)/2,
h=(PlateZ + 2*Protrusion),
center=true,$fn=10);
}
if (0 != hs[2]) {
translate([HoleSpace,0,PlateZ/2])
cylinder(r=(HoleDia + HoleWindage)/2,
h=(PlateZ + 2*Protrusion),
center=true,$fn=10);
}
}
}
//---------------
//-- Build the things...
translate([0,BuildOffset,0]) Plate(HolesTop);
translate([0,-BuildOffset,0])
difference() {
Plate(HolesBottom);
translate([-(HoleSpace + MountHoleSpace - MountX/2),0,PlateZ - MountZ/2 + Protrusion/2])
intersection() {
cube([MountX,MountY,(MountZ + Protrusion)],center=true);
union() {
cube([(MountX - 2*MountCap),MountY,(MountZ + Protrusion)],center=true);
translate([ (MountX/2 - MountR),0,0])
cylinder(r=MountR,h=(MountZ + Protrusion),center=true);
translate([-(MountX/2 - MountR),0,0])
cylinder(r=MountR,h=(MountZ + Protrusion),center=true);
}
}
}
I loves me my Thing-O-Matic, despite its annoyances…
[Update: Stepper extruder parameters and a tweak to make the mount plate track the hole position correctly.]
This is a proof-of-concept lashup of a circuit to shut off the Thing-O-Matic’s power should the Thermal Core overheat. It vaguely resembles those doodles, but with the thermal switch cases grounded and an indicator for the main thermal switch.
[Update: You should read the rant at the bottom of that post to understand why this isn’t a firmware mod and doesn’t contain a microcontroller.]
Operation is straightforward:
The black NO (Normally Open) momentary switch energizes the DPDT relay, one NO pole of which then holds the relay power on.
The red NC (Normally Closed) momentary switch interrupts that circuit and releases the relay.
An NC thermal switch detects an overheated Thermal Core, opens that circuit, and releases the relay.
The other NO relay pole connects / disconnects the ATX power supply’s -Power On line from the Thing-O-Matic Motherboard. That connection requires a circuit-board cut to splice the relay into the Motherboard.
The LEDs:
Lower Green = ATX AC power on (from +5VSB power)
Upper Green = +Power On signal active
Red = Test / Fault (on = relay inactive)
Yellow = low over-temperature alarm
Orange atop box = high over-temp switch active
I included a second NO thermal switch that activates at a lower temperature, mostly because I had one, but that’s certainly not required. The multitude of LEDs makes for a happy-looking box; labels would be a nice touch, I agree.
When you turn on the ATX power supply, the Lower Green and Red LEDs turn on: the “Test” part of the “Test / Fault” indicator. Push the black button, the Red LED goes off, the Upper Green LED goes on, and the Thing-O-Matic is up & running. Push the red button, the TOM shuts down, and you’re back to the starting condition.
The Yellow LED goes on when the lower temperature switch goes on.
Shortly thereafter, presumably, the higher temperature switch opens, the Orange LED goes on, the TOM shuts down, and you’re left with the Lower Green, Yellow, and Orange LEDs: zowie! When the high temp switch cools off a bit, the Orange LED goes off and the Red LED goes on. After a while, the Yellow LED will go off, and you’re back to Square One again.
What’s not yet done: mounting the thermal switches to the Thermal Core in a way that’s mechanically solid, electrically isolated, and thermally dependable. I just got a bag of 100 °C NC switches, which make more sense than the 65 °C NC switches I’d been fooling with.
The wiring uses 4P4C and 6P6C modular phone connectors and cables, which are cheap & readily available, if not exactly proof against high temperatures. In normal use, failures tend to be open-circuit that will shut off the heater power. Take care not to position the cables so they melt first; they’re not intended as thermal switches.
Achtung: modular cable color codes are not standardized, particularly on the jack side, so pay more attention to the pin numbers than the colors. If I ever meet the guys who rearranged the jack colors, There. Will. Be. Gibbage.
A back view of the box shows a nice rectangular hole that’s obviously a manual CNC job on the Sherline, with no corner filing whatsoever. Hot melt glue holds the connectors in place, so I’m not showing off the inside:
Thermal lockout box – rear
The -Power On connection to the Motherboard requires the single cut shown in yellow:
Motherboard PCB Modification
It looks like this in real life, with the wire soldered to the Arduino header pin. Another dab of my Shop Assistant’s orange nail polish seals the PCB wound:
Motherboard -Power On modification
The remaining wires attach to the ATX power connector pins on the bottom of the board. The yellow wire passes through an unused mounting hole on its way to the top side, as above. Use a cable tie to tie the cable to the board, through a pair of otherwise unused RS-485 connector mounting holes.
Motherboard Connections – Bottom
While you’re chopping away at the Motherboard, add that isolating diode to keep +5 V USB power from turning the ATX fan with the power off.
The overall schematic (clicky for more dots):
Thermal Lockout Schematic
There is no corresponding PCB layout, because the circuitry forms a point-to-point hairball inside the box. If you were doing this for real, you’d want a PCB with a bazillion connections, but …
For example, here’s the FET driver for the Orange (it just looks Red) high temperature LED before a liberal application of heat stink shrink tubing:
Overtemperature LED driver hairball
You can test the thermal switches using a butane lighter.
As part of the Thermal Lockout project, I planned to put a pair of big pushbutton switches on the end of a little Pactec box, thusly:
Pactec box – printed panel
I was in the midst of figuring out how to clamp that tiny panel to the Sherline milling machine’s table and gnaw out those big holes, when I realized I could just print out a new panel with the holes already in place:
Pactec panels with switches
No muss, no fuss, no exciting chips… and no tedious corner filing, either.
The 3D model has the hole for an LED that I added later; the panel shown above acquired that hole during a brief conference with Mr Drill Press.
Thermal Cutout Box – switch plate model
In actual point of fact, I had to do a bit of edge filing for the switches, as the holes came out slightly undersized. The HoleWindage setting should take care of that for the next time around. The panel was a drop-in replacement for the original: all the outside dimensions & thicknesses were spot on.
The OpenSCAD source code:
// End panel for PacTec 61191-01 box
// Panel 61580-01
// Ed Nisley - KE4ZNU - Feb 2011
Layer1Z = 1.50;
Layer2Z = 1.00;
HoleWindage = 0.55; // approximately equal to extrusion width
Protrusion = 0.1; // stick out over top and bottom
SwitchOffsetX = 15.0;
SwitchX = 16.0 + HoleWindage;
SwitchY = 12.0 + HoleWindage;
SwitchZ = Layer1Z + Layer2Z;
LedR = (5.0 + HoleWindage)/2;
LedZ = SwitchZ;
difference() {
union() {
translate([0,0,Layer1Z/2]) cube([55,22.5,Layer1Z],center=true);
translate([0,0,(Layer1Z + Layer2Z)/2]) cube([52.6,19.5,Layer1Z + Layer2Z],center=true);
}
translate([SwitchOffsetX,0,SwitchZ/2])
cube([SwitchX,SwitchY,SwitchZ + 2*Protrusion],center=true);
translate([-SwitchOffsetX,0,SwitchZ/2])
cube([SwitchX,SwitchY,SwitchZ + 2*Protrusion],center=true);
translate([0,0,LedZ/2])
cylinder(r=LedR,h=LedZ + 2*Protrusion,center=true,$fn=10);
}
Although that collet pusher works fine, the locking pin holder often teleported itself inside the vacuum cleaner. It recently reappeared on the far end of the main workbench, a good 15 feet away from the Sherline as the swarf flies. This, to misquote Churchill, is an impertinence up with which I shall not put.
Herewith, a replacement offering several advantages:
Won’t fit up the vacuum’s snout
Easy to grip
Perfect pin alignment
3D printing FTW!
It’s a flat block resting on the flat top of the pulley, with a nice arc matching the pusher’s OD. A small hole for the pin at exactly the right altitude makes the whole thing rock-solid stable: it slides firmly into position.
The 3D model looks like you’d expect:
Pin holder – OpenSCAD model
The finger grips were just for pretty, as you don’t need that much traction to extract the thing.
A similar view of the real object with the bottom surface up and some flash around the edges:
Locking pin holder – spindle end view
The as-printed block put the pin about 0.2 mm above the spindle hole, so I rubbed it on Mr Belt Sander (with the power off) until it fit. I printed the block on the aluminum plate platform; the Z height home setting evidently needs a tweak. However, the hole was exactly the correct distance from the top surface: flipping the block over fit perfectly.