The Smell of Molten Projects in the Morning

Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.

Tag: Laser Cutter

  • HLP-200B Laser Power Meter: First Measurements

    HLP-200B Laser Power Meter: First Measurements

    The HLP-200B Laser Power Meter arrives without much in the way of specifications:

    The HLP-200B Laser Power Meter Handheld comes fully calibrated at 10.6 μm (CO2). Each laser power meter we calibrate is directly traceable to NIST absolute standards because we use GOLD standards as a reference for each calibration. You will obtain the most accurate result possible

    A line in the description says “+/- 3% within the central section”, but that’s not much help. Back in the day, any error percentage referred to the meter’s full-scale value, which would be ±6 W for a 200 W meter.

    So I plunked the meter in the middle of the laser platform:

    HLP-200B Laser Power Meter - platform center
    HLP-200B Laser Power Meter – platform center

    Then took five measurements at each of ten power levels:

    PWM %10203040506070809099
    °C17.217.918.419.019.420.320.020.020.519.4
    Tube Current34710141618202224
    W7.121.042.051.859.163.067.869.674.764.0
    6.019.837.248.952.756.065.169.672.471.8
    6.421.139.345.656.553.261.160.774.675.2
    5.617.837.140.455.353.255.164.274.973.5
    6.017.736.945.154.553.162.269.972.270.9
    Avg Power6.219.538.546.455.655.762.366.873.871.1
    std dev0.571.662.194.292.394.264.784.161.344.29

    That’s easier to digest from a graph:

    HLP-200B Laser Power Meter - 60 W platform center measurements
    HLP-200B Laser Power Meter – 60 W platform center measurements

    The absurdity of computing the sample standard deviation from five measurements taken at each power level does not escape me, but this just surveys the situation.

    Earlier measurements of the tube current vs. PWM setting, using an RMS value computed by the oscilloscope’s firmware, produced a plot resembling the brown points (read the mA scale on the right) at the high end and differing greatly on the low end. These values come from the power supply’s digital meter, but the straight-line fit doesn’t look absurdly forced and the zero intercept seems plausible. I *assume* it’s actually measuring the tube current, rather than displaying a value computed from the PWM input, but I don’t know for sure.

    The rather sketchy paperwork accompanying the laser had one handwritten “21 mA” seemingly corresponding to 60 W output, which looks approximately correct. The instruction manual has a table of power vs. current suggesting that 65-ish W corresponds to 18 mA, with 100 W at 23 mA; it’s unclear whether that is for the 60 W tube in the machine or applies to the entire range of available tubes. The manual recommends not using more than 95% PWM, with which I heartily agree.

    Because my meter stand holds the target in the same position relative to the beam during successive measurements much better than I could by hand, I think the pulse-to-pulse variation comes from meter and tube repeatability.

    Earlier measurements with a grossly abused Gentec ED-200 joulemeter suggested the laser has some pulse-to-pulse timing variation, down in the millisecond range, but produced roughly the right power for middle-of-the-range PWM settings. This meter integrates the beam power over about ten seconds, so I think variations will be due to (possible) tube power changes and meter repeatability, rather than timing errors.

    Obviously, you must not depend on any single-shot measurement to fall within maybe 10% or several watts of the right answer.

    With all that in mind and assuming the meter is delivering approximately the right numbers on average, the power supply overcooks the tube at any PWM setting above 50%. I’ve noticed some beam instability / defocusing over 80% while cutting recalcitrant materials, which is surely due to the tube not lasing properly. I generally avoid doing that.

    The log fit to the measured power looks better than I expected, although I’m unprepared to compute natural logs in my head.

    Hey, it’s my idea of a good Christmas present …

  • HLP-200B Laser Power Meter: Holder / Stand

    HLP-200B Laser Power Meter: Holder / Stand

    The overall measurement process for the HLP-200B laser power meter requires more coordination than I can muster on a dependable basis, so a third hand seemed in order:

    HLP-200B Power Meter - target setup
    HLP-200B Power Meter – target setup

    In actual use, a pair of finger-crushingly strong magnets laid on the base hold it firmly to the honeycomb.

    Because a CO₂ laser beam is invisible, the only way to know where it hits is to char a bit of paper:

    HLP-200B Power Meter - target detail
    HLP-200B Power Meter – target detail

    With that evidence, I can jog the platform up-and-down and the gantry front-and-back to center the beam on the paper target and, thus, on the sensor behind it. That process happens at each test position across the platform:

    HLP-200B Power Meter - targets
    HLP-200B Power Meter – targets

    The meter shuts down a mere six seconds after completing each measurement, which means I must keep the lid open, listen carefully, and react quickly. Firing the laser thus requires defeating the lid interlock specifically wired to prevent that from happening:

    Laser lid interlock sensor
    Laser lid interlock sensor

    Rather than install a switch to bypass the interlock, I taped a steel cover harvested from defunct electronics over the sensor:

    Laser lid interlock sensor - bypassed
    Laser lid interlock sensor – bypassed

    Which has the useful side effect of preventing me from closing the lid with the interlock defeated.

    The holder is just slightly larger than the meter’s handle and some clamps produced a snug fit while the glue cured:

    HLP-200B Power Meter - holder gluing
    HLP-200B Power Meter – holder gluing

    The holder keeps the meter sensor at the same position vertically and within about a millimeter horizontally. The laser beam seems to be around 5 mm in diameter (the scorches above come from the hottest central part), so the beam should hit the same position on the sensor during successive measurements, making them far more repeatable than my waving it around by hand.

    The LightBurn SVG layout as a GitHub Gist:

    Loading
    Sorry, something went wrong. Reload?
    Sorry, we cannot display this file.
    Sorry, this file is invalid so it cannot be displayed.
  • HLP-200B CO₂ Laser Power Meter

    HLP-200B CO₂ Laser Power Meter

    What with Christmas approaching, I got myself an HLP-200B CO₂ Laser Power Meter:

    HLP-200B - front panel
    HLP-200B – front panel

    It’s a hefty chunk of aluminum, as befits a device intended to soak up a 200 W CO₂ laser beam, and both sides have a relentless simplicity:

    HLP-200B - back panel - redacted
    HLP-200B – back panel – redacted

    Having not found an online version of the manual:

    You’re welcome.

    [Edit: A slightly different version of the manual is online at https://www.ccbluetimes.net/pages/support ]

    The manual does not exactly match the hardware. In particular, “so users won’t need any tools to replace the battery” is incorrect:

    HLP-200B - battery lid screw
    HLP-200B – battery lid screw

    Until you loosen the M2 setscrew below the finger notch a couple of turns, “Use just fingers to remove the battery cover” will merely scuff your fingerprints. Apply a 1.5 mm or 1/16 inch straight screwdriver bit with no more than finger torque and, after two or three turns, the lid comes free.

    The meter arrives without a battery, so you passed the first test.

    Despite the “another screw hold (M4) is added”, there’s only one tapped hole in the case, as visible in the back panel photo. Seen from the front, it’s above the four digit LCD.

    Operation is at best awkward and at worst hazardous:

    • Press the blue button to turn it on and hear a beep
    • It’s ready to measure within three seconds
    • Hit it with the laser beam until it beeps
    • The LCD shows the power for six seconds
    • It shuts off with a beep
    • Bonus: If the meter doesn’t detect any energy, it shuts off 20-ish seconds after the button press

    Minus my power ears, the beeps are completely inaudible.

    The meter is sensitive enough to respond to weak heat sources like LED bulbs and even fingertips, so you can test it without firing the laser. The numeric value shows the power from a CO₂ laser beam dumping an equivalent amount of energy into the sensor:

    HLP-200B - finger heat response
    HLP-200B – finger heat response

    The sensor target is 20 mm OD, although the instructions remind you to “Ensure the laser is emitted to the center of the sensor”. I suspect hitting the sensor with a focused laser spot will eventually damage the surface.

    Making a real measurement requires:

    • Set the Pulse button for continuous output
    • Set the power level
    • Defeat the lid interlock switch on the laser cabinet
    • Push the blue button on the HLP-200B
    • Quickly position the meter target accurately in the beam path
    • Hold down the laser Pulse button
    • Freeze in that position until the meter beeps
    • Release the Pulse button
    • Quickly reorient the meter and read the display

    I have a visceral reluctance concerning safety interlock overrides, misgivings about poking my head inside the cabinet, and no yearning to put one hand near the beam line with the other on the console. Yes, I have known-good laser safety glasses.

    The meter generates plausible results for the (claimed) 60 W tube in my machine, but further tests await conjuring fixtures to keep various irreplaceable body parts out of harm’s way.

  • Windows 11 for the Linux Guy: Remote Desktop Protocol

    Windows 11 for the Linux Guy: Remote Desktop Protocol

    With Windows 11 and LightBurn running on a little PC perched atop the laser in the basement:

    BeeLink Win 11 PC - overview
    BeeLink Win 11 PC – overview

    I wanted to work with that desktop from my Comfy Chair upstairs, because I’m unwilling to stand up a Windows box specifically for another LightBurn installation, along with a nightmare KVM switch tangle for all the displays / keyboards / trackballs I run with Linux.

    At the Win 11 PC, turn on Remote Desktop connections:

    Remote Desktop enable
    Remote Desktop enable

    The Administrator is automatically allowed access, but I also allowed access for my local User (who does not have a Microsoft account), which requires the Administrator’s password. You’ll want to store that in a password manager, because typing line noise gets tedious.

    Upstairs on the Comfy Chair at the Linux box, install Remmina from the repository, then tweak some preferences:

    Remmina prefs - General
    Remmina prefs – General

    This being a LAN connection, pick the highest quality scaling, although that shouldn’t matter with a fullscreen display. I added a screen resolution matching my desktop landscape monitor:

    Remmina config - screen resolutions
    Remmina config – screen resolutions

    Somewhat to my surprise, selecting an RDP screen resolution larger than the HDMI monitor on the Win 11 box worked perfectly.

    Because the remote display will fill the entire screen in fullscreen mode, set the toolbar to “Peeking” mode making it barely visible at the top of the screen:

    Remmina prefs - Appearance
    Remmina prefs – Appearance

    I have yet to (figure out how to) enable the hotkey turning fullscreen mode on and off, so if the toolbar isn’t readily available there is no way to get out of fullscreen mode.

    Set up the RDP connection to the Win 11 box, using either the static IP address or whatever name the router assigns:

    Remmina config - Basic
    Remmina config – Basic

    I set the Win 11 box for a static IP address, then told the router to assign that IP to the box if it ever woke up asking for an address through a DHCP request. The process differs depending on which router you have and may not be needed. I (try to) nail down all the IP addresses, so anything using DHCP will be obviously in need of attention.

    Select the highest quality compression:

    Remmina config - Advanced
    Remmina config – Advanced

    With all that set up, double-clicking the appropriate line should fire up an RDP connection, perhaps with a peephole view of the Win 11 desktop:

    Remmina - small RDP window
    Remmina – small RDP window

    Hit the Toggle Fullscreen icon (hollow square, fifth down) to embiggen it:

    Remmina - fullscreen RDP window
    Remmina – fullscreen RDP window

    Your Win 11 desktop will be different; that’s the Apollo 17 lunar module ascent stage.

    The thin line along the center top is the Remmina toolbar, peeking over the edge. Move the mouse cursor up there to roll it down into view:

    Remmina - fullscreen RDP window - detail
    Remmina – fullscreen RDP window – detail

    Because this is a fullscreen view, hitting the Toggle Fullscreen icon (highlighted blue) is the only way out. It required a disturbing number of iterations before realizing none of the hotkeys worked, then figuring out how to enable toolbar peeking.

    Moving the mouse pointer to the bottom of the screen rolls up the Win 11 Task Bar (which I always set to Hide mode to get it out of the way):

    Remmina - fullscreen - task bar
    Remmina – fullscreen – task bar

    I pinned the LightBurn icon to the task bar where it’s easy to hit, as that’s the whole point of the exercise.

    And then It Just Works™:

    Remmina - fullscreen LightBurn
    Remmina – fullscreen LightBurn

    Because this is Windows, one user can sign onto the box from either the local keyboard or the RDP connection, but not both.

    Being an Old School type of guy, I reflexively save my work before trotting either upstairs or downstairs and signing on wherever I end up, but it’s the same file in the same program on the same hardware.

    The performance over the LAN and through Remmina is good enough to make the fullscreen session feels exactly like running LightBurn locally. In truth, LightBurn is not a particularly resource-heavy program.

    Then I deleted both Linux installations from the LightBurn license portal …

  • Windows 11 for the Linux Guy: Hardware

    Windows 11 for the Linux Guy: Hardware

    Contrary to what I thought a while ago, the least awful way to continue running LightBurn after Linux support goes away is to stand up a dedicated Windows 11 box:

    BeeLink Win 11 PC - overview
    BeeLink Win 11 PC – overview

    Lest it become lost in the clutter:

    BeeLink Win 11 PC - detail
    BeeLink Win 11 PC – detail

    It’s a BeeLink Mini S12 (whatever that means) and squats near the low end of PC performance these days. I chose it based on reports from folks at Squidwrench having used similar units for various purposes without much pain, plus motivation from one of those weird Amazon “coupons” knocking the price down; it now sells for about that same price without the coupon.

    It’s advertised as coming with Windows 11, but my advisors recommended a clean installation to get rid of crapware and possible pre-installed malware. I decided to start with the as-delivered system, then use the same product key to blow away the default installation.

    The box / packaging did not include a Microsoft Windows Product Key and going through the first boot setup process produced this disconcerting result:

    Win 11 license key - not found
    Win 11 license key – not found

    More disconcerting: Windows Defender (Microsoft’s antivirus scanner / system integrity checker) was inactive and could not be installed from the MS “Store”. While not conclusive proof of pre-installed malware, the situation certainly seemed suspicious.

    The seller sent a key that seemed to be for Windows 10:

    BeeLink MS Product Key - Win 10 - redacted
    BeeLink MS Product Key – Win 10 – redacted

    Having been assured this would also validate a Win 11 installation, I did a clean installation using a USB flash drive produced by the MS installer, was never asked for a key, and eventually got to this point:

    Win 11 Pro Installed Key - requires Digital License - redacted
    Win 11 Pro Installed Key – requires Digital License – redacted

    Despite the missing OEM key and the footnote, everything seems just ducky:

    Win 11 Activation with Digital License
    Win 11 Activation with Digital License

    I assume a clean installation blows away any malware resident on the “hard drive” (an M.2 solid state drive, of course), including rootkits and boot sector malware. My threat model does not include malware in the BIOS / UEFI firmware, which may be overoptimistic.

    I declined all the optional MS products, refused various MS subscriptions, and generally tried to kill off a myriad invasive / advertising / “customized for you” features along the way. A casual search will produce many helpful guides for that process; I expect the details will change as MS continues to extract information from us. I set up a non-Administrator account for myself specifically to run LightBurn.

    With that accomplished, I gave it a static IP address, created network shares to various directories on the “file server” (an ancient off-lease Dell Optiplex) holding the files I previously used with Linux LightBurn, installed Window LightBurn, got its preferences sorted out / restored from backup, and things eventually worked pretty much as intended.

    Not shown in the picture:

    This setup is intended for layout tweaking and laser control, not for protracted design work while standing in what’s now a 57 °F = 14 °C basement.

    For what it’s worth, I must run the laser’s water chiller for half an hour to raise the cooling water to the normal 20 °C operating range; it has a water-cooled pump serving as a little heater.

    The next step involved enabling Remote Desktop Protocol access so I can access the Windows box from my Comfy Chair at my usual battle station upstairs. More on that tomorrow …

  • Handi-Quilter HQ Sixteen: Anchor Block

    Handi-Quilter HQ Sixteen: Anchor Block

    Although I devoted considerable attention to leveling & shimming the table under Mary’s HQ Sixteen, the machine rolls on ball bearing wheels atop (relatively) smooth plastic tracks. Parked at a few spots along the dozen feet of table, the machine will slowly and quietly roll away. This calls for some sort of parking brake, but until inspiration strikes, a simple anchor will suffice:

    HQ Sixteen - anchor
    HQ Sixteen – anchor

    It’s a cocoa container chosen from (one of) my Boxes o’ Containers, with a husky chunk of steel atop some very sticky double-sided foam tape inside the red lid.

    You can see one of the ball bearing wheel just above the strap applying tension to the practice quilt out of view on the left. The thing that looks like a wheel just under the strap is an encoder for the stitch regulator that we haven’t connected yet.

    To prevent the machine from simply bulldozing the container along with it, the lid sits on a sheet of EVA craft foam stuck to a sheet of rigid foam board (with adhesive on both sides).

    Scan the lid:

    Container lid scan
    Container lid scan

    Select all the red pixels, do a little cleanup, turn it into a binary mask:

    Container lid mask
    Container lid mask

    Import it into LightBurn, trace the perimeter, do some curve optimization / smoothing, duplicate the outline, set one to cut EVA foam and the other to cut adhesive board, and Fire The Laser.

    Elapsed time: about fifteen minutes from realizing what was needed to plunking the anchor in place.

    I briefly considered a full-frontal laser-cut finger-jointed box for the weight, but … Mary’s not a big fan of that campfire smell, particularly in a room dedicated to the Fiber Arts.

  • Handi-Quilter HQ Sixteen: Front Handlebar Angled Mount

    Handi-Quilter HQ Sixteen: Front Handlebar Angled Mount

    So as to not bury the lede, I remounted the front handlebar unit of Mary’s Handi-Quilter HQ Sixteen long-arm sewing machine so she can see the control panel with its small LCD:

    HQ Sixteen - remounted handlebars in use
    HQ Sixteen – remounted handlebars in use

    The new and old white LEDs produce distinctly different colors and intensities on the practice quilt fabric.

    The original HQ Sixteen design bolted squarely atop the arm:

    HQ Sixteen - original front handlebar mount
    HQ Sixteen – original front handlebar mount

    The control surface is, admittedly, angled slightly forward, but Mary was unable to see the lower few lines of the LCD without standing on tiptoe.

    Begin with a crude tracing of the mating surfaces:

    Front handlebar base tracings
    Front handlebar base tracings

    Import the image into Inkscape and lay some shapes on it:

    Front handlebar base layout - Inkscape
    Front handlebar base layout – Inkscape

    Import the SVG into LightBurn and cut templates to verify the hole positions:

    HQ Sixteen - handlebar bolt templates
    HQ Sixteen – handlebar bolt templates

    Obviously that took more than one try.

    Rationalize the outlines, clean things up, and organize the shapes into useful named layers:

    Front handlebar base layout - Inkscape layers
    Front handlebar base layout – Inkscape layers

    Save as an Inkscape SVG, import into OpenSCAD, and extrude the layers defining all those shapes into a solid model:

    Handlebar Base Mount - solid model
    Handlebar Base Mount – solid model

    That’s the most recent iteration; earlier ones appear in various pix.

    I had intended to use either square nuts or heat-set inserts, but it turned out to be easier to just slam BOSL2 threaded nuts into the front plate and be done with it:

    Handlebar Base Mount - solid model - hex nuts
    Handlebar Base Mount – solid model – hex nuts

    The trick is to sink the nuts around a hole sized slightly larger than the screw’s nominal diameter, letting the threads fill empty space.

    The handlebar base is mounted symmetrically along the machine arm centerline aligned with the two screws on the right. The rear block is offset to the left to clear the machine cover on the right, so the hull() wrapped around the two looks weird.

    The front plate stands proud of the rest by dint of incorporating only a small slice of its back face into the hull() filling the gaps between the two. It’s not particularly stylin’, but it’s pretty close.

    Finding the correct angle for the front plate required a couple of iterations, but they all built successfully:

    HQ Sixteen - handlebar mount - on platform
    HQ Sixteen – handlebar mount – on platform

    Putting the threaded holes vertical created nicely formed threads that accepted the screws without hassle.

    The block screws firmly to the arm and the handlebar unit screws to the block:

    HQ Sixteen - remounted handlebars - side
    HQ Sixteen – remounted handlebars – side

    The display now faces front:

    HQ Sixteen - remounted handlebars - front
    HQ Sixteen – remounted handlebars – front

    I eventually replaced those black oxide screws with shiny stainless ones, just for pretty.

    The nine LEDs under the display now do a great job of lighting up the front of the machine’s arm, rather than the fabric at the needle, but fixing that will be a whole ‘nother project.

    The handlebar grips with their control buttons now tilt at a somewhat inconvenient angle, which is also a whole ‘nother project.

    Early reports from the user community are overwhelmingly positive.

    The OpenSCAD source code and the SVG layout as a GitHub Gist:

    Loading
    Sorry, something went wrong. Reload?
    Sorry, we cannot display this file.
    Sorry, this file is invalid so it cannot be displayed.
    // Handiquilter HQ Sixteen front handlebar base mount
    // Ed Nisley – KE4ZNU
    // 2024-11-22
    include <BOSL2/std.scad>
    include <BOSL2/threading.scad>
    Layout = "Show"; // [Build,Show,Block,Holes]
    HandlebarOffset = [0,-30.0,14.0]; // pure empirical values
    HandlebarAngle = [60,0,0];
    FrameBlockThick = 35.0; // how much meat they need
    HandlebarThick = 12.0;
    /* [Hidden] */
    Holes = [[-19.0,0,0],[0,0,0],[0,12.5,0]]; // Must match SVG hole coordinates
    FrameCenter = [-45,-65]; // coordinates of corner hole center
    HoleCenter = [-40,-20];
    Protrusion = 0.1;
    module AdapterBlock() {
    union() {
    hull() {
    linear_extrude(height=FrameBlockThick,convexity=10)
    translate(FrameCenter)
    import("Front Handlebar Layout.svg",layer="Machine Frame");
    translate(HandlebarOffset)
    rotate(HandlebarAngle)
    linear_extrude(height=0.05*HandlebarThick,convexity=10)
    translate(HoleCenter)
    import("Front Handlebar Layout.svg",layer="Handlebar Base");
    }
    translate(HandlebarOffset)
    rotate(HandlebarAngle)
    linear_extrude(height=HandlebarThick,convexity=10)
    translate(HoleCenter)
    import("Front Handlebar Layout.svg",layer="Handlebar Base");
    }
    }
    module AdapterHoles() {
    linear_extrude(height=FrameBlockThick,convexity=10)
    translate(FrameCenter)
    import("Front Handlebar Layout.svg",layer="Machine Holes",convexity=2);
    translate([0,0,FrameBlockThick – 7.0])
    linear_extrude(height=7.0 + Protrusion,convexity=10)
    translate(FrameCenter)
    import("Front Handlebar Layout.svg",layer="Machine Counterbore",convexity=2);
    translate(HandlebarOffset) // cut clearance for nut threads
    rotate(HandlebarAngle)
    linear_extrude(height=HandlebarThick + Protrusion,convexity=10)
    translate(HoleCenter)
    import("Front Handlebar Layout.svg",layer="Handlebar Holes",convexity=2);
    }
    module Adapter() {
    union() {
    difference() {
    AdapterBlock();
    AdapterHoles();
    }
    # translate(HandlebarOffset) // add threads inside holes
    for (c = Holes)
    rotate(HandlebarAngle)
    translate(c)
    threaded_nut(10.0,6.2,HandlebarThick,1.0, // flat size, root dia, height, pitch
    bevel=false,ibevel=false,anchor=BOTTOM);
    }
    }
    // Build things
    if (Layout == "Block")
    AdapterBlock();
    if (Layout == "Holes")
    # AdapterHoles();
    if (Layout == "Show")
    Adapter();
    if (Layout == "Build")
    rotate([180,0,0] – HandlebarAngle)
    Adapter();