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.

mobile-gps-navigation-concept-smartphone-map-city-d-45234942

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.

$T2eC16ZHJGUFFhyL!ipbBR5ktM60,g--60_57

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.

 

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("");
         
        }
        }
        }
        }
         
   
   
}
}
  
  
  
  
}



}

 

3 YORUMLAR

  1. Merhaba,
    Kullandığım modül kullandığınız ile aynı. Fakat GPRMC satırında tüm satırı okuyabilmeme rağmen konum bilgilerinin olduğu kısımlar boş geliyor. Bu konu hakkında yardımcı olabilir misiniz?

Fatih için bir cevap yazın İptal

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz