Bu içeriğimizde, Arduino GPS modülü kullanarak nasıl anlık konum verisi (enlem ve boylam) elde edeceğinizi ve bu verileri projelerinizde nasıl anlamlı hale getirebileceğinizi adım adım öğreneceksiniz. Günümüzde akıllı tarım cihazları, otonom araçlar, insansız hava araçları ve taşınabilir yer izleme sistemleri gibi konum tabanlı projeler oldukça popüler hale geldi. Bu tür IoT projelerinin temelini ise GPS (Küresel Konumlandırma Sistemi) alıcı modülleri oluşturmaktadır.
ESP8266 ve ESP32 geliştirme kartları kullanarak tasarladığımız daha gelişmiş bir proje olan konum tabanlı WiFi sinyal toplayıcı uygulamasına GPS tabanlı WiFi jagger içeriğimizden ulaşabilirsiniz.
Aşağıdaki görselde, projelerimizde en sık tercih ettiğimiz harici antenli u-blox NEO-6M GPS modülü görülmektedir.

GPS Modülü Nedir ve Nasıl Çalışır?
GPS (Global Positioning System – Küresel Konumlandırma Sistemi), dünya yörüngesinde sürekli dönen en az 24 uydudan oluşan bir ağ yardımıyla zaman ve konum tespiti yapmayı sağlayan küresel bir navigasyon sistemidir. GPS modülleri ise bu uydulardan gelen mikrodalga radyo sinyallerini yakalayıp işleyen alıcı sensörlerdir. Elde edilen anlık veriler, mikrodenetleyiciler yardımıyla işlenerek navigasyon, telemetri ve haritalama uygulamalarında kullanılır.
GPS Alıcılarının Konum Hesaplama Prensibi
GPS modülleri, trilaterasyon adı verilen bir matematiksel yöntemle konum hesabı yapar. Modülün yeryüzündeki iki boyutlu koordinatlarını (enlem ve boylam) belirleyebilmesi için uzaydaki en az 3 uydudan net sinyal alması gerekir. Eğer yüksekliği de içeren üç boyutlu bir konum tespiti (enlem, boylam ve rakım) yapılmak isteniyorsa, en az 4 farklı uydudan gelen sinyallerin çözülmesi zorunludur. Alınan sinyalin kalitesi ve bağlandığı uydu sayısı arttıkça, hata payı santimetreler mertebesine kadar düşebilir.
NMEA Standart Protokolü ve Veri Formatı
GPS modülleri, okudukları ham uydu verilerini mikrodenetleyicilere aktarırken evrensel bir standart olan NMEA (National Marine Electronics Association) protokolünü kullanırlar. NMEA verileri, seri port (UART) üzerinden virgüllerle ayrılmış standart metin satırları (sentenceler) olarak gönderilir. Bu veri paketlerinde GGA, GLL, RMC gibi kısaltmalarla başlayan satırlar zaman, enlem, boylam, hız ve uydu sayısını içerir. Ham NMEA verilerini anlamlandırmak için Arduino mikrodenetleyicilerde kütüphaneler kullanılır.
Projeleriniz İçin GPS Seçim Kriterleri:
- Uydu Kanal Sayısı: Modülün aynı anda takip edebildiği uydu kanalı sayısı arttıkça (örn: 50 kanal) konum doğruluk oranı yükselir.
- İletişim Arayüzü: Arduino ve ESP kartları ile doğrudan UART (RX-TX) seri haberleşme yapabilen modüller entegrasyon kolaylığı sunar.
- Sıcak/Soğuk Başlatma Süresi (TTFF): Modülün uydulara ilk kilitlenme ve veri gönderme hızının düşük (başlangıç süresinin kısa) olması tercih edilir.
- Sinyal Hassasiyeti (Sensitivity): Kapalı alanlarda veya yoğun ağaçlık bölgelerde bile yüksek duyarlılık sunan (dBm değeri yüksek) modüller stabil çalışır.
GPS Teknolojisinin Yaygın Kullanım Alanları
Günümüzde konum belirleme modülleri çok geniş bir endüstriyel ve hobi odaklı uygulama alanına sahiptir:
- Araç ve Canlı Takip Sistemleri: Çalınmaya karşı araç takip cihazları, evcil hayvan izleyicileri ve lojistik yönetim panelleri.
- Otonom Tarım ve Meteoroloji İstasyonları: Tarla üzerinde otonom sürüş yapan traktörler ve coğrafi konum bazlı anlık hava tahmin sistemleri.
- Doğa Sporları ve Akıllı Giyilebilir Donanımlar: Dağcılık, bisiklet sporları ve koşucular için mesafe, hız ve rota kaydeden akıllı saatler.
- Hassas Zaman Senkronizasyonu: Küresel uydu saatlerini referans alarak milisaniyelik doğrulukla çalışan endüstriyel saat sistemleri.
u-blox NEO-6M GPS Modülü Teknik Özellikleri
NEO-6M, kompakt yapısı, uygun fiyatı ve geniş Arduino kütüphane desteği sayesinde elektronik projelerinde en çok tercih edilen GPS alıcı modüllerinden biridir. Gelişmiş donanımı ve güçlü u-blox motoru ile öne çıkan kartın teknik parametreleri şöyledir:
Yüksek Performanslı Alıcı Mimarisi: Kart üzerinde yer alan 50 kanallı u-blox 6 konumlandırma motoru, uydulardan gelen zayıf sinyalleri dahi filtreleyerek konum doğruluğunu üst seviyede tutar. Dahili bataryası ve EEPROM birimi sayesinde kapatılıp açıldığında uyduları tekrar hızlıca bulabilir.
Konum Hassasiyeti: Açık alanda yaklaşık 2.5 metrelik dikey ve yatay konum hassasiyeti sunar. Bu hassasiyet oranı hobi projeleri, insansız hava araçları (İHA) ve otonom kara araçları için oldukça yeterlidir.
Seri Haberleşme Kolaylığı: TTL seviyesinde standart UART (RX-TX) iletişim protokolünü kullanır. Bu sayede sadece 4 pin bağlantısı ile doğrudan Arduino Uno, Mega veya ESP8266/ESP32 geliştirme kartlarına bağlanabilir.
Çalışma Voltajı ve Güç Tüketimi: Hem 3.3V hem de 5V lojik seviyeleriyle uyumlu çalışır. Ancak regülatör sağlığı ve sinyal kararlılığı açısından besleme pininin 5V’a, lojik haberleşmenin ise doğrudan mikrodenetleyici portlarına bağlanması tavsiye edilir.
Anten Entegrasyonu: Modül ile birlikte gelen seramik patch anten, sinyal kazanımını maksimuma çıkarır. Harici anten girişi (U.FL konnektör) sayesinde kapalı kutu tasarımlarında anteni kutu dışına taşımak oldukça kolaydır.
Teknik özet tablosu:
- Varsayılan UART İletişim Hızı (Baud Rate): 9600 bps
- Dahili RTC Pili, EEPROM Bellek ve Harici Anten Konnektörü
- Geniş Besleme Aralığı: 3.0V – 5.0V DC
- Standart NMEA-0183 Protokol Çıkışı
- Fiziksel Haberleşme: RS232 TTL Uyumu
Cihazın uydulara kilitlenme süresi (Time to First Fix) ortam şartlarına göre değişir. Sıcak başlatmada (Hot Start) 1 ila 5 saniyede verileri aktarmaya başlarken, cihazın ilk kez açıldığı soğuk başlatmada (Cold Start) bu süre 27 ila 35 saniye arasında değişebilir.
- Hot Start (Sıcak Başlatma): GPS modülü kısa süre kapalı kalmışsa, hafızasındaki güncel uydu yörünge bilgilerini (Almanac) kullanarak saniyeler içinde konumu sabitler.
- Cold Start (Soğuk Başlatma): Cihaz uzun süre kapalı kaldıysa veya yeri değiştirilerek açıldıysa, sıfırdan tüm uydu konum tablolarını indirir. Bu işlem biraz zaman alır ancak konum kararlılığını artırır.
| NEO-6M GPS Modülü Pini | Arduino UNO Bağlantısı |
| VCC | 5V veya 3.3V |
| RX | Yazılımsal Seri Portta (SoftwareSerial) belirlenen TX pini |
| TX | Yazılımsal Seri Portta (SoftwareSerial) belirlenen RX pini |
| GND | GND (Toprak) |
Arduino GPS Bağlantı Şeması
Bağlantıları yaparken dikkat edilmesi gereken en önemli kural, Arduino’nun yazılımsal RX pininin GPS modülünün TX pinine; Arduino’nun yazılımsal TX pininin ise GPS’in RX pinine çaprazlanarak (RX -> TX, TX -> RX) bağlanmasıdır.

Arduino Ham NMEA Okuma Kodları
Aşağıdaki temel Arduino kodu yardımıyla, herhangi bir kütüphane kullanmadan doğrudan GPS modülünün seri port üzerinden gönderdiği ham NMEA verilerini izleyebilirsiniz:
Kodu Arduino’ya yükleyip Seri Port Ekranını (Serial Monitor) 9600 baud hızında açtığınızda ekranda akmaya başlayan ham NMEA satırlarını görebilirsiniz:

NMEA Veri Paketlerinin Yapısı ve Analizi
GPS modülünden gelen her NMEA satırı standart olarak “$” işareti ile başlar ve parametreler birbirlerinden virgül ile ayrılır. Örneğin aşağıdaki satır tipik bir RMC veri paketidir:
NMEA protokolünde birçok farklı veri paketi bulunur. Cümlelerin başındaki “$GP” takısı GPS konumunu belirtirken, ardından gelen GGA ifadesi konum doğruluk ve yükseklik verilerini taşıyan ana paketi temsil eder:
Yukarıda paylaşılan GPGGA paketi içerisindeki parametrelerin detaylı anlamları şu şekildedir:
- 110617: Konumun alındığı anlık zaman bilgisidir. Evrensel Saat Dilimi olan UTC formatındadır (11:06:17 UTC).
- 41XX.XXXXX, N: Enlem derecesini (41 derece Kuzey enlemi) temsil eder.
- 00831.54761, W: Boylam derecesini (8 derece Batı boylamı) ifade eder.
- 1: GPS sabitleme kalitesidir. (0 = Geçersiz veri; 1 = Standart GPS sabiti; 2 = Diferansiyel DGPS sabiti; 4 = RTK Sabit vb.)
- 05: Modülün o an kilitlendiği aktif uydu sayısıdır. Sinyal kalitesini gösterir.
- 2.68: HDOP (Yatay hassasiyet kaybı) değeridir. Bu değer düştükçe konum hassasiyeti artar.
- 129.0, M: Metre cinsinden ortalama deniz seviyesine göre rakım (yükseklik) bilgisidir.
- 50.1, M: Jeoidin WGS84 referans elipsoidi üzerindeki yüksekliğini ifade eder.
- Boş Alanlar: Son DGPS güncellemesinden bu yana geçen süreyi ve DGPS istasyon kimliğini belirtir.
- *42: Verinin yolda bozulup bozulmadığını kontrol eden kontrol toplamıdır (Checksum).
Bunun dışındaki diğer popüler NMEA veri paketleri ve görevleri:
- $GPGSA: GPS DOP hassasiyet değerleri ve aktif konum uydularının ID bilgileri.
- $GPGSV: Görüş alanındaki tüm uyduların sinyal seviyeleri (SNR), yön ve yükseliş açıları.
- $GPGLL: Yalnızca temel coğrafi koordinat verileri (Enlem/Boylam ve zaman).
- $GPRMC: Özet seyahat paketi (Koordinat, anlık hız, tarih ve rota sapma açıları).
- $GPVTG: Kara veya deniz üzerinde gidilen gerçek yön ve hız verileri.
TinyGPS++ Kitaplığı ile NMEA Verilerini Ayrıştırma
Ham metin satırları (NMEA) üzerinden string parçalayarak koordinat okumak zahmetli ve hata payı yüksek bir yöntemdir. Bu işlemi kolayca halletmek için Mikal Hart tarafından yazılan popüler TinyGPS++ kütüphanesi kullanılır. Bu kütüphane, karmaşık metin paketlerini arka planda çözerek doğrudan kullanılabilir float ve integer veri türlerine dönüştürür.
TinyGPS++ Kütüphanesinin Arduino IDE’ye Eklenmesi
Kütüphaneyi Arduino geliştirme ortamınıza yüklemek için aşağıdaki adımları sırasıyla uygulayabilirsiniz:
- TinyGPS++ kütüphanesini bilgisayarınıza indirmek için TinyGPS++ zip indir bağlantısına tıklayın.
- İndirdiğiniz sıkıştırılmış
TinyGPSPlus-master.ziparşiv dosyasını bilgisayarınızda klasöre çıkartın. - Klasör ismini
TinyGPSPlus-masteryerine sadeleştirerekTinyGPSPlusolarak değiştirin. - Yeniden adlandırdığınız
TinyGPSPlusklasörünü kopyalayıp bilgisayarınızdaki Arduino kütüphanelerinin bulunduğulibrariesklasörünün içine yapıştırın. - Değişikliklerin algılanması için açık olan Arduino IDE uygulamasını kapatıp yeniden başlatın.
- Kurulum doğrulandıktan sonra, üst menüdeki Dosya > Örnekler > TinyGPS++ yolundan kütüphanenin sunduğu hazır şablon kodları test edebilirsiniz.
Önemli Uyarı: Kütüphane içindeki hazır şablon kodlar varsayılan olarak GPS modülünün hızını 4800 baud olarak kabul eder. Projenizde NEO-6M modülünü kullanıyorsanız, koddaki ilgili seri iletişim hızını mutlaka 9600 olarak düzeltmeniz gerekir.
NEO-6M ve TinyGPS++ ile Enlem ve Boylam Okuma Kodu
Aşağıda, GPS modülünden gelen verileri TinyGPS++ kitaplığıyla ayrıştırarak seri port ekranına düzenli bir şekilde yazdıran örnek kod yer almaktadır. Bu kod, kütüphanenin sunduğu temel işlevlerin en sadeleştirilmiş halidir:
Kodu Arduino kartınıza yükledikten sonra seri monitörü açın. Modülün uydulara kilitlenmesi ve ilk doğru konum koordinatlarını ekrana basması için gökyüzünü gören açık bir alanda birkaç dakika beklemeniz gerekebilir.

TinyGPS++ ile Hız, Zaman ve Yükseklik Verilerini Okuma
TinyGPS++ kitaplığı, koordinat verilerinin yanı sıra uydulardan alınan diğer parametrelerin de kolayca okunmasını sağlar. Kütüphanenin sunduğu hazır fonksiyonları çağırarak anlık olarak şu parametreleri edinebilirsiniz:
- Sistem tarihi (Gün / Ay / Yıl)
- Anlık saat verisi (Saat / Dakika / Saniye / Milisaniye)
- Seyahat hızı (km/s, knots veya m/s cinsinden)
- Deniz seviyesine göre anlık yükseklik (metre veya feet)
- Kilitlenilen toplam aktif uydu sayısı
- Yatay konum hassasiyeti kayıp katsayısı (HDOP)
Aşağıda yer alan kapsamlı örnek kod yardımıyla, GPS modülünün sağladığı tüm bu ek parametreleri okuyup projelerinizde nasıl kullanabileceğinizi inceleyebilirsiniz:
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.
