Arduino Controlled Car Tracking System Based on SMS
Intro: Arduino Controlled Car Tracking System Based on SMS
Hi I made an Arduino Controlled Car Tracking System based on SMS for my father's car.
The used modules are;
Arduino nano V3.0
SkyLab GPS module
WaveCom GSM module
The SoftwareSerial Library , TinyGPS are used to communicate with modules.
When I called the device from registered phone numbers , it returns the lat , lon and the googlemap link in a sms =)
Source Code is :
<code>
#include <TimerOne.h>
#include <TinyGPS.h>
#include <SoftwareSerial.h>
TinyGPS gps;
SoftwareSerial gsmSerial(2, 3);
SoftwareSerial ss(5,6);
String inData = "";
boolean inputAvailable = false;
String ADMIN_PHONE_NUMBER_1 = "05558233343";
String ADMIN_PHONE_NUMBER_2 = "05323342543";
String ADMIN_PHONE_NUMBER_3 = "05396933985";
String ADMIN_PHONE_NUMBER_4 = "05373624959";
String recievedNumber = "";
String bora = "";
int callback_counter=0;
int indexofMsgStr = 0;
float flat, flon, fkmph;
unsigned long age;
char okunanKarakter = '*';
float flat_store = 0.0;
float flon_store = 0.0;
boolean gsmdinle = false;
void setup()
{
delay(30000);
Serial.begin(9600);
ss.begin(9600);
gsmSerial.begin(9600);
Timer1.initialize(8388480); //about 8.3 seconds
Timer1.attachInterrupt(callback);
delay(2000);
gsmSerial.listen();
//Serial.println("basla");
gsmSerial.println("AT+CLIP=1");
delay(1000);
gsmSerial.println("ATE=0");
delay(1000);
gsmSerial.listen();
}
void loop() // run over and over
{
while(gsmSerial.available())
{
inputAvailable = true;
okunanKarakter = (char) gsmSerial.read();
inData += okunanKarakter;
if(okunanKarakter == ','){
break;
}
}
if(inputAvailable)
{
inputAvailable=false;
processData();
inData="";
}
}
void printGPSDATA(){
gps.f_get_position(&flat, &flon, &age);
if( flat > 0.0 )
flat_store = flat;
if( flon > 0.0 )
flon_store = flon;
fkmph = gps.f_speed_kmph(); // speed in km/hr
}
void TAKEGPSDATA(){
//Serial.println("---->TAKEGPSDATA");
boolean gps_valid = false;
ss.listen();
delay(1000);
for(int i =0 ; i < 200 ; i++)
{
if(!gps_valid)
{
while (ss.available())
{
char c = ss.read();
if (gps.encode(c)) // Did a new valid sentence come in?
{
printGPSDATA();
gps_valid = true;
break;
}
}
delay(5);
}
}
gsmSerial.listen();
delay(1000);
//Serial.println("<----TAKEGPSDATA");
}
void processData(){
//Serial.println(inData);
if(IsRinging())
{ // telefon caliyor
//Serial.println("telefon caliyor");
indexofMsgStr = inData.indexOf("05");
recievedNumber = inData.substring(indexofMsgStr , indexofMsgStr+11);
//Serial.print("recieved number=");
//Serial.println(recievedNumber);
if(IsAdminNumber())
{
//Serial.println("admin ok!");
TAKEGPSDATA();
KoordinatBilgisiGonder();
}
}
}
void KoordinatBilgisiGonder(){
bora = "AT+CMGS=\"";
bora+= "+9";
bora+=recievedNumber;
bora+= "\"";
gsmSerial.println("AT+CMGF=1");
delay(2000);
gsmSerial.println(bora);
delay(1000);
gsmSerial.print("ENLEM =");
gsmSerial.println(flat_store,6);
gsmSerial.print("BOYLAM =");
gsmSerial.println(flon_store,6);
gsmSerial.print("HIZ =");
gsmSerial.print(fkmph);
gsmSerial.println(" km/saat");
gsmSerial.println("LINK =");
gsmSerial.print("http://maps.google.com/?ie=UTF8&hq=&ll=");
gsmSerial.print(flat_store,6);
gsmSerial.print(",");
gsmSerial.print(flon_store,6);
gsmSerial.print("&z=20");
gsmSerial.write(26);
}
int IsRinging()
{
if (inData.indexOf("CLIP:") >= 0 )
{
return 1;
}
else
{
return 0;
}
}
int IsAdminNumber()
{
if(ADMIN_PHONE_NUMBER_1 == recievedNumber)
{
return 1;
}
else if(ADMIN_PHONE_NUMBER_2 == recievedNumber)
{
return 1;
}
else if(ADMIN_PHONE_NUMBER_3 == recievedNumber)
{
return 1;
}
else if(ADMIN_PHONE_NUMBER_4 == recievedNumber)
{
return 1;
}
return 0;
}
void callback()
{
callback_counter++;
if(callback_counter >= 80)
{
//Serial.print("callback ok!");
callback_counter = 0;
TAKEGPSDATA();
}
}
</code>
The used modules are;
Arduino nano V3.0
SkyLab GPS module
WaveCom GSM module
The SoftwareSerial Library , TinyGPS are used to communicate with modules.
When I called the device from registered phone numbers , it returns the lat , lon and the googlemap link in a sms =)
Source Code is :
<code>
#include <TimerOne.h>
#include <TinyGPS.h>
#include <SoftwareSerial.h>
TinyGPS gps;
SoftwareSerial gsmSerial(2, 3);
SoftwareSerial ss(5,6);
String inData = "";
boolean inputAvailable = false;
String ADMIN_PHONE_NUMBER_1 = "05558233343";
String ADMIN_PHONE_NUMBER_2 = "05323342543";
String ADMIN_PHONE_NUMBER_3 = "05396933985";
String ADMIN_PHONE_NUMBER_4 = "05373624959";
String recievedNumber = "";
String bora = "";
int callback_counter=0;
int indexofMsgStr = 0;
float flat, flon, fkmph;
unsigned long age;
char okunanKarakter = '*';
float flat_store = 0.0;
float flon_store = 0.0;
boolean gsmdinle = false;
void setup()
{
delay(30000);
Serial.begin(9600);
ss.begin(9600);
gsmSerial.begin(9600);
Timer1.initialize(8388480); //about 8.3 seconds
Timer1.attachInterrupt(callback);
delay(2000);
gsmSerial.listen();
//Serial.println("basla");
gsmSerial.println("AT+CLIP=1");
delay(1000);
gsmSerial.println("ATE=0");
delay(1000);
gsmSerial.listen();
}
void loop() // run over and over
{
while(gsmSerial.available())
{
inputAvailable = true;
okunanKarakter = (char) gsmSerial.read();
inData += okunanKarakter;
if(okunanKarakter == ','){
break;
}
}
if(inputAvailable)
{
inputAvailable=false;
processData();
inData="";
}
}
void printGPSDATA(){
gps.f_get_position(&flat, &flon, &age);
if( flat > 0.0 )
flat_store = flat;
if( flon > 0.0 )
flon_store = flon;
fkmph = gps.f_speed_kmph(); // speed in km/hr
}
void TAKEGPSDATA(){
//Serial.println("---->TAKEGPSDATA");
boolean gps_valid = false;
ss.listen();
delay(1000);
for(int i =0 ; i < 200 ; i++)
{
if(!gps_valid)
{
while (ss.available())
{
char c = ss.read();
if (gps.encode(c)) // Did a new valid sentence come in?
{
printGPSDATA();
gps_valid = true;
break;
}
}
delay(5);
}
}
gsmSerial.listen();
delay(1000);
//Serial.println("<----TAKEGPSDATA");
}
void processData(){
//Serial.println(inData);
if(IsRinging())
{ // telefon caliyor
//Serial.println("telefon caliyor");
indexofMsgStr = inData.indexOf("05");
recievedNumber = inData.substring(indexofMsgStr , indexofMsgStr+11);
//Serial.print("recieved number=");
//Serial.println(recievedNumber);
if(IsAdminNumber())
{
//Serial.println("admin ok!");
TAKEGPSDATA();
KoordinatBilgisiGonder();
}
}
}
void KoordinatBilgisiGonder(){
bora = "AT+CMGS=\"";
bora+= "+9";
bora+=recievedNumber;
bora+= "\"";
gsmSerial.println("AT+CMGF=1");
delay(2000);
gsmSerial.println(bora);
delay(1000);
gsmSerial.print("ENLEM =");
gsmSerial.println(flat_store,6);
gsmSerial.print("BOYLAM =");
gsmSerial.println(flon_store,6);
gsmSerial.print("HIZ =");
gsmSerial.print(fkmph);
gsmSerial.println(" km/saat");
gsmSerial.println("LINK =");
gsmSerial.print("http://maps.google.com/?ie=UTF8&hq=&ll=");
gsmSerial.print(flat_store,6);
gsmSerial.print(",");
gsmSerial.print(flon_store,6);
gsmSerial.print("&z=20");
gsmSerial.write(26);
}
int IsRinging()
{
if (inData.indexOf("CLIP:") >= 0 )
{
return 1;
}
else
{
return 0;
}
}
int IsAdminNumber()
{
if(ADMIN_PHONE_NUMBER_1 == recievedNumber)
{
return 1;
}
else if(ADMIN_PHONE_NUMBER_2 == recievedNumber)
{
return 1;
}
else if(ADMIN_PHONE_NUMBER_3 == recievedNumber)
{
return 1;
}
else if(ADMIN_PHONE_NUMBER_4 == recievedNumber)
{
return 1;
}
return 0;
}
void callback()
{
callback_counter++;
if(callback_counter >= 80)
{
//Serial.print("callback ok!");
callback_counter = 0;
TAKEGPSDATA();
}
}
</code>
25 Comments
Zeeshan AhmedV 6 years ago
Can U please provide me interfacing of this.
JohnrickW 8 years ago
hello, is this code compatible with arduino uno?
SyaheraS 8 years ago
Hi, can i replace the GSM modem with SIM800L?
HazreenA 8 years ago
InsyaAllah boleh..huhuhu
xoxo
AzreenA1 8 years ago
svampaxel 8 years ago
hello! we have made a gps tracking device but we are using a Sim800l gsm. Do you know what code we should use
thanks beforehand
zack247 12 years ago
boraciner 12 years ago
GPS Module 35 USD
Microcontroller almost 25 USD
The other materials (cables, RS232 to TTL converter etc.. ) 20 USD
totally 160 -180 USD
sergiotux 11 years ago
Please, I have the GPS and GPRS skylab SKM53 Hilo - Sagem and I want to do anything similar.
Could you send me the code for the arduino test?
Thanks
Sérgio
sergiolinux@gmail.com
boraciner 11 years ago
https://github.com/boraciner/gps-gsm-boraciner/blob/master/gps-gsm-boraciner.ino
patrickaine1 8 years ago
Send me circuit diagrams to patrickaine1@gmail.com
patrickaine1 8 years ago
I would love to make the same system. can u help me with the connection/circuit diagrams
MichaelP58 8 years ago
sir good day, i can you if you have a code for arduino 238 codes just to receive long and lot then plot it to the web page? heres my e mail sir artusalbi@gmail.com, thank you ver much..
Aditya agarwal 8 years ago
wow this is the same which I was looking from long
I am a newbie but I am very much fascinated by the this or projects from arduino board.
Could anybody can help me understanding & setting up the project step by step.
I would be very much thankful.Please help me
eggspanther 11 years ago
boraciner 10 years ago
https://www.instructables.com/id/Version-20-Arduino-Controlled-Car-Tracking-System/
Samarei 9 years ago
What's the difference between the version 2.0 and this one?
zshwany 9 years ago
good job...
masternillo 9 years ago
HI,
I'm working on similar project, "On demand human location system", but I can't utilise the SoftwareSerial on my device
http://www.dfrobot.com/index.php?route=product/product&product_id=673
can you show me how I can utilize the above code w/o softwareserial?
Fabrizio Araujo 10 years ago
Hey
Im trying to make a Cheap Car tracker
so I want to make one with the cost between $25 - $35
so ive found this arduino 3$ arduino and the gprs shield is the only problem so ive found this guy who make mini shield but I have no idea how to make one with a gprs module
and also ive found this shield for 16.20€
im very new bie so ive bought this for u
I think that u aew interested in made a very cheap car track too with less than 180 USD!
Gimme ur opnion! Im from Brazil and we have a lot of prob with car thiefs