Have you ever wanted to track your car, bike, or pet in real time using your own tracking device, instead of a commercial GPS tracker or a monthly subscription service? This DIY Arduino project uses the Arduino UNO, SIM800L GSM module, and NEO-6M GPS module to create a tracking system and connect it to a dashboard called GeoLinker that's completely free to use, and designed for hobby projects like this one!
What You'll BuildA complete GPS tracking system that:
- Captures real-time location data via GPS.
- Sends it to a cloud platform using GSM.
- It lets you visualize the path live on a web-based map.
- Costs under $30 with no subscription fee at all.
Note: Jio SIM won’t work in India (2G not supported). Use Airtel/Vi/BSNL.
Why Build Your Own Tracker?- First of all, no monthly fees - Just a SIM with data
- Open Source & Fully Customizable
- GeoLinker Cloud Dashboard: You get a real-time view, speed/distance logs
- Arduino-Compatible: Works with Uno R3 and similar boards
- GeoLinker Lite Library: Memory-optimized for ATmega328P boards
- The NEO-6M GPS module gets your location from satellites.
- The Arduino UNO processes that.
- The SIM800L GSM module sends data to the GeoLinker cloud through HTTP.
- You see your track on the GeoLinker Dashboard with timestamped points.
Key Connection Notes:
- GPS TX → Arduino RX (Pin 0)
- SIM800L TX → Arduino Pin 9
- SIM800L RX ← Arduino Pin 8 via voltage divider
- SIM800L VCC ← Arduino 5V (via diode for ~4.3V drop)
- Arduino Pin 2 → Arduino RESET pin (for switching between GPS and GSM modes)
To make things as simple as possible, we built a lightweight Arduino library just for this. It handles:
- GPS parsing
- SIM800L communication
- Cloud integration via HTTP
Install It:
- Open up Arduino IDE
- Go to Sketch > Include Library > Manage Libraries
- Search for GeoLinker Lite
- Hit Install
Or download it from GitHub: GeoLinkerLite GitHub
Just replace the placeholders with your own APN and API key.
#include <GeoLinkerLite.h>
GeoLinkerLite geoLinker(Serial, Serial);
void setup() {
Serial.begin(9600);
delay(1000);
geoLinker.setResetPin(2);
geoLinker.setGSMPins(8, 9);
geoLinker.setModemAPN("your.apn.here"); // Replace this
geoLinker.setAPIKey("your_api_key"); // Replace this
geoLinker.setDeviceID("arduino_tracker");
geoLinker.setMaxRetries(3);
geoLinker.setDebugLevel(1);
geoLinker.setTimeOffset(5, 30); // For India timezone
geoLinker.begin();
delay(1000);
geoLinker.run();
}
void loop() {
delay(1000); // geoLinker.run() handles everything else
}
You can grab your free API key from CircuitDigest Cloud. It’s free, and you can track multiple devices too.
TestingOnce your code is uploaded and everything's connected:
- Head outdoors as the GPS needs a clear sky.
- Open the Serial Monitor at 9600 baud.
- You’ll see GPS lock → GSM connect → data upload.
- Then open GeoLinker and see your tracker’s location live.
Can’t upload the code?
Unplug the GPS TX wire from Pin 0 first.
Your Arduino keeps resetting?
This is a power supply issue. Use a power bank with 2A output.
No GPS data?
Go outside, wait 2–5 mins for satellite lock. Check the antenna too.
HTTP 401 error?
Double-check your API key. Make sure there are no spaces or typos.
SIM800L not working?
Make sure:
- SIM card is 2G (Jio won’t work)
- You’ve got the voltage divider in place
- The antenna is attached properly
This Arduino GPS tracker that you just built from the ground up is cost-effective and reliable. You can expand this project by adding a buzzer, motion sensor, or even integrate with home automation.
There's a more comprehensive version of this project available here: Arduino GPS Tracker
Comments