OMTech 60W Laser: Repurposing the HV Power Supply Water Protect Input

For reference, the input terminals on the OMTech anonymous 60 W HV laser power supply:

OMTech 60W HV power supply - terminals
OMTech 60W HV power supply – terminals

AFAICT, that’s the default layout for all similar power supplies.

The H and L pins are the High- and Low-active enable inputs that, when it’s working right, control the laser output. The KT332 controller (and, most likely, all RuiDa controllers) produce a low-active output, so you just wire the controller’s output to the L input and you’re done.

That was the original failure that got me to this point: the power supply ignored its L input and turned the beam on at whatever power the PWM signal on the IN terminal called for. Having that happen was surprising, having it happen with the cabinet lid open was … disturbing.

The P input is intended for the Water Protect signal from the flow sensor on the laser cooling plumbing. When the water is flowing, the IN terminal will be low and the power supply will pay attention to the L input.

The power supply arrived with a jumper between the P input and the G ground / common terminal:

OMTech 60W HV power supply - Water Protect jumper
OMTech 60W HV power supply – Water Protect jumper

The jumper holds the P input low = active, meaning the power supply thinks the water is always flowing.

It turns out that the Water Protect signal goes only to the controller. When it’s inactive = no water flowing, the controller will refuse to fire the laser and also sound an alarm. Running the signal directly to the power supply would result in a puzzling failure-to-fire with no diagnostic from the controller.

I removed that jumper and added a (green) wire from the Lid Interlock signal at the controller:

OMTech KT332 controller - Lid Interlock input - added wire
OMTech KT332 controller – Lid Interlock input – added wire

To the power supply’s P input:

OMTech 60W HV power supply - Water Protect as Lid Interlock
OMTech 60W HV power supply – Water Protect as Lid Interlock

In principle, if this power supply fails the same way as the previous one (with its L input always active), then at least it won’t fire with the lid up.

Believing that may display a childish naivety, but at least the thing seems marginally safer than it was before.

High Impact Art: Smashed Glass Coaster Meniscus Removal

After using the smashed glass coaster for a while, the beveled epoxy meniscus around the perimeter proved itself more annoying than expected:

Glass Coaster - second test
Glass Coaster – second test

So I clamped it to the Sherline’s tooling plate and milled off the rim:

Smashed Glass Coaster - meniscus removal
Smashed Glass Coaster – meniscus removal

Given the Sherline’s cramped work envelope, all the action took place along the rearmost edge, requiring eight reclampings indexed parallel to the table with a step clamp.

The cutter cleared off everything more than 0.3 mm above the surface of the glass chunks. I could probably have gone another 0.1 mm lower, but chopping the bit into the edge of a shattered glass fragment surely wouldn’t end well.

Polishing the dark gray milled surface might improve it slightly, at the risk of scuffing whatever poured epoxy stands slightly proud of the glass:

Smashed Glass Coaster - leveled edge
Smashed Glass Coaster – leveled edge

Perhaps if I define it to be a border, everybody will think it was intentional.

Rounded Petal Acrylic Coaster

Having gotten the rounded-petal pattern generator working, applying it to acrylic sheets seemed reasonable:

Cut Acrylic Coaster - top cleaned
Cut Acrylic Coaster – top cleaned

The petals stand slightly proud of the black top frame, as the colored sheets were marginally thicker than the black sheet, but it looks OK in person. They’re all epoxied to a transparent base plate, so the bottom view is pretty much the same:

Cut Acrylic Coaster - bottom
Cut Acrylic Coaster – bottom

Because the bottom is perfectly smooth, I think it looks better than the top, which shows irregularities around the petals where the epoxy didn’t quite fill the gaps. There is one small bubble you won’t notice if I don’t tell you about it.

I laid a small bead of epoxy around the perimeter of the base, laid the black frame in place, ran a bead along the midline of each petal shape plus a drop in the round part, laid the petals in place, and hoped I didn’t use too much epoxy. It turned out all right, with only a few dribbles down the edge that wiped off easily enough.

I peeled the protective plastic off the top while the epoxy was still tacky, which pulled far too many fine filaments across the surface:

Cut Acrylic Coaster - frayed top
Cut Acrylic Coaster – frayed top

After the final cure, I managed to scrape most of them off with a thumbnail; I hope to never make that mistake again.

As you might expect, acrylic plastic’s pure saturated colors wipe the floor with Sharpie-scribbled white chipboard:

Chipboard coaster - rounded petals - front vs back cut
Chipboard coaster – rounded petals – front vs back cut

The black frame makes the whole thing overly dark, so the next attempt should use white or perhaps a transparent layer atop a mirror base.

Newmowa NP-BX1: Video Duration vs Charge

Having run the Newmowa NP-BX1 batteries through my old Sony HDR-AS30V helmet camera a few times, a plot seemed in order:

Newmowa NP-BX1 video duration vs charge
Newmowa NP-BX1 video duration vs charge

The cluster of dots shows most of our rides last about an hour.

The line is an eyeballometrical fit, slightly coerced to pass through the origin because that’s where it should go.

The 9.1 mA·hr/min slope is in reasonable agreement with past results, given different batteries and charger. The Keweisi meter emerged first from the box.

Straining the hr/min dimensional nonsense out of the slope suggests the camera averages 550 mA and 1.9 W. Derating those by a few percent to account for the recharge efficiency might be in order, but they’re surely in the right ballpark.

Epoxy Mixing Rack

First you mix the epoxy, then you blend in the dye, then you dispense it into the thing you are making. If you’re using many colors, this is obviously not the right way to go about it:

Acrylic Coaster - epoxy coloring
Acrylic Coaster – epoxy coloring

A bit of pondering converted some scrap MDF into a rack holding the little cups and dispensing pipettes:

Epoxy Mixing Rack
Epoxy Mixing Rack

The bar magnet holds the backplate against a bench block to keep it at right angles to the base while the adhesive cures. The base is three layers of MDF with no, small, and large holes fitting the cups. I expect many epoxy spills; scrap MDF reduces deep emotional bonding to the result.

The LightBurn project has the sign outline as a tool layer to simplify aligning the victims with the laser path, plus one layer defining the cuts for the three plates. I exported it as an SVG image with the same information as colored vectors for use in whatever laser control program you might use.

The SVG image as a GitHub Gist:

Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

Coaster Generator: Simple Petals

Having figured out how to intersect a line with a circle, I figured I could do it twice to put arcs on both the inside and the outside of each petal:

Chipboard coaster - double arcs
Chipboard coaster – double arcs

As before, scribbling markers on plain chipboard makes for a … subdued … coaster, so I tried chipboard with one white surface:

Chipboard coaster - plain vs white
Chipboard coaster – plain vs white

Much better.

Clamping the coaster produces a flatter result:

Chipboard coaster - clamping
Chipboard coaster – clamping

With the risk of squishing excess glue through the kerf:

Chipboard coaster - excess glue
Chipboard coaster – excess glue

That’s the same coaster as in the first picture, carefully arranged with light reflecting off the flat glue surface. In real life, the nearly transparent glue doesn’t look nearly so awful, but smoothing much less glue than seems necessary across the bottom disk suffices.

The geometry doodle with the arcs:

Chipboard coaster - double arc petal geometry doodle
Chipboard coaster – double arc petal geometry doodle

I suppose I should refactor the code with a quadratic solver returning a list of roots, but copypasta suffices for now.

The GCMC and Bash source code as a GitHub Gist:

#!/bin/bash
# Simple petals test piece
# Ed Nisley KE4ZNU - 2022-07-01
Flags='-P 4 --pedantic' # quote to avoid leading hyphen gotcha
SVGFlags='-P 4 --pedantic --svg --svg-no-movelayer --svg-opacity=1.0 --svg-toolwidth=0.2'
# Set these to match your file layout
ProjPath='/mnt/bulkdata/Project Files/Laser Cutter/Coasters/Source Code'
LibPath='/opt/gcmc/library'
ScriptPath=$ProjPath
Script='Simple Petals.gcmc'
[ -z "$1" ] && petals="6" || petals="$1"
fn=Petals-$petals.svg
echo Output: $fn
gcmc $SVGFlags \
-D "NumPetals=$petals" \
--include "$LibPath" \
"$ScriptPath"/"$Script" > "$fn"
view raw petals.sh hosted with ❤ by GitHub
// Simple Petals Test Piece
// Ed Nisley KE4ZNU
// 2022-07-12 Simplest possible petals
layerstack("Frame","Petals","Rim","Base","Center","Tool1"); // SVG layers map to LightBurn colors
//-----
// Library routines
include("tracepath.inc.gcmc");
include("tracepath_comp.inc.gcmc");
include("varcs.inc.gcmc");
include("engrave.inc.gcmc");
FALSE = 0;
TRUE = !FALSE;
//-----
// Command line parameters
// -D various useful tidbits
// add unit to speeds and depths: 2000mm / -3.00mm / etc
if (!isdefined("OuterDia")) {
OuterDia = 100.0mm;
}
if (!isdefined("CenterDia")) {
CenterDia = 25.0mm;
}
if (!isdefined("NumPetals")) {
NumPetals = 6;
}
if (!isdefined("Sash")) {
Sash = 5.0mm;
}
// Petal values
PetalAngle = 360.0deg/NumPetals; // subtended by inner sides
PetalHA = PetalAngle/2;
PetalOD = OuterDia - 2*Sash;
PetalID = CenterDia + 2*Sash;
PetalOAL = OuterDia/2 - Sash - (Sash/2)/sin(PetalHA);
//message("petalOAL: ",PetalOAL);
// Find petal vertices
P0 = [(Sash/2) / sin(PetalHA),0.0mm];
t1 = tan(PetalHA);
sc = (Sash/2) / cos(PetalHA);
if (P0.x < PetalID/2) {
a = 1 + pow(t1,2);
b = -2 * t1 * sc;
c = pow(sc,2) - pow(PetalID/2,2);
xp = (-b + sqrt(pow(b,2) - 4*a*c))/(2*a);
xn = (-b - sqrt(pow(b,2) - 4*a*c))/(2*a);
y = xp*t1 - sc;
if (FALSE) {
message("a: ",a);
message("b: ",b);
message("c: ",c);
message("p: ",xp," n: ",xn," y: ",y);
}
P1 = [xp,y];
}
else {
P1 = P0;
}
a = 1 + pow(t1,2);
b = -2 * t1 * sc;
c = pow(sc,2) - pow(PetalOD/2,2);
if (FALSE) {
message("a: ",a);
message("b: ",b);
message("c: ",c);
}
xp = (-b + sqrt(pow(b,2) - 4*a*c))/(2*a);
xn = (-b - sqrt(pow(b,2) - 4*a*c))/(2*a);
y = to_mm(sqrt(pow(PetalOD/2,2) - pow(xp,2)));
//message("p: ",xp," n: ",xn," y: ",y);
P2 = [xp,y];
PetalWidth = 2*P2.y;
P3 = [PetalOD/2,0.0mm];
if (FALSE) {
message("P0: ",P0);
message("P1: ",P1);
message("P2: ",P2);
message("P3: ",P3);
}
// Construct paths
PetalPoints = {P1,P2};
OutArc = varc_cw([P2.x,-P2.y] - P2,PetalOD/2);
OutArc += P2;
PetalPoints += OutArc;
if (P0 != P1) {
PetalPoints += {[P1.x,-P1.y]};
InArc = varc_ccw(P1 - [P1.x,-P1.y],PetalID/2);
InArc += [P1.x,-P1.y];
PetalPoints += InArc;
}
else {
PetalPoints += {P0};
}
//--- Lay out the frame
linecolor(0xff0000);
layer("Frame");
if (CenterDia) {
goto([CenterDia/2,0mm]);
circle_cw([0mm,0mm]);
}
repeat(NumPetals;i) {
a = (i-1)*PetalAngle;
tracepath(rotate_xy(PetalPoints,a));
}
goto([OuterDia/2,0]);
circle_cw([0mm,0mm]);
//--- Lay out internal pieces for oriented cutting
// baseplate
layer("Base");
relocate([OuterDia + 2*Sash,0]);
goto([OuterDia/2,0]);
circle_cw([0mm,0mm]);
// central circle
if (CenterDia) {
layer("Center");
relocate([OuterDia/2 + Sash,-(OuterDia - CenterDia)/2]);
goto([CenterDia/2,0mm]);
circle_cw([0mm,0mm]);
}
// petals
layer("Petals");
repeat(NumPetals;i) {
org = [PetalWidth/2 - OuterDia/2,-(OuterDia + Sash)];
relocate([(i-1)*(PetalWidth + Sash) + org.x,org.y]);
tracepath(rotate_xy(PetalPoints,90deg));
}
// Debugging by printf()
if (FALSE) {
layer("Tool1");
linecolor(0xff1f00);
goto([Sash/2,0mm]);
circle_cw([0mm,0mm]);
goto(P0);
circle_cw([0mm,0mm]);
goto([0,0]);
move([OuterDia/2,0]);
goto([0,0]);
move(OuterDia/2 * [cos(PetalHA),sin(PetalHA)]);
goto(P2);
move_r([0,-PetalWidth/2]);
}

Onion Maggot Flies vs. Sticky Traps: Round 2

Mary decided the second round of sticky traps had collected enough Onion Maggot Flies (and other detritus) to warrant replacement, so this season will have three sets of cards.

The two sides of each card after about a month in the garden:

  • VCCG Onion Card A - 2022-07-17
  • VCCG Onion Card B - 2022-07-17
  • VCCG Onion Card C - 2022-07-17
  • VCCG Onion Card D - 2022-07-17
  • VCCG Onion Card E - 2022-07-17
  • VCCG Onion Card F - 2022-07-17

There are many flies that look (to me) like Onion Maggot Flies, in contrast with the first round of cards which had far fewer flies after about six weeks in the bed.

Some could be Cabbage Maggot Flies, but my fly ID hand is weak.

One of the frames screwed to a fence post suffered a non-fatal mishap, so I made and deployed a seventh trap. We’re pretty sure the garden has enough flies to go around.