Arduino
OKUDUĞUNUZ KONU
Arduino GPS Modülü Konum Belirleme
13

Arduino GPS Modülü Konum Belirleme

Yazar : Murat Duran13 Eylül 2015

Arduino GPS modülü kullanarak bulunduğunuz noktanın koordinatlarına ulaşabilirsiniz.Bu koordinatları belli servisler yardımıyla görsele dönüştürüp kullana bilirsiniz.Navigasyon sistemlerinin çalışma prensibi de budur.Gps üzerinden koordinatlara ulaşarak anlık yer tespiti yapar ve sizin bulunduğunuz koordinatları cihazda yüklü olan haritada gösterir.Bizim yapacağımız cihaz elbetteki bu kadar gelişmiş olmayacak biz sadece lcd ekran üzerinden bulunduğunuz noktanın koordinatlarını yazdıracağız.

Proje basit gibi görülebilir ancak arduino da çok önemli bir modül olan gps modülünün çalışma prensibini ve kullanımını göreceğiz.

Projemizde kullanacağımız malzemeler

  • Arduino UNO
  • GSP Modülü (GY-NEO6MV2) veya benzer serisi
  • LCD 16×2 ekran

Öncelikle aşağıdaki şemaya göre devremizi kurmamız gerekiyor zaten basit bir devre olduğundan çok fazla anlatımına girmiyorum.Eksiksiz olarak aşağıdaki devrenin aynısını yapınız.

GPS üzerinden aldığımız konum koordinatlarını google maps üzerine yazdığınız size haritada nerede olduğunuzu gösterecektir.Yazacığınız basit bir script ile bunu otomatik olarak yaptırabilirsiniz.

https://www.google.com/maps/place/<enlem>+<boylam>
#include <LiquidCrystal.h>
#include <string.h>
#include <ctype.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int rxPin = 0; // RX pin
int txPin = 1; // TX pin
int byteGPS=-1;
char cmd[7] = "$GPRMC";
int counter1 = 0; // counts how many bytes were received (max 300)
int counter2 = 0; // counts how many commas were seen
int offsets[13];
char buf[300] = "";

/**
* Setup display and gps
*/
void setup() {
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
Serial.begin(4800);
lcd.begin(16, 2);
lcd.print("waiting for gps");
offsets[0] = 0;
reset();
}

void reset() {
counter1 = 0;
counter2 = 0;
}

int get_size(int offset) {
return offsets[offset+1] - offsets[offset] - 1;
}

int handle_byte(int byteGPS) {
buf[counter1] = byteGPS;
Serial.print((char)byteGPS);
counter1++;
if (counter1 == 300) {
return 0;
}
if (byteGPS == ',') {
counter2++;
offsets[counter2] = counter1;
if (counter2 == 13) {
return 0;
}
}
if (byteGPS == '*') {
offsets[12] = counter1;
}

// Check if we got a <LF>, which indicates the end of line
if (byteGPS == 10) {
// Check that we got 12 pieces, and that the first piece is 6 characters
if (counter2 != 12 || (get_size(0) != 6)) {
return 0;
}

// Check that we received $GPRMC
for (int j=0; j<6; j++) {
if (buf[j] != cmd[j]) {
return 0;
}
}

// Check that time is well formed
if (get_size(1) != 10) {
return 0;
}

// Check that date is well formed
if (get_size(9) != 6) {
return 0;
}

// TODO: compute and validate checksum

// TODO: handle timezone offset

// print time
lcd.clear();
for (int j=0; j<6; j++) {
lcd.print(buf[offsets[1]+j]);
if (j==1) {
lcd.print("h");
} else if (j==3) {
lcd.print("m");
} else if (j==5) {
lcd.print("s UTC");
}
}

// print date
lcd.setCursor(0, 1);
for (int j=0; j<6; j++) {
lcd.print(buf[offsets[9]+j]);
if (j==1 || j==3) {
lcd.print(".");
}
}
return 0;
}
return 1;
}

/**
* Main loop
*/
void loop() {
byteGPS=Serial.read(); // Read a byte of the serial port
if (byteGPS == -1) { // See if the port is empty yet
delay(100);
} else {
if (!handle_byte(byteGPS)) {
reset();
}
}
}
SİZCE NASIL OLMUŞ?
Beğendim
74%
İlginç
7%
Eh İşte
4%
Anlamadım
7%
Kötü
0%
Berbat
7%
YAZAR HAKKINDA
Murat Duran
Murat Duran
Açık kaynak donanım ve yazılım geliştiricisiyim , mekanik ve robotik sistemler üzerinde çalışmalar yapmaktayım.Ayrıca bir start-up firması olan Proje Hocam 'ın kurucuyum.
13 YORUMLAR
  • emrah
    13 Eylül 2015 at 17:58

    sa hocam benim cahilligimi mazur görün bu lcd ekran çıktısında hangisi enlem hangisi boylam ve sizin verdiginiz sitede nasıl yazıcam karısık
    geldi biraz bana ufak bir örnek yaparmisiniz https://maps.google.com/?ll=,
    yani parantez içlerini doldurmusunuz ekrandaki çıktıya ona göre malzeme felan alıcam yapamassam yazık olmasın paraya : 🙂
    bu arada proje için teşekkür ederim

  • Halit Yılmaz
    30 Mart 2016 at 19:37

    Merhabalar hocam , bende bu sızın yaptıgınız projeye benzer bır proje yapıcam bu yaptıklarınıza ek olarakta bır uzaktan kumandalı aracı bır konum baska bır konuma gondermeye calıscam fakat gbs hakkında hıcbır bılgım yok ve sızın bu projede kullandıgınız modul benım ısımı gorurmu acaba..? Yardımcı olabılırmısınız acaba ….?

  • Enis
    28 Eylül 2016 at 21:31

    Devreyi ve programlamayı yaptım fakat süpekli ekranda waiting for gps yazıyo sorun nerde olabilir

  • orhan öğüt
    20 Kasım 2016 at 01:10

    Merhaba,hocam bana görme engelliler için gps lazım arduinoyla yardımcı olabilirmisiniz gerekirse projenizi satın alırım

  • Erkan
    21 Mayıs 2018 at 23:45

    arduino TX / gps RX bağlantısı yapılacak mı?

  • HALİL YAŞLI
    23 Mayıs 2018 at 17:06

    hocam kolay gelsin #include
    #include kütüphanelerini nerede bulabilir acaba?

  • gökhan erne
    28 Kasım 2018 at 16:39

    ARDUİNO için en hassas ve düzgün çalışacak gps modülü öneriniz var mı

YORUM YAP