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ı
| Üretici | u-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) |
| Paket | 25 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ı

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
/*
* 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
-
AmazonNeo 6m GPS module on Amazonamzn.to
-
eBayNeo 6m GPS module on eBayebay.us
-
AliExpressNeo 6m 7m 8m on AliExpresss.click.aliexpress.com
-
AliExpressNeo 6m 7m 8m on AliExpress-2s.click.aliexpress.com
Kaynaklar ve referanslar
Henüz kaynak yok.
Dosyalar📁
Diğer dosyalar
-
GPS TinyGPSPlus NEO-7 DataSheetDatasheet 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.pdf1.73 MB