For those that don’t know, amateur radio operators have had something called the Automatic Packet Reporting System for quite a while now. Most associate it with vehicular tracking, but it does a lot of other neat stuff like weather, telemetry, and message transfer. Many hams put a device called a “tracker” in their vehicle that periodically reports their position (which comes from an attatched GPS) on the air, which is picked up by other stations as well as internet gateways. That is what makes sites like aprs.fi so useful. For more information on APRS, see the inventor’s site as well as the APRSWiki.
There are typically two “classes” of tracker. The first is a simple transmit-only device, such as the TinyTrack3. The sole purpose is to transmit your position periodically, so that other people can see where you are. If you want to be able to actually see where other stations are (without going to an internet site) you can use something like the Kenwood TM-D710, which is a radio with a TNC built-in, capable of displaying information on the screen. It looks something like this:
While it’s a ton of information if you have no other option, it can sometimes leave a lot to be desired. You can take it a little further and attach a serial GPS, which the radio will load with waypoints of the stations it receives. That’s helpful for seeing where the other stations are, but the display can get cluttered quickly with every station the radio hears over a modest period of time. Other devices like the HamHUD provide a little more powerful interface external to the radio itself, if you prefer.
Recently, I came up with a couple of things I’d like to see in a tracker, to make it more functional and more…let’s say “modern”. Some of the requirements are:
- A real display (with colors and graphics)
- Telemetry capabilities (specifically car voltage and temperature)
- Expandable to do other things, such as control various systems in the vehicle, perhaps at the request of an APRS command message
I decided to try to build something that met the above requirements for my Jeep. I settled on using a BeagleBoard xM for the core system, which is a 1GHz ARM development board with 512MB of RAM that runs Linux. It’s basically a cell phone on a development board, without the cell radio. I housed it in a DogHouse so that I had a way to mount it in the vehicle. For a display, I found a 3.5″ LCD composite video display on eBay for under $40. This is what it looks like mounted to the windshield next to my larger GPS screen:
I wrote a very simple display app using GTK that runs full-screen all the time to give a pretty nice display. While GTK and X11 are pretty overkill for something embedded like this, the machine is more than powerful enough to run it and it gives niceties like anti-aliased font rendering for free. It also runs on my desktop just as easily as on the device itself, which is nice for development.
The actual APRS tracking code is a separate module that speaks to the display over a socket. This means that I can run the APRS bit on the embedded board and the display on my laptop if I’m trying to debug something specific. I used the libfap library for parsing the actual APRS packets, but I think I will end up using something else in the long run. All the other code is mine, including the packet generation, beaconing logic, etc. I implemented intelligent (i.e. speed and turn-sensitive) beaconing logic, although I’m hesitant to call it SmartBeaconing exactly.
External to the BeagleBoard itself, I’m using a simple microcontroller that reads a voltage divider to report the vehicle voltage, and an LM34 sensor for temperature. I plan to add a lot more telemetry sensors to that unit over time, but for now it gives me what I want.
Down the road, I plan to see about adding some of these features:
- TIGER maps for displaying the actual positions of received stations. I have code for this already and the maps could be stored on a USB stick for pennies.
- Audio alerts for received packets and proximity alarms. The device has stereo audio in and out.
- Auto-shutdown of the radio and the tracker if the vehicle voltage drops below a certain point.
- APRS messaging
- On-board configuration. Right now, there is no way to give input to the device so configuration is done via text file