رباتیک و هوافضا

ردیاب خودرو با استفاده از آردوینو و GPS و GSM

ردیاب خورد رو با استفاده از آردوینو و GPS و GSM

به نام خدا

پروژه ی ردیاب خورد رو با استفاده از آردوینو و GPS و GSM

 

ردیاب خودرو

در این پروژه ما قصد داریم تا با استفاده از جی پی اس و جی اس ام وسیله ی نقلیه ای را ردیابی کنیم. از این سیستم نیز میتوان به عنوان سیستم هشدار تصادف ، ردیابی سرباز و بسیاری موارد دیگر استفاده کرد.

 

در این پروژه مختصات خودروی مورد نظر با طول عرض جغرافیایی (مختصات) بررسی می شود. مکان دقیق وسیله ی نقلیه ی مورد نظر به طور پیوسته توسط آردوینو گذارش می شود. این سیستم برای کاربرد های بیرونی و خارج از محیط بسته بسیار کار آمد است.

 قطعات مورد نیاز برای پروژه ی ردیاب خورد رو با استفاده از آردوینو و GPS و GSM:

آردوینو

ماژول جی اس ام (SIM900A)

ماژول جی پی اس (SKG13BL )

ال سی دی

منبع تغذیه

سیم برد بورد

پتانسیومتر ۱۰ کیلو اهمی

ماژول جی پی اس و طرز کار آن:

از این ماژول برای پیدا کردن مختصات جغرافیایی زمین استفاده می شود. این ماژول مهم ترین قسمت سیستم ما می باشد که به طور پیوسته داده های زمان و مکان را از ماهواره می گیرد و آن را به آردوینو می دهد. آردوینو نیز این داده ها را با ماژول جی اس ام از طریق پیامک برای کاربر ارسال می کند.

 

ردیاب خودرو

ماژول جی پی اس داده ها را به فرمت NMEA ارسال می کند. در زیر یک تصویر از داده های خروجی ماژول را مشاهده می کنید. داده ای به فرمت NMEA دارای چندین جمله است که ما به دقیقا به یک قسمت از آن برای استخراج تاریخ و زمان نیاز داریم. این قسمت با $GPRMC شروع می شود که شامل مختصات ، زمان و دیگر اطلاعات ارزشمند است. این قسمت دارای ۷۰ کاراکتر است.

بیشتر بخوانید...  آموزش پروژه محور آردوینو – جلسه سیزدهم موتور DC

ما برای استخراج داده های زمان و تاریخ می توانیم تعداد کاما ها را در رشته ی $GPGGA  بشماریم. عرض جغرافیایی پس دو کاما و طول جغرافیایی پس از ۴ کاما قابل مشاهده است.  با کمک آردوینو و برنامه نویسی این رشته پیدا  و به صورت آرایه ذخیره می شود.

ردیاب خودرو

در زیر یک رشته ی $GPGGA با مخصات قابل مشاهده است:

$GPGGA,104534.000,7791.0381,N,06727.4434,E,1,08,0.9,510.4,M,43.9,M,,*47

$GPGGA,HHMMSS.SSS,latitude,N,longitude,E,FQ,NOS,HDP,altitude,M,height,M,,checksum data

Identifier

Description

$GPGGA

Global Positioning system fix data

HHMMSS.SSS

Time in hour minute seconds and milliseconds format.

Latitude

Latitude (Coordinate)

N

Direction N=North, S=South

Longitude

Longitude(Coordinate)

E

Direction E= East, W=West

FQ

Fix Quality Data

NOS

No. of Satellites being Used

HPD

Horizontal Dilution of Precision

Altitude

Altitude from sea level

M

Meter

Height

Height

Checksum

Checksum Data

شماتیک مدار:

همانطور که در شکل زیر می بینید اتصالات این پروژه ساده هستند. پین TX ماژول جی پی اس به طور مستقیم به پین ۱۰ دیجیتال آردوینو متصل است. با استفاده از کتاب خانه ی Software Serial Library  ، ما توانایی ایجاد ارتباط سریال پین های ۱۰ ، ۱۱ ، Rx و Tx را ایجاد کردیم. همچنین تغذیه ی ماژول ها را به تغذیه ی ۱۲ ولتی متصل کردیم.

 

ردیاب خودرو

با توجه به شکل پین های Rx  و Tx ماژول جی اس ام به طور مستیم به پین های ۰ و ۱ آردوینو متصل است. ال سی دی نیز مطابق شکل به آردوینو و ماژول ها متصل است و از یک پتانسیومتر برای تنظیم نور ال سی دی استفاده می شود. از ماژول جی اس ام برای ارسال داده های جی پی اس به فرد از طریق پیامک استفاده می شود.

 

 

ردیاب خودرو

 

بیشتر بخوانید...  تولید تن صدا با ضربه زدن به انگشتان دست با استفاده از آردوینو

 

 

 

 

دانلود کد پروژه ردیاب خودرو:

دانلود فایل
#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      ");
  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("  No GPS 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)        //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.println("AT+CMGF=1");
  delay(400);
  Serial.println("AT+CMGS=\"+91**********\"");   // use your 10 digit cell no. here
  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:");
    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();
}

 

دیدگاه‌ها (0)

*
*