Vehicle
Tracking System Using Gps Modem:
This GPS based vehicle tracking system based on the
arduino using global positioning system (GPS) and global system for mobile
communication (GSM).
Project
Description:
This is a two-way GPS communication system wherein
communication is done in both ways with GPS satellites. This project uses only
one GPS device and two-way communication is achieved using a GSM modem. GSM
modem with a SIM card used here implements the same communication technique as
in a regular cellphone.The system can be mounted in your vehicle in a hidden or
suitable compartment. After this installation, you can easily track your
vehicle using your mobile phone by dialling the mobile number of the SIM attached
to the GSM modem. When you want then You will get the location of the vehicle
in the form of an SMS on your mobile phone.
Component
Used:
a)
GPS Module:
GPS modules typically put out a series of standard
strings of information, under something called the National Marine Electronics
Association (NMEA) protocol.
b)
GSM MODULE (SIM-900):
This is a GSM/GPRS-compatible Quad-band cell phone,
which works on a frequency of 850/900/1800/1900MHz and which can be used not
only to access the Internet, but also for oral communication (provided that it
is connected to a microphone and a small loud speaker) and for SMSs.
Externally, it looks like a big package (0.94 inches x 0.94 inches x 0.12
inches) with L-shaped contacts on four sides so that they can be soldered both
on the side and at the bottom. Internally, the module is managed by an
AMR926EJ-S processor, which controls phone communication, data communication
(through an integrated TCP/IP stack), and (through an UART and a TTL serial
interface) the communication with the circuit interfaced with the cell phone
itself. The processor is also in charge of a SIM card (3 or 1,8 V) which needs
to be attached to the outer wall of the module. In addition, the GSM900 device
integrates an analog interface, an A/D converter, an RTC, an SPI bus, an I²C,
and a PWM module. The radio section is GSM phase 2/2+ compatible and is either
class 4 (2 W) at 850/ 900 MHz or class 1 (1 W) at 1800/1900 MHz. The TTL serial
interface is in charge not only of communicating all the data relative to the
SMS already received and those that come in during TCP/IP sessions in GPRS (the
data-rate is determined by GPRS class 10: max. 85,6 kbps), but also of
receiving the circuit commands (in our case, coming from the PIC governing the
remote control) that can be either AT standard or AT-enhanced SIMCom type. The
module is supplied with continuous energy (between 3.4 and 4.5 V) and absorbs a
maximum of 0.8 A during transmission. Figure is given below.
c)
ARDUINO UNO:
Arduino/Genuino Uno is a microcontroller board based on
the ATmega328P (datasheet). It has 14 digital input/output pins (of which 6 can
be used as PWM outputs), 6 analog inputs, a 16 MHz quartz crystal, a USB
connection, a power jack, an ICSP header and a reset button. Figure is given below.
Applications
of Project
1) You can locate your stolen vehicle easily using your
mobile (gsm).
2) It can be used for trucks carrying valuable goods,
to keep track of the status of delivery and location of the truck at all times.
3) You can easily install it in any vehicle such as
cars, boats and motorbikes. An SMS will inform your vehicle position.
Code
of Project:
#include<LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
#include <SoftwareSerial.h>
SoftwareSerial gps(10,11); // RX, TX
//String str="";
char str[70];
String gpsString="";
char *test="$GPGGA";
String latitude="No Range ";
String longitude="No Range ";
int temp=0,i;
boolean gps_status=0;
void setup()
{
lcd.begin(16,2);
Serial.begin(9600);
gps.begin(9600);
lcd.print("Vehicle Tracking");
lcd.setCursor(0,1);
lcd.print("System using gps");
delay(2000);
gsm_init();
lcd.clear();
Serial.println("AT+CNMI=2,2,0,0,0");
lcd.print("GPS Initializing");
lcd.setCursor(0,1);
lcd.print("GPS not in Range");
get_gps();
delay(2000);
lcd.clear();
lcd.print("GPS Range Found");
lcd.setCursor(0,1);
lcd.print("GPS is Ready");
delay(2000);
lcd.clear();
lcd.print("System Ready");
temp=0;
}
void loop()
{
serialEvent();
if(temp)
{
get_gps();
tracking();
}
}
void serialEvent()
{
while(Serial.available())
{
if(Serial.find("Track Vehicle"))
{
temp=1;
break;
}
else
temp=0;
}
}
void gpsEvent()
{
gpsString="";
while(1)
{
while (gps.available()>0) //checking serial data from GPS
{
char inChar =
(char)gps.read();
gpsString+=
inChar; //store data
from GPS into gpsString
i++;
if (i <
7)
{
if(gpsString[i-1]
!= test[i-1]) //checking for
$GPGGA sentence
{
i=0;
gpsString="";
}
}
if(inChar=='\r')
{
if(i>65)
{
gps_status=1;
break;
}
else
{
i=0;
}
}
}
if(gps_status)
break;
}
}
void gsm_init()
{
lcd.clear();
lcd.print("Finding Module..");
boolean
at_flag=1;
while(at_flag)
{
Serial.println("AT");
while(Serial.available()>0)
{
if(Serial.find("OK"))
at_flag=0;
}
delay(1000);
}
lcd.clear();
lcd.print("Module Connected..");
delay(1000);
lcd.clear();
lcd.print("Disabling ECHO");
boolean
echo_flag=1;
while(echo_flag)
{
Serial.println("ATE0");
while(Serial.available()>0)
{
if(Serial.find("OK"))
echo_flag=0;
}
delay(1000);
}
lcd.clear();
lcd.print("Echo OFF");
delay(1000);
lcd.clear();
lcd.print("Finding Network..");
boolean
net_flag=1;
while(net_flag)
{
Serial.println("AT+CPIN?");
while(Serial.available()>0)
{
if(Serial.find("+CPIN: READY"))
net_flag=0;
}
delay(1000);
}
lcd.clear();
lcd.print("Network Found..");
delay(1000);
lcd.clear();
}
void get_gps()
{
gps_status=0;
int x=0;
while(gps_status==0)
{
gpsEvent();
int
str_lenth=i;
latitude="";
longitude="";
int comma=0;
while(x<str_lenth)
{
if(gpsString[x]==',')
comma++;
if(comma==2)
latitude+=gpsString[x+1];
else
if(comma==4)
longitude+=gpsString[x+1];
x++;
}
int
l1=latitude.length();
latitude[l1-1]=' ';
l1=longitude.length();
longitude[l1-1]=' ';
lcd.clear();
lcd.print("Lat:");
lcd.print(latitude);
lcd.setCursor(0,1);
lcd.print("Long:");
lcd.print(longitude);
i=0;x=0;
str_lenth=0;
delay(2000);
}
}
void init_sms()
{
Serial.println("AT+CMGF=1");
delay(400);
Serial.println("AT+CMGS=\"+9100000000\""); // you have enter your mobile no.
delay(400);
}
void send_data(String message)
{
Serial.println(message);
delay(200);
}
void send_sms()
{
Serial.write(26);
}
void lcd_status()
{
lcd.clear();
lcd.print("Message Sent");
delay(2000);
lcd.clear();
lcd.print("System Ready");
return;
}
void tracking()
{
init_sms();
send_data("Vehicle Tracking Alert msg:");
send_data("Your Vehicle Current Location:");
Serial.print("Latitude:");
send_data(latitude);
Serial.print("Longitude:");
send_data(longitude);
send_data("Thank you");
send_sms();
delay(2000);
lcd_status();
}
0 comments:
Post a Comment
if you have any doubt please let me know