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 Radio Player: Yet Another Cheap Wireless Keypad

    One might think, just from looking, that this black wireless USB numeric keypad:

    BonyTek Wireless USB Numeric Keypad
    BonyTek Wireless USB Numeric Keypad

    Was identical to the white keypads I already used on the streaming media players:

    Wireless Keypad - colored labels
    Wireless Keypad – colored labels

    One would, of course, be wrong.

    They both claim to be manufactured by “Creative Labs” with a 0x062a vendor ID, but with different model IDs:

    • White = 0x4101 “Wireless Keyboard/Mouse”
    • Black = 0x4182

    Astonishingly, that model ID appears nowhere in Google’s search results, yet it actually works when plugged into my desktop PC.

    The new model ID requires Yet Another Udev Rule in /etc/udev/rules.d/Streamer.rules:

    ATTRS{idVendor}=="062a", ATTRS{idProduct}=="4182", ENV{ID_INPUT_KEYBOARD}=="1", SYMLINK+="input/keypad"
    

    No big deal by now …

  • Raspberry Pi Streaming Radio Player: Ignoring a Missing Volume Knob

    The Dell AC511 USB SoundBars have volume control knobs, which this udev rule turns into the /dev/input/volume device:

    ATTRS{name}=="Dell Dell AC511 USB SoundBar", SYMLINK+="input/volume"
    

    I recently wanted to use an ordinary USB “sound card” that did not, of course, have a volume knob:

    Sabrent USB Audio Adapter
    Sabrent USB Audio Adapter

    This hack skips the configuration that makes the knob’s events visible to the Python program:

    import os.path
    
    ... snippage ...
    
    # if volume control knob exists, then set up its events
    
    VolumeDevice = '/dev/input/volume'
    
    vp = select.poll()
    if os.path.exists(VolumeDevice):
      v = InputDevice(VolumeDevice)
      v.grab()
      vp.register(v.fileno(),select.POLLIN + select.POLLPRI + select.POLLERR)
    

    It turns out that if you never register a device with the event polling interface, then the interface never reports any events and the rest of the code remains blissfully undisturbed: the non-existent knob doesn’t do anything, while the volume control buttons on the keypad continue to function as usual.

    The end result of this fiddling puts a Raspberry Pi 2 Model B to work as a streaming player on my Electronics Workbench, untethering the laptop from those powered speakers:

    RPi 2 Streaming Player - USB sound gadget
    RPi 2 Streaming Player – USB sound gadget

    It’s a shame that USB audio gadget is so big, because it crowds out standard USB plugs to the side.

    The most satisfactory LED configuration for a translucent case with an external WiFi adapter seems to be:

    dtparam=pwr_led_trigger=cpu0
    dtparam=act_led_trigger=mmc0
    

    The rest of the code remains unchanged as shown in that GitHub Gist.

    Bomb the bass!

  • ATX Lithium Ion 18650 Cell Capacity

    The 2016-11A and 2016-11B cells produced the overlapping red and green curves, with the gritty section due to crappy battery pack connections:

    Li-Ion 18650 cells - ATX prot - bare - Ah scale - 2016-12-17
    Li-Ion 18650 cells – ATX prot – bare – Ah scale – 2016-12-17

    The lower curve comes from an old unprotected cell harvested from a defunct media player and retrieved from the to-be-recycled pile.

    I picked 1 A as a reasonable value for their intended use in flashlights and maybe a helmet camera. Unlike some other cells in the recent past, these deliver 3.0 A·h, reasonably close to their rated 3.4 A·h capacity at a (presumably) lower current.

    Replotting the voltage vs. energy delivered doesn’t show any surprises:

    Li-Ion 18650 cells - ATX prot - bare - Wh scale - 2016-12-17
    Li-Ion 18650 cells – ATX prot – bare – Wh scale – 2016-12-17

    The voltage declines more-or-less linearly, without the relatively flat discharge curve for smaller cells, which explains why the J5 V2 flashlight becomes seriously dim after a few hours. On the upside, that allows a reasonably accurate state-of-charge display.

    Assuming the Sony HDR-AS30V camera burns 0.1 W·h/min while recording (which is a fancy way of saying it dissipates 6 W), then it should run for (10 W·h)/(0.1W·h/min) = 100 min from one of these cells fitted as an outrigger. The best of the NP-BX1 cells for the camera delivers something like 90 minutes from a measured capacity of 4 A·h at 500 mA; I don’t know what to make of those numbers. Perhaps the camera runs the NP-BX1 cells below the 2.8 V cutoff I’ve been assuming?

  • Blog Summary: 2016

    Page views for 2016:

    Blog Page Views: 2016
    Blog Page Views: 2016

    That works out to a bit under 1000 page views/day of purely organic traffic.

    As always, way more people than I’d expect come here with plumbing problems. On the upside, much of the bedbug saga has fallen off the trailing edge of the wedge; life is good!

  • Airliner Over Snow

    Poughkeepsie lies under the southbound airliner routes to the NYC airports, so we often see airplanes high overhead. With a few inches of snow on the ground, a sunny day turns them brilliant white against a blue sky:

    Air Canada Flight 706 - Embraer ERJ-190 - snow uplight
    Air Canada Flight 706 – Embraer ERJ-190 – snow uplight

    Feeding “Poughkeepsie NY” into FlightAware produces a map centered over us with (in this case) two candidates, one of which was Air Canada Flight 706, an Embraer ERJ-190. The obvious search produces pictures confirming the ID.

    Air Canada’s current livery shows white paint on the bottom, but plain aluminum bodies shine brilliantly, too.

    Back when I used to fly, light snow highlighted the networks of stone walls around all the old farms across the Northeast, from back when this area was NYC’s breadbasket. Those days are gone, but the stones remain where those farmers hauled them out of the fields.

     

  • Respooling Stainless Steel Thread: The Knack

    The comments on my previous stainless-steel thread respooling attempt suggested that I was entirely too much of a sissy, so, when another empty spool appeared, I tried again with more vigor:

    Stainless steel thread - second spool
    Stainless steel thread – second spool

    As before, I put the larger spool on the floor under the lathe and let the thread spill straight off the top toward the smaller spool. This time, I didn’t have a twist accumulating in the loose thread between the two spools:

    • Grab longer lengths of the loose thread
    • Absolutely no slippage between the fingers!
    • Put more tension on the thread at the takeup spool

    As nearly as I can tell, the thread still has a slight twist coming off the larger spool, but grabbing longer lengths captures the twist and more tension lays it on the smaller spool. After cutting the thread, what was left had maybe three turns of twist, which was no big deal and obviously hadn’t accumulated.

    Seems better: thanks for all the comments!

  • Fordham FG-801 Function Generator Recalibration

    While I had the case open, I checked the FG-801’s calibration:

    Fordham FG-801 Fn Gen - circuit board
    Fordham FG-801 Fn Gen – circuit board

    Look at all those parts!

    The raw filtered DC power supplies run a bit high and the output voltages & frequencies were off by a little, but not too much after all these years.

    Page 11 of the instruction manual gives the setup and calibration adjustments (clicky for more dots):

    Fordham FG-801 Manual - Page 11
    Fordham FG-801 Manual – Page 11

    Page 12 gives some values that should be true:

    Fordham FG-801 Manual - Page 12
    Fordham FG-801 Manual – Page 12

    For whatever reason, the manual isn’t available on The InterWebs, so here it is for your amusement:

    Fordham FG-801 Sweep Function Generator – Instruction Manual.pdf