Archive for category Amateur Radio

Turkeys in the Snow

These guys looked completely disgusted with the situation:

Turkeys on rail fence in snow

Turkeys on rail fence in snow

They’re about 130 feet away in a heavy snowstorm that eventually deposited about a foot of wet snow on the area.

The top rail really does slant downward: the tenon on the right end broke and fell out of the mortise.

The DSC-H5 carries the 1.7× teleadapter, zoomed all the way tight through two layers of 1955-ish window glass, hand-held, braced against the pane.

The day before that snowstorm, we biked 18 miles out-and-back over the Walkway in beautiful, sunny, mid-50s (°F) weather:

KE4ZNU-9 - APRS track - 2017-02-08

KE4ZNU-9 – APRS track – 2017-02-08

We ride when we can and shovel when we must!



WWVB Receiver: First Light!

All the blocks for a WWVB receiver, lined up on the attic floor:

60 kHz Receiver - preamp HIT N3 Pi3 - attic layout

60 kHz Receiver – preamp HIT N3 Pi3 – attic layout

The dramatis personae:

The headless Pi connects to the house WLAN through its built-in WiFi link, so I can run the whole mess from the Comfy Chair at my desk through Remmina / VNC.

Recording 24 hours of WWVB shows it works:

WWVB - 24 hr reception AGC - 2017-01-16 to 17 - cropped

WWVB – 24 hr reception AGC – 2017-01-16 to 17 – cropped

The wavy line along the left edge looks like a birdie formed by a local oscillator in the attic, because the frequency varies (inversely) with temperature. It’s probably a signal on the Pi board, rectified by some junction, and translated in-band by some Ham-It-Up harmonic. Whatever.

The other traces come out bar-straight, suggesting that the 0.5 ppm (presumably, per °C) temperature-compensated oscillators along the whole RF chain behave as they should.

There’s a slight frequency shift, on the order of a few parts-per-million, between the absolutely accurate WWVB carrier and the indicated display. Not a big deal.

The broad, albeit irregular, orange band down the middle shows the loop antenna / preamp bandwidth, which is on the order of 2 kHz at -3 dB and a few kilohertz more down to the noise level.

The broad horizontal gashes seem to come from the N3’s on-board hardware AGC reacting to signals far outside the waterfall. Various birdies appear & disappear, even in this limited view, so you can just imagine what’s happening off-screen; anything popping up within the SDR’s tuning range clobbers the gain, which becomes painfully visible when zoomed this far in along both frequency and amplitude. Turning AGC off should stabilize things; perhaps software can tweak the SDR gain based on a very narrowband filter around 60.000 kHz.

The upper half of the waterfall shows decent reception for most of the night. The bottom half shows there’s basically nothing goin’ down during the day, which is about what I’d expect based watching the Alpha Geek Clock for seven years.

In any event, another 24 hours with the AGC turned off looks better:

WWVB 24 hr waterfall - Thumbnet N3 - 2017-01-19

WWVB 24 hr waterfall – Thumbnet N3 – 2017-01-19

Various sources still clobber the receiver response, but it’s not quite so dramatic.




60 kHz Preamp: First Pass

Encouraged by the simulation, the 60 kHz preamp hardware sprawls over a phenolic proto board:

60 kHz preamp board - fake antenna

60 kHz preamp board – fake antenna

The inductors and resistors hanging off the screw terminals produce more-or-less the same impedance  as the real loop antenna. The alligator clips connect a function generator to the secondary winding of a current transformer (used backwards), thus injecting a wee differential signal into the “antenna”.

The clump of parts in the lower left knock the 24 VDC wall wart down to 20 V and produce a 10 V virtual ground in the middle:

60 kHz Preamp - power supply - Kicad schematic

60 kHz Preamp – power supply – Kicad schematic

The LEDs give a cheerful indication that the power supplies have reported for duty, plus apply a minimum load to the LM317 while I was tinkering. The heatsink gets tolerably warm, so I should dial back or disconnect the LEDs to reduce the load.

The preamp hardware matches the simulated layout, with a few extra bits tossed in:

60 kHz Preamp - Kicad schematic

60 kHz Preamp – Kicad schematic

The weird values come from whatever 1% resistors and silver-mica caps emerged from the heap. The 27 V Zener diodes and 5 kΩ resistors may or may not protect the instrumentation amp inputs from lightning-induced transients.

Because the HP8591 analyzer’s tracking generator starts at 100 kHz, I fed the DDS function generator into the preamp, manually stepped the frequency in 250 Hz increments, and had the analyzer show the maximum response of 19 separate sweeps:

Preamp - max hold - 250 Hz steps

Preamp – max hold – 250 Hz steps

That was tedious and, no, it’s not a comb filter: the actual response skates across the peaks of all those bumps.

The marker shows the preamp bandwidth is 2 kHz, roughly what the simulation predicts; the extremely tight span of that plot makes it look a lot flatter that the usual presentation.

Tightening the span even more shows an unexpected effect:

Preamp - 120 Hz modulation

Preamp – 120 Hz modulation

Those sidebands at ±120 Hz (probably) come from power-line magnetic fields into the “antenna”, because the magnetic field strength depends on the absolute value of the voltage. If they came from the signal generator, they’d be at ±60 Hz: the waveform amplitude depends directly on the voltage.


Satellite Dish Mounting Angle in Norway

A friend asked why Norwegians point their satellite dishes at the ground. After maneuvering Google Streetview around Vadsø for a while, I found a dish in profile:

TV satellite dish - Vadso Norway

TV satellite dish – Vadso Norway

Turns out geostationary orbit is way low, as seen from the top of the world. A bit of doodling shows it’s only 11° above the horizon at 70° N:

TV Satellite Dish - Horizon Angle at 70° N

TV Satellite Dish – Horizon Angle at 70° N

TV satellite antennas have an offset-fed reflector, with the receiver in the lump at the end of the spine sticking out from the bottom of the dish, so as to not obstruct the signal entering the dish. Even though the plane of the reflector points downward, the signal reflected to the receiver comes in from above.

Ain’t science trigonometry grand?


Vacuum Tube LEDs: Now With Morse Code

Adding Mark Fickett’s non-blocking Morse Arduino library turns the tubes into transmitters:

21HB5A on platter - orange green

21HB5A on platter – orange green

The plate cap LED blinks the message in orange, while both LEDs continue to slowly change color as before.

You define a Morse sender object (C++, yo!) by specifying its output pin and code speed in words per minute, dump a string into it, then call a continuation function fast enough to let it twiddle the output bit for each pulse. Obviously, the rate at which the callback happens determines the timing granularity.

However, setting a knockoff Neopixel to a given color requires more than just a binary signal on an output pin. The continuation function returns false when it’s done with the message, after which you can initialize and send another message. There’s no obvious (to me, anyhow) way to get timing information out of the code.

The easiest solution: called the Morse continuation function at the top of the main loop, read its output pin to determine when a dit or dah is active, then set the plate cap color accordingly:

LEDMorseSender Morse(PIN_MORSE, (float)MORSE_WPM);
Morse.setMessage(String("       cq cq cq de ke4znu       "));
PrevMorse = ThisMorse = digitalRead(PIN_MORSE);
if (!Morse.continueSending()) {
ThisMorse = digitalRead(PIN_MORSE);
if (ThisMorse) {             // if Morse output high, overlay
PrevMorse = ThisMorse;;               // send out precomputed colors
<<compute colors for next iteration as usual>>

I use the Entropy library to seed the PRNG, then pick three prime numbers for the sine wave periods (with an ugly hack to avoid matching periods):

uint32_t rn = Entropy.random();

Pixels[RED].Prime = PrimeList[random(sizeof(PrimeList))];

do {
  Pixels[GREEN].Prime = PrimeList[random(sizeof(PrimeList))];
} while (Pixels[RED].Prime == Pixels[GREEN].Prime);

do {
  Pixels[BLUE].Prime = PrimeList[random(sizeof(PrimeList))];
} while (Pixels[BLUE].Prime == Pixels[RED].Prime ||
        Pixels[BLUE].Prime == Pixels[GREEN].Prime);

printf("Primes: (%d,%d,%d)\r\n",Pixels[RED].Prime,Pixels[GREEN].Prime,Pixels[BLUE].Prime);

In the spirit of “Video or it didn’t happen”: YouTube!

The Arduino source code as a GitHub Gist:



Rewiring a Baofeng Battery Eliminator

An aftermarket “battery eliminator” for Baofeng UV-5R radios costs under seven bucks delivered:

Baofeng Battery Eliminator - overview

Baofeng Battery Eliminator – overview

That label seemed … odd:

Baofeng Battery Eliminator - Li-ion Label

Baofeng Battery Eliminator – Li-ion Label

The OEM battery, tucked inside a case that’s for all intents and purposes identical to this one, sports an 1800 mA·h rating that I regarded as mmmm optimistic; I’d expect maybe 1000 mA·h, tops. From what I can tell, the 3800 mA·h label should go on an extended-capacity “big” battery that wraps around the bottom of the radio. Maybe the factory produced a pallet of mis-labeled small packs that they couldn’t fob off on actual customers with a straight face and couldn’t justify the labor to peel-and-stick the proper labels.

Anyhow, it’s not a battery.

The circuitry inside shows considerably more fit & finish than I expected:

Baofeng Battery Eliminator - interior

Baofeng Battery Eliminator – interior

It’s not clear how effective that heatsink could be, given that it’s trapped inside a compact plastic enclosure snugged against the radio’s metal chassis, but it’s a nice touch. Two layers of foam tape anchor the terminals at the top and hold the heatsink / LM7808-class TO-220 regulator in place.

Although I wanted the DC input to come from the side, rather than the bottom, so the radio could stand up, the pack simply isn’t thick enough to accommodate the jack in that orientation. I drilled out the existing wire hole to fit a coaxial power plug and deployed my own foam tape:

Baofeng Battery Eliminator - rewired interior

Baofeng Battery Eliminator – rewired interior

Replacing the foam tape at the top holds the bent-brass (?) terminals in more-or-less the proper orientation, with Genuine 3M / Scotch Plaid adding a festive touch. A groove in the other half of the shell captures the free ends of those terminals, so they’re not flopping around in mid-air.

The jack fits an old-school 7.5 V transformer wall wart that produces 11 V open-circuit. It’s probably still a bit too high with the UV-5R’s minimal receive-only load, but I refuse to worry.

Now KE4ZNU-10 won’t become a lithium fire in the attic stairwell…

While I had the hood up, I used Chirp to gut the radio’s stored frequencies / channels / memories and set 144.39 in Memory 0 as the only non-zero value. With a bit of luck, that will prevent it from crashing and jamming a randomly chosen frequency outside the amateur bands…


APRS iGate KE4ZNU-10: Southern Coverage

A pleasant Friday morning ride with several stops:

KE4ZNU-9 - APRS Reception - 2016-09-09

KE4ZNU-9 – APRS Reception – 2016-09-09

KE4ZNU-10 handled the spots near Red Oaks Mill, along parts of Vassar Rd that aren’t hidden by that bluff, and along Rt 376 north of the airport.

The KB2ZE-4 iGate in the upper left corner caught most of the spots; it has a much better antenna in a much better location than the piddly mobile antenna in our attic.

Several of the spots along the southern edge of the trip went through the K2PUT-15 digipeater high atop Mt. Ninham near Carmel, with coverage of the entire NY-NJ-CT area.

The APRS-IS database filters out packets received by multiple iGates, so there’s only one entry per spot.

All in all, KE4ZNU-10 covers the southern part of our usual biking range pretty much the way I wanted.