Homebrew APRS – Arduino Uno KISS TNC

So, What’s all this about?

Last week I was looking on eBay at what rigs and equipment was around and found some transceivers with APRS and thought “I don’t have anything that can do APRS, That could be handy when I go out to the bush and there are no mobile phone towers in range, say if I got stuck. These prices are a bit high for something I wouldn’t use much though.”

So then I looked at APRSdroid and saw that it can be connected to a radio, either directly (but you have to use vox) or via a TNC. I looked at TNCs online and saw not only that they can be expensive but that there isn’t much to them and went looking for some ideas on building one.

I have several Arduinos here and figured this would be a good starting point. But figuring out how to not only generate the 1200 baud AFSK signal but also receive it and process it looked pretty hard. Luckily some people have done this work for us… So lets not waste any more time figuring that out.

Among various projects the MicroModem/MicroAPRS projects stood out and I went shopping for a shield proto board and a couple components I was short of.


What do I need if I want to do this?
  • Amateur radio licence (In Australia, Standard or Advanced ONLY)
  • A 2m FM Transceiver ( I used a cheap Baofeng GT-3TP)
  • Arduino. This can be any 16MHz (Important) Atmega328p based board like the UNO, SparkFun RedBoard etc.
  • A protoboard/protoshield/breadboard/whatever… somewhere to build the components. I would suggest a shield format as it allows you to disconnect the board in 1 hit from the Arduino
  • 1x bluetooth module (HC06)
  • Some wire
  • Soldering iron
  • Solder
  • 1x 2N7000 MOSFET
  • 2x 270Ω resistors
  • 3x 1kΩ resistors
  • 2x 2.2kΩ resistor
  • 1x 3.9kΩ resistor
  • 1x 8.2kΩ resistor
  • 1x 10kΩ resistor
  • 3x100kΩ resistor
  • 1x 100nF ceramic capacitor
  • 1x 1μF ceramic capacitor
  • 1x 4.7μF electrolytic capacitor
  • 1x LED for TX and 1x LED for RX OR 1x RGB LED(I used an RGB led with blue RX, red TX)
  • 1x 2.5mm and 1x 3.5mm TRS plugs and some nice headphone lead OR A pre-wired Speakermic lead (This is for Baofeng, Kenwood handheld radios etc. other radios will have different connectors)
  • 1x 3.5mm TRRS plug and socket (Optional but nice, I haven’t done this yet but I probably will)

OKAY, I have all that, now what?

If you can follow it, I have made a circuit on Tinkercad HERE:

MicroModem breadboard on Tinkercad.

On the breadboard shown above, 29h is the audio input and so goes to the speaker pin of the radio (for the Baofeng this is the Tip of the 2.5mm TRS plug) and 30h is the ground (and the PTT GND) and it goes to the shield (GND) of the same plug.

29b is the audio output and so goes to the mic pin of the radio (For the Baofeng this is Ring of the 3.5mm TRS plug) and 30b is the Ground (and the PTT+, so do not ground this wire in the circuit, as it will trigger PTT, that’s what the MOSFET is for, it will ground this line when we are transmitting, causing the radio to go into transmit mode and also providing the ground for the TX signal.)

Also, here is the circuit it basically follows from the original designer (Mark at unsigned.io):

Circuit diagram from unsigned.io

After you have built it, in whatever form you choose to, you will need to remove your circuit from the Arduino (This is why the shield configuration is easiest). You cannot upload reliably to the Arduino with the bluetooth module connected as it interferes with the USB serial data, they are parallel to each other.

Now, download this hex file and load it into your Arduino.


How the hell do I do that?

If you are on Windows and have the Arduino IDE installed, open a Windows Command Prompt.

You will have to change the Arduino folder to wherever you installed it, the COM port to match the one your arduino shows up as, and Downloadfolder to wherever you saved the hex file.

C:\Arduino\hardware\tools\avr\bin\avrdude -v -v -v -v -patmega328p -carduino -P\\.\COM3 -b115200 -D -Uflash:w:C:\Downloadfolder\microaprs-5v-kiss-latest.hex:i

If this works, you can unplug the Arduino from the computer, put your shield back on, plug it into power, and your radio and if you did everything right…

Nothing happens.

Oh yeah, you have to download and set up APRSdroid on your phone.

Then in your phone’s settings, pair with HC-06, or whichever bluetooth name appears when you turn on your new device.

Go into preferences in APRSdroid, and set it up with your callsign and which picture you want and your other details and then go to “Connection Preferences”. Select “Connection Protocol” and choose “TNC (KISS)”, Connection Type should be “Bluetooth SPP”. Client Mode should be checked, now select “TNC Bluetooth Device” Pick your new device from the list and APRSdroid is ready to roll. (it will automatically connect from now on).

Turn your radio on and tune it to your region’s APRS frequency (Australia is 145.175MHz), and hit “Start Tracking” on the main screen in APRSdroid.

You should now be able to find yourself on aprs.fi shortly after your signal is transmitted.

You may have to play with the radio’s volume knob to get a level the TNC likes for successful decoding of other people’s signals.

Screenshot of what I recieved from others on my way home from work.
Photo of my TNC in the dark.

Okay, your instructions suck.  Where can I find more information from someone I can understand?

unsigned.io is the place to go to find more information.

However the circuit diagram above is lifted direct from Mark’s website or the linked Github (Can’t remember which), and it was the closest I could find to instructions. Between the two circuit pictures above there should be enough information for most people who are interested in building radio gear to make it work.

Note I did not design the TNC, all I did was build it and add bluetooth and write up this blog post. Credit to Mark from unsigned.io for doing all the hard work.

73s – VK3DAN

Leave a Reply

Your email address will not be published. Required fields are marked *