avatar_BİDİL

Gps Kullanımı (NMEA protokolü)

Başlatan BİDİL, 18 Ekim 2013, 17:37:22

BİDİL

Gps çalışmalarına yeni başlayan arkadaşlara faydalı olması dileğiyle.

GPS
Küresel Konumlama Sistemidir  ve toplam 24 adet uydu ile dünya yörüngesinde hizmet vermektedir.Yer yüzünde en az üç veya daha fazla uydu bağlantısı ile engelsiz bir sahada her türlü hava koşulunda koordinat ve zaman bilgisi sağlayan, düzenli olarak kodlanmış bilgi yollayan (Bu kodlara NMEA protokolü denir.) bir uydu ağıdır ve uydularla arasındaki mesafeyi ölçerek Dünya üzerindeki kesin yeri tespit etmeyi mümkün kılar.

Tabii olarak dünyanın her noktasında üç adet uyduyu görmek mümkün olmuyor, örneğin zaman bilgisini almak için üç veya daha fazla uyduya bağlanmak zorunda değiliz, bu bilgiyi tek bir uydudan alınabilir. Yörüngedeki 24 adet uydunun her biri münferit olarak bir tür radyo sinyali yayarlar ve yeryüzündeki GPS alıcıları,sonarlar,anemometreler bu sinyalleri alıp yorumlarlar.

Bu bilgiler nelerdir kısaca bir göz atalım;

NMEA Protokolü
Sonarlar, anemometre, topaç pusulası, otopilot ve GPS alıcıları gibi birçok türde  denizcilik, askeri alanlarda kullanılan elektronik cihazlar arasında iletişim sağlayan, bir anda birden fazla veri tanımlayan basit bir ASCII , seri iletişim protokolüdür. ABD Ulusal Denizcilik Elektroniği Birliği, tarafından kontrol edilir .
Veri cümleleri saniyede bir gönderilir.Tabii bu noktada şöyle bir soru sormak lazım Dünya yörüngesinde bulunan bir uydudan gönderilen zaman bilgisi yada veri cümlelerinin tamamı nekadar zamanda gps alıcınıza ulaşır? Elbette yollanan datalar belli bir yolculuktan (zamandan) sonra Gps alıcımıza gelmektedir. Bu sorun uydudaki zaman bilgisini yanlış ayarlayarak yani 10-15 sn geri alarak çözülmüş, neyse bu konu izafiyet teorisine kadar gider..
NMEA cümlesi şu şekilde gelir.

$GPGGA,092750.000,5321.6802,N,00630.3372,W,1,8,1.03,61.7,M,55.2,M,,*76

İlk bakışta çok karmaşık gibi gelebilir ancak gayet basit açıklamaları var ve bunlar kullandığınız yada kullanacağınız gps modülünün manuleinde mevcut. Her bir cümlenin başında yer alan  cümle adı yani cümlenin içeriğini özetleyen ($ GPGGA) başlığı görüyoruz.
Bu başlıklar ve veri içerikleri yukarıda zikrettiğimiz gibi ABD Ulusal Denizcilik Elektroniği Birliği tarafından yayımlanır veya revize edilir. Verdiğimiz örnekler NMEA protokolünün 0183 nolu versiyonuna aittir. Ancak NMEA 2000 protokülündede kullanılmaktadır.

Şunuda belirtmek gerekir; biz yanlızca bize lazım olan bilgi hangi cümlede yayınlanıyorsa o cümleyi işleriz.Yani zaman bilgisi lazımsa  $GPGGA veya $GPRMC cümlelerini işleyebiliriz çünkü dikkat edecek olursak diğer cümlelerde zaman bilgisi yayınlanmıyor.

Tekrar edelim burada 6 adet cümleyi ele aldık, birçok yeni nesil gps modülleri ayrıca; $GPDTM, $GPGBS, $GPGLL,$GPGLQ,$GPGNQ,$GPGNS,$GPGPQ,$GPGRS,$GPGST,$GPTXT,$GPVTG,$GPZDA,vs. gibi data bakımından farklı  birçok cümlelerde mevcuttur.

Gelelim cümlelere;
Saniyede bir bilgi alıyor demiştik, şimdi İlk alınan cümle dizisine göz atalım

$GPGGA,092750.000,5321.6802,N,00630.3372,W,1,8,1.03,61.7,M,55.2,M,,*76
$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,19,13,28,070,17,26,23,252,,04,14,186,14*79
$GPGSV,3,3,11,29,09,301,24,16,09,020,,36,,,*76
$GPRMC,092750.000,A,5321.6802,N,00630.3372,W,0.02,31.66,280511,,,A*43

ikinci alınan cümle dizisi yani bir saniye sonra;

$GPGGA,092751.000,5321.6802,N,00630.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,092751.000,A,5321.6802,N,00630.3371,W,0.06,31.66,280511,,,A*45

İki cümle dizisi arasındaki farkı anlamak için $GPRMC cümlesine bir göz atalım;

$GPRMC,092751.000,
İlk alınan veride 092750 bilgisi ikinci cümlede 092751 olmuş. Bu bizim saat bilgimiz, kodları işleyecek olursak 09:27:51 bilgisine ulaşırız. Gps aracılığı ile zaman bilgisi alacak arkadaşlara bir hatırlatma yapalım, bu cümlede yer alan saat bilgisi UTC dir. Yani Greenwich saatidir. Bulundukları ülkeinin saat farkını eklemeyi unutmamak gerekir.

$GPRMC,092751.000,A,
İkinci datamız saat bilgisinden sonra gelen "A" harfidir. Bu harf gps'in uyduya fixlendiğini (bağlandığını) gösterir ve bu uyduya sıcak uydu denir. Uyduya fixlenmeyen gps lerde bu bölümde "V" harfi yayınlanır ve bu uyduya soğuk uydu denir, aynı şekilde saniyede bir data gelir ancak bu bilgilere asla güvenilmemelidir. Gps enerjilendiğinde 2 ila 2,5 dakika sonra uyduya fixlenecektir.

$GPRMC,092751.000,A,5321.6802
Üçüncü datamız (5321.6802) Latitude yani enlem(derece ve dakika). Bu bilgi işlendikten sonra doğru formatı şu şekilde olacaktır; 53 derece 21.6802 dakika

$GPRMC,092751.000,A,5321.6802,N,

Dördüncü datamız North/South indicator yani dünyanın kuzeyindemiyiz yoksa güneyindemi. Eğer kuzeyinde isek bu değer "N" güneyinde isek  "S" olarak gelecektir.

$GPRMC,092751.000,A,5321.6802,N,00630.3371,
Beşinci datamız (00630.3371)Longitude yani  Boylam bilgisi. Boylam bilgiside yine enlem bilgisi gibi derece ve dakika cinsinden verilir yani; 6 derece 30.3371 dakika

$GPRMC,092751.000,A,5321.6802,N,00630.3371,W,
Altıncı datamız (W) East/West indicator yani doğu / batı  bilgisi. Yine Kuzey / Güney bilgisi gibi iki seçenekli bir bilgi verir. Doğuda isek "E" batıda isek "W" bilgisi gelecektir.

$GPRMC,092751.000,A,5321.6802,N,00630.3371,W,0.06,31.66,31.66
Yedinci ve sekizinci datamız (0.06,31.66)  Speed yani hızımız yer alır.

$GPRMC,092751.000,A,5321.6802,N,00630.3371,W,0.06,31.66,280511
Dokuzuncu datamız tarih bilgisidir. dd mm yy formatında verilir; 28/02/11

Gelen bilgilerden $GPRMC cümlesini kabaca inceledikten sonra bu cümleden bilgileri nasıl alıp ayıklayacağımıza gelelim. Kullanılan gps modülü u-blox marka olup max-6, max-7,LEA-6 gibi modelleride denenmiştir ve çalışmıştır.


Kullanılan Modül  : u-blox LEA-6
Kullanılan İşlemci : 18f4550

DEFINE OSC 4
asm
    __CONFIG _CONFIG1H, _FOSC_XT_XT_1H &_FCMEN_OFF_1H &_IESO_OFF_1H
    __CONFIG _CONFIG2L, _PWRT_ON_2L & _BOR_OFF_2L &  _VREGEN_OFF_2L
    __CONFIG _CONFIG2H, _WDT_OFF_2H   
    __CONFIG _CONFIG3H, _MCLRE_OFF_3H & _LPT1OSC_OFF_3H & _PBADEN_OFF_3H & _CCP2MX_OFF_3H   
    __CONFIG _CONFIG4L, _STVREN_OFF_4L & _LVP_OFF_4L &_XINST_OFF_4L  & _DEBUG_OFF_4L   
    __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L 
    __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
    __CONFIG _CONFIG6H, _WRTB_OFF_6H & _WRTC_OFF_6H  & _WRTD_OFF_6H
    __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
endasm
ADCON1=%00001111
CMCON=7
'****************************LCD TANIMI***********************************
DEFINE LCD_DREG PORTB   'LCD data bacakları PortB de bağlı
DEFINE LCD_DBIT 0       'LCD data bacakları 0. bitten başlıyor
DEFINE LCD_EREG PORTB   'LCD Enable Bacağı PortB de bağlı
DEFINE LCD_EBIT 4       'LCD Enable Bacağı 4. bite bağlı
DEFINE LCD_RSREG PORTB  'LCD RS Bacağı PortB de bağlı
DEFINE LCD_RSBIT 5      'LCD RS bacağı 5. Bite bağlı
DEFINE LCD_BITS 4       'LCD 4 bit olarak bağlı
DEFINE LCD_LINES 4      'LCD 4 sıra olarak çalışıyor.
'****************************PİN TANIMI***********************************
PORTA=%00000000
PORTB=%00000000
TRISA=%00000000
TRISB=%00000000
TRISC=%10000000

gpsin       VAR PORTC.7
timeout     CON 3000
baudgps     CON 84
saat        VAR BYTE
dakika      VAR BYTE
saniye      var byte
gun         VAR BYTE
ay          VAR BYTE
yil         VAR BYTE
fix         VAR WORD

PAUSE 1000

GPS:
    serin2 GPSin,baudGPS,TimeOut,gpsyok,[wait("$GPRMC"),wait(","),DEC2 saat,DEC2 dakika,DEC2 saniye,wait(","),fix]
    IF fix="V" Then fixlenmedi
    LCDOut "GTIME: ",DEC2 saat,":",DEC2 dakika,":",DEC2 saniye
    Pause 500
GoTo GPS

gpsyok:
    Pause 1000
    LCDOut $FE, 1
    LCDOut "GPS ALGILANAMADI"
    LCDOut $fe,$c0
    LCDOut "LUTFEN GPS TAKIN"
    Pause 2000
GoTo GPS

fixlenmedi:
    Pause 1000
    LCDOut $FE, 1
    LCDOut "GPS BAGLANAMADI"
    LCDOut $fe,$c0
    LCDOut " GECERSIZ DATA "
    Pause 2000
GoTo GPS

F®T

eline sağlık çok güzel bir çalışma olmuş şahsen  çok faydalandım.teşekkürler.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

oguztkn

bende katılıyorum çok güzel bir bilgi paylaşımı olmuş denemek isterim şahsen internet sorunum var fiyat için baktım ama nette bişi göremedim acaba bu modülü ucuza nerden bulabilirim ?

Şimdiden Teşekkürler...

BİDİL

#3
Bitmiş tak çalıştır tipi bir modül isterseniz 50$ civarında beti bilişimde bulabilirsiniz. Eğer kartı ben yaparım  derseniz kayra elektronikten modülü temin edebilirsiniz

est32

Allah razı olsun, bu bilgiler altından daha kıymetli benim için. Bilgisayarımda yerini aldı.

zerolax

Allah sizin gibi insanlardan razı olsun başta ete hocam ve sizin gibi hocalarımızın Allah yardımcısı olsun
EMRE SALMAN

pwm3434

#6
bidil  gps cihazı enerjilendiği andan  itibaren 2-2,5 saniye  sonra  uyduya fixlenecek, bü fixlenme her çeşit  gps cihzları için  geçerlimidir  yani  daha  kısa  zamanda içerisinde  iletişimi  yapmanın bir  imkanı yok mu.

diğer bir konu ise  eklediğin  kod da  sadece saat  bilgisi fix bilgisini aldın, eğer  diğer verileri alacak  olsak  kodlar böylemi olmalı
$GPRMC,092751.000,A,5321.6802,N,00630.3371,W,0.06,31.66,280511,,,A*45
serin2 GPSin,baudGPS,TimeOut,gpsyok,[wait("$GPRMC"),wait(","),DEC2 saat,DEC2 dakika,DEC2 saniye,wait(","),fix,wait(","),enlemderece,enlemdakika,wait(","),boylamderece,boylamdakika,wait(","),yön,wait(","),hız,wait(","),gün,ay,yıl]



Powered by EzPortal