Renfley Industries

DIY T.A.B "Technologicaly Advanced Bordom"


Discreet Tracking Device

Feel like spying on your wife, kids, suspected terrorist, politians or wanna just want to protect your car? Well, with a bit the following tid bits of information you can easisly build your very own discreet tracking device.

Here is a quick list of the part you will need to complete your tracking device.

  1. Parallax GPS Recevier PAM-7Q
  2. Arduino Mega 2560
  3. Nokia 5110 Grpahic LCD (Optional)
  4. 6 x AA Battery Case with DC 2.1 Power Jack
  5. 8"x3"x3" Project Box

1. Parallax GPS Receiver PAM-7Q (49.99$ USD)

This GPS Module is one of my favorites, easy to integrate into any GPS Project. This Module comes ready to go with solderless pins for prototyping with an onboard voltage regulator thats ready for 3.3 and 5v applications..

More information on this module can be found here

2. Arduino Mega 2560 (45$ USD)

The 2560 is a great platform for prototyping. This device can be found here

3. Nokia 5110 (Future Upgrade)

This will be an upgrade to the project, where we will intergrate an lcd screen to display the Coords.

4 & 5. Battery and Enclosure

This part of the project is completly up to the designer since these come in many shapes and Sizes.


GPS - Strings

Since this project is fairly simple were going to stick with the most basic string available.

For More information on the available Strings please refer the original docs found here

The Following is Example Data.

$GPGGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx*hh

Lets break down the string to better understand the data returned.

  1. UTC of Position
  2. Latitude
  3. N or S
  4. Longitude
  5. E or W
  6. GPS quality indicator (0=invalid; 1=GPS fix; 2=Diff. GPS fix)
  7. Number of satellites in use [not those in view]
  8. Horizontal dilution of position
  9. Antenna altitude above/below mean sea level (geoid)
  10. Meters (Antenna height unit)
  11. Geoidal separation (Diff. between WGS-84 earth ellipsoid and mean sea level. -=geoid is below WGS-84 ellipsoid)
  12. Meters (Units of geoidal separation)
  13. Age in seconds since last update from diff. reference station
  14. Diff. reference station ID#
  15. Checksum

Each of these are going to play a role in helping us track our device.

Getting the Data a Serial Monitor

/*
 Example code for connecting a Parallax GPS module to the Arduino
 Orignal Author: Igor Gonzalez Martin. 05-04-2007
 Edited By Andre St-Jacques 06/09/2015
 Listen for the $GPRMC string and extract the GPS location data from this.
 Display the result in the Arduino's serial monitor.
 This example was re-written by Andre St-Jacques for use with the Arduino Mega 2560
 */ 
 
 #include < string.h >
 #include < ctype.h >
 
 #include < 5110.h > // Custom import for Nokia LCD 5110
 #include < gsm.h >  // INIT the GSM Module to report back every 30 seconds.
 
 
 int byteGPS=-1;
 char linea[300] = "";
 char comandoGPR[7] = "$GPRMC";
 int cont=0;
 int bien=0;
 int conta=0;
 int indices[13];
 void setup() {
   pinMode(ledPin, OUTPUT);       // Initialize LED pin
   pinMode(rxPin, INPUT);
   pinMode(txPin, OUTPUT);
   Serial.begin(4800);
   for (int i=0;i<300;i++){       // Initialize a buffer for received data
     linea[i]=' ';
   }   
 }
 void loop() {
   digitalWrite(ledPin, HIGH);
   byteGPS=Serial.read();         // Read a byte of the serial port
   if (byteGPS == -1) {           // See if the port is empty yet
     delay(100); 
   } else {
     // note: there is a potential buffer overflow here!
     linea[conta]=byteGPS;        // If there is serial port data, it is put in the buffer
     conta++;                      
     Serial.print(byteGPS, BYTE); 
     if (byteGPS==13){            // If the received byte is = to 13, end of transmission
       // note: the actual end of transmission is  (i.e. 0x13 0x10)
       digitalWrite(ledPin, LOW); 
       cont=0;
       bien=0;
       // The following for loop starts at 1, because this code is clowny and the first byte is the  (0x10) from the previous transmission.
       for (int i=1;i<7;i++){     // Verifies if the received command starts with $GPR
         if (linea[i]==comandoGPR[i-1]){
           bien++;
         }
       }
       if(bien==6){               // If yes, continue and process the data
         for (int i=0;i<300;i++){
           if (linea[i]==','){    // check for the position of the  "," separator
             // note: again, there is a potential buffer overflow here!
             indices[cont]=i;
             cont++;
           }
           if (linea[i]=='*'){    // ... and the "*"
             indices[12]=i;
             cont++;
           }
         }
         Serial.println("");      // ... and write to the serial port
         Serial.println("");
         Serial.println("---------------");
         for (int i=0;i<12;i++){
           switch(i){
             case 0 :Serial.print("Time in UTC (HhMmSs): ");break;
             case 1 :Serial.print("Status (A=OK,V=KO): ");break;
             case 2 :Serial.print("Latitude: ");break;
             case 3 :Serial.print("Direction (N/S): ");break;
             case 4 :Serial.print("Longitude: ");break;
             case 5 :Serial.print("Direction (E/W): ");break;
             case 6 :Serial.print("Velocity in knots: ");break;
             case 7 :Serial.print("Heading in degrees: ");break;
             case 8 :Serial.print("Date UTC (DdMmAa): ");break;
             case 9 :Serial.print("Magnetic degrees: ");break;
             case 10 :Serial.print("(E/W): ");break;
             case 11 :Serial.print("Mode: ");break;
             case 12 :Serial.print("Checksum: ");break;
           }
           for (int j=indices[i];j<(indices[i+1]-1);j++){
             Serial.print(linea[j+1]); 
           }
           Serial.println("");
         }
         Serial.println("---------------");
       }
       conta=0;                    // Reset the buffer
       for (int i=0;i<300;i++){    //  
         linea[i]=' ';             
       }                 
     }
   }
 }

CATEGORY
Arduino Flight Sim PiTop Arduino