GPS Tracker Nasıl Yapılır

Uzun bir aradan sonra herkese tekrar merhaba. Bu gün NEO6M GPS modülü hakkında bir kaç kelam edeceğim. Aletimiz iki parçadan oluşuyor. Birinci parçası porselen antendir. Bu parça küçük bir transmisyon hattı ile NEO6M GPS entegresinin bulunduğu diğer parçaya bağlanır. Asıl işi yapan, NEO6M entegresidir.

Modülümüz uydudan aldığı bilgileri RS232 protokolü ile NMEA cümlecikleri olarak verir.  NMEA da bir üst protokoldür.  NMEA nın detayından bahsetmeden önce GPS den kısaca bahsetmek istiyorum. GPS(Global Posioning System), küresel konumlanma sistemi olarak geçer. Toplam 24 uydu ile hizmet vermektedir.  En az üç uydu ile bağlantı sağlanılarak uydular arasındaki mesafe ölçülür ve dünyadaki konum tespit edilir.  Dünyadaki konum, Enlem ve Boylam bilgisi olarak gönderilir.  Şimdi hemen enlem ve boylam bilgisine de değinelim.

Enlem ve boylamın matematikteki koordinat sisteminden pek farkı yok. Sadece ifade ediliş biçimleri farklı. Enlem ve boylam, sırasıyla “Derece”.”Dakika”,”Yer Belirteci” şeklinde verilir.  Mesela 33 Derece 20.99 Dakika/Kuzey Enlemi ve ya 33 Derece 20.99 Dakika/Batı boylamı gibi… Enlem ve boylam hakkında daha detaylı bilgi için şu sayfayı inceleyebilirsiniz;  http://uyduhaberlesme.com/enlem-boylam-nedir/

 

 

Şimdi gelelim NMEA cümleciklerine. Modüle enerji verildikten bir kaç dakika sonra üzerindeki yeşil led yanıp sönmeye ve RS232 protokolünden NMEA cümlecikleri göndermeye başlar. Bu süre modülün uydularla bağlantı kurabilmesi için gereklidir.   Eğer Arduino kullanıyorsanız modülün “TX” pinini arduinonun “RX” pinine VCC bacağını 5V’a ve GND bacağını Arduinonun GND bacağına bağlayın. Şöyle küçük bir program yazarak Arduinonun RS232 terminalinden NMEA cümleciklerini görebilirsiniz.

kodlama;


char gelen;
void setup()
{
Serial.begin(9600);
}
void loop()
{
if(Serial.available())
{
gelen=Serial.read();
Serial.print(gelen);
}
}

Gelen NMEA cümlecikleri şu şekildedir;

$GPGGA,102751.000,5621.6802,N,05630.3371,W,1,8,1.03,61.7,M,55.3,M,,*75
$GPGSA,A,3,10,07,05,02,29,04,08,13,,,,,1.72,1.03,1.38*0A
$GPGSV,3,1,11,10,63,137,17,07,61,098,15,05,59,290,20,08,54,157,30*70
$GPGSV,3,2,11,02,39,223,16,13,28,070,17,26,23,252,,04,14,186,15*77
$GPGSV,3,3,11,29,09,301,24,16,09,020,,36,,,*76
$GPRMC,102251.000,A,2321.6802,N,4630.3371,W,0.03,071015,,,A*75

Burada gördüğünüz üzere her cümlecik “$” işareti ile başlar ve GPGGA, GPGSA, GPGSV… gibi başlıklarla devam eder. Her bir başlık altında bazı seri bilgiler verilmiştir. Tüm başlıklar altında konum bilgileri, saat ve tarih bilgileri, farklı cihazlar için farklı şekillerde verilmiştir. Ben GPRMC başlığına bakıyorum ve gerekli bilgileri oradan alıyorum.

Her farklı bilgi “,” ile birbirinden ayrılmıştır. GPRMC başlığı altında sırasıyla saat bilgisi, uydu bağlantı bilgisi, enlem bilgisi, enlem konum belirteci, boylam bilgisi, boylam konum belirteci, hız ve saat bilgileri verilmiştir.

Yani ” $GPRMC,102251.000,A,2321.6802,N,04630.3371,W,0.03,071015,,,A*75″ cümlesini anlamlı bir şekilde yazarsak;

Saat: 09:27:51.000

Uydu Bağlantı Durumu: A (Bağlı)

Enlem: 53 Derece 21.6802 Dakika

Enlem Konum Belirteci: N / North (Kuzey)

Boylam: 46 Derece 30.33 Dakika

Boylam Konum Belirteci: W / West Batı

Gelen NMEA cümleciklerini programsal olarak ayıklayıp içerisinden bu bilgileri almanız gerekiyor. Şöyle basit bir program işinizi görecektir.;

char gelen[100];
int gelenint[10];
int i=0;
void setup(){
Serial.begin(9600);
pinMode(7, INPUT);
}
void loop(){
if (Serial.available()) {
gelen[0]=Serial.read();
if(gelen[0]=='$')
{
delay(5);
gelen[1]=Serial.read();
delay(1);
gelen[2]=Serial.read();
delay(1);
gelen[3]=Serial.read();
delay(1);
gelen[4]=Serial.read();
delay(1);
gelen[5]=Serial.read();
if(gelen[1]=='G')
{
if(gelen[2]=='P')
{
if(gelen[3]=='R')
{
if(gelen[4]=='M')
{
if(gelen[5]=='C')
{
delay(5);
gelen[6]=Serial.read(); //Virgül
delay(1);
gelen[7]=Serial.read(); // Saat
delay(1);
gelen[8]=Serial.read(); // Saat
delay(1);
gelen[9]=Serial.read(); // Saat
delay(1);
gelen[10]=Serial.read(); // Saat
delay(1);
gelen[11]=Serial.read(); // Saat
delay(1);
gelen[12]=Serial.read(); // Saat
delay(1);
gelen[13]=Serial.read(); // Saat
delay(1);
gelen[14]=Serial.read(); // Saat
delay(1);
gelen[15]=Serial.read(); // Saat
delay(1);
gelen[16]=Serial.read(); // Virgül
delay(1);
gelen[17]=Serial.read(); // Bağlanma Bilgisi
delay(1);
gelen[18]=Serial.read(); // Virgül
delay(1);
gelen[19]=Serial.read(); //Enlem
delay(1);
gelen[20]=Serial.read(); //Enlem
delay(1);
gelen[21]=Serial.read(); //Enlem
delay(1);
gelen[22]=Serial.read(); //Enlem
delay(1);
gelen[23]=Serial.read(); //Enlem
delay(1);
gelen[24]=Serial.read(); //Enlem
delay(1);
gelen[25]=Serial.read(); //Enlem
delay(1);
gelen[26]=Serial.read(); //Enlem
delay(1);
gelen[27]=Serial.read(); //Enlem
delay(1);
gelen[28]=Serial.read(); //Enlem
delay(1);
gelen[29]=Serial.read(); //Virgül
delay(1);
gelen[30]=Serial.read(); //indikatör South/North
delay(1);
gelen[31]=Serial.read(); //virgül
delay(1);
gelen[32]=Serial.read(); //boylam
delay(1);
gelen[33]=Serial.read(); //boylam
delay(1);
gelen[34]=Serial.read(); //boylam
delay(1);
gelen[35]=Serial.read(); //boylam
delay(1);
gelen[36]=Serial.read(); //boylam
delay(1);
gelen[37]=Serial.read(); //boylam
delay(1);
gelen[38]=Serial.read(); //boylam
delay(1);
gelen[39]=Serial.read(); //boylam
delay(1);
gelen[40]=Serial.read(); //boylam
delay(1);
gelen[41]=Serial.read(); //boylam
delay(1);
gelen[42]=Serial.read(); //virgül
delay(1);
gelen[43]=Serial.read(); //idikatör West/East
delay(1);
gelen[43]=Serial.read(); //virgül
delay(1);
gelen[44]=Serial.read(); //hız
delay(1);
gelen[45]=Serial.read(); //hız
delay(1);
gelen[46]=Serial.read(); //hız
delay(1);
gelen[47]=Serial.read(); //hız
delay(1);
gelen[48]=Serial.read(); //hız
delay(1);
gelen[49]=Serial.read(); //hız
delay(1);
gelen[50]=Serial.read(); //hız
delay(1);
gelen[51]=Serial.read(); //hız
delay(1);
gelen[52]=Serial.read(); //hız
delay(1);
gelen[53]=Serial.read(); //hız
delay(1);
gelen[54]=Serial.read(); //virgül
delay(1);
gelen[55]=Serial.read(); //tarih
delay(1);
gelen[56]=Serial.read(); //tarih
delay(1);
gelen[57]=Serial.read(); //tarih
delay(1);
gelen[58]=Serial.read(); //tarih
delay(1);
gelen[59]=Serial.read(); //tarih
delay(1);
gelen[60]=Serial.read(); //tarih
delay(1);
gelen[61]=Serial.read(); //tarih
delay(1);
gelen[62]=Serial.read(); //tarih
delay(1);
gelen[63]=Serial.read(); //tarih
delay(1);
gelen[64]=Serial.read(); //tarih
delay(1);
gelen[65]=Serial.read(); //tarih
delay(1);
gelen[66]=Serial.read(); //tarih
delay(1);
gelen[67]=Serial.read(); //tarih
delay(1);
gelen[68]=Serial.read(); //tarih
delay(1);
gelen[69]=Serial.read(); //tarih
Serial.print("Global saat:");
Serial.print(gelen[7]);
Serial.print(gelen[8]);
Serial.print(gelen[9]);
Serial.print(gelen[10]);
Serial.print(gelen[11]);
Serial.print(gelen[12]);
Serial.print(gelen[13]);
Serial.print(gelen[14]);
Serial.println(gelen[15]);
Serial.print("Uydu Baglantisi:");
Serial.println(gelen[17]);
Serial.print("Enlem Bilgisi:");
Serial.print(gelen[19]);
Serial.print(gelen[20]);
Serial.print(gelen[21]);
Serial.print(gelen[22]);
Serial.print(gelen[23]);
Serial.print(gelen[24]);
Serial.print(gelen[25]);
Serial.print(gelen[26]);
Serial.print(gelen[27]);
Serial.print(gelen[28]);
Serial.print(",");
Serial.println(gelen[30]);
Serial.print("Boylam Bilgisi:");
Serial.print(gelen[32]);
Serial.print(gelen[33]);
Serial.print(gelen[34]);
Serial.print(gelen[35]);
Serial.print(gelen[36]);
Serial.print(gelen[37]);
Serial.print(gelen[38]);
Serial.print(gelen[39]);
Serial.print(",");
Serial.println(gelen[43]);
Serial.print("Hiz Bilgisi:");
Serial.print(gelen[44]);
Serial.print(gelen[45]);
Serial.print(gelen[46]);
Serial.print(gelen[47]);
Serial.print(gelen[48]);
Serial.println(gelen[49]);
Serial.print("Tarih:");
Serial.print(gelen[52]);
Serial.print(gelen[53]);
Serial.print(gelen[54]);
Serial.print(gelen[55]);
Serial.print(gelen[56]);
Serial.print(gelen[57]);
Serial.println("");
Serial.println("");
}
}
}
}
}
}
}
}

Hakan BAYRAM

Gönlünü Yazılıma kaptırmış biri, Hobi olarak başladığı Kodlamaya profesyonellik katarak ilerleyen Hakan BAYRAM, 1986 izmir doğumlu.

You may also like...

%d bloggers like this: