Arduino GPS Modülü Kullanımı
Arduino ile ublox NEO-6M GPS Modülü Kullanımı
Yeni Arduino projenize, dünyanın herhangi bir yerindeki konumları belirleyebilen ve 22 uyduya kadar izleyebilen NEO-6M GPS Modülü ile yerleri algılama yeteneği verin. GPS dünyasına girmek isteyen herkes için harika bir fırlatma rampası görevi görebilir bu yazımız da arduino ile gps modulü kullanımı inceleyeceğiz. Hadi Gelin:)
Arduino gps modülü çeşidi olana ublox neo-6m gps modülü düşük güç tüketmektedir (pille çalışan cihazlar için uygundur), ucuzdur, arayüzleri kolaydır ve arduino projesi meraklısı makerlar arasında delicesine popülerdir.
Konuya en temelden başlayalım.
GPS Modülleri ve Kablosuz Haberleşme Araçları için BURAYA TIKLA En Ucuz Fiyata Satın Al.
Arduino GPS Kullanımı İçerik:
- GPS Nasıl çalışır?
- NEO-6M GPS Modülünün Donanım Genel Bilgisi(NEO-6M GPS Çipi)
- NEO-6M GPS Teknik Özellikleri
- Konum Sabitleme LED Göstergesi
- 3.3V LDO Regülatörü
- Pil ve EEPROM
- Anten
- NEO-6M GPS Modül Bağlantısı
- NEO-6M GPS Modülü Arduino UNO Bağlantısı
- Arduino Kodu – GPS Verilerini Okuma
- NMEA Verilerini Ayrıştırma
- Arduino Kodu – TinyGPS Kütüphanesi
- TinyGPS ++ Kütüphanesinde Diğer Faydalı İşlevler
- U Center Yazılımı
- NEO-6M GPS Modülünü U-Center Yazılımı ile İlişkilendirme
- U-Center Kullanımı
GPS Nasıl Çalışır?
GPS alıcıları aslında birkaç uydudan ne kadar uzakta olduğunuzu bularak çalışırlar. Uydular, bulundukları yer ve şimdiki zaman hakkında dünyaya radyo sinyalleri şeklinde bilgi iletir. Bu sinyaller uyduları tanımlar ve alıcıya nerede olduklarını söyler. Alıcı daha sonra, her bir uydunun ne kadar uzakta olduğunu, sinyallerin gelmesinin ne kadar sürdüğünü hesaplayarak konumu bildirir. En az üç uydudan gelen veriler ve uzayda bulundukları konum hakkında bilgi sahibi olduktan sonra, Dünya üzerindeki konumunuzu belirleyebilir. Yani 1 – 2 uydu ile bu iş olmuyor malesef. Bu işlem Trilatrasyon olarak bilinir. |
NEO-6M GPS Modülünün Donanım Genel Bilgisi
NEO-6M GPS Çipi
Modülün merkezinde u-blox’dan NEO-6M GPS çipi bulunur. Çip, bir posta pulu boyutundan daha küçüktür ancak şaşırtıcı miktarda özellik içerir.
50 kanalda 22’ye kadar uydu izleyebilir ve sadece 45mA besleme akımı tüketirken, gps modülleri içerisinde en yüksek hassasiyet seviyesini elde eder, tam -161 dBm izleme. Yani bu en hızlısı ve en doğru konumlandırma oranına sahip modül olduğunu gösteriyor.
Diğer GPS modüllerinin aksine, 2.5m Yatay konum doğruluğu ile saniyede 5 lokasyon güncellemesi yapabilir. U-blox 6 konumlandırma motoru ayrıca 1 saniyeden daha kısa bir İlk Onarma Süresi (TTFF) sunar.
Çipin sağladığı en iyi özelliklerden biri Güç Tasarruf Modu’dur (PSM). Alıcının parçalarını seçici olarak AÇIK ve KAPALI konuma getirerek sistem güç tüketiminde azalma sağlar. Bu, modülün güç tüketimini sadece 11mA’ya düşürerek GPS kol saati gibi güce duyarlı uygulamalar için çok idealdir.
NEO-6M GPS çipinin gerekli veri pimleri 0,1 adım başlıklara ayrılmıştır. Bu, UART üzerinden bir mikrodenetleyici ile iletişim için gerekli pinleri içerir. Modül, varsayılan 9600 baud ile 4800bps’den 230400bps’ye kadar olan baud hızını destekler.
NEO-6M GPS Teknik Özellikleri
Alıcı tipi | 50 kanal, GPS L1 (1575.42 Mhz) |
Yatay Konum Doğruluk | 2.5m |
Navigasyon Güncelleme Oranı | 1HZ (maksimum 5Hz) |
Zaman yakalama | Standby Mod: 27 s – Aktif Mod: 1s |
Gezinme Duyarlılığı | -161dBm |
İletişim protokolü | NMEA, UBX İkili, RTCM |
Seri Baud Hızı | 4800-230400 (varsayılan 9600) |
Çalışma sıcaklığı | -40 ° C ~ 85 ° C |
Çalışma gerilimi | 2.7V ~ 3.6V |
Çalışma akımı | 45mA |
TXD / RXD Empedansı | 510Ω |
NEO-6M GSM çipi hakkında daha fazla bilgi için bu veri sayfasını inceleyin.
Konum Sabitleme LED Göstergesi
NEO-6M GPS Modülünde, Konum Sabitleme durumunu gösteren bir LED vardır. Hangi durumda olduğuna bağlı olarak çeşitli oranlarda yanıp sönecektir:
- Yanıp Sönme Yok – Uyduları arıyor.
- Her 1 saniyede bir yanıp sönme – Konum Bulma (Modül yeterince uydu yakalayabilir)
3.3V LDO Regülatörü
NEO-6M GPS çipinin çalışma voltajı 2.7 ile 3.6V arasındadır.
Lojik pinler ayrıca 5 volt toleranslıdır, böylece herhangi bir lojik seviye dönüştürücüsünü kullanmadan kolayca bir Arduino veya herhangi bir 5V lojik mikrokontrolcüye bağlayabiliriz.
Pil ve EEPROM
Modül, bir HK24C32 iki telli seri EEPROM ile donatılmıştır. 4 KB boyutundadır ve NEO-6M yongasına I2C üzerinden bağlanmıştır.
Modül ayrıca süper kapasitör görevi gören şarj edilebilir bir düğme pil içerir.
Pille birlikte bir EEPROM, pil destekli RAM’in (BBR) korunmasına yardımcı olur. BBR, saat verilerini, en son konum verilerini (GNSS yörünge verileri) ve modül konfigürasyonunu içerir. Ancak kalıcı veri depolama için uygun değildir.
Batarya saat ve son pozisyonunu koruduğu için, ilk fiksata kadar geçen süre (TTFF) 1 saniyeye önemli ölçüde azalır. Bu, çok daha hızlı pozisyon konumlandırma sağlar.
Batarya olmadan GPS daima standby çalışır, böylece ilk GPS konumlandırması daha fazla zaman alır.
Güç uygulandığında pil otomatik olarak şarj olur ve verileri iki haftaya kadar elektriksiz tutar.
Anten
İletişim için modüle bir anten gerekmektedir. Bu yüzden, modül -161 dBm duyarlılığa sahip bir anten ile birlikte geliyor.
Bu anteni modülde bulunan küçük U.FL konektörüne sabitleyebilirsiniz.
Dahili Anten Yuvası anteni çoğu proje için yeteri kadar iş görmektedir. Ancak, daha fazla hassasiyet elde etmek veya modülünüzü metal bir kasanın içine koymak istiyorsanız, U.FL konektörü ile herhangi bir 3V aktif GPS antenini de bağlayabilirsiniz.
İPUCU
U.FL konektörleri küçük ve hassastır. U.FL bağlantısına zarar vermemek için, U.FL kablosunu montaj deliğinden geçirmenizi ve ardından U.FL konektörlerine takmanızı öneririz.
NEO-6M GPS Modül Bağlantısı
NEO-6M GPS modülünü takılacak karta bağlantısı için toplam 4 pime sahiptir. Bağlantılar aşağıdaki gibidir:
GND , Ground Pin’dir ve Arduino’daki GND pinine bağlanmalıdır.
Seri haberleşme için TxD (Verici) pimi kullanılır.
RxD (Alıcı) pimi seri haberleşme için kullanılır.
VCC , modül için güç sağlar. Arduino’daki 5V pinine doğrudan bağlayabilirsiniz.
NEO-6M GPS Modülü Arduino UNO Bağlantısı
Artık modül hakkında her şeyi biliyoruz ve arduino’muza takmaya başlayabiliriz!
Anten takılma yuvasını U.FL konnektörüne bağlayarak başlayın. U.FL kablosunu sağlam bağlantı için montaj deliklerinden birine geçirmeyi unutmayın.
Modül genellikle lehimlenmemiş başlık pimleri ile birlikte gelir. Yani, onları lehimlemeniz gerekecek.
Şimdi, modül üzerindeki Tx ve Rx pinlerini Arduino’daki sırasıyla # 2 ve # 3 dijital pinlerine bağlayın; modülle konuşmak için seri yazılım kullanacağız.
Ardından, VCC pinini arduino üzerindeki 5V pinine ve GND’yi toprağa bağlayın.
NEO-6M GPS Modülünü Arduino UNO’ya Kablolama
Her şeyi bağladığınızda, kullanmaya hazırsınız!
Arduino Kodu – GPS Verilerini Okuma
Herhangi bir GPS alıcısıyla ilgili en iyi şey, verileri yüklediğiniz anda hatasız çalışmaya başlamalarıdır.
Bu verileri test etmenin en iyi yolu Arduino’yu USB’den TTL Dönüştürücü bağlayarak kullanmaktır. Aşağıdaki program tam da bunu yapar.
#include <SoftwareSerial.h> // Choose two Arduino pins to use for software serial int RXPin = 2; int TXPin = 3; //Default baud of NEO-6M is 9600 int GPSBaud = 9600; // Create a software serial port called "gpsSerial" SoftwareSerial gpsSerial(RXPin, TXPin); void setup() { // Start the Arduino hardware serial port at 9600 baud Serial.begin(9600); // Start the software serial port at the GPS's default baud gpsSerial.begin(GPSBaud); } void loop() { // Displays information when new sentence is available. while (gpsSerial.available() > 0) Serial.write(gpsSerial.read()); }
Programı yükleyin ve seri monitörü Arduino IDE’den açın. 9600 baud’u seçmeyi unutmayın. Aşağıdaki gibi bir metin görmelisiniz:
NEO-6M GPS Konum Görüntü Kodları
Seri arayüz üzerinden aldığınız veriler aslında NMEA cümleleridir .
NMEA, Ulusal Deniz Elektroniği Birliği’nin kısaltmasıdır. Neredeyse tüm GPS alıcıları için standart bir mesaj formatıdır.
NMEA standardı cümleler olarak adlandırılan veri satırları halinde biçimlendirilmiştir. Her cümle, virgülle ayrılır ve bilgisayarlar ve mikrodenetleyiciler tarafından ayrıştırılmasını kolaylaştırır.
NMEA cümleleri güncelleme oranı adı verilen bir aralıkta gönderilir.
NEO-6M GPS modülü bu bilgileri saniyede bir kez (1Hz frekans) varsayılan olarak günceller. Ancak, saniyede 5 güncellemeye kadar yapılandırabilirsiniz (5Hz frekans).
NMEA Verilerini Ayrıştırma
NMEA standardında birçok cümle vardır, en yaygın olanları:
- $ GPRMC (Küresel Konumlandırma Önerilen Asgari Koordinatlar) saat, tarih, enlem, boylam, yükseklik ve tahmini hız sağlar.
- $ GPGGA cümle, 3B konum ve doğruluk verileri sağlayan temel düzeltme verileri sunar.
Bir GPS alıcısından $ GPRMC NMEA cümle örneği alalım.
$ GPRMC 123519, A, 4807.038, N, 01131.000, E, 022.4, 084.4, 230394, 003.1, W * 6A |
$ | Her NMEA cümlesi $ karakteriyle başlar. |
GPRMC | Küresel Konumlandırma Önerilen Asgari Koordinatlar |
123519 | UTC geçerli saati – 12:35:19 |
A | Durum A = aktif veya V = Boş. |
4807.038, N- | Enlem 48 derece 07.038 ′ N |
01131.000 E | Boylam 11 derece 31.000 ′ E |
022,4 | Düğümlerde zeminden hız |
084,4 | Derece cinsinden iz açısı |
220318 | Güncel Tarih – 22 Mart 2018 |
003,1, W, | Manyetik Değişim |
* 6A | Sağlama toplamı verileri her zaman * ile başlar |
$ GPGGA NMEA cümlesinden örnek alalım.
$ GPGGA, 123519, 4807.038, N, 01131.000, E, 1, 08, 0.9, 545.4, M, 46.9, M,, * 47 |
$ | NMEA cümlesinin başlatılması. |
GPGGA | Global Konumlandırma Sistemi Düzeltme Verileri |
123519 | UTC geçerli saati – 12:35:19 |
4807.038, N- | Enlem 48 derece 07.038 ′ N |
01131.000 E | Boylam 11 derece 31.000 ′ E |
1 | GPS bağlantısı |
08 | İzlenen uydu sayısı |
0.9 | Yatay pozisyon dilüsyonu |
545.4, E | Metre Olarak Yükseklik (deniz seviyesinin üstünde) |
46.9, E | Jeoidin yüksekliği (ortalama deniz seviyesi) |
(boş alan) | Son DGPS güncellemesinden bu yana saniye cinsinden süre |
(boş alan) | DGPS istasyonu kimlik numarası |
* 47 | Sağlama toplamı verileri her zaman * ile başlar |
NMEA cümleleri ve içerdikleri veriler hakkında daha fazla bilgi için, gpsinformation.org adresini ziyaret edin.
Arduino Kodu – TinyGPS Kütüphanesi
Genellikle projelerimiz için, NMEA cümlelerini faydalı bilgilere ayrıştırmamız gerekir. Çalışmamızı kolaylaştırmak için TinyGPS ++ kütüphanesi adlı bir kütüphanemiz var.
Bu kütüphane, GPS modüllerinden veri almak için arka planda yararlı verilerin okunması ve çıkarılması gibi çok fazla işlemi yapmaktadır.
Önce kütüphaneyi, GitHub deposunu ziyaret ederek indirin veya zip dosyasını indirmek için bu düğmeye tıklayın:
Kurmak için, Arduino IDE’yi açın, Taslak> Library Ekle> .ZIP Kitaplığı Ekle’ye gidin ve daha sonra indirdiğiniz TinyGPSPlus ZIP dosyasını seçin. Kütüphane kurma hakkında daha fazla ayrıntıya ihtiyacınız varsa, Arduino Kütüphanesi Yükleme sayfasına göz atabilirsiniz. Kütüphaneyi kurduktan sonra, aşağıdaki kodu Arduino IDE’ye kopyalayabilirsiniz.
Aşağıdaki test kodu lcd ekran üzerinde konum bilgilerini (Enlem, Boylam ve Yükseklik) ve UTC’yi (Tarih ve Saat) gösterecektir.
#include <TinyGPS++.h> #include <SoftwareSerial.h> // Choose two Arduino pins to use for software serial int RXPin = 2; int TXPin = 3; int GPSBaud = 9600; // Create a TinyGPS++ object TinyGPSPlus gps; // Create a software serial port called "gpsSerial" SoftwareSerial gpsSerial(RXPin, TXPin); void setup() { // Start the Arduino hardware serial port at 9600 baud Serial.begin(9600); // Start the software serial port at the GPS's default baud gpsSerial.begin(GPSBaud); } void loop() { // This sketch displays information every time a new sentence is correctly encoded. while (gpsSerial.available() > 0) if (gps.encode(gpsSerial.read())) displayInfo(); // If 5000 milliseconds pass and there are no characters coming in // over the software serial port, show a "No GPS detected" error if (millis() > 5000 && gps.charsProcessed() < 10) { Serial.println("No GPS detected"); while(true); } } void displayInfo() { if (gps.location.isValid()) { Serial.print("Latitude: "); Serial.println(gps.location.lat(), 6); Serial.print("Longitude: "); Serial.println(gps.location.lng(), 6); Serial.print("Altitude: "); Serial.println(gps.altitude.meters()); } else { Serial.println("Location: Not Available"); } Serial.print("Date: "); if (gps.date.isValid()) { Serial.print(gps.date.month()); Serial.print("/"); Serial.print(gps.date.day()); Serial.print("/"); Serial.println(gps.date.year()); } else { Serial.println("Not Available"); } Serial.print("Time: "); if (gps.time.isValid()) { if (gps.time.hour() < 10) Serial.print(F("0")); Serial.print(gps.time.hour()); Serial.print(":"); if (gps.time.minute() < 10) Serial.print(F("0")); Serial.print(gps.time.minute()); Serial.print(":"); if (gps.time.second() < 10) Serial.print(F("0")); Serial.print(gps.time.second()); Serial.print("."); if (gps.time.centisecond() < 10) Serial.print(F("0")); Serial.println(gps.time.centisecond()); } else { Serial.println("Not Available"); } Serial.println(); Serial.println(); delay(1000); }
Kodlar TinyGPSPlus
++ kütüphanesini ve yazılım seri kütüphanesini dahil ederek başlar. Ardından, NEO-6M GPS modülünün bağlı olduğu arduino pinlerini ve varsayılan GPS baud hızını saklayan değişkenleri tanımlayalım.
TinyGPSPlus
nesnesinin oluşturulması, kütüphaneyle ilgili özel fonksiyonlara erişime yardımcı olacaktır. Sonra, gpsSerial
adında, modülle iletişim sağlayabileceğimiz bir yazılım seri portu oluşturalım.
#include <TinyGPS++.h> #include <SoftwareSerial.h> int RXPin = 2; int TXPin = 3; int GPSBaud = 9600; TinyGPSPlus gps; SoftwareSerial gpsSerial(RXPin, TXPin);
setup
fonksiyonunda, PC ile GPS modülünün seri haberleşmesini başlatmamız gerekir.
void setup() { Serial.begin(9600); gpsSerial.begin(GPSBaud); }
loop
işlevinde, her yeni NMEA cümleyi doğru şekilde kodlandığında, seri monitörde konum bilgilerini (Enlem, Boylam ve Yükseklik) ve UTC’yi (Tarih ve Saat) basan displayInfo()
özel işlevini çağırırız.
5000 milisaniye geçerse ve yazılımın seri bağlantı noktasından herhangi bir karakter gelmiyorsa, GPS tespit hatası bulunamadı.
void loop() { while (gpsSerial.available() > 0) if (gps.encode(gpsSerial.read())) displayInfo(); if (millis() > 5000 && gps.charsProcessed() < 10) { Serial.println(F("No GPS detected")); while(true); } }
Çıkış, seri monitörde böyle gözükür.
TinyGPS ++ Kütüphanesinde Diğer Faydalı İşlevler
TinyGPS ++ nesnesiyle kullanabileceğiniz birkaç yararlı işlev vardır. Bunlardan birkaçı aşağıda listelenmiştir:
gps.speed.value()
işlevi, geçerli düğüm hızını bir düğümün 100’ünde verir.gps.course.value()
işlevi, geçerli zemin rotasını bir derecenin 100’ünde döndürür.gps.satellites.value()
işlevi, görünen ve katılan uyduların sayısını döndürür.gps.hdop.value()
işlevi, hassasiyetin yatay küçülmesini döndürür.- Bir nesnenin verilerinin kaç yaşında olduğunu bilmek istiyorsanız, son güncellemesinden bu yana milisaniye sayısını döndüren
age()
yöntemini kullanın. 1500 veya daha büyük bir değer dönüşü alırsanız, bir düzeltme gibi sorunun işareti olabilir. - Başka bir NMEA cümlesinden veri çıkarmak istiyorsanız, TinyGPS ++ ‘a cümle adını ve ilgilendiğiniz alan numarasını yazarak, kütüphanenin özel çıkartma işlevini kullanabilirsiniz:
TinyGPSCustom magneticVariation(gps, "GPRMC", 10)
Ya da diğerleri gibi sorgulayabilirsiniz:magneticVariation.value()
U-Center Yazılımı
U- blox yazılımı olan U-center, NEO-6M de dahil olmak üzere u-blox GPS alıcılarının değerlendirilmesi, performans analizi ve yapılandırması için güçlü bir araçtır. Ücretsiz bir araçtır, ancak yalnızca Windows platformunda kullanılabilir.
Yazılım ile herhangi bir GPS alıcısı gerçek zamanlı yapılandırılmış ve grafik veri görselleştirme görüntüleyebilir
- Uydu özet görünümü
- Gezinme özeti görünümü
- Pusula, hız göstergesi, saat, altimetre
- Tercih edilen herhangi iki parametrenin grafik görünümü
- Veri kaydı ve oynatma işlevselliği
Yazılım U-blox web sitesinden indirilebilir.
NEO-6M GPS Modülünü U-Center Yazılımı ile İlişkilendirme
U-Center yazılımını kullanmak için, NEO-6M gps modülünüzü herhangi bir USB – TTL dönüştürücü kullanarak PC’ye bağlamanız gerekir.
Aşağıdaki resimde, PC’ye PL2303 USB – TTL çevirici ile bağlı NEO-6M gösterilmektedir.
U-Center Kullanımı
Başarılı bir kurulumdan sonra u-center Başlat Menüsünden başlatılabilir (Tüm Programlar -> u-blox-> u-center -> u-center) ve aşağıda gösterildiği gibi çalışmaya başlar.
İletişim araç çubuğunu bulun ve simgenin yanındaki oku tıklayın. Mevcut tüm COM portlarını içeren bir liste göreceksiniz. Alıcının bağlı olduğu ilgili COM portunu seçin.
Metin konsolu düğmesi size ham NMEA verilerini gösterecektir. Modülden gelen görünür ASCII’yi USB üzerinden hızlı bir şekilde incelemek için kullanışlıdır.
U-center, önceden kalibre edilmiş veya Google çevrimiçi haritalarda konumları görüntüleyebilir
U-Center yazılımı hakkında daha fazla bilgi için, lütfen bu kullanım kılavuzuna bakın.
Eğer Sizde Arduino Projelerine Meraklıysanız Sitemizdeki Projelere Göz Atabilirsiniz.
Ayrıca Robotik Marketimiz ROBOCOMBO‘yu Ziyaret Edebilirsiniz.
Okuduğunuz İçin Teşekkürler.