A present arrived:



Man, my handwriting printing is terrible.
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.
Making the world a better place, one piece at a time

A present arrived:



Man, my handwriting printing is terrible.
For the first time in a loooong time I (had to) set up remote desktop sharing, starting from an existing SSH login through a single-port pinhole in an immutable router firewall.
The remote PC runs Xubuntu 20.4 LTS and I verified it already had x11vnc installed. If that’s not the case, make it so.
In order to share / control the desktop of a different user (hereinafter known as kay), I must SSH into that PC as kay. My SSH session uses public key authentication and kay has no need for outbound SSH, so just use my PC’s public key in kay‘s authorized_keys file. On the remote PC, where I am signed in as me:
cd ~
sudo mkdir /home/kay/.ssh # kay does not have a public key
sudo cp .ssh/authorized_keys /home/kay/.ssh # so just copy mine
sudo chown -R kay:kay /home/kay/.ssh # transfer ownership
sudo chmod go-rwx /home/kay/.ssh # set proper permissions
From my local PC, I can now SSH into the remote PC as kay and start x11vnc through the SSH tunnel:
ssh -v kay@remote.address -L 5900:localhost:5900 "x11vnc -display :0 -noxdamage -ncache 10 -ncache_cr -nopw"
Still on my PC, aim a VNC client at the local end of the tunnel:
novnc localhost:5900
Using novnc presents the remote desktop as a web page in a browser, although you may prefer something more traditional.
Somewhat to my surprise, It Just Worked™.
The overall page view count may be down, but people have been replacing water heater anode rods at an increasing pace:
| Home page / Archives | 23775 |
| Water Heater Anode Rod Access Done Right | 8432 |
| CNC 3018-Pro: GRBL Configuration | 5301 |
| G-Code and M-Code Grand Master List | 5049 |
| Why You Need a 6-Point Socket to Remove a Water Heater Anode Rod | 4300 |
| American Standard Elite Kitchen Faucet Disassembly | 2621 |
| Toyota Sienna: ABS Trouble Codes | 2531 |
| Raspberry Pi: Forcing VNC Display Resolution | 2011 |
| CNC 3018-ProXL: Y-axis Extension | 1641 |
| Subaru Forester Fuse Boxes | 1276 |
| Broom Handle Screw Thread: Replacement Plug | 1239 |
| Removing a Water Heater Anode Rod | 1221 |
| Auto-V.I.N Gauge Scam | 1029 |
| Low Budget Bench Power Supply | 984 |
| CNC 3018-Pro: DRV8825 Hack for 1:8 Microstep Mode | 980 |
| Kensington Expert Mouse Trackball: Scroll Ring Troubles | 929 |
| Whirlpool Water Heater “Lifetime” Warranty: The Good and the Bad | 917 |
| Digital Tattoo Power Supply: Polarity Doesn’t Matter | 912 |
| Bed Bugs: Thermal Kill | 908 |
| Review Phreesia Authorization | 834 |
| Huion H610Pro (V2) Tablet vs. Ubuntu 18.04 | 821 |
| Kenmore 158.17032 Handwheel Clutch Disassembly | 799 |
| Shimano SPD Pedals: Creaking Resolved | 788 |
| 2000 Toyota Sienna: Replacing the Bank 1 Sensor 2 Oxygen Sensor | 753 |
| Schwab / Symantec VIP Access vs. Yubikey | 751 |
| Toyota Sienna: Rear ABS / Speed Sensor Failure | 729 |
| HP-48GX Calculator Disassembly: Case Rivets | 688 |
| Reversible Belt Buckle: Post Restaking | 683 |
| Kensington Expert Mouse Scroll Ring Fix | 629 |
| Makerbot-style Endstop Power Adapter for Protoneer Arduino CNC Shield | 616 |
| Displaying Variables in Gnuplot | 614 |
| Kohl’s Guest WiFi Terms & Conditions: The Short Version | 613 |
| Replacing Phil Wood Hub Bearings | 595 |
| Magnesium Water Heater Anode Rod: Seven Years Later | 576 |
| Adding a Device to LTSpiceIV | 564 |
| Philips Sonicare Essence 5000: Battery Replacement | 550 |
| Browning Hi-Power Magazine Dimensions | 545 |
| MPCNC: Emergency Stop / Feed Hold / Resume Pendant | 544 |
| Raspberry Pi Interrupts vs. Rotary Encoder | 538 |
| CNC 3018-Pro: Home Switches | 534 |
| Resistance Soldering: Transformer | 510 |
| Adafruit Touch-screen TFT LCD Rotation | 489 |
| Quick-and-easy IR-passing / Visible-blocking Optical Filter | 476 |
| Dis-arming a Steelcase Leap Chair | 471 |
| Icecast and Ezstream Configuration | 470 |
| Why You Shouldn’t Use Heat Pumps in the Northeast US | 465 |
| Baofeng UV-5R Squelch Settings | 460 |
| Mini-Lathe Tailstock: Alignment | 449 |
| Homebrew Magnetizer-Demagnetizer | 446 |
| Arduino Serial Optical Isolator | 444 |
| Mysterious Noise in Toyota Sienna Minivan: Fixed! | 444 |
| Baofeng UV-5: Squelch Pop Suppression | 434 |
| bCNC Probe Camera Calibration | 432 |
| Demolition Card GTA 5-10-9 | 431 |
| Multimeter Range Switch Contacts: Whoops! | 425 |
| Realigning Tweezer Tips | 421 |
| Schwalbe Marathon Plus and Michelin Protek vs. Glass Chip | 418 |
| Kenmore Model 158 Speed Control: Carbon Disk Replacement | 417 |
| Kenmore Electric Dryer: Power Resistor Replacement | 416 |
| Old Kenmore Sewing Machine Foot Control Repair | 414 |
| Closing the Dmesg Audit Firehose | 400 |
That adds up to 200 k page views from 122 k visitors, for an average of 1.6 pages / visitor, down slightly from last year. For a variety of reasons, I wrote only 242 posts over the course of the year, so more folks read only the single post matching their search terms.
To give you an idea of how awful online advertising has become, WordPress shoveled 817 k ads at those readers, slightly more than four ads per view. Given the toxicity of online advertising, I just started paying $50/year for a “personal” plan to get a few more gigabytes of media storage, which also let me turn off the ads. Most of you won’t notice, as you already run ad blockers, but it will calm the results for everybody else.
Fortunately, losing the $250 / year income from those ads won’t significantly affect my standard of living.

These scope screen shots use the same test setup as the pulse measurements:

The sweep speeds run much slower to capture the complete envelope, which can be up to a minute long, with enough left over to show the end of the previous sequence and the start of the next. The Moire patterns come from the scope sampling rate, the display resolution, or changes in the pulse repetition frequency. Blame Siglent for not making the scope’s digital data accessible through the network; screen shots are the best I can do.
The descriptive headings for each screen shot come from The Auvon AS8016 Fine Manual, a PDF version of which you can get from Auvon’s support staff by asking nicely. I identify the modes as Mxx, rather than their Pxx, for reasons that made sense at the time.
Patterns 1 through 16 correspond to the TENS (Transcutaneous Electrical Nerve Stimulation) label and are intended for pain relief / suppression; they should not make your muscles twitch.
P1 – Continuous comfortable tingling.
Continuous 200 µs pulse at 87 Hz

P2 – Comfortable tingling and pulsing sensation.
Continuous 100 µs pulse at 48 Hz

P3 – Comfortable rhythmic tingling.
Blocks of 300 ms on/200 ms off, with 150 µs pulse at 48 Hz

P4 – Continuous comfortable tingling.
Continuous 100 µs pulse at 48 Hz

P5 – Comfortable and slow tingling firstly, then the frequency is significantly increased, and it becomes a noticeable tingling sensation.
Continuous 250 µs pulses, stepping from 10 to 102 Hz and back down

P6 – Low frequency beating with a slight tingling sensation.
Continuous 250 µs pulses at 2 Hz

P7 – Low frequency slight beating firstly and then continuous comfortable tingling.
Bursts of 150 µs pulses for 3 s separated by isolated 200 µs pulses

P8 – Low frequency slight beating firstly and then comfortable pulsing sensation.
Bursts of 150 µs pulses for 3 s separated by isolated 200 µs pulses. Seems identical to P7, although the bursts may be slightly different.

P9 – Comfortable tingling from shallow to deep with 3-4 seconds pause.

P10 – Comfortable pulsing sensation from shallow to deep with 3-4 seconds pause.

P11 – Variable comfortable tingling, slight beating and scrapeing [sic] sensation.

P12 – Comfortable slight tingling from shallow to deep with 3-4 seconds pause.

P13 – Comfortable tingling and pulsing sensation from shallow to more deep with 3-4 seconds pause.

P14 – Rhythmic continuous beating.
Much higher voltage pulses!

P15 – Rhythmic scrapeing [sic] sensation.

P16 – Quick slight beating first, then comfortable tingling.

Patterns 17 through 24 sport the EMS (Electrical Muscle Stimulation) label and should make your muscles twitch in various ways.
P17 – Low frequency slight beating.
Continuous 250 µs pulse with idle time at 4.8 Hz.

P18 – Low frequency beating.
Continuous 250 µs pulse at 6.8 Hz.

P19 – Beating from low frequency to a little high frequency.

P20 – Muscle twitches at a very low frequency. It feels like a tapping massage.
Continuous 250 µs pulse at 13.5 Hz.

P21 – This program activates the muscle in a short tingling cycle. It is smoother than P1/P2.

P22 – This program gently warms up the muscles prior to exercise; it feels like a rhythmic massage. Increase intensity until you get a strong but comfortable muscle movement.

P23 – This program uses a pulse frequency appropriate to fast twitching muscle fibers. It improves their anaerobic capacity and is used for improving maximum muscle strength.

P24 – This program gently warms up the muscles prior to exercise; it feels like a rhythmic beating and comfortable tingling. Increase intensity until you get a strong but comfortable muscle movement.

Despite the icons on the unit’s display, the manual suggests you can apply pretty nearly any pattern to any muscle, but now we all know what’s coming out of those jacks …

The Auvon AS8016 TENS/EMS unit produces bipolar pulses with no net DC offset, so the UI controls the negative and positive amplitudes equally. The range has 20 steps, with the screen shots here set to 10 units. The actual output voltage depends on the mode, with some modes producing a peak voltage well above the others at the same UI setting.
It’s worth noting the effect comes from current passed through skin and muscle, rather than voltage applied to it. The test setup uses a 500 Ω resistance to make the current vary linearly with the voltage (which is definitely not the case with human bodies): a 20 V pulse passes 40 mA through the resistor:

The simplest bipolar pulses always start with the negative phase. The shortest pulse width is 100 µs:

And 150 µs:

And 200 µs:

Up to 250 µs:

Some modes have a short zero-voltage pause between the negative and positive phases:

The pause can be the same duration as the negative and positive phases:

Some modes have pulses starting with the positive phase, others switch the leading phase during the course of the output modulation.
My casual survey of the consumer-grade field suggests the pulse waveform has less to do with well-tested effects and more to do with marketing or straight-up woo, but I admit to being a cynic.

One of Santa’s myriad helpers recently handed me an Auvon AS8016 TENS/EMS Unit. The manual is, shall we say, light on tech details, but some casual searching turns up the general specs for medical-grade units found in physical therapy offices, plus adjacent Rule 34 compliant (i.e. NSFW) offerings.
Being that type of guy, I had to look at the electricity. Somewhat to my surprise, the reference load turns out to be a pure 500 Ω resistance, which is easy enough to cobble up from a pair of 1 kΩ resistors:

The alligator clips crunched around the 2 mm pins are not appropriate for even a brutal e-stim session; they’re from the Small Drawer of Test Connectors, to which they shall return unblooded.
The red Sharpie highlight around one pin identifies the center conductor of the two-wire cable, as determined by simple continuity testing:

The 22 mil = 0.5 mm wire (from the Little Tin o’ Snippets) fits snugly into the coaxial connector’s center contact; one could probably slip a rounded shim between the shell and the outer contact, perhaps to debug an intermittent connection. Note that the connectors on both ends of the wires are not standardized among various TENS/EMS manufacturers.
The AS8016 has two pairs of connectors:

The A1 and A2 jacks are wired in parallel, as are the B1 and B2 jacks, with the A pair galvanically isolated from the B pair. You can set the modes / programs / pulse parameters differently for A and B. Although the manual doesn’t mention it, using the A and B channels (perhaps with the same settings) prevents a galvanic connection (and thus any current) from flowing between the A and B electrodes; this seems important for electrode pairs placed on opposite sides of your body to prevent current through your heart.
The pulses have no DC component, so the actual wire polarity doesn’t really matter, but a foolish consistency definitely simplifies going back to re-measure things. Subsequent waveforms show the voltage with respect to the unmarked (outer) conductor.
Suppressing the DC bias prevents ionic migration between / under the electrode pads. The classic RC-equivalent output circuit uses a series capacitor, resulting in an asymmetric pulse waveform with zero net DC voltage:

There’s no DC path between the center and outer conductors, but in this day and age the circuitry could be a completely isolated bipolar FET driver:

With all that sorted out, I can make measurements!

While looking for something else, Mary came across a walker in the attic and mentioned that, if she ever had to use it, the shortest position of the adjustable legs would put the hand grips too high for comfort. Maybe they
Well, I can fix that:

The holes are an inch apart, so I clamped the V blocks parallel to the X axis on the drill press, zeroed the X axis knob, slid the leg to get the drill bit into the last hole, clamp in place, crank the table an inch, then use a step drill to start the hole:

The holes are just slightly larger than the 1/4 inch step on the drill, so the twist drill cuts them to size.
A tubing cutter sliced an inch off all four legs and all four frame tubes:

The white plastic fitting in the frame tube prevents the legs from rattling, but I had to drill another hole to move the latch button, too.
With a bit of luck, we’ll never need the thing.