Athena: The Global Car Tracking System(3D Images)

FeaturedContest WinnerContest Winner
Bring out your 3D glasses and enjoy viewing in a novel way! I have added a new dimension to my instructable. If you do not have 3D glasses, then you can make one yourself. The following link explains how to make 3D glasses ( link ).

Please Note: This instructable contains 3D images which are best viewed with Red and Cyan 3D Glasses. However, for those of you who do not have 3D glasses, this instructable also contains 2D images.

Every year about 700,000 vehicles get stolen in US. In fact, a car is stolen every 45 seconds.

We all love our cars and whether it is a roaring Lamborghini or a purring Prius, we are attached to it and wish that it never gets stolen.

I am very attached to my family car and take lots of precaution that I do not park my car in secluded places or double check that I always lock my car when I park it anywhere and always carry my car keys with me. However, I am still worried whether my car is safe. In order to get rid of these genuine worries, I decided to design my own low cost car tracking system.

In this instructable, I have explained the process of building one's very own Global Car Tracking System -'Athena' - for a cost of just 100$. The steps for building this device is very simple and explained in a lucid manner. The skills required for you to build this is minimum (Basic knowledge about electronics and the Arduino IDE).

I have christened this device by the name 'Athena' because Athena is the Greek Goddess of navigation. 

So what are we waiting for.....let's get started.......

Remove these adsRemove these ads by Signing Up

Step 1: Parts Needed:

Picture of Parts Needed:
The following is a list of parts needed to build 'Athena' :-

Supplies :
  1. Arduino Uno
  2. Arduino GSM Shield (I have used a SIM900 GSM/GPRS Shield Module)
  3. GPS Module
  4. Adapter Plug for powering the Arduino
  5. 4pcs of LM7805 IC
  6. PCB
  7. Wires
  8. Male Header Pins
  9. Female Header Pins
  10. Project Enclosure
Tools :
  1. Soldering Iron
  2. Solder
  3. Soldering Wax
  4. Drill
  5. Hacksaw

hi how can set pin number of sim first?
dpatel388 days ago

I am using Arduino Mega for similar project. But when I tried to interpret the output of GPS on arduino's serial monitor it shows in the form symbols. How can i get it corrected?

Check your baud rate.

Hello again! so ive found that this instructable can be more expensive than buy a gprs that do the same
its possible to made it with a $3 arduino and make a cheaper shield like this guy did with these projects of mini shields?

with a cheaper shield this project will bet herself awesomeness

builder4325 days ago
What is the default pass code? How is it changed?

You can see in the code the line where it reads:

if (strstr(buffer2,"INSTRUCTABLES")) //Comparing password entered with password stored in program

This is the line that checks the password, in the guide it is INSTRUCTABLES as an example

Can I use This ---- $3 arduino --- instead of a arduino and can u say more about how I gonna do this ... only answer me with few words if u dont want to waste u time... Please answer me?

hcarneiro1 month ago

I need the Arduino to send a signal to 12v relay, something like that.

This picture says it has to send a negative signal to activate the relay.

For example, I send an SMS with the word "relay call," and it sends a negative signal to activate the relay.

I need such a system to cut power to the fuel pump on my car

Someone you help me?

gandyman2 months ago

Was having the same issues as Mashup and Albarra.

Got it working but without Read Command. Still trying to get that part working. I needed to add a few ++'s and things I added were software turn on commands for the GPRS and now the ams comes as a link to google maps that you can just click on and see the location. Code I used was :

#include <SoftwareSerial.h>

#include <string.h>

#include <TinyGPS.h>

SoftwareSerial GPRS(7, 8);

byte buffer[64]; // buffer array for data recieve over serial port

int count=0; // counter for buffer array

SoftwareSerial GPS(4, 5);

TinyGPS gps;

unsigned long fix_age;

long lat, lon;

float LAT, LON;

void gpsdump(TinyGPS &gps);

bool feedgps();

void getGPS();

void SIM900power() // software equivalent of pressing the GSM shield "power" button


digitalWrite(9, HIGH);




void setup()


GPRS.begin(19200); // the SIM900 baud rate


GPS.begin(4800); // GPS module baud rate

Serial.begin(19200); // the Serial port of Arduino baud rate.



void loop()



if (GPRS.available()) // If date is comming from from GSM shield)


while(GPRS.available()) // reading data into char array


buffer[count++]; // writing data into array

if(count == 64)break;


Serial.write(buffer,count); // if no data transmission ends, write buffer to hardware serial port

SendTextMessage(); //Took out Read the 'COMMAND' sent to SIM900 through SMS

clearBufferArray(); // call clearBufferArray function to clear the storaged data from the array

count=0; // set counter of while loop to zero


if (Serial.available()) // if data is available on hardwareserial port ==> data is comming from PC or notebook

GPRS.write(; // write it to the GPRS shield


void clearBufferArray() // function to clear buffer array


for (int i=0; i<count;i++)

{ buffer[i]=NULL;} // clear all index of array with command NULL


void Sim900_Inti(void)


GPRS.println("AT+CMGF=1"); // Set GSM shield to sms mode

Serial.println("AT CMGF=1");



Serial.println("AT CMGF=1");



void SendTextMessage()


GPRS.print("AT+CMGF=1\r"); //Sending the SMS in text mode


GPRS.println("AT + CMGS = \"+19999999999\""); //The predefined phone number


GPRS.println("Please wait while Module calculates position"); //the content of the message


GPRS.println((char)26);//the ASCII code of the ctrl z is 26




int counter=0;


for (;;)


long lat, lon;

unsigned long fix_age, time, date, speed, course;

unsigned long chars;

unsigned short sentences, failed_checksum;

long Latitude, Longitude;

// retrieves /- lat/long in 100000ths of a degree

gps.get_position(&lat, &lon, &fix_age);


Serial.print("Latitude : ");


Serial.print(" :: Longitude : ");


GPRS.print("AT+CMGF=1\r"); //Sending the SMS in text mode


GPRS.println("AT + CMGS = \"+19999999999\""); //The predefined phone number





GPRS.println(LON/1000000,7);//the content of the message


GPRS.println((char)26);//the ASCII code of the ctrl z is 26








void getGPS()


bool newdata = false;

unsigned long start = millis();

while (millis() - start < 1000)


if (feedgps ())


newdata = true;



if (newdata)





bool feedgps()


while (GPS.available())


if (gps.encode(

return true;

}return 0;


void gpsdump(TinyGPS &gps)


gps.get_position(&lat, &lon);

LAT = lat;

LON = lon;





I am having the same issue as Albarra.

One thing I had to do to get text recieving to work on my shield was to go into SoftwareSerial.h and change the buffer from 64 to 128 to get all the text through. Would it make sense to change the byte buffer[64]; line to 128 as well then?

I also have tried to sketch from

But just the same, the results in the serial monitor shows only from :
Serial.println("AT CMGF=1");
Serial.println("AT CMGF=1");
just :


as if the another AT command not be executed by GSM Shield.

PS: Arduino Uno, ICOMSAT V1.1 - SIM900 GSM / GPRS (

brenryan2 months ago

Sorry if somebody has mentioned it before.

But instead of making the *debatable* iffy voltage regulation circuit.

Wouldn't it be much better to take apart one of these Car Cigarette Lighter to USB things and let that do all the work. They are fused as well so that is a bonus.

Would surely take a lot of hassle out of the process...

Swagata13 months ago

while(Sim900Serial.available()) // reading data into char array

buffer[count ]; // writing data into array
if(count == 64)break;
i had a doubt in that part of the code isn't there a need for count++

Swagata13 months ago

And also please please supply a link for all the components.Would be very helpful

Swagata13 months ago

hey I too am from India(Bangalore).Could you let me know to how much the total expenditure will come in INR.

Thanks in advance

rootxion3 months ago

Very nice and interesting project. I'm just getting started with this Arduino stuff and your project was my motivation. Specifically I'm using:

Arduino Uno r3, IComsat GSM/GPRS v1.1, Parallax PMB-688 GPS

I even got a 16x4 Samsung LCD to test displaying coordinates on the LCD.

So far I have tested the GPS, LCD separately successfully. I'm trying the IComsat to send simple text messages for testing but it's not working. I'm trying the examples on the supplied library ( but I receive a SIM900 error (will post pics on next message). I can see the power, status and net LEDs on the board turned on and blinking. The SIM card I'm using is from AT&T.

As I can see on you code you don't use any special library to deal with the GSM other than the SoftwareSerial.h

Will try some other examples today and let you know if it works.

rootxion rootxion3 months ago

As Skipper (Madagascar Penguins) would say "proublema resueltou".

Used a library I found at:

And also had to set the jumpers on the shield TX pin to #2 and RX pin to #3. Loaded one of the examples and it's now working fine. Now that everything is working I'll start putting it all together. Once I get everything working I'll post procedure, code, etc.

I may have missed it but is there a list with links to buy these materials, preferably on Amazon? Some of the materials I saw on the supplies list are very vague. Thanks a lot.

Can you specify for which items should I post the link

asalvatierra3 months ago
Hi, great tutorial! Congratulations! Could you please tell me if the IComSat v1.1 - SIM900 GSM/GPRS Shield, should be an alternative for this project? The wiring of the GPS to the pins it's the same? Thanks!!
Thank you asalvatierra,

The IComSat should work well as an alternative.

Hi! Thanks for your reply! What is the specification of the pins 4 and 5 that connect to GPS? IComSat have different pin order in the shield, so i very confused about the connections from GPS to GSM shield. Thanks!

Can you provide me the specification sheet of IComSat

mahesh943 months ago
iam planning to use sim300, the same program can be used for tat also?
Jayvis Vineet Gonsalves (author)  mahesh943 months ago
If SIM300 supports AT Commands (which I think it should), then the same program should run.
c1c2c33 months ago
Could you please give me the exact name of your GSM shield
Also, which sim did you use?
One more thing, do you think the adafruit gps will work for this project
Jayvis Vineet Gonsalves (author)  c1c2c33 months ago
I had ordered the GSM shield from Ebay USA. Here is a link to the product (link).

I am from Mumbai, India and have used a prepaid SIM from MTNL.

The adafruit gps shield should work for this project. But I suggest that you have a look at this GPS module on Ebay which is available for about half the price of the adafruit one. (link)
jiannisgreece3 months ago
thanks for the reply!!!
another question is, how can i  learn the commands in order the arduino to communicate with the gsm/gprs module, for future use? Did you use any e-book? do you have any suggestions?
I have some intermidiate knowledge in   c programming
thanks !
jiannis from greece
Hi Jiannis, The commands used for communicating with the GSM module are known as 'AT Commands'. If you google the word AT commands it will throw up a lot of info about it. Here is a link of some other AT commands that you could use (link).
oconnor773 months ago
So im not quite sure I understand what kind of service fee's this thing would require besides your normal cell phone fee that you are texting from. Where did the sim card come from?
You do not incur any service fees. You are only charged for the SMS sent from your mobile phone to the tracking system and from the tracking system to your mobile phone.
drin_pogi3 months ago
"+" is missing
Congratulations for this circuit, this is clever, very inexpensive ... This is a good proof of concept.
But I work in automotive electronics and, in my opinion, the hardware implementation is not adapted to the use profile. Thus, in the actual state, the reliability and lifetime of this circuit will be extremely bad.
First, for me, the power supply circuit is not only awfull, but also totally not acceptable for automotive use.
In general, it is impossible to use linear regulators with quiescent currents above 100mA, even with body controllers (Tmax=85°C) because of the heating of the component. For information, I used a LM7805 in a design, for external sensor supply. With a D-PAK package we never manage to obtain more than 300mA without having thermal shutdown, at ambient temperature (~25°C).
In addition, the reliability of this solution is very bad.
- If the 4 ICs are not exactly matched, the current won't be equally distributed between them.
- If one of the 4 ICs breaks or goes in thermal shutdown, the others will have to withstand a bigger current, then they will heat more, and will be more likely to break or go in thermal shutdown -> avalanche, failure of one compromises the whole power supply.
- I'm not 100% sure about this one : there is a high risk of oscillation with such parallel circuitry.
- No additional output capacitor for the regulators ? -> High oscillation risk.
- No additional input capacitor for the regulators ? -> Noise rejection on the on-board battery network, in paticular with high-frequency / high-current MCU modules ! This is not strictly dangerous because the requirements on this point are mostly normative, but it is a risk for oher ECUs in the car - I think the radio is the weakest victim. On automotive ECUs, it is strongly advised to have an input PI filter.
- Regulators are packed close to each other -> bad heat dissipation. The regulators should be at least mounted on a metalic heat dissipator.
- No transient protection -> The 7805 IC can withstand the load-dump 35V voltage, but must be protected against transient voltage (100Vautomotive transients, ESDs ...). A TVS is the roxor solution, ceramic input capacitors can also do the job (2x X7R 22nF minimum, in serial, 90°C from each other in order to avoid aggraved short-circuit in case one of the two breaks because of mechanical flexion). Note : having a big electrolithic capacitor on the input isn't enough, because they can't absorb all the transients.
- Power consumption : Vbatt x Iquiescent : 24W nominal / 32W max ! (note : battery voltage can rise up to 16V DC) Is there a sleeping mode ? Or is it connected on the APC (switched battery voltage) ? It is quite high for a circuit that must be supplied permanently ... Car batteries have a good capacity, but if the car is left stopped a long time, there is a little risk of having the battery depleted.
- You say that the module consumes up to 2A, but is it DC ? If it is just a transient, it is more wise to design a proper L-C filter - or PI filter - in order to absorb this current peak, better than over-sizing the whole power supply. It would be more reliable, and safer since a short-circuit will drain less current, then avoid current leaking from the battery when the car is stopped, and limiting the risk of fire (wires or PCB tracks burning ...).

I think a power supply with linear regulators could be used, with proper protections and heat dissipation, if the circuit is supplied on a switched battery voltage, or if it has a sleeping mode. If it is connected to the permanent battery voltage, the circuit will be even more exposed to failure, because it will constantly heat. Reliability and lifetime of ICs lower when temperature raises ...
This is what I think about the power supply. About the rest, don't forget that the modules use consumer or industrial rated components. On the Arduinio UNO, the main components are rated for 85°C. It won't be a problem if the module is inside the car, but it will if it is hidden behind the hood, close to the motor (cooling system is regulated at 90°C, for instance) ... Even below the sheet metal of the car body the temperature can rise far higher than 70°C during summer ... In this environment, some components can go in thermal breakdown very easily. And I am not even talking about the GPS and GSM modules and the plastic case ...

For me, the power supply should be changed, using a DC/DC switching module. It should be connected on the switched battery voltage (not supplied when the car is stopped).
If it has to be checking the position of the car even with the motor off (which is not absurd : wrecker, pound ...) then it should have a sleeping mode, which cuts the main power supply most of the time, then activates it periodically for position checking. And it should be hidden in the cabin or in the trunk, where the temperature is reasonnable.

I admit that these are not small modifications, but in the actual state, I don't think that this circuit will last long in a real car ... Adapting a circuit for automotive environment is always difficult.
Thank you Mr. Kerrigan for taking the time to write such a comprehensive comment. I will definitely work on improving the power supply circuit once I complete all my applications to the US Universities. I will upload the updates to the circuit by the end of January.
jiannisgreece4 months ago
very nice project!! i am new in this field, but i definately would give it a try to make one myself!!!
Jayvis Vineet Gonsalves, is it so easy as you describe? i am planning to buy the modules from ebay.
Thank you.

Yes, this project is very easy to build.

I only need to improve on the power supply circuit and make it more robust. I will upload the updates to the circuit by the end of January.
nbeched4 months ago
I wouldn't connect any LM7805 units in parallel, this is very bad.

You can get very inexpensive switching regulators that require no external components.
We're talking about $10-$15 for a 5V @ 3A regulator that is connected much the same as a 7805, but is a lot more reliable.

Awesome instructable otherwise.
I second this. If you have one of the LRs fail due to a high current load, the other 3 will likely fail immediately after. It's much better to use a single regulator, then chain several together in parallel, for many reasons.

You should be able to get one for WAY less than $10. Without much optimizing, I found some for ~$4 on Digikey:

If one hunted around, one could get them for even less. I've seen one to that spec for around $2 each, even without bulk discount.
you could just use an outboard transistor (aka current booster), using a darlington or 2n3055.
nbeched jproffer4 months ago
As I care too much about efficiency, I respectfully disagree :)

See using any linear regulator is wasteful of power. Adding an external transistor turns your existing linear regulator into a more powerful one (capable of more output current), but at the end of the day, it is still a linear regulator.

Linear regulator acts as a series "variable resistor" that makes sure the output voltage is regulated (to a certain extent). So if you have 5V x 2A =10W at the output (or a 10W load), you have a 12V x 2A =24W at the input. So you're wasting 14W, realistically car battery is at 14-ish volts, so you'd be wasting about 18W of power. In other words, you car "sees" the thing you connected to it as a 28W load while only 10W of that are being delivered to the actual load.

Switching regulators act as (AC-)transformers but for DC circuits.
So if you have the same 5V@2A load, the input current consumption will be 10W/14V=0.714A (or about 700mA).
That assumes 100% efficiency. Realistically over 90% efficiency is achievable, so if 10W is at the load, you'll have about 10W/0.9=11.1W on the input.
11.1W/14V=0.793A which is about 800mA.
So with a switching regulator, the higher the input voltage - the lower the input current at the same load conditions.

If you add a backup battery at the input, this will become very relevant on the battery life.
Of course, if you add one on the 5V side, you won't have to worry nearly as much about it, but... oh well, I probably said enough :)

Merry Christmas!

Get More Out of Instructables

Already have an Account?


PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!