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.

Author: Ed

  • Danger Zone Earrings: MVP

    Danger Zone Earrings: MVP

    Some geometry review and a bit of fiddling with LightBurn produced regularized patterns suitable for laser cuttery:

    Danger Zone Earrings - radioactive - handful
    Danger Zone Earrings – radioactive – handful

    A key trick: circumscribe the figure with a circle on a tool layer, then group the whole mess together, so that the center of the circle coincides with the desired center of the figure. In particular, the geometric center of an equilateral triangle is not at the center of its vertical extent:

    Danger Zone Earrings - radioactive - LB layout
    Danger Zone Earrings – radioactive – LB layout

    The dark blue layer engraves the surface, the red layer cuts through 3 mm acrylic, and the light blue layer is the tooling.

    I like the edge-lit ones, although the simplicity of laser-cut clear acrylic is hard to beat:

    Danger Zone Earrings - radioactive - white light
    Danger Zone Earrings – radioactive – white light

    Wearing them in a place flooded with UV radiation would set you apart:

    Danger Zone Earrings - radioactive - GITD UV
    Danger Zone Earrings – radioactive – GITD UV

    The careful observer will note stress cracking in the two clear earrings in the middle row. Those came from the vintage paper-covered acrylic sheet and I used alcohol to clean off the not-quite-vaporized glue just to see if isopropyl alcohol would behave differently than denatured alcohol. Nope, the cracks appear instantly.

    Peeling the paper and engraving the bare surface produced the clear-frosted earring in the upper right, with the radiation symbol cut out of the sheet. Engraving without surface protection tends to deposit vaporized acrylic dust everywhere, so it would require hand cleaning without the cutouts.

    The cutouts get 0.1 mm inward offsets to slightly increase the wall thickness around that central circle.

    One combination I didn’t try: engrave the triangle perimeter for emphasis and cut out the symbol for contrast with edge-lit acrylic.

    Dropping other symbols into place should be straightforward, with the center of the circumcircle as the snap target.

    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.

  • SCP Warning Label Earrings: Rattlecan Feasibility Test

    SCP Warning Label Earrings: Rattlecan Feasibility Test

    Our Young Engineer provided different specs for earrings than I’d been using, which prompted a quick-n-dirty test to see how they might come out:

    SCP Warning Labels - test 1
    SCP Warning Labels – test 1

    The images come from the SCP Wiki with tweakage for better contrast:

    SCP warning signs - BW 3x3
    SCP warning signs – BW 3×3

    Then I traced them into LightBurn vectors suitable for engraving, added hanging holes, and fit a perimeter cutout. This being a test, I took a number of shortcuts resulting in slightly off-center engravings and ignored a number of image botches (most notably in the Inconsistent Topology figure.

    A quick painting fixture kept (most of) the rattlecan paint off the edges:

    SCP Warning Labels - fixture clamping
    SCP Warning Labels – fixture clamping

    The acrylic is old enough to have brown paper protective layers, rather than fancy plastic sheets. I peeled various combinations and shot various sides with purple:

    SCP Warning Labels - purple coat
    SCP Warning Labels – purple coat

    Remove some, flip others over, and hit ’em with yellow:

    SCP Warning Labels - yellow coat
    SCP Warning Labels – yellow coat

    I expected purple markings over a yellow background to look best:

    SCP Warning Labels - purple over yellow
    SCP Warning Labels – purple over yellow

    But the inverse version seems more contrasty (ignore the off-center cutout):

    SCP Warning Labels - yellow over purple
    SCP Warning Labels – yellow over purple

    I think the purple-on-clear version would look better with edge-lit acrylic:

    SCP Warning Labels - purple over clear
    SCP Warning Labels – purple over clear

    The 0.15 mm line spacing seems too coarse, but trying to get a perfectly flat engraved bottom seems futile.

    A second coat of paint on the engraving would definitely boost the contrast.

    If you were going to do this for real, you’d definitely recreate the images with vectors right from the start, using the original images as inspiration.

    All in all, I like ’em, but there’s some improvement required before anybody else does!

  • Copying Action Camera Video Files: Now With Arrays

    Copying Action Camera Video Files: Now With Arrays

    Using Bash arrays is an exercise in masochism, but I got to recycle most of the oddities from the previous script, so it wasn’t a dead loss.

    The cameras use individually unique / screwy / different filesystem layouts, so the script must have individual code to both copy the file and decapitalize the file extensions. This prevents using a single tidy function, although laying out the code in case statements keyed by the camera name helps identify what’s going on.

    My previous approach identified the MicroSD cards by their UUIDs, which worked perfectly right up until the camera reformats the card while recovering from a filesystem crash and installs a randomly generated UUID. Because there’s no practical way to modify an existing UUID on a VFAT drive, I’m switching to the volume label as needed:

    #-- action cameras and USB video storage
    UUID=B40C6DD40C6D9262	/mnt/video	ntfs	user,noauto,uid=ed	0	0
    UUID=B257-AE02		/mnt/Fly6	vfat	user,noauto,uid=ed	0	0
    #UUID=0000-0001		/mnt/M20	vfat	user,noauto,uid=ed	0	0
    UUID=3339-3338		/mnt/M20	vfat	user,noauto,uid=ed	0	0
    LABEL=AS30V		/mnt/AS30V	exfat	user,noauto,uid=ed	0	0
    LABEL=C100-0001		/mnt/C100_1	vfat	user,noauto,uid=ed	0	0
    LABEL=C100-0002		/mnt/C100_2	vfat	user,noauto,uid=ed	0	0
    UUID=0050-0001		/mnt/M50	vfat	user,noauto,uid=ed	0	0
    

    In particular, note the two UUIDs for the M20 camera: there’s a crash and reformat in between those two lines. The two C100 cameras started out with labels because the M20 taught me the error of my ways.

    The script simply iterates through a list array of the cameras and tries to mount the corresponding MicroSD card for each one: the mount points are cleverly chosen to match the camera names in the array. Should the mount succeeds, an asynchronous rsync then slurps the files onto the bulk video drive.

    With all the rsync operations running, the script waits for all of them to complete before continuing. I don’t see much point in trying to identify which rsync just finished and fix up its files while the others continue to run, so the script simply stalls in a loop until everything is finished.

    All in all, the script scratches my itch and, if naught else, can serve as a Bad Example™ of how to get the job done.

    A picture to keep WordPress from reminding me that readers respond positively to illustrated posts:

    A pleasant day for a ride - 2023-06-01
    A pleasant day for a ride – 2023-06-01

    Ride on!

    The Bash script as a GitHub Gist:

    #!/bin/bash
    # This uses too many bashisms for dash
    source /etc/os-release
    echo 'Running on' $PRETTY_NAME
    if [[ "$PRETTY_NAME" == *Manjaro* ]] ; then
    ren='perl-rename'
    dm='sudo dmesg'
    elif [[ "$PRETTY_NAME" == *Ubuntu* ]] ; then
    ren='rename'
    dm='dmesg'
    else
    echo 'New distro to me:' $PRETTY_NAME
    echo ' … which rename command is valid?'
    exit
    fi
    echo Check for good SD card spin-up
    $dm | tail -50
    echo … Ctrl-C to bail out and fix / Enter to proceed
    read junk
    thisdate=$(date –rfc-3339=date)
    echo Date: $thisdate
    # MicroSD / readers / USB drive defined in fstab
    # … with UUID or PARTID as appropriate
    echo Mounting bulk video drive
    sudo mount /mnt/video
    if [ $? -ne 0 ]; then
    echo '** Cannot mount video storage drive'
    exit
    fi
    # Show starting space available
    df -h /mnt/video
    # list the cameras
    declare -a cams=( AS30V Fly6 M20 M50 C100_1 C100_2 )
    declare -A targets=( \
    [AS30V]=/mnt/video/AS30V/$thisdate \
    [Fly6]=/mnt/video/Fly6/DCIM \
    [M20]=/mnt/video/M20/$thisdate \
    [M50]=/mnt/video/M50/$thisdate \
    [C100_1]=/mnt/video/C100_1/$thisdate \
    [C100_2]=/mnt/video/C100_2/$thisdate \
    )
    declare -A PIDs
    declare -A Copied
    echo Iterating through cameras: ${cams[*]}
    Running=0
    for cam in ${cams[*]} ; do
    printf "\nProcessing: $cam\n"
    mpt="/mnt/$cam"
    target=${targets[$cam]}
    sudo mount $mpt
    if [ $? -eq 0 ]; then
    echo " Start $cam transfer from $mpt"
    echo " Make target directory: $target"
    mkdir $target
    case $cam in
    ( AS30V )
    rsync -ahu –progress –exclude "*THM" $mpt/MP_ROOT/100ANV01/ $target &
    ;;
    ( Fly6 )
    rsync -ahu –progress $mpt /mnt/video &
    ;;
    ( M20 )
    n=$( ls $mpt/DCIM/Photo/* 2> /dev/null | wc -l )
    if [ $n -gt 0 ] ; then
    echo " copy M20 photos first"
    rsync -ahu –progress $mpt/DCIM/Photo/ $target
    fi
    echo " cmd: rsync -ahu –progress $mpt/DCIM/Movie/ $target"
    rsync -ahu –progress $mpt/DCIM/Movie/ $target &
    ;;
    ( M50 )
    n=$( ls $mpt/DCIM/PHOTO/* 2> /dev/null | wc -l )
    if [ $n -gt 0 ] ; then
    echo " copy M50 photos first"
    rsync -ahu –progress $mpt/DCIM/PHOTO/ $target
    fi
    rsync -ahu –progress $mpt/DCIM/MOVIE/ $target &
    ;;
    ( C100_1 | C100_2 )
    n=$( ls $mpt/DCIM/Photo/* 2> /dev/null | wc -l )
    if [ $n -gt 0 ] ; then
    echo " copy $cam photos first"
    rsync -ahu –progress $mpt/DCIM/Photo/ $target
    fi
    rsync -ahu –progress $mpt/DCIM/Movie/ $target &
    ;;
    ( * )
    printf "\n**** Did not find $cam in list!\n"
    ;;
    esac
    PIDs[$cam]=$!
    echo " PID for $cam: " "${PIDs[$cam]}"
    Copied[$cam]=1
    (( Running++ ))
    else
    echo " skipping $cam"
    Copied[$cam]=0
    fi
    done
    printf "\n—– Waiting for all rsync terminations\n"
    echo PIDs: "${PIDs[*]}"
    if [ $Running -eq 0 ] ; then
    echo No rsyncs started, force error
    rcsum=9999
    else
    rcsum=0
    while [ $Running -gt 0 ] ; do
    echo " waiting: $Running"
    wait -n -p PID
    rc=$?
    rcsum=$(( rcsum+$rc ))
    echo RC for $PID: $rc
    (( Running– ))
    done
    echo All rsyncs finished
    fi
    if [ $rcsum -eq 0 ] ; then
    echo '—– Final cleanups'
    for cam in ${cams[*]} ; do
    if [ "${Copied[$cam]}" -eq 1 ] ; then
    echo Cleanup for: $cam
    mpt=/mnt/$cam
    target=${targets[$cam]}
    echo Target dir: $target
    case $cam in
    ( Fly6 )
    find $target -name \*AVI -print0 | xargs -0 $ren -v -f 's/AVI/avi/'
    rm -rf $mpt/DCIM/*
    ;;
    ( AS30V )
    find $target -name \*MP4 -print0 | xargs -0 $ren -v -f 's/MP4/mp4/'
    rm $mpt/MP_ROOT/100ANV01/*
    ;;
    ( M50 )
    find $target -name \*MP4 -print0 | xargs -0 $ren -v -f 's/MP4/mp4/'
    rm $mpt/DCIM/MOVIE/*
    n=$( ls $mpt/DCIM/PHOTO/* 2> /dev/null | wc -l )
    if [ $n -gt 0 ] ; then
    echo placeholder $cam
    rm $mpt/DCIM/PHOTO/*
    fi
    ;;
    ( * )
    find $target -name \*MP4 -print0 | xargs -0 $ren -v -f 's/MP4/mp4/'
    find $target -name \*JPG -print0 | xargs -0 $ren -v -f 's/JPG/jpg/'
    rm $mpt/DCIM/Movie/*
    n=$( ls $mpt/DCIM/Photo/* 2> /dev/null | wc -l )
    if [ $n -gt 0 ] ; then
    echo placeholder $cam
    rm $mpt/DCIM/Photo/*
    fi
    ;;
    esac
    sudo umount $mpt
    else
    echo No cleanup for: $cam
    fi
    done
    echo '—– Space remaining on video drive'
    df -h /mnt/video
    sudo umount /mnt/video
    date
    echo Done!
    else
    echo Whoopsie! Total RC: $rcsum
    fi

  • Earring Laser Fixture

    Earring Laser Fixture

    Cutting or engraving patterns on earrings should go more smoothly with a fixture:

    Earring fixture - demo install
    Earring fixture – demo install

    That’s a serving suggestion, using the Biohazard test pieces, which also helped align the top and bottom layers while gluing:

    Earring fixture - clamping
    Earring fixture – clamping

    That used all my little clamps: obviously I need more!

    The bottom layer (red) is MDF for strength and the top layer (orange) is chipboard because that’s all it needs:

    Earring fixture - LB layout
    Earring fixture – LB layout

    The little tab along the top ensures alignment using the jump ring cutout. The central hole will let me cut through the earring, should that be necessary.

    The two strips over on the left get glued on the bottom, spaced to align along one of the aluminum knife blade rails, as with the craft stick fixture. With that lined up, any two of the four targets will serve to align the template with the fixture using LightBurn’s Print-and-Cut tool, as with the craft stick template.

    Now, to make some smoke!

    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.

  • Going About Their Daily Affairs

    Going About Their Daily Affairs

    The fox caught what looks like a small groundhog for supper:

    IM_00307 - Fox with supper - 2023-05-25
    IM_00307 – Fox with supper – 2023-05-25

    The tom turkeys have been forming and re-forming their groups:

    IM_00178 - Turkey parade - 2023-05-24
    IM_00178 – Turkey parade – 2023-05-24

    The gray cat may have spotted breakfast out there in the yard:

    IM_00112 - Gray Cat - 2023-05-23
    IM_00112 – Gray Cat – 2023-05-23

    We haven’t seen a raccoon stand up like this before, so something must be very interesting out there:

    IM_00089 - Standing raccoon - 2023-05-27
    IM_00089 – Standing raccoon – 2023-05-27

    Off to its far right, Mary had fertilized a new pepper planting, which evidently smelled good enough to motivate vigorous digging. None of the plants sustained damage, despite being tossed around, but dexterous paws were surely involved!

  • Punching the Exercise Ticket

    Punching the Exercise Ticket

    An unfortunate confluence of weather, schedule, and enthusiasm led to mowing all the yard in one session:

    Mowing pattern - 2023-05-27
    Mowing pattern – 2023-05-27

    I managed to remember to pause the tracker during a break in the middle, so it’s really just shy of three wall-clock hours from start to finish. It’s amazing how much work you (well, I) can get out of 100 mg of caffeine.

    Despite what you see here, the path on what’s euphemistically called “our lawn” show a much more organized solution to the problem of covering our property with non-overlapping foot-and-a-half stripes. As with my leaf-shredding track, I neither venture into the road nor mow the neighboring yards.

    Bonus: slept like a stone that night …

  • Biohazard Earrings

    Biohazard Earrings

    More desk clearing revealed a sketch for another trinket:

    Biohazard symbol
    Biohazard symbol

    That’s built directly from the original specs to get the spacing and symmetries correct. The freebies I could find all suffered from various degrees of bad design & layout.

    A chipboard coaster provided some reassurance:

    Biohazard coaster
    Biohazard coaster

    Shrunken down to 25 mm OD, the tips become vanishingly small:

    Biohazard earring - vinyl sample
    Biohazard earring – vinyl sample

    It’s the same laser-safe polyurethane vinyl as the SD card reader, this time applied to 3 mm black acrylic. The “gold” ring is just parked in place, as this one wasn’t presentation-quality.

    Contrary to the usual transfer-tape method of applying PSA vinyl, I stuck the sheet to the acrylic before cutting, then weeded it directly off the acrylic:

    Biohazard earring - vinyl weeding
    Biohazard earring – vinyl weeding

    Kiss-cutting the vinyl with dot mode ate into the acrylic, but the soon-to-be-weeded areas protected the surroundings and the result came out looking pretty good. To me, anyhow.

    Flushed with success, I tried some almost certainly not laser safe glow-in-the-dark tape:

    Biohazard earring - GITD weeding fail
    Biohazard earring – GITD weeding fail

    The mess in the upper left is the tape’s double-sided adhesive intended to hold the glowy layer in place forever. Of course it weeded poorly!

    Seen in its natural environment, however, weeding may not be necessary:

    Biohazard earring - GITD tape glow
    Biohazard earring – GITD tape glow

    Engraving the rebated rim leaves quite a bit of debris & scorch marks around the perimeter. A mask layer atop the GITD tape seems like a Good Idea™.

    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.