A Second Desktop Instrument: APRSMon

The Propagation Monitor I wrote about last time has been sitting on my desk running in daily use ever since, and it’s held up well enough that I went looking for the next question worth answering the same way. PropMon tells me whether I can make the contact. What it doesn’t tell me is what’s actually happening in my local operating area right now — who’s mobile nearby, what the weather’s doing a few miles out, whether anything needs my attention. That’s a different question, and it turned out to need a genuinely different instrument.

Overview screen, condensed weather and last-heard mobile station

So this is APRS Monitor (APRSMon), the second instrument in what I’m now calling the N4MI Desktop Instrument Series — same LilyGO T-Encoder Pro hardware, same round display and knob, same one-glance philosophy. Enough of a pattern now that I’ve settled on a naming convention for the whole series: n4mi-[instrument]-monitor. This one lives at n4mi-aprs-monitor, and unlike PropMon — where the firmware and its backend service live in separate repos — this one keeps firmware and backend together in one place. Small structural decision, but worth mentioning if you go looking for the code.

A wrong assumption, caught early

My original plan was straightforward: reuse PropMon’s whole approach and pull local APRS data from aprs.fi’s API, the same way PropMon pulls solar data from HamQSL. Query a station, get JSON back, done.

That assumption turned out to be wrong in an important way. aprs.fi’s API is explicitly built for querying specific, known stations — it intentionally doesn’t support “show me everything within X miles.” Which is fine for a screen like Weather, where I already know which two stations I care about. It’s not fine for a screen that’s supposed to answer “what’s moving nearby,” where the whole point is that I don’t know in advance who that’s going to be.

The actual answer was APRS-IS itself — the raw network the amateur radio community runs this whole system on top of. It supports real radius filtering, but it’s a persistent TCP connection streaming raw packets, not a REST API. That’s not something to run directly on the ESP32, so Mobile Activity ended up needing its own small always-on backend service, structurally identical to PropMon: a persistent connection, a radius filter, an in-memory summary, a flat JSON endpoint the firmware polls. Same pattern, applied a second time, once I understood what it actually needed to do.

Four screens, two backends

Weather queries two known local stations directly through aprs.fi’s API — a quick, simple periodic poll, no different in shape from PropMon’s own HamQSL fetch. Mobile Activity is the one running against the direct APRS-IS connection, filtered to a 20-mile radius around home, showing how many stations have been active in the last hour and the most recently heard one. Overview is the front door, a condensed glance at both. And Alerts pulls it together — currently watching wind gust and rain-rate thresholds on both weather stations, plus whether my own home weather station has gone quiet for longer than it should.

Weather screen, full stat grid for both stations
Mobile Activity screen, 1-hour count and last-heard detail
Config screen, Wi-Fi and per-backend status

Rotating the knob cycles through all four; a long press pulls up a Config screen showing Wi-Fi status and whether each backend is actually alive, the same “is my stuff working” screen PropMon has. Short press does something different depending on which screen you’re on — on Weather it swaps which of the two stations is shown large, and on Mobile Activity it switches to a Recent Stations list, the last three heard instead of just the latest one. PropMon’s short press has one global meaning everywhere; here it didn’t map as cleanly, so each screen got whatever made sense for it instead.

I also just finished an ambient version of the Alerts screen — a small badge and a brief on-screen banner that show up on whatever screen you’re already looking at when something changes, so you don’t have to be on the Alerts screen specifically to notice. It’s built and deployed, but as of this writing I haven’t actually seen it fire against a real condition yet — that’s still on the list to confirm properly rather than just assume.

A real bug worth telling

My own home weather station showing up as a source of local APRS activity was a nice surprise I hadn’t planned for. A separate project on my NAS relays it to APRS-IS, and once I noticed, adding a liveness check to Config took almost no work — that same station’s packets were already flowing through Mobile Activity’s existing connection, just quietly ignored because a stationary station never registers as moving.

Except once, briefly, it did. My own home station showed up in the mobile count as “active,” reporting itself half a mile away from its own fixed location. It never happened again, and I couldn’t fully pin down why — most likely a moment of GPS jitter in the relay, or a stray value in one packet.

The interesting part wasn’t chasing down the exact cause. It’s that I didn’t need to. I already know this specific station doesn’t move, by definition — that’s the entire reason it’s useful as a liveness check in the first place. So instead of trying to fully diagnose one weird packet, I just excluded that callsign from movement detection entirely, permanently, regardless of what any future packet ever claims. Sometimes the right fix isn’t explaining the anomaly, it’s recognizing you already know something the code didn’t.

Wi-Fi Setup screen, mid-scan
Wi-Fi setup, the easy way this time

PropMon’s Wi-Fi setup — the phone-based captive portal, join a temporary network, pick from a scanned list, type a password — took real work to get right the first time, including two genuine bugs I only found by deliberately trying to break it. This time I built the same thing for APRSMon by porting that proven code directly rather than starting over, bugs and all the lessons from finding them included from day one.

It worked correctly the first time I flashed it. Every case I’d had to hunt down by hand on PropMon — a wrong password getting rejected, the scan and the hotspot not fighting each other — just worked. That’s the whole value of building a series instead of one-off projects: the second instrument gets to start from what the first one already learned the hard way.

Where it stands

APRSMon is at v1.0 now — every screen built and running on real hardware, the same real Wi-Fi setup flow as PropMon, and the ambient alert system described above. I’m treating that ambient piece as built-but-not-yet-proven until I actually see it trigger against a real condition, which is next on my list — probably by deliberately taking my own home station offline long enough to force its own silence alert.

My two weather stations both happen to sit roughly east of home, which got me thinking about the gaps. There’s a station further out to the west I’m planning to add as an early-warning sentinel, since weather here typically approaches from that direction. North and south are open questions for later — no candidate stations picked yet, just an idea worth not losing.

APRSMon, PropMon, and the original FlightScnr that inspired my projects, side by side on the desk

Three of these on the desk now. Whatever the next one ends up answering, I’ll write about it here.

If you want to build this one yourself, the code is public: N4MI APRS Monitor. The README covers the build, both backend services, and the Wi-Fi setup flow. Same caveat as last time — you’ll want to already be comfortable running a Docker/Portainer stack before you dive in.

Putting My Weather Station on the Map: N4MI-13 and CWOP/APRS

I’ve had a WeatherFlow Tempest weather station running at the shack for a while now, feeding data into a few of my own projects. But it never had a public presence — no way for anyone outside my own dashboards to see what conditions look like here in Grovetown. CWOP (the Citizen Weather Observer Program) and APRS solve that: report your station’s conditions, and it shows up on APRS.fi and in the CWOP network alongside thousands of other stations, hams and non-hams alike, all over the world.

This post walks through how I got my Tempest onto CWOP/APRS-IS as N4MI-13, what the pieces actually do, and a few real problems I ran into along the way. I’m deliberately leaving code out of this one — there are a lot of different weather stations out there, and just as many ways to bridge them onto CWOP, so a wall of my specific config wouldn’t do most readers much good. What I’m hoping to hand you instead is the shape of the problem: the pieces involved, the decisions worth making deliberately, and the mistakes worth knowing about ahead of time. If you’re planning to build this with your own AI assistant’s help, this should be enough to get a real conversation started.

Why there isn’t one “correct” way to do this

Every weather station brand has its own way of talking — some publish to their own cloud service, some broadcast locally over your home network, some connect over a serial cable to a dedicated console. And there isn’t one blessed path to CWOP/APRS either: some people run dedicated hardware IGates, some use software that ships specifically for their station brand, and some — like me — bridge it themselves with general-purpose weather station software. None of these is “the” right answer. The right one depends on what station you have, what’s already running on your network, and how much you want to maintain yourself.

I went with WeeWX, an open-source weather station engine that’s been around for years and supports an enormous range of hardware through community-maintained “drivers” — small pieces of glue software that translate whatever format your specific station speaks into something WeeWX understands. If WeeWX doesn’t already have a driver for your station, there’s a good chance someone in the community has written one. That’s really the whole appeal: instead of hand-rolling a translator for CWOP myself, I got to reuse a mature project that already knows how to talk to CWOP correctly, and just needed to plug my station into it.

The shape of the pipeline

Conceptually, it’s a short chain:

  • My Tempest’s hub broadcasts live readings on my home network every few seconds.
  • A small always-on program (WeeWX, with the right driver for my station) listens for those broadcasts, makes sense of them, and keeps a running record.
  • That same program calculates a couple of values CWOP specifically requires but my station doesn’t hand over directly — most notably something called the “altimeter setting,” a sea-level-adjusted pressure reading that depends on your station’s exact elevation.
  • Every ten minutes, it packages the latest reading up in the format CWOP/APRS-IS expects and sends it out over the internet.

I run this as a small Docker container on my home NAS, since that’s the one machine in the house that’s genuinely always on. That part’s a personal infrastructure choice, not a requirement — this same software runs perfectly well directly on a Raspberry Pi, a spare laptop, or almost anything that stays powered on.

What actually went sideways (and what I’d tell someone else to watch for)

None of this went in one smooth pass, and I think the bumps are more useful to share than a clean success story would be.

Check your network before you assume anything about it. My weather station’s broadcasts and my NAS looked, at a glance, like they were on two different address ranges. Turns out they weren’t — my home network’s actual subnet was wider than I assumed, and everything was on one flat network the whole time. A two-minute check with a basic network command settled it. Worth doing that check first, rather than assuming you need to reconfigure your router.

Local broadcasts and containers don’t always mix by default. Docker normally isolates a container’s network from the host machine’s, which is usually exactly what you want — except when the whole point is listening for broadcast traffic on your real home network. That took a specific networking mode, and I made a point of testing it in isolation with a throwaway container before building the real thing on top of it, so I’d know for certain it would work before investing more time.

Community drivers sometimes lag behind the software they’re plugging into. The driver for my specific station hadn’t fully kept pace with the current version of WeeWX, so its usual automatic setup step quietly didn’t do its job. Nothing was broken, exactly — it just meant configuring that piece by hand instead of trusting the installer. If you hit something similar, it’s a very normal thing to run into with actively-maintained-but-not-official community software, not a sign you did something wrong.

“Batteries included” software images aren’t always fully included. The Docker image I used was missing one small dependency my station’s driver needed for an optional feature I wasn’t even using. An easy fix once identified, but a good reminder to actually watch your service’s own logs after first startup rather than assuming a clean deploy means it’s working.

A stray leftover test container caused a real, confusing failure later — it had quietly grabbed the same network port my real service needed, from a test I’d run earlier and forgotten to clean up. Worth being disciplined about tearing down anything temporary once you’re done with it.

And yes, an actual typo caused an actual crash — a stray character where a `False` should have been. Easy to fix once I saw the exact error, but a good example of why I tested this in stages instead of going live all at once.

Test locally before you publish anything

That staged approach is probably the single most useful thing to carry over if you build something like this yourself. I ran the whole pipeline for a good while with publishing turned off — watching real data flow in, checking that the numbers made sense, comparing my station’s readings against a couple of independent sources (the National Weather Service’s nearest station, and my station’s own companion app) before I ever let a single packet go out to the internet. Once everything checked out and matched, flipping the switch to actually publish was almost anticlimactic — it worked cleanly on the very first attempt, because everything underneath it had already been proven.

Where it ended up

N4MI-13 is now live and reporting every ten minutes, fully over the internet — no radio transmission involved, which APRS.fi correctly shows in how the station’s reports are marked. You can find it on APRS.fi like any other station.

I also added a monitor afterward that watches the uploader’s health directly, and separately, a completely different project of mine that already listens to APRS traffic near home will soon flag me if N4MI-13 ever goes quiet for too long — a nice example of two unrelated projects ending up able to keep an eye on each other.

If you want to try this yourself

If you’re thinking about doing something similar — whether with WeeWX or something else entirely — here’s roughly what you’ll want to have answers to before you start, and honestly, a good enough starting point to describe to your own AI assistant if you want help working through it:

  • What weather station or console do you have, and does it talk over your local network, a serial/USB connection, or only through its own cloud service?
  • What existing software already knows how to talk to your specific station — and does it also know how to talk to CWOP/APRS-IS, or will you need something extra for that part?
  • Where will this run, and is that device genuinely always on?
  • Do you actually understand your home network’s layout, or are you assuming things about it that are worth double-checking first?
  • Do you have a way to test the whole pipeline locally, with nothing actually being published, before you turn on the real upload?
  • What’s your callsign-plus-SSID going to be, and do you have your APRS-IS passcode ready?

That’s genuinely most of it. The specific software and commands will differ depending on your hardware, but the shape of the problem — and the shape of a sensible, careful way to solve it — stays pretty much the same.

My next post will be about my APRS Monitor (APRSMon).

Portable 50 Watt VHF/UHF Station

I decided to build a small 50W VHF/UHF station to use for portable operations, such as supporting events or setting up in a temporary location, with a choice of using AC power or a battery. I don’t need anything fancy like DMR or D-Star, but I might want to to use it for APRS or WinLink.

After a bit of research and pricing options, I went with something that turned out to be a very easy build. I chose a Yaesu FTM-6000R as the transceiver. It has basic features, but has gotten some good reviews. It is also known to be a good transceiver for data, and is 9600 bps capable.

I also chose a 30 amp switching power supply and a mobile base station enclosure from PowerWerx, to make it a single unit that’s easy to carry around. The enclosure includes a short DC cable to connect the radio to the power supply. If I want to use a battery instead of the power supply, I just disconnect the T-connector from the power supply, and connect it to the battery. It was very easy to assemble the whole system.

I tested with the power supply and with a battery, and it works great. The whole unit is very compact and stable.

My next step will be to configure it for WinLink and APRS. I have a Mobilinkd TNC-4, and I ordered a DigiRig. The FTM-6000R has a 10 pin MiniDin connector, and DigiRig sells 1200 bps and 9600 bps cables for the radio. DigiRig also sells an adapter cable to use DigiRig cables with a Mobilinkd, and vice versa.

I’ll make another post after testing the setup with WinLink and APRS.

LoRA 433 MHz APRS iGate and Tracker

It has been a year since I posted a new item! Time to get back to it! My last post was about a project for my IC-705 using an M5Stack microcontroller. I became interested in learning about other ham radio related projects using microcontrollers.

Searching online, I found two related projects to build an APRS iGate and a tracker. Both of these projects use inexpensive LoRa32 microcontroller boards. I chose TTGO T-Beam v1.1 boards that operate on 433 MHz. Make sure you buy the 433 MHz version of the board for the APRS projects. The board includes a small OLED screen, and has onboard WiFi, GPS and SMA connector for the antenna. You will probably have to solder the OLED screen to the board, but there are only four pins to solder.

On the back of the board, there is a battery holder for an 18650 3.7 V lithium ion battery to power the board. The board can also be powered through the microUSB port, which also recharges the battery. There are other similar LoRa32 boards that you can use for these projects, and they are readily available on Amazon, eBay, and other online retailers.

Front and back of TTGO T-Beam v1.1 ESP32 433MHz LoRa32 board

Programming the board is fairly easy. The iGate and tracker project pages on GitHub include links to quick start guides. The quick start guides are in German and French, but you can right-click in Chrome and choose “Translate to English”. Even better, there is an excellent video by Tech Minds on YouTube that will take you step-by-step through the process of configuring and programming the iGate and tracker modules using Visual Studio Code with the PlatformIO plugin. This process will load the firmware onto the module, as well as a json configuration file that includes your callsign, wifi info (for the iGate), etc. I highly recommend viewing the Tech Minds video before you start these projects!

Lora APRS iGate json configuration file in Visual Studio Code

After programming the iGate and tracker, I was ready to test! I missed a step in my initial configuration of the iGate, so it did not connect to my home wifi on the first attempt. Once that was fixed, it connected to the internate and I was able to see the LoRa iGate symbol for my ssid N4MI-10 appear on the aprs.fi live APRS map. The iGate is operating on 433.775 MHz.

OLED screen showing LoRa APRS iGate configuration
N4MI-10 LoRa APRS iGate, operating on 433.775 MHz, displayed on aprs.fi

Once the iGate was operational, it was time to test the tracker. I chose N4MI-1 as the ssid for testing the tracker. I have some other APRS capable radios, so I will have to come up with a plan for assigning a ssid for each of them. The tracker powered up and initialized. Once it acquired enough satellites for a fix, I saw it transmit the first beacon, which was immediately picked up by the iGate. Awesome!

You can configure the tracker for smart beaconing in the json configuration file. You can also manually transmit a beacon using the middle button on the LoRa module.

OLED screen on LoRa 433 MHz APRS tracker

I took the tracker out for a short walk, and transmitted a beacon from several locations, all of which were received by the iGate and displayed on aprs.fi.

Positions from N4MI-1 LoRa 433 MHz APRS tracker displayed on aprs.fi

The transmitter in the LoRa board is very low power, about 200 mW, so the range with the small SMA antenna is limited. The range can be extended by using a better antenna at a higher elevation. Additionally, a small RF amplifier could be used to increase the power.

This was a very fun and relatively easy project. I am planning to attach a 70cm antenna at a higher elevation to the iGate in case other hams in this area would like to build and use LoRa 433 MHz APRS trackers.

New QSL Card Art from K1NSS

I wanted to incorporate some of my most recent ham radio activities into a new QSL card. I reached out to my friend Jeff, K1NSS, and gave him a basic idea about what I wanted. I wanted my DX hound buddy Luke the Catahoula featured in the card. As usual, he worked his magic and came up with a fantastic design that captured my vision, and then some! What do you think? This version will be going to the printer soon.

New truck means new radio install!

My faithful old 2011 Tundra pickup truck, as great as it was, was starting to require frequent repairs. I got a great trade-in offer for it, so I got a new Dodge 1500 Crew Cab. A new truck means time to install a new radio! My good friends Rusty KG4HIR, Randall KN4FYG, and Steven KN4RVU offered their expertise, time and sweat to help me install the radio. They’ve all had experience with mobile radio installation, but this was my first time.

In my Tundra, I had an Icom ID-5100A, and I had a Kenwood TM-D170GA in my shack. It seemed like a no-brainer to mount the Kenwood radio in the new truck to take advantage of the APRS capabilities, which are not really needed in the shack. So, the ID-5100A from my old truck was moved into the shack, and the TM-D710GA was designated for the new truck.

New Ram 1500 pickup with dual band antenna installed on a fender mount.

Rusty gave me some good advice, which is to get used to the layout of the new truck before deciding how and where to mount the radio. I did not want to drill too many holes in the new truck, so I decided to go with a fender mount for the antenna. I got an antenna mount, specifically designed for the Ram 1500, from Valley Enterprises. The main unit of the radio is mounted with a bracket under a back seat. After some research, I chose a center dash mount from ProClips, and an extension plate with magnetic puck from Lido Radio for the head unit. The dash mount is very sturdy and well designed. The magnetic puck on the extension plate is very convenient for the microphone.

The install went very well. It was a hot and humid morning, but the awesome install crew got the job done in about 3 hours. All of the truck parts went back in place, with no extra or missing pieces, and the radio powered right up. The way everything is mounted makes it very easy to install a new radio, if that’s ever necessary.

The radio had previously been programmed for use in the shack, but we were able to verify that it was transmitting and receiving. Later, I reprogrammed the radio and adjusted all of the settings for mobile use. I also did some test drives to see how the radio performed with the local repeaters, and simplex with a few friends. It seems to perform as good as I would expect with a fender-mounted antenna. I also have it transmitting APRS beacons as N4MI-9.

I am very pleased with the radio and how it is installed! It’s great to be on the air again while I’m rolling.

The power and antenna cables came through the firewall with some gentle persuasion, through an existing hole where other wires were routed from the cabin to the engine compartment.
Did you know that the center entertainment console just pops out of place with a good tug? It’s held in place with two clips. It’s an uneasy feeling when pulling it loose! The cable from the radio to the remote head unit is routed behind the entertainment console.
The main radio unit is mounted under a back seat. It’s mounted with the rear of the unit facing toward the cabin to improve airflow and allow easier access to the plugs and cables. I leave a programming cable plugged in.
The drivers side fender mount came from Valley Enterprises. I am using a Comet CA-2X4SR dual band antenna, which is compact and very broad band across 2M and 70cm.
Final installation of the head unit. The cable comes in behind the entertainment console. I used a ProClips mount center dash mount designed specifically for a Ram 1500, along with a Lido extension plate for the head unit and a magnetic puck for the microphone.
The CA-2X4SR is either a great dummy load, or a well tuned antenna!
You can follow my tracks on aprs.fi as N4MI-9

Balloon Launch with APRS & WSPR Tracker

On May 5th, I had the opportunity to participate as part of a team that launched and tracked two high-altitude balloons. This was part of an educational outreach with Savannah River Academy, a school in my community. Members from my club, the Amateur Radio Club of Columbia County (ARCCC), and two meteorologists from the National Weather Service assisted the school with the balloon launch. This was part of a series of activities with the school to teach students about radio, weather and space, in preparation for a ham radio contact later this year with an astronaut aboard the International Space Station! Savannah River Academy was one of only a handful of schools in the U.S. selected to contact the ISS through the Amateur Radio on the International Space Station (ARISS) program.

The balloon launches were covered by two local TV stations and the local newspaper:
Columbia County students launch weather balloon
Students at Savannah River Academy participate in weather balloon launch
Sky is NOT the limit: Radio club partners with Grovetown students for weather balloon launch
Weather balloon camera captures breathtaking views above CSRA

The first balloon, which carried a payload with a SPOT Trace GPS tracker and a GoPro camera, was designed climb to an altitude of 70,000 – 100, 000 feet before bursting and falling back to earth. A parachute was attached to the payload so it could return to ground intact for retrieval by a chase crew. We expected the payload to land approximately 50 miles east of the launch site, but the balloon traveled much farther than anticipated. The chase teams scrambled and the payload was successfully retrieved approximately 150 miles from the launch site. The camera captured some amazing images while the balloon was in the stratosphere. Some of the best pictures are featured in the linked news stories.

Photo captured from the high altitude weather balloon shortly after launch. This camera captured lots of amazing images during this balloon flight.
One of the many spectacular views captures by the camera on the high-altitude weather balloon.

This post focuses primarily on the second “pico” balloon, which carried only a LightAPRS-W APRS and WSPR tracker as the payload, and was designed to reach an altitude of approximately 50,000 – 60,000 feet and achieve neutral buoyancy to travel for a much longer period of time. The LightAPRS-W, which is very small, was powered by two small PowerFilm 4.8V solar panels with two 5F 3V supercapacitors. With this power source, the tracker transmits APRS on VHF at .5 to 1 Watt, and WSPR on HF at 10 mW (1/100th of a Watt!).

We spent several days configuring and testing the tracker, using the configuration and programming instructions provided by QRP Labs on GitHub, and following some helpful suggestions in the Tips & Tricks for Pico Balloons wiki. The tracker also had two light wire antennas for APRS (19.4 inches) and 20 meter WSPR (16.6 feet), and a counterpoise (16.6 feet) attached.

Assembled LightAPRS-W tracker with two PowerFilm solar panels and super capacitors. It’s really small and light!

Once assembled, the tracker was easy to configure with an Arduino IDE to load the APRS callsign (K4KNS-11), WSPR callsign (K4KNS), and a few other settings. It’s best to pay very close attention to the instructions and comments in the configuration file! After the loading the configuration, we placed the tracker in the sun to test and listen for APRS and WSPR signals. We were able to confirm that the tracker was transmitting good APRS and WSPR signals. Due to the very low power of the VHF and HF transmitters, we could only confirm local reception. With the tracker stationary and in full sunlight, we noted that the LightAPRS-W transmitted an APRS packet approximately every 5 minutes, and a WSPR signal every 4-6 minutes.

Assembled and configured LightAPRS-W in the sun to test the solar panels and monitor APRS and WSPR signals.
APRS received from the LightAPRS-W during testing.
Good test of WSPR signal from K4KNS!

It’s one thing to have a good test under controlled conditions, but quite another to achieve success under field conditions. On the day of the launch, the weather was marginal, but within acceptable parameters for a launch. We double checked to ensure the tracker was powered up and transmitting, and tied it to the balloon.

Good test of the APRS signal on launch day!

We had a good launch. The balloon, with the tracker hanging 16.6 feet below the balloon (to accommodate the counterpoise) and trailing a 16.6 foot HF antenna, quickly rose to an altitude above any potential obstructions and began its journey. Within moments, we saw the first APRS positions appear on aprs.fi. A few moments later, using the WSPR Watch iPad app, we saw that the WSPR signal was being received across the U.S.!

The first APRS track for balloon K4KNS-11!
The 10 mW WSPR signal was received as far west as Oregon!

It was all going so well! We continued to watch the balloon tracking eastward and climbing, following the same track as the high-altitude balloon that had been launched about a half hour earlier. Then, after about an hour of flight, both the APRS and WSPR signal went off the air. At that time the balloon was 55 miles east of the launch site at an altitude of 37,500 feet.

The track and final position received from K4KNS-11.
Location, speed, course, speed, altitude, temperature, pressure and solar cell voltage data from K4KNS-11 exported from aprs.fi.

We’re not sure exactly why the signals were lost, but we do not believe the balloon went down in that location. We are speculating that the tracker may have been damaged due to the high wind speeds on lost power. It is unknown how much farther the balloon might have traveled. Despite the relatively short flight, we did collect some good data for the students at Savannah River Academy to evaluate. We also proved to ourselves that we could successfully launch a balloon and track it with APRS, and that a very weak WSPR signal transmitted from high altitude could be received by stations thousands of miles away!

Map on WSPRnet.org showing stations that received the K4KNS WSPR signal on May 5, 2021.
Spot Database for K4KNS on on May 5, 2021 from WSPRnet.org.

Using aprs.fi’s data export tool, we were able to export a KMZ file with the balloon’s tracking data, and use Google Earth to view the full track and altitude changes.

Google Earth map of the track and altitude changes for pico balloon K4KNS-11 on May 5, 2021.

This was an amazing experience! We captured many lessons learned, and we intend to build another more hardened version of the tracker so we can launch another balloon and hopefully track it over a much longer distance and time.

Additional information about both balloon launches is posted to the Amateur Radio Club of Columbia County Facebook page.