Wednesday 31 January 2018

Simple car tracker with ATmega328a

Simple car tracker with ATmega328a


Components needed:
1. ATmega328
2. Sim300 gsm module
3.  GY-GPS6MV2 gps module
4. Android smartphone
5. lcd 16x2
6. back_up battery





Here in this system we are using the GSM module for sending the coordinates of vehicle on mobile phone via message. GPS is sends the coordinates continuously in form of string. After reading this string using Arduino extract the required data from string and then sends it to mobile phone using GSM module via SMS. This information is called latitude and longitude. GPS used 3 or 4 satellite for tracking the location of any vehicle.



Circuit diagram


 Car tracker controller with Atmega328

Gsm testing


Gps module testing



 Command testing



 // here is the code...........
//......................................................................
#include<LiquidCrystal.h>
LiquidCrystal lcd(8,9,10,11,12,13);

#include <SoftwareSerial.h>
SoftwareSerial gps(7,6); // RX, TX

char c=0;

//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      ");
  delay(4000);
  gsm_init();
  lcd.clear();
  Serial.println("AT+CMGF=1");
  lcd.print("Pls Wait......");
  lcd.setCursor(0,1);
  lcd.print("SW TO SMS MODE");
  delay(2500);
  lcd.clear();
  lcd.print("GPS Initializing");
  lcd.setCursor(0,1);
  lcd.print("  No GPS Range  ");
  get_gps();
  delay(2500);
  lcd.clear();
  lcd.print("GPS Range Found");
  lcd.setCursor(0,1);
  lcd.print("GPS is Ready");
  delay(2500);
  lcd.clear();
  lcd.print("System Ready");
    lcd.setCursor(0,1);
  lcd.print("Vehicle secured");
Serial.println("AT+CMGD=1"); // DELETE READ1
  delay(3000);
   digitalWrite(2, LOW);   // turn the LED on (HIGH is the voltage level)
  delay(10);              // wait for a second
  digitalWrite(3, LOW);
  delay(10); 
}


void loop()
{
  lcd.setCursor(0,1);
  lcd.print("waiting 4 command");
  Serial.println("AT+CMGR=1");
  while (Serial.available()) {
    if (Serial.find("TRACK VEHICLE")) {
    digitalWrite(2, HIGH);
    get_gps();
    Serial.println("AT+CMGD=1"); // DELETE READ1
    tracking();
    }
   
    if (Serial.find("OFF ALARM")) {
  digitalWrite(2, LOW);   // turn the LED on (HIGH is the voltage level)
  delay(10);             
  digitalWrite(3, LOW);
  delay(10); 
    Serial.println("AT+CMGD=1"); // DELETE READ1
    tracking();
    }
  }

 

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)        //extract latitude from string
      latitude+=gpsString[x+1];    
      else if(comma==4)        //extract longitude from string
      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.write("AT+CMGF=1\r\n");
  delay(1000);
  Serial.write("AT+CMGS=\"+2347037557572\"\r\n");   // use your 10 digit cell no. here
  delay(1000);
}

void send_data(String message)
{
  Serial.println(message);
  delay(200);
}

void send_sms()
{
  Serial.write((char)26);
}

void lcd_status()
{
  lcd.clear();
  lcd.print("Message Sent");
  delay(2000);
  lcd.clear();
  lcd.print("System Ready");
  return;
}

void tracking()
{
  digitalWrite(3, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(10);              // wait for a second
  digitalWrite(2, LOW);
    init_sms();
    send_data("Vehicle Tracking Alert:");
    send_data("Your Vehicle Current Location is:");
    Serial.print("Latitude:");
    send_data(latitude);
    Serial.print("Longitude:");
    send_data(longitude);
    send_data("Please take some action soon..\nThankyou");
    send_sms();
    delay(2000);
    lcd_status();
     Serial.println("AT+CMGD=1"); // DELETE READ1
}
// ending

 If you have any question, feel free to comment on this post.... acecct.18f4550@gmail.com OR whatsapp me on :  +2348123206299
 
 
Watch Youtube Video: 


Featured post

PURE SINE WAVE INVERTER WITH LED AND LCD

The inverter PCB is easy to assemble by following the label of the components to be inserted. The choice of the voltage to be used to power ...