Kod Ara

Arduino'da GPS Sinyalinden Enlem ve Boylam Çıkarma

Arduino'da GPS Sinyalinden Enlem ve Boylam Çıkarma

Bu eğitimde, Arduino ve Ublox NEO-6M GPS modülünü kullanarak bir GPS sinyalinden enlem ve boylam verilerinin nasıl çıkarılacağını öğreneceğiz. Bu proje, robotik veya açık hava navigasyonu gibi konum takibi gerektiren uygulamalar için özellikle kullanışlıdır. Bu eğitimin sonunda, GPS verilerini okuyan ve koordinatları seri monitöre yazdıran çalışan bir programa sahip olacaksınız.

Ayrıntılara dalmadan önce, bağlantı ve kod uygulaması hakkında daha fazla açıklama için ilgili videoya başvurmak isteyebilirsiniz (videoda 00:00'da).

Donanım Açıklaması

Bu projenin ana bileşeni Ublox NEO-6M GPS modülüdür. Bu modül, GPS uydularından gelen sinyalleri kullanarak doğru konumlandırma verileri sağlamak üzere tasarlanmıştır. Aynı anda birden fazla uydudan sinyal alabilir, bu da hassas konum takibine olanak tanır. Modül, Arduino ile seri iletişim kullanarak haberleşir ve bu da onu çeşitli projelere entegre etmeyi kolaylaştırır.

GPS modülüne ek olarak, GPS verilerini işlemek için bir Arduino kartına ihtiyacınız olacaktır. Arduino, GPS modülü tarafından gönderilen verileri okuyacak ve daha sonra kullanılmak üzere enlem ve boylam değerlerini çıkaracaktır. GPS modülü tipik olarak 5V ile çalışır ve Arduino'nun RX pini üzerinden okuyabileceği bir seri çıkış sağlar.

Veri Sayfası Ayrıntıları

Üreticiu-blox
Parça numarasıNEO-6M
Mantık/IO voltajı3.3V
Besleme voltajı3.0 ila 5.5V
Çıkış akımı≤ 50 mA
GPS hassasiyeti-165 dBm
Çalışma sıcaklığı-40 ila 85 °C
Güncelleme hızı1 Hz (varsayılan)
Paket25 x 35 x 4 mm
Notlar / varyantlarÇeşitli konfigürasyonlar mevcuttur

  • GPS modülünün sabit bir güç kaynağına (3.0 ila 5.5V) bağlı olduğundan emin olun.
  • GPS veri ayrıştırmayı işlemek için uygun bir kütüphane kullanın.
  • Daha iyi uydu alımı için anteni engellerden uzak tutun.
  • GPS modülünün baud hızını kontrol edin; tipik olarak 9600 baud'da çalışır.
  • GPS modülü kararsızsa güç yumuşatma için bir kapasitör kullanmayı düşünün.

Bağlantı Talimatları

Arduino wiring for Neo-6M GPS module
Arduino wiring for Neo-6M GPS module

NEO-6M GPS modülünü Arduino'nuzla bağlamak için, GPS modülünün VCC pinini Arduino'daki 5V pinine bağlayarak başlayın. Ardından, GPS modülünün GND pinini Arduino'daki toprak (GND) pinine bağlayın. GPS modülü, Arduino ile TX ve RX pinlerini kullanarak iletişim kuracaktır. GPS modülünün TX pinini Arduino'daki RX pinine (genellikle pin 0) bağlayın.

Özel I2C pinlerine sahip bir Arduino kullanıyorsanız, SDA ve SCL pinlerini uygun şekilde bağladığınızdan emin olun (standart Arduino kartlarında genellikle SDA için A4 ve SCL için A5). Bağlantıdan sonra, tüm bağlantıların güvenli ve doğru yönlendirilmiş olduğundan emin olmak için tüm bağlantıları tekrar kontrol edin.

Kod Örnekleri ve Açıklaması

Seri iletişimi başlatmak ve GPS verileri için giriş dizesini ayarlamak üzere kodun kısa bir alıntısı burada:

void setup() {
    Serial.begin(9600);
    inputString.reserve(200);
}

Bu kod, seri iletişimi 9600 baud hızında başlatır ve gelen GPS veri dizesi için yer ayırır.

Şimdi, gelen GPS verilerini işleyen ve enlem ile boylamı çıkaran kodun bir kısmına bakalım:

if (BB == signal) {
    String LAT = inputString.substring(7, 17);
    String LON = inputString.substring(20, 31);
    Serial.println(LAT);
    Serial.println(LON);
}

Bu parçada, program gelen verinin beklenen GPS sinyaliyle eşleşip eşleşmediğini kontrol eder. Eşleşirse, giriş dizesinden enlem ve boylam değerlerini çıkarır ve bunları seri monitöre yazdırır.

Son olarak, kod seri bağlantı üzerinden gelen yeni verileri işlemek için bir bölüm içerir:

void serialEvent() {
    while (Serial.available()) {
        char inChar = (char) Serial.read();
        inputString += inChar;
        if (inChar == '\\n') {
            stringComplete = true;
        }
    }
}

Bu işlev, seri porttan gelen karakterleri okur ve bunları inputString değişkenine ekler. Bir yeni satır karakteri algılandığında, stringComplete bayrağını true olarak ayarlar ve tam bir veri dizesinin alındığını belirtir.

Gösterim / Beklentiler

Kodu yükleyip Arduino'yu çalıştırdığınızda, seri monitörde enlem ve boylam değerlerinin yazdırıldığını görmelisiniz. GPS modülünün uydu sinyallerini etkili bir şekilde alabilmesi için gökyüzüne açık bir görüş alanına sahip olduğundan emin olmak önemlidir. Modül sinyal alamazsa, geçerli koordinatları görüntüleyemeyebilir (videoda 02:30'da).

Yaygın sorunlar arasında bağlantı hataları, yetersiz güç kaynağı ve zayıf uydu alımı bulunur. Herhangi bir sorunla karşılaşırsanız bu yönleri kontrol ettiğinizden emin olun.

Video Zaman Damgaları

  • 00:00 - Giriş
  • 02:30 - Bağlantı talimatları
  • 05:00 - Kod açıklaması
  • 08:15 - GPS işlevselliğinin gösterimi

Görseller

GPS antenna
GPS antenna
GPS module with antenna
GPS module with antenna
GPS modules
GPS modules
Arduino wiring for Neo-6M GPS module
Arduino wiring for Neo-6M GPS module
3-Extract latitude and longitude from a GPS signal in an Arduino NEO-6M
Dil: C++
/*
 * Bu, Ublox NEO-6M GPS modülü için Arduino kodudur.
 * Bu kod, GPS enlem ve boylamını çıkararak başka amaçlarla kullanılabilmesini sağlar.
 * 
 * Robojax Videosu için Ahmad Nejrabi tarafından yazılmıştır.
 * Tarih: 24 Ocak 2017, Ajax, Ontario, Kanada
 * Bu not kodla birlikte saklanmak şartıyla kodun paylaşılmasına izin verilmiştir.
 * Sorumluluk Reddi: Bu kod "OLDUĞU GİBİ" sunulmuştur ve yalnızca eğitim amaçlıdır.
 * 
 * // RoboJax.com için yazılmıştır
 */
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
String signal = "\$GPGLL";
void setup() {
 // initialize serial:
    Serial.begin(9600);
 // reserve 200 bytes for the inputString:
    inputString.reserve(200);
}

void loop() {
 // print the string when a newline arrives:
    if (stringComplete) {
        String BB = inputString.substring(0, 6);
        if (BB == signal) {
            String LAT = inputString.substring(7, 17);
            int LATperiod = LAT.indexOf('.');
            int LATzero = LAT.indexOf('0');
            if (LATzero == 0) {
                LAT = LAT.substring(1);
            }

            String LON = inputString.substring(20, 31);
            int LONperiod = LON.indexOf('.');
            int LONTzero = LON.indexOf('0');
            if (LONTzero == 0) {
                LON = LON.substring(1);
            }

            Serial.println(LAT);
            Serial.println(LON);

        }

 // Serial.println(inputString);
 // clear the string:
        inputString = "";
        stringComplete = false;
    }
}

/*
 * SerialEvent occurs whenever new data arrives via the
 * hardware serial RX. This routine runs between each
 * time loop() runs, so using delay inside loop can delay
 * response. Multiple bytes of data may be available.
 */
void serialEvent() {
    while (Serial.available()) {
 // get the new byte:
        char inChar = (char) Serial.read();
 // add it to the inputString:
        inputString += inChar;
 // if the incoming character is a newline, set a flag
 // so the main loop can do something about it:
        if (inChar == '\\n') {
            stringComplete = true;
        }
    }
}

İhtiyacın olabileceğini düşünüyor

Kaynaklar ve referanslar

Henüz kaynak yok.

Dosyalar📁

Diğer dosyalar

  • GPS TinyGPSPlus NEO-7 DataSheet
    Datasheet for the u-blox NEO-7 GPS module, a compact GNSS receiver with high sensitivity and low power consumption. It provides positioning data via UART and is commonly used with Arduino and the TinyGPSPlus library.
    robojax_GPS_TinyGPSPlus_NEO-7_DataSheet.pdf 1.73 MB