Arduino APRS Tracker

An APRS tracker is easy to build these days.

I had decided to build one for portable use (plan is to be used on hiking, but also in my car) powered from Lithium Ion battery and with all components running on 3.3V. Transmit of APRS messages is done through a UV-5R.

The tracker is powered from my favorite Panasonic NCR18650 3400mAH through a MCP1700-3302E LDO regulator, and has plenty of juice for daily use.

GPS is a Adafruit Ultimate GPS Breakout – 66 channel w/10 Hz updates (https://www.adafruit.com/product/746) not that i need 10 Hz, 1 Hz update is more than enough but i had in stock from a different project, so why not ? (i love it).  You can also use a NEO-6M and change the appropriate define on the code

Arduino is a Pro Mini 3.3V 8 MHz (actually a clone of Deek-Robot Pro Mini)

Up and running on breadboard

Update

Bought a Kenwood cable to avoid the mess with the 2.5 and 3.5 mm audio connectors

BIG FAT WARNING : There is no load disconnect for the battery while charging. DO NOT CHARGE AND USE IT. The charging of the battery will never finish, resulting on explosion, fire etc. YOU HAVE BEEN WARNED

https://www.aliexpress.com/item/DIY-2-pin-4-Wire-Speaker-Mic-Cable-Spring-Line-for-Baofeng-UV5R-Kenwood-TK370-Linton/32734963747.html

TP4056 Lithium Cell Charger Module with Battery Protection to charge it through USB.

https://www.aliexpress.com/store/product/5x-TP4056-Lithium-Charger-Module-with-Battery-Protection-Micro-USB-5V-1A-TE420/1895489_32646760134.html

I have started working with the schematic of MicroModem (http://unsigned.io) but i have modified LibAPRS to make it work.

As long as GPS has a FIX it submits my location every two minutes and i have a button for a single shot APRS update. SmartBeaconing support is included and now is the default

The idea is to create a complete unit with a DRA818V with USB charging.
DRA818V is still on my desk… i have “trouble” designing a good low pass filter for VHF.

Schematic (breadboard version)

Remember power supply needs to be 3.3V

Arduino APRS tracker schematic (for the breadboard version)

Documentation has not been finalized yet and i use multiple libraries making it a bit difficult to handle everything

I have uploaded my working version to github
https://github.com/billygr/arduino-aprs-tracker

Remember to change the APRS_CALLSIGN to your call sign

You will need these libraries
libAPRS (modified) https://github.com/billygr/LibAPRS
TinyGPS http://arduiniana.org/libraries/tinygps/

PCB

Oh yes !!! We do have also PCB ready credits to aronaut. Thank you !!!

https://github.com/billygr/arduino-aprs-tracker/tree/master/archive/PCBv1%20KiCad%20(5.0.2)

Bill of Materials (breadboard version)

R1 1K
R2 2K2
R3 3K9
R4 8K2
R5 270
R6 10K trimmer
R7 1K
R8 10K
C1 100nF
C2 4.7uF/16V
1 x GPS Module
1 x push button
1 x Arduino Pro Mini 3V3 8MHz
Q1 2N2700/BS170

For using without an external power supply:

1 x Panasonic NCR18650 3400mAH (or your favorite 18650)
1 x 18650 socket
1 x MCP1700-3302E
1 x TP4056

Bill of Materials (PCB version)

Includes the 18650 socket+TP4056

https://github.com/billygr/arduino-aprs-tracker/tree/master/archive/PCBv1%20KiCad%20(5.0.2)

301 Comments on “Arduino APRS Tracker

  1. Billy my ideas for perfect baloon tracker in your project
    Altitiude above sea level in APRS report
    2x BME280 sensors in APRS telemetry
    Battery voltage in APRS telemetry

  2. I try to upload your heavy job to my board but after verification I receive info : “APRS_setSpeed was not declared in this scope”

  3. Tell me please, I put your firmware on the tracker based on Arduino Pro Mini 3.3V 8 MHz and gps module NEO-6M-0-001, the tracker aprs transmits, but for some reason the SmartBeaconing system does not work, something in your firmware needs to be enabled or the GPS module not suitable for work. I put the firmware from here: https://github.com/billygr/arduino-aprs-tracker/blob/master/arduino-aprs-tracker/arduino-aprs-tracker.ino
    I can not figure out how to make it work, the coordinates are transmitted by the tracker when updating after 2 minutes. And when turning, turning and changing speed, nothing. I will be grateful for your help.

    • Hi,

      I just checked both pictures, there is no conversion in my code , we get the output directly from TinyGPS.
      Could you please be so kind and do a test the test_with_gps_device.ino from the TinyGPS library ?

      73, SV1QFV

  4. Billy
    According Your next aprs nice project … ( not possible to comment there )
    Not better use diferent low pass filter ? http://599.cz/view.php?cisloclanku=2018082201 – please see – easy to make and prepare. LFCN-160+ very difficult to get ( expensive item + expensive delivery ) – If You have cheap source for it please let know
    Please consider
    Regards

  5. Hola te consulto cada cuantos minutos emite la posicion o hoy que oprimir el boton para que lo haga, saludos LU7FDV

  6. Hi, Billy

    From your Arduino code, we didn’t see any code relevant to pin D4 to D7. Can you pls explain how your code work?

  7. Hi Billy,

    I had read AFSK but cannot find lines of code relevant to D4 to D7. Can you pls explain a little further. Thanks!

    • Thanks Billy

      I try to upload the sketch you provided with FTDI232.

      It gives the following upload error. How can this problem can be fixed?

      avrdude: stk500_recv(): programmer is not responding
      avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xd5
      avrdude: stk500_recv(): programmer is not responding
      avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xd5
      avrdude: stk500_recv(): programmer is not responding
      avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xd5
      avrdude: stk500_recv(): programmer is not responding
      avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xd5
      avrdude: stk500_recv(): programmer is not responding
      avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xd5
      avrdude: stk500_recv(): programmer is not responding
      avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xd5
      avrdude: stk500_recv(): programmer is not responding
      avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xd5
      avrdude: stk500_recv(): programmer is not responding
      avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xd5
      avrdude: stk500_recv(): programmer is not responding
      avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xd5
      avrdude: stk500_recv(): programmer is not responding
      avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xd5

  8. Hi Billy,
    With GPS module, I use a module as GY-NEO6MV2. It works well with Arduino UNO.

    But it doesn’t work with Arduino Promini 3.3V.
    Can you pls suggest how to solve this problem? I noticed the model of GPS you used in your project. Wonder if any particular requirement is needed and alternative GPS meed the need of circuit.

    Thanks
    Robbie

  9. Hi,

    Ensure that RX/TX are correctly attached and modem is on the correct speed, there is a fellow ham that reported that it Arduino promini works also this module.

    Can you try with the demo program of TinyGPS library ? If it works there it will work also with the APRS tracker

    Billy

  10. hi. i load the code to arduino and i put it in pcb. nothing happend. i try to press the beacon button nothing again. any idea? thanks.
    73 SV7PKL

      • το συνδεσα στο serial και οταν παταω το κουμπακι στο arduino μου εμφανιζει Arduino APRS Tracker. για να λειτουργησει πρεπει να βρει στιγμα το gps ή για δοκιμη δεν χρειαζεται?

      • i connect to serial and when push the button on arduino write “Arduino Aprs Tracker”. the gps must fix the sats to test the tracker?

  11. Hello, I saw that some friends had the same problem that appears to me. The altitude shows 1280m, when I am currently at 100m. For what is this? can it be corrected? Thank you

  12. Hello, I saw that some friends had the same problem that appears to me. The altitude shows 1280m, when I am currently at 100m. For what is this? can it be corrected?
    Is the sending time between packets fixed, or does it vary according to the speed of movement?
    Thank you

    • If you use the SmartBeaconing version the sending time of packets depends on your speed. As for the altitude difficult to explain/debug it, can you please send me two three lines of the serial output ?

  13. Τελικά στέλνει μια χαρά με το BAOFENG. Άλλαξα το gps και δουλεύει μια χαρά. Μπορώ να αυξήσω το χρόνο εκπομπής επειδή το δοκίμασα με το vhf module SA828 και αργεί λίγο να ανοίξει με αποτέλεσμα να μη στέλνει όλο το πακέτο.
    73 SV7PKL

  14. There is a significant bug in the NMEA conversion code that does not put a leading zero for longitudes less than 100. This causes the packet to be rejected or the position information not to display in most APRS decoders, including the Yaesu FTM-300, APRSIS and APRS.fi.

    I solved this by borrowing a NMEA converter routine from another project and changing the flat and flon variables to “long” from “float”, then calling the update lat/lon routine version written for long variable position variables. The new NMEA conversion routine also requires “long” position variables.

    I also removed the display routines for smaller code size and a less battery-hungry profile.

    Works fine now. The rest of the code is excellent.

  15. Hello, We are building a CANSAT and trying to implement an APRS System for tracking it. I would like to know how can we do that using Arduino and how should whole System should be tracked from the ground station. would require some help.

  16. HI,

    Thank you for your program it is wonderfull.
    Its works very fine.
    Now the question HI.
    You use pin 13 ( internal led ) for checking that TX is done. I would like this on a other pin pe pin 2 . I can’t find where i have to do this in the program .
    Can you help me?

    ’73 John

  17. I followed all the breadboard schematic but I can’t get the module to trigger signal to my walkie. anyone can share the experience? GPS LED is blinking.

  18. Hi Billy, I’ m planning to build a simple tracker and I found you project, which is exactly what I need to do that. Since I’m very noob in knwoledge to program Arduino, but I´m ok in electronics, I want to ask you if in your project it´s possible to retrieve the TX and RX data BEFORE they’re converted to audio AFSK, to connect it to a external modem IC (like the TCM3105, AM7910, etc) intended for more robust transmission. Have you and idea to do such that?
    Thank you very much in advance!

    Leandro
    LU8DOI

  19. Hey ,
    I have read the pdf of TCM3105 but i don’t understand what is the expected input of TX (i assume analog but in what format ?)

    LibAPRS implements the AFSK modem in software , which means it needs a complete rewrite. You can have a look at AFSK_dac_isr (in LibAPRS/AFSK.cpp)

    What i am saying here is that if you can understand what is the analog input needed to have a proper APRS message it could be possible.

    73

  20. Hi!
    Is there a way to specify how long into the 2 minutes the packet is started? So that several of these running on GPS time could be programmed to transmit at different times and avoid packet collisions?

    Thanks,
    Joe G0EVB

    • Hey,

      I do understand the need but it is not implemented , ideally we should monitor the frequency and then decide if we should transmit or not.

      Its not random but it is 2 minutes after you got a GPS fix, you could add some randomness on the 2 minutes +- 10-15 seconds

      73

      • Hi,

        Thanks for the response. Would that be achieved by altering line 97 to be e.g. 1.9 instead of 2?

        aprs_update_timer_id=timer.setInterval(1.9*TIMER_MINUTES, setAprsUpdateFlag);

        73 de G0EVB

  21. No fix detected
    0/0/2000 198:96:72 9959.99N/99959.99E Altitude m/ft: 1000000.00/4200

    Could anyone explain this for me ?

  22. The program code was uploaded successfully, but only one line of Arduino APRS Tracker appeared in the serial monitor and there was no other action.
    The GPS information uploaded successfully a few days ago will be displayed every second after the Arduino APRS Tracker message. Is this an error in the program?

  23. Hello Billy,
    I try to use your software with an Arduino Uno and a Garmin Etrex for GPS-Data.
    The compilation was successful and I made following changes:

    75: Serial.begin(4800);
    76:  GPSSerial.begin(4800);
    200: GPSSerial.begin(4800);
    110: Serial.write(c); // uncomment this line if you want to see the GPS data flowing
    53: SoftwareSerial GPSSerial(GPS_RX_PIN, GPS_TX_PIN, true);
    24: #define ADC_REFERENCE REF_5V
    33: char APRS_CALLSIGN[]=”myCall”;

    The Etrex-data scroll down until the Etrex find a position. Then the monitor stops and nothing further happens. No AFSK-signal is to be heard even when I close the switch at pin 10 to GND.
    What can I do?

  24. Hello Billy,
    thank you for your reply! I found that update-pin 10 was permanent low. I changed to pin 8 and than the arduino continued after a position fix. Meantime it works more but not complete. I will see….
    Regards Lutz

  25. Hi Billy, I’ve been working on your project quite a bit for the last 2 years. We are together with some friends who do SOTA activations, sending about 30 PCBs to be manufactured.

    Due to their specific need, we would like to know if it is possible to modify the code so that it sends emergency beacons using the same switch that your design has.

    For example, if the button is held down for 5 seconds or pressed 5 times, instead of sending the standard beacon, it sends a beacon reporting an emergency.

    Is this possible?

    Thanks again,
    Nicholas LU9CNS

    • Hey,

      Perfect Nicolas, happy to hear that. Have a board working with the code as it, and we will make it happen one way or another

      Billy
      73 SV1QFV

Leave a Reply to Fabian Cancel reply

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

*