Arduino GPS
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:)
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.
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 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:
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.
İ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.
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.
Her şeyi bağladığınızda, kullanmaya hazırsınız!
#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:
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).
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:
#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); }
TinyGPSPlus
gpsSerial
#include <TinyGPS++.h> #include <SoftwareSerial.h> int RXPin = 2; int TXPin = 3; int GPSBaud = 9600; TinyGPSPlus gps; SoftwareSerial gpsSerial(RXPin, TXPin);
setup
void setup() { Serial.begin(9600); gpsSerial.begin(GPSBaud); }
loop
displayInfo()
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.
gps.speed.value()
gps.course.value()
gps.satellites.value()
gps.hdop.value()
age()
TinyGPSCustom magneticVariation(gps, "GPRMC", 10)
magneticVariation.value()
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.
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
Internet Explorer tarayıcısının 9.0 ve daha eski sürümlerini desteklememekteyiz. Web sitemizi doğru görüntüleyebilmek için tarayıcınızı güncelleyebilirsiniz, güncelleyemiyorsanız başka bir tarayıcıyı ücretsiz yükleyebilirsiniz.
Alışveriş deneyiminizi iyileştirmek için yasal düzenlemelere uygun çerezler (cookies) kullanıyoruz. Detaylı bilgiye Gizlilik ve Çerez Politikasısayfamızdan erişebilirsiniz.