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

  • Raspberry Pi Streaming Video Loopback

    Raspberry Pi Streaming Video Loopback

    As part of spiffing my video presence for SquidWrench Zoom meetings, I put a knockoff RPi V1 camera into an Az-El mount, stuck it to a Raspberry Pi, installed the latest OS Formerly Known as Raspbian, did a little setup, and perched it on the I-beam over the workbench:

    Raspberry Pi - workbench camera setup
    Raspberry Pi – workbench camera setup

    The toothbrush head has a convenient pair of neodymium magnets affixing the RPi’s power cable to the beam, thereby preventing the whole lashup from falling off. The Pi, being an old Model B V 1.1, lacks onboard WiFi and requires a USB WiFi dongle. The white button at the lower right of the heatsink properly shuts the OS down and starts it up again.

    Zoom can show video only from video devices / cameras attached to the laptop, so the trick is to make video from the RPi look like it’s coming from a local laptop device.

    Start by exporting video from the Raspberry Pi:

    raspivid --nopreview -t 0 -rot 180 -awb sun --sharpness -50 --flicker 60hz -w 1920 -h 1080 -ae 48 -a 1032 -a 'RPi Cam1 %Y-%m-%d %X'  -b 1000000 -l -o tcp://0.0.0.0:5000

    The -rot 180 -awb sun --sharpness -50 --flicker 60hz parameters make the picture look better. The bottom of the video image There is no way to predict which side of the video will be on the same side as the cable, if that’s any help figuring out which end is up, and the 6500 K LED tubes apparently fill the shop with “sun”.

    The -l parameter causes raspivid to wait until it gets an incoming tcp connection on port 5000 from any other IP address, whereupon it begins capturing video and sending it out.

    Then, on the laptop, create a V4L loopback device:

    sudo modprobe v4l2loopback devices=1 video_nr=10 exclusive_caps=1 card_label="Workbench"

    Zoom will then include a video source identified as “Workbench” in its list of cameras.

    Now fetch video from the RPi and ram it into the loopback device:

    ffmpeg -f h264 -i tcp://192.168.1.50:5000 -f v4l2 -pix_fmt yuv420p /dev/video10

    VLC knows it as /dev/video10:

    RPi - V4L loopback - screen grab
    RPi – V4L loopback – screen grab

    That’s the edge of the workbench over there on the left, looking distinctly like a cliff.

    The RPi will happily stream video all day long to ffmpeg while you start / stop the display program pulling the bits from the video device. However, killing ffmpeg also kills raspivid, requiring a manual restart of both programs. This isn’t a dealbreaker for my simple needs, but it makes unattended streaming from, say, a yard camera somewhat tricky.

    There appear to be an infinite number of variations on this theme, not all of which work, and some of which rest upon an unsteady ziggurat of sketchy / unmaintained software.

    Addendum: If you have a couple of RPi cameras, it’s handy to run the matching ssh and ffmpeg sessions in screen / tmux / whatever terminal multiplexer you prefer. I find it easier to flip through those sessions with Ctrl-A N, rather than manage half a dozen tabs in a single terminal window. Your mileage may differ.

  • Multimeter Current-sense Resistor

    Multimeter Current-sense Resistor

    Replacing the battery in an old Craftsman (!) multimeter brought its 10 A current-sense resistor into the light:

    Multimeter current resistor - nipped copper wire
    Multimeter current resistor – nipped copper wire

    Unlike the contemporary AN8008/9 meters, it looks like an ordinary copper wire trimmed to the proper resistance by nipping it with a cutter.

    It measures something under 10 mΩ, so I’m sure they adjusted the resistance by applying a known current and watching the meter reading while crunching the wire until the proper value appears.

    I may have actually used the 10 A range, but I’d be hard pressed to say when or why, so the resistor is at least as good as it needs to be!

  • Funnel Web Spiders

    Funnel Web Spiders

    This critter took up residence in our kitchen window:

    Funnel web spider in window
    Funnel web spider in window

    She’s between the outer storm window and the inner sash, having secured her funnel web to both panes across the entire width of the window. We’d opened the storm window to clear an air conditioner vent and spiders know a good location when they see it.

    We know she’s female, because a (smaller) male appeared and conducted negotiations for the better part of an afternoon. After she accepted his offer of a small, somewhat battered, moth, the two hooked up for the rest of the day; we feared for his life, but he hung around until the next afternoon, then departed.

    She normally stays tucked inside the channel running along the edge of the window frame, with only the tips of those two front legs visible, and retreats at the slightest vibration, so we’ll leave her in peace until we must close the storm window.

  • Comment Spam Attack

    Comment Spam Attack

    Of late, the blog has been getting 500 hits per day, with 60-ish on the main page and 30-ish on the post of the day. The “Hot Topics” posts (over in the right column, down a bit) account for a scant hundred more hits, with the remaining 300 hits distributed in onesies and twosies along the very, very long tail of 4200 posts.

    Then this happened:

    Spam Attack - Page Hits
    Spam Attack – Page Hits

    It seems a spammer noticed my posting activity and unleashed either a script or, more dismally, a stable of low-wage third-world workers to make a comment on every single post in the blog.

    The Akismet scanner flagged three dozen comments made on the most recent posts, with the remaining 4500 (!) page views producing zero comments, because, some years back, I had disabled comments on posts older than a few dozen days. I disliked doing so, because I value comments from folks who contribute to the discussion, but …

    The IP addresses seem to point back to compromised servers and pwned Windows boxes in the US, with very few foreign sources. The comments themselves consist of the usual gibberish, often run through a thesaurus (known as “spinning”) to improve the odds of evading the detectors. The payload seems to be the URLs attached to the random user names, all pointing to sites touting Vietnamese (!) scams, Russian pharmaceutical sources, online gambling dens, and the like.

    And then, after two days, it was over.

    Which is why I really really do not want to manage my own blog infrastructure, infuriating as WordPress-dot-com’s editor might be.

  • Bike Helmet Mirror: Brasswork Clamp

    Bike Helmet Mirror: Brasswork Clamp

    A bit of Quality Shop Time produced a slight improvement to the clamp holding the mirror to the stalk:

    Helmet Mirror Ball Mount - mirror joint brasswork
    Helmet Mirror Ball Mount – mirror joint brasswork

    The general idea is to hold the wave washer (it’s mashed under the flat washer, honest) above those bumps on the plate holding the mirror and stalk balls. It’s a few millimeters from the end of a ¼ inch brass rod, drilled for the M3 screw, and reduced to 4.5 mm with a parting tool to clear the bumps.

    While I was at it, I made two spare mirrors, just to have ’em around:

    Helmet Mirror Ball Mount - new vs old
    Helmet Mirror Ball Mount – new vs old

    The new ball mount looks downright svelte compared to the old Az-El mount, doesn’t it?

    I should replace the steel clamp plates with a stainless-steel doodad of some sort to eliminate the unsightly rust, but that’s definitely in the nature of fine tuning.

  • More AAA-to-AA Alkaline Adapters

    More AAA-to-AA Alkaline Adapters

    Having a handful of not-dead-yet AAA alkalines and a bunch of LED blinkies built for AA alkalines, a pair of adapters seemed in order:

    AAA-to-AA Alkaline Adapters - installed
    AAA-to-AA Alkaline Adapters – installed

    The blinkies need a somewhat wider base than they’d get from a pair of AAA alkalines, so it’s not quite as dumb as it may seem.

    In any event, the positive terminal comes from a brass rod:

    AAA-to-AA Alkaline Adapters - brass terminal
    AAA-to-AA Alkaline Adapters – brass terminal

    Nobody will ever see the fancy Hilbert Curve infill around the brass:

    AAA-to-AA Alkaline Adapters - end view
    AAA-to-AA Alkaline Adapters – end view

    In this application, they’ll go from not-dead-yet to oh-it’s-dead faster than AA cells, so I can watch how the blinkies work with lower voltages.

  • Mary’s Zucchini Bread Recipe

    Mary’s Zucchini Bread Recipe

    After grating the nutmeg, continue with this:

    Mary's Zucchini Bread Recipe
    Mary’s Zucchini Bread Recipe

    To end up with this:

    Zucchini bread - minus QC sample
    Zucchini bread – minus QC sample

    Mary omits the cloves.

    Applesauce is completely optional. Should you prefer a softer & sweeter loaf, give it a try.

    Conversely, reduce the sugar by about half if you’ve accustomed yourself to a keto-oid diet; the raisins carry enough sweetness for us. You can use brown sugar if you like.

    She derived it from the Garden Way’s Zucchini Cookbook by Ralston & Jordan (© 1977):

    Zucchini Bread Recipe - Garden Way Zucchini Cookbook
    Zucchini Bread Recipe – Garden Way Zucchini Cookbook

    Obviously, cooking is not an exact science; a recipe is just where you start …

    Algorithmic pricing / money laundering is a thing:

    Garden Way Zucchini Cookbook - Amazon listing
    Garden Way Zucchini Cookbook – Amazon listing

    Ya can’t make this stuff up …