Arduino GPS Modülü Kullanımı
Bu içeriğimizde., Arduino GPS modülü kullanarak nasıl konum bilgisi elde edeceğinizi ve bu bilgiyi nasıl kullanabileceğinizi adım adım öğreneceksiniz. Günümüzde, küçük ölçekli yer izleme ve konum belirleme projeleri oldukça popüler hale geldi. Bu tür projelerde kullanılan temel bileşenlerden biri de GPS (Küresel Konumlandırma Sistemi) modülleridir.
Aşağıdaki şekilde NEO-6M GPS modülü görülmektedir. Harici bir anten ile birlikte gelir.

GPS Modülü Nedir?
GPS (Global Positioning System), dünya genelindeki uydu ağını kullanarak konum belirleme ve zaman senkronizasyonu sağlayan bir navigasyon sistemidir. GPS modülleri, bu sistemin alıcı bileşenleridir ve kullanıcıya anlık konum bilgisi sunar. GPS modülleri genellikle mikrodenetleyicilere veya mikrokontrollere entegre edilir ve konum tabanlı projelerde yaygın olarak kullanılır.
GPS Modülünün Çalışma Prensibi
GPS modülleri, dünya çevresinde yörüngede bulunan uydu grubundan sinyaller alarak konum ve zaman bilgisi elde ederler. Bir GPS modülü, en az üç uydu sinyalini alarak iki boyutlu konum bilgisi (enlem ve boylam) ve en az dört uydu sinyalini alarak üç boyutlu konum bilgisi (enlem, boylam ve yükseklik) hesaplayabilir. GPS sinyalleri, uydu konumlarından gelen sürekli radyo dalgalarıdır ve bu sinyalleri işleyerek modül, konumunuzu belirler.
NMEA Formatı ve Veri Analizi
GPS modülleri genellikle NMEA (National Marine Electronics Association) formatında veri gönderirler. NMEA verileri, virgülle ayrılmış değerler içeren bir metin formatıdır ve genellikle GGA, GLL, RMC gibi belirli komutlarla ilişkilendirilmiş konum ve zaman bilgilerini içerir. Bu verileri anlamak ve işlemek için Arduino gibi bir mikrodenetleyici veya bilgisayar kullanabilirsiniz.
GPS Modülü Seçerken Nelere Dikkat Etmeli?
- Uydu Sayısı: Daha fazla uydu sinyali alan modüller, daha kesin konum belirleme sağlar.
- Bağlantı Arabirimi: Modülün mikrodenetleyici veya bilgisayarla iletişim kurabilmesi için uygun bir bağlantı arabirimi (örneğin UART) sunması önemlidir.
- Hız ve Başlatma Süresi: İyi bir GPS modülü hızlı başlatma süresi ve güvenilir konum belirleme hızı sunmalıdır.
- Sensitivite ve Hassasiyet: Daha hassas modüller, düşük sinyal gücü koşullarında bile daha iyi sonuçlar verir.
GPS Modülü Uygulama Alanları
GPS modülleri, geniş bir uygulama yelpazesine sahiptir:
- Konum Belirleme: Harita tabanlı projeler, araç takip sistemleri, coğrafi konum analizi gibi konum belirleme gerektiren projelerde kullanılır. Ayrıca, zaman damgaları sayesinde, zamana bağlı projeler içinde iyi bir alternatiftir.
- Hava Durumu İstasyonları: Hava durumu istasyonları, GPS modülleri sayesinde konum bazlı hava verilerini daha doğru bir şekilde toplayabilir.
- Spor ve Açık Hava Etkinlikleri: Koşu, bisiklet gibi spor etkinliklerinde ve açık hava etkinliklerinde kullanıcıların konumunu izlemek için kullanılır.
- Araç Navigasyonu: GPS modülleri, araç içi navigasyon sistemlerinin temel bileşenlerindendir.
GPS NEO-6M Teknik Detayları
u-blox NEO-6M, popüler ve yaygın olarak kullanılan bir GPS modülüdür. Çeşitli projelerde konum belirleme ve navigasyon ihtiyaçlarını karşılamak üzere tasarlanmıştır. İşte NEO-6M GPS modülünün bazı temel teknik detayları:
Çipset ve İşlemci: u-blox NEO-6M, u-blox firmasının ürettiği GPS çipsetleri ile donatılmıştır. Bu çipset, GPS uydu sinyallerini alıp işleyerek konum ve zaman bilgisini hesaplar. Modül aynı zamanda dahili bir mikrodenetleyiciye sahiptir, bu sayede GPS sinyallerini işleyebilir ve kullanıcıya hazır veriler sunabilir.
Konum Hassasiyeti: NEO-6M modülü, hızlı başlatma süresi ve yüksek konum hassasiyeti ile öne çıkar. Çoğu durumda, 2.5 metre civarında bir yatay konum hassasiyeti sağlayabilir. Bu özellik, harita tabanlı projelerde ve hassas konum belirleme gerektiren uygulamalarda önemlidir.
Uydu Bağlantısı: Modül, en azından 50 kanallı bir uydu alıcısına sahiptir. Bu, birden fazla uydu sinyalini aynı anda işleyebilme yeteneği sağlar. Daha fazla uydu sinyali almak, konumun daha kesin bir şekilde belirlenmesine yardımcı olur.
Veri Çıkışı ve İletişim: NEO-6M, seri iletişim protokollerini destekler. Genellikle TTL seviyesinde seri haberleşme sağlar. Bu, modülün mikrodenetleyiciler veya bilgisayarlar gibi diğer cihazlarla kolayca iletişim kurabilmesini sağlar.
Besleme Gereksinimi: Genellikle 3.3V veya 5V besleme gerilimi ile çalışabilir. Ancak, daha yüksek hassasiyet ve performans için 3.3V besleme önerilir. Besleme gereksinimleri projenizin kullanacağı güç kaynağına uygun olarak ayarlanmalıdır.
Veri Formatı: GPS verileri NMEA (National Marine Electronics Association) formatında gönderilir. Bu format, enlem, boylam, hız, yükseklik ve zaman gibi bilgileri içerir. Bu verileri işlemek ve anlamak için Arduino veya diğer mikrodenetleyiciler kullanılabilir.
Anten Gereksinimi: GPS modülünün düzgün çalışması için bir anten gereklidir. Modül üzerinde genellikle anten bağlantısı için bir konnektör bulunur. Dış anten kullanımı, sinyal gücünü artırarak daha iyi bir performans sağlayabilir.
Özetle;
- Dahili EEPROM ve Harici Anten Desteği
- İletişim: RS232 TTL
- Besleme Voltajı: 3.3V ve 5V
- Varsayılan İletişim Hızı: 9600 bps
- NMEA desteği
Ayrıca, cold start başlatmada 30 saniye, hot start başlatmada 5 saniye içerisinde veri göndermeye başlar.
- Hot start, daha önceki konum bilgilerini kullanarak hızlı bir başlatma sağlar.
- Cold start, tüm önceki konum bilgilerini silip sıfırdan başlayarak daha uzun süre alabilir ancak daha güvenilir sonuçlar verir.
Ne zaman hangi başlatma modunu kullanmanız gerektiği, projenizin gereksinimlerine ve konum belirleme hızına bağlı olarak değişebilir.
NEO-6M GPS Modülü | Mikro denetleyici(Arduino UNO) |
VCC | 5V |
RX | TX, software serial’de atanan pin |
TX | RX, software serial’de atanan pin |
GND | GND |
Arduino GPS Bağlantı Şeması
Program kodunda atama yapılan TX ve RX pinlerine göre bağlantılar yapılır;

Arduino GPS Program Kodu
/*
* devreyakan.com 07.08.2023
* Proje detaylari https://devreyakan.com/arduino-gps-modulu-kullanimi
*/
#include <SoftwareSerial.h>
// Seri haberleşmenin başlatılması
SoftwareSerial ss(4, 3);
void setup(){
Serial.begin(9600);
ss.begin(9600);
}
void loop(){
while (ss.available() > 0){
// gpsten byte olarak verilerin alınması
byte gpsData = ss.read();
Serial.write(gpsData); //verilerin yazdirilmasi
}
}
Kodu yükledikten sonra seri ekranı açtığınızda şu şekilde NMEA verileri göreceksiniz:

NMEA Verilerinin Anlamlandırılması
NMEA cümleleri “$” karakteri ile başlar ve her veri alanı bir virgülle ayrılır.
$GPGGA,110617.00,41XX.XXXXX,N,00831.54761,W,1,05,2.68,129.0,M,50.1,M,,*42
$GPGSA,A,3,06,09,30,07,23,,,,,,,,4.43,2.68,3.53*02
$GPGSV,3,1,11,02,48,298,24,03,05,101,24,05,17,292,20,06,71,227,30*7C
$GPGSV,3,2,11,07,47,138,33,09,64,044,28,17,01,199,,19,13,214,*7C
$GPGSV,3,3,11,23,29,054,29,29,01,335,,30,29,167,33*4E
$GPGLL,41XX.XXXXX,N,00831.54761,W,110617.00,A,A*70
$GPRMC,110618.00,A,41XX.XXXXX,N,00831.54753,W,0.078,,030118,,,A*6A
$GPVTG,,T,,M,0.043,N,0.080,K,A*2C
Farklı türde NMEA cümleleri bulunmaktadır. Mesajın türü, ilk virgülün önündeki karakterlerle belirtilir.
$ işaretinden sonra gelen GP, bir GPS konumunu işaret eder. $GPGGA, temel GPS NMEA mesajıdır ve 3D konum ile doğruluk verilerini sağlar. Aşağıdaki cümlede:
$GPGGA,110617.00,41XX.XXXXX,N,00831.54761,W,1,05,2.68,129.0,M,50.1,M,,*42
- 110617 – Konum sabitlendiği saatı temsil eder, 11:06:17 UTC
- 41XX.XXXXX,N – Enlem 41 derece XX.XXXXX’ K
- 00831.54761,W – Boylam 008 derece 31.54761′ B
- 1 – Sabit kalite (0 = geçersiz; 1 = GPS sabiti; 2 = DGPS sabiti; 3 = PPS sabiti; 4 = Gerçek Zamanlı Kinematik; 5 = Yüzer RTK; 6 = Tahmini (ölü hesaplama); 7 = Manuel giriş modu; 8 = Simülasyon modu)
- 05 – İzlenen uydu sayısı
- 2.68 – Yatay konum belirsizliği
- 129.0, M – Deniz seviyesi üzerindeki yükseklik, metre cinsinden
- 50.1, M – Jeoidin (ortalama deniz seviyesi)
- WGS84 elipsoidi üzerindeki yüksekliği
- boş alan – Son DGPS güncellemesinden bu yana geçen süre, saniye cinsinden
- boş alan – DGPS istasyonu kimlik numarası
- *42 – Kontrol toplamı verisi, her zaman * ile başlar
Diğer NMEA cümleleri ek bilgi sağlar:
- $GPGSA – GPS DOP ve aktif uydu bilgileri
- $GPGSV – Detaylı GPS uydu bilgileri
- $GPGLL – Coğrafi Enlem ve Boylam
- $GPRMC – Temel GPS özel (konum, hız, zaman) verileri
- $GPVTG – Yapılan Hız
TinyGPS++ Kitaplığı ile NMEA Verilerini Ayrıştırma
GPS’ten gelen ham verilerle çalışabilir veya karakter dizilerini değişkenlere kaydederek bu NMEA mesajlarını okunabilir ve kullanışlı bir formata dönüştürebilirsiniz. Bunu yapmak için TinyGPS++ kitaplığını kullanacağız.
Bu kitaplık, konumla ilgili bilgileri yararlı ve anlaşılması kolay bir biçimde almayı kolaylaştırır.
TinyGPS++ Kitaplığının Kurulumu
TinyGPS++ kitaplığını Arduino IDE’nize yüklemek için sonraki adımları izleyin:
- TinyGPSPlus kütüphanesini indirmek için buraya tıklayın. İndirilenler klasörünüzde bir .zip klasörünüz olmalıdır
- .zip klasörünü açın ve TinyGPSPlus-master klasörünü almalısınız
- Klasörünüzü TinyGPSPlus-master‘dan TinyGPSPlus’a yeniden adlandırın
- TinyGPSPlus klasörünü Arduino IDE kurulum kitaplıkları klasörünüze taşıyın
- Son olarak, Arduino IDE’nizi yeniden açın
- Kütüphane, nasıl kullanılacağına dair birkaç örnek sağlar. Arduino IDE’nizde Dosya > Örnekler > TinyGPS++’a gitmeniz ve sağlanan örnekler arasından seçim yapmanız yeterlidir.
Not: Kitaplıkta verilen örnekler, GPS modülü için 4800 baud hızı varsayar. NEO-6M GPS modülünü kullanıyorsanız bunu 9600 olarak değiştirmeniz gerekir.
NEO-6M GPS Modülünü ve TinyGPS++ Kitaplığını Kullanarak Konum Alma
TinyGPS++ kitaplığını kullanarak konumu uygun ve kullanışlı bir biçimde alabilirsiniz. Aşağıda, konumu GPS’ten almak için bir kod sağlıyoruz. Bu, kitaplık örneklerinden birinin basitleştirilmiş bir sürümüdür.
/*
* devreyakan.com 07.08.2023
* Proje detaylari https://devreyakan.com/arduino-gps-modulu-kullanimi
*/
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);
void setup(){
Serial.begin(9600);
ss.begin(GPSBaud);
}
void loop(){
while (ss.available() > 0){
gps.encode(ss.read());
if (gps.location.isUpdated()){
Serial.print("Latitude= ");
Serial.print(gps.location.lat(), 6);
Serial.print(" Longitude= ");
Serial.println(gps.location.lng(), 6);
}
}
}
Kodu Arduino’nuza yükleyin ve seri monitörde görüntülenen konumu görmelisiniz. Kodu yükledikten sonra, daha doğru bir veri elde etmek için modül konumu ayarlarken birkaç dakika bekleyin.

TinyGPS++ Kitaplığını Kullanarak Daha Fazla GPS Bilgisi Alma
TinyGPS++ kitaplığı, yalnızca konumdan çok daha fazla bilgiyi basit bir şekilde almanızı sağlar. Konumun yanı sıra şunları da alabilirsiniz:
- tarih
- zaman
- hız
- rakım
- uydular
- hdop
Aşağıdaki kod, tüm bu bilgileri basit bir şekilde nasıl alabileceğinizi örneklemektedir.
/*
* devreyakan.com 07.08.2023
* Proje detaylari https://devreyakan.com/arduino-gps-modulu-kullanimi
*/
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);
void setup(){
Serial.begin(9600);
ss.begin(GPSBaud);
}
void loop(){
while (ss.available() > 0){
gps.encode(ss.read());
if (gps.location.isUpdated()){
// Latitude in degrees (double)
Serial.print("Latitude= ");
Serial.print(gps.location.lat(), 6);
// Longitude in degrees (double)
Serial.print(" Longitude= ");
Serial.println(gps.location.lng(), 6);
Serial.print("Raw latitude = ");
Serial.print(gps.location.rawLat().negative ? "-" : "+");
Serial.println(gps.location.rawLat().deg);
Serial.println(gps.location.rawLat().billionths);
Serial.print("Raw longitude = ");
Serial.print(gps.location.rawLng().negative ? "-" : "+");
Serial.println(gps.location.rawLng().deg);
Serial.println(gps.location.rawLng().billionths);
Serial.print("Raw date DDMMYY = ");
Serial.println(gps.date.value());
Serial.print("Year = ");
Serial.println(gps.date.year());
Serial.print("Month = ");
Serial.println(gps.date.month());
Serial.print("Day = ");
Serial.println(gps.date.day());
Serial.print("Raw time in HHMMSSCC = ");
Serial.println(gps.time.value());
Serial.print("Hour = ");
Serial.println(gps.time.hour());
Serial.print("Minute = ");
Serial.println(gps.time.minute());
Serial.print("Second = ");
Serial.println(gps.time.second());
Serial.print("Centisecond = ");
Serial.println(gps.time.centisecond());
Serial.print("Raw speed in 100ths/knot = ");
Serial.println(gps.speed.value());
Serial.print("Speed in knots/h = ");
Serial.println(gps.speed.knots());
Serial.print("Speed in miles/h = ");
Serial.println(gps.speed.mph());
Serial.print("Speed in m/s = ");
Serial.println(gps.speed.mps());
Serial.print("Speed in km/h = ");
Serial.println(gps.speed.kmph());
Serial.print("Raw course in degrees = ");
Serial.println(gps.course.value());
Serial.print("Course in degrees = ");
Serial.println(gps.course.deg());
Serial.print("Raw altitude in centimeters = ");
Serial.println(gps.altitude.value());
Serial.print("Altitude in meters = ");
Serial.println(gps.altitude.meters());
Serial.print("Altitude in miles = ");
Serial.println(gps.altitude.miles());
Serial.print("Altitude in kilometers = ");
Serial.println(gps.altitude.kilometers());
Serial.print("Altitude in feet = ");
Serial.println(gps.altitude.feet());
Serial.print("Number os satellites in use = ");
Serial.println(gps.satellites.value());
Serial.print("HDOP = ");
Serial.println(gps.hdop.value());
}
}
}
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.