Projelerimize kablosuz kontrol ve motor sürücüler ekledikten sonra, sıra sistemimize "nerede olduğunu" öğretmeye geldi! Bu rehberde, dünya genelinde en çok kullanılan ve oldukça bütçe dostu olan GY-NEO6MV2 GPS modülünü inceleyeceğiz. Bilgisayar bağlantımızı (Seri Haberleşme) meşgul etmemek için SoftwareSerial kütüphanesini kullanarak modülden anlık enlem, boylam, hız ve zaman verilerini nasıl çekeceğimizi adım adım göreceğiz.
GPS modülleri seri haberleşme (UART) ile çalışır. Arduino Uno üzerinde sadece bir tane donanımsal seri port (0 ve 1. pinler) olduğu için, modülümüzü yazılımsal olarak belirlediğimiz Pin 3 (RX) ve Pin 4 (TX) pinlerine bağlayacağız. Bağlantıları yaparken aşağıdaki görseli ve tabloyu referans alabilirsiniz:

| Neo-6M GPS Pini | Arduino Uno Pini |
|---|---|
| VCC | 5V (Modül tipine göre 3.3V veya 5V destekler, GY-NEO6MV2 genellikle 5V ile çalışır) |
| GND | GND |
| TX (Veri Gönderme) | Pin 3 (Arduino'nun Yazılımsal RX pini) |
| RX (Veri Alma) | Pin 4 (Arduino'nun Yazılımsal TX pini) |
Önemli Kural: Çapraz bağlantı mantığı nedeniyle GPS modülünün TX pini, Arduino'da tanımladığımız RX (Pin 3) pinine; GPS modülünün RX pini ise Arduino'da tanımladığımız TX (Pin 4) pinine bağlanmalıdır.
GPS modülünden gelen karmaşık ham (NMEA) verilerini anlamlı enlem ve boylam koordinatlarına dönüştürmek için popüler TinyGPS++ kütüphanesini kullanacağız:
Aşağıdaki kodu doğrudan kopyalayıp Arduino editörünüze yapıştırabilirsiniz. İstediğiniz gibi yazılımsal seri port pinleri 3 ve 4 olarak ayarlanmıştır.
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
// GPS modülü için yazılımsal seri port tanımlıyoruz.
// Arduino Pin 3 = RX (Modülün TX pini buraya bağlanır)
// Arduino Pin 4 = TX (Modülün RX pini buraya bağlanır)
SoftwareSerial gpsSerial(3, 4);
// TinyGPS++ nesnesini oluşturuyoruz
TinyGPSPlus gps;
void setup() {
// Bilgisayar ile haberleşme hızı (Seri Port Ekranı)
Serial.begin(9600);
// Neo-6M GPS modülünün varsayılan haberleşme hızı genellikle 9600'dür
gpsSerial.begin(9600);
Serial.println("GPS Modulu Baslatildi. Uydu baglantisi bekleniyor...");
Serial.println("NOT: Ilk baglanti acik alanda 5 dakikaya kadar surebilir.");
}
void loop() {
// GPS modülünden veri geldikçe TinyGPS++ kütüphanesine aktarıyoruz
while (gpsSerial.available() > 0) {
if (gps.encode(gpsSerial.read())) {
displayInfo(); // Yeni ve anlamlı bir veri paketi çözüldüğünde ekrana yazdır
}
}
}
void displayInfo() {
Serial.print("Konum: ");
if (gps.location.isValid()) {
// Enlem ve Boylam bilgilerini virgülden sonra 6 basamak olacak şekilde yazdırıyoruz
Serial.print(gps.location.lat(), 6);
Serial.print(" , ");
Serial.print(gps.location.lng(), 6);
} else {
Serial.print("Sinyal Yok (Uydu Araniyor...)");
}
Serial.print(" | Uydu Sayisi: ");
if (gps.satellites.isValid()) {
Serial.print(gps.satellites.value());
} else {
Serial.print("0");
}
Serial.print(" | Hiz: ");
if (gps.speed.isValid()) {
Serial.print(gps.speed.kmph());
Serial.print(" km/h");
} else {
Serial.print("0");
}
Serial.println();
}
Çözüm: GPS modülleri evlerin içinde, beton binaların altında uydu sinyali alamazlar. Sistemi test etmek için modülün antenini mutlaka pencere kenarına koymalı ya da açık bir alana çıkmalısınız. Modülün uydulara ilk kilitlenmesi (Cold Start) açık alanda bile bazen 2 ila 5 dakika sürebilir. Bağlantı kurulduğunda modül üzerindeki küçük kırmızı LED yanıp sönmeye başlayacaktır.
Çözüm: Arduino IDE ekranındaki Seri Port Ekranının sağ alt köşesinde bulunan Baud Rate (Haberleşme Hızı) ayarının 9600 baud olarak seçildiğinden emin olun.
Henüz yorum yapılmamış. İlk yorumu siz yapın!