pickat neo6mv2 gps modül proton basic kodu

proton basic gps sample



Gps modül gy-neo6mv2 ile hazırladığım projede proton basic 3.2.5.5 kullandım. Kodlar ve açıklamalara aşağıdan bakabilirsiniz:


' AÇIKLAMA: NEO6MV2 GPS MODÜLÜ İLE KULLANILABİLECEK PROTON BASİC (3.2.5.5) DEMO 'KODUDUR.' TEST PLATFORMU: Pickat pic geliştirme kartı www.pickat.org
' GPS MODÜL: neo6mv2 (GY-NEO6MV2)(GPS6MV2)(modül seri iletişim kullanır, ilk 'çalıştırmada '10 dakika açık alanda sadece voltaj (max 5 volt) veriniz. Daha 'sonra cam kenarı bir yerde sinyal 'alabilirsiniz)Device = 18F2550  'Kullanılan işlemci
'Device = 16f876a  'Kullanılan işlemci olarak seçilebilir, sda-scl pinleri 14-'15'te...
XTAL 20          'Kullanılan kristal değeri (mhz)OPTIMISER_LEVEL=2 'Kod optimize açık
ALL_DIGITAL = true
'CMCON = 7Declare FLOAT_ROUNDING = On'Declare FLOAT_DISPLAY_TYPE = 1 'OR FAST'4x20 LCD TANIMLAMALARI
Declare LCD_DTPIN PORTB.4
Declare LCD_RSPIN PORTB.2
Declare LCD_ENPIN PORTB.3
Declare LCD_INTERFACE 4
Declare LCD_LINES 4
Declare LCD_TYPE 0
Declare LCD_COMMANDUS = 2000
Declare LCD_DATAUS =50 ' YADA 255
' Gps modül sürekli bilgi gönderiyor, bu bilgiyi almak yeterli, modül rx ucunu 'bağlamanıza gerek 'yok.
Declare HSERIAL_BAUD  = 9600      ' SERİ İLETİŞİM HIZI 9600 BAUD, GPS MODÜL '9600 BAUDDeclare HSERIAL_RCSTA = %10010000  ' SERİ PORT AÇILIYOR VE SÜREKLİ VERİ 'ALIŞINA 'AYARLANIYORDeclare HSERIAL_TXSTA = 100100  ' SERİ PORT VERİCİ 'MODÜLÜ AÇILIYOR - pickat 'pin:TX1 (portc.7)
Declare HSERIAL_SPBRG  = 129  '20mhz kristal için verilen değer, Pickat 'üzerinde 20 mhz kristal 'bulunuyor.
'Declare HSERIAL_SPBRG = 64  '10mhz kristal için verilen değer...'Declare HSERIAL_SPBRG= 12  '8mhz kristal için verilen değer...
Dim verial As DWord ' GELEN GENEL DATA
Dim GPSSAAT[7] As Byte ' GENEL DATADAN AYRIŞRITILAN ZAMAN BİLGİSİ DEĞİŞKENİ
Dim MESAJ[9]  As Byte ' GENEL DATADAN AYRIŞRITILAN KUZEY DOĞU KOORDİNAT 'BİLGİLERİ DEĞİŞKENİ
Dim SAY As Byte ' SAYAÇ DEĞİŞKENİ
TRISA = 000001
TRISB = 000011
TRISC = %10000000
PORTA=0
PORTB=0
PORTC=0
verial = 0
Cls

gps_al1:  'GPS saat verisi

HSerIn [verial,skip 5,Str GPSSAAT\12]  'GELEN BİLGİ 5. KARAKTER DEĞERİ VE SONRASI 'ZAMAN SAAT VERİR

'GELEN DEĞERLERDEN 48 ÇIKARILARAK LCD KARAKTER GÖSTERİMİNE 'HAZIRLANIYOR:
For SAY=0 To 6
  GPSSAAT[SAY]=GPSSAAT[SAY]-48
Next
'GREENWICH 3 SAAT ZAMAN FARKI DÜZELTME KODU:
If GPSSAAT[1] <= 9 Then
GPSSAAT[1] = GPSSAAT[1] + 3
End If

If GPSSAAT[0] = 1 Then
GPSSAAT[1] = GPSSAAT[1] - 3
End If
'BİLGİ LCDYE YAZILIYOR:
Print At 1,1,"SAAT :", " ", #GPSSAAT[0], #GPSSAAT[1],":",#GPSSAAT[2],#GPSSAAT[3],":",#GPSSAAT[4],#GPSSAAT[5]  ',#GPSSAAT[6],#GPSSAAT[7],#GPSSAAT[8],#GPSSAAT[9],#GPSSAAT[10]
DelayMS 1700  'bu değerin 1500-1900 ms arasında olması lazım

gps_al2: 'GPS 1. koordinat bilgisi

HSerIn [verial,skip 17,Str MESAJ\9]  'GELEN BİLGİ 17. KARAKTER DEĞERİ VE 'SONRASI 'ZAMAN SAAT VERİR
'GELEN DEĞERLERDEN 48 ÇIKARILARAK LCD KARAKTER GÖSTERİMİNE 'HAZIRLANIYOR:
For SAY=0 To 8
  MESAJ[SAY]=MESAJ[SAY]-48
Next

'BİLGİ LCDYE YAZILIYOR:
Print At 2,1,"KUZEY:"," ", #MESAJ[0],#MESAJ[1],".",#MESAJ[2],#MESAJ[3],".",#MESAJ[5],#MESAJ[6]  DelayMS 1700  'bu değerin 1500-1900 ms arasında olması lazım

gps_al3: 'GPS 1. koordinat bilgisi

HSerIn [verial,skip 31,Str MESAJ\9]  'GELEN BİLGİ 31. KARAKTER DEĞERİ VE 'SONRASI 'ZAMAN SAAT VERİR
'GELEN DEĞERLERDEN 48 ÇIKARILARAK LCD KARAKTER GÖSTERİMİNE 'HAZIRLANIYOR:
For SAY=0 To 7
  MESAJ[SAY]=MESAJ[SAY]-48
Next

'BİLGİ LCDYE YAZILIYOR:
Print At 3,1,"DOGU :"," ", #MESAJ[0],#MESAJ[1],".",#MESAJ[2],#MESAJ[3],".",#MESAJ[5],#MESAJ[6]
DelayMS 1700  'bu değerin 1500-1900 ms arasında olması lazım
Cls

GoTo gps_al1
End

Gps modülden alınan ham veri, usb-serial modül ile gps sensörü bağlantısı kurulduğunda terminal programda görülen değerlerdir:


$GPRMC,112702.00,A,3946.64705,N,03033.56412,E,0.032,,280819,,,A*73
$GPVTG,,T,,M,0.032,N,0.059,K,A*2E
$GPGGA,112702.00,3946.64705,N,03033.56412,E,1,08,1.17,793.7,M,37.9,M,,*5C
$GPGSA,A,3,27,10,08,32,14,18,20,21,,,,,2.36,1.17,2.05*05
$GPGSV,4,1,14,01,13,293,18,04,48,181,21,08,57,292,15,10,52,045,36*7D
$GPGSV,4,2,14,11,20,305,19,14,38,157,10,16,06,204,,18,35,302,18*7A
$GPGSV,4,3,14,20,26,057,35,21,14,103,27,22,13,245,,24,01,051,*7A
$GPGSV,4,4,14,27,64,193,40,32,53,129,39*73
$GPGLL,3946.64705,N,03033.56412,E,112702.00,A,A*61

Örnek bir görsel ham veri için:




Ham veri analizi için faydalanabileceğiniz arduino kodu:

// Nisan 2015
/*
Proje Adı: GPS MODÜL İLE KONUM TESPİTİ
Proje Yürütücüsü: R.G.
Proje Danışman Hocası: -
Üniversite: -
Bölüm: Bilgisayar Mühendisliği
Proje Kapsamında Kullanılan Bileşenler :
-- 1.6.2 Sürümlü Arduino IDE
-- Arduino Uno R3 Geliştirme Platformu
-- GY-GPS6MV2 GPS Modülü
-- HC05 Bluetooth Modül
*/

// SoftwareSerial kütüphanesini ekliyoruz.
#include 

// Sabitler ->

#define rx1Pin 3       // GPS bağlantısındaki rx pini. GPS.TX <-> ARDUİNO.RX
#define tx1Pin 4       // GPS bağlantısındaki tx pini. GPS.RX <-> ARDUİNO.TX
#define rx2Pin 6       // BLUETOOTH bağlantısındaki rx pini. BLUETOOTH.TX <->ARDUİNO.RX
#define tx2Pin 7       // BLUETOOTH bağlantısındaki tx pini. BLUETOOTH.RX <-> ARDUİNO.TX
#define sLed 11        // Sarı LED 11. pine bağlanacak.
#define kLed 12        // Kırmızı LED 12. pine bağlanacak.
#define yLed 13        // Yeşil LED 13. pine bağlanacak.

// GPS modül için kullanılacak seri haberleşme pinleri tanımlanıyor:
SoftwareSerial gps(rx1Pin, tx1Pin);

// BLUETOOTH modül için kullanılacak seri haberleşme pinleri tanımlanıyor:
SoftwareSerial bt(rx2Pin, tx2Pin);

// Değişkenler ->

byte byteGPS = 0;       // byte veri türü 0-255 arasındaki işaretsiz(pozitif) sayıları sakar.
int i = 0;              // int veri türü 2 byte'lık tam sayıları saklar.
int durum = 0;
int uydu = 0;
char dataGPS[100] = "";
char *parca;
char *GGA[15];

int key = 9;              // Bluetooth modülün key pini
void string();
void cikti(char **GGAPrint, char *veri);





void setup() {         // Kurulum kodları buraya yazılır, sadece bir kere çalıştırılır.

// Seri iletişim başlatılıyor..
Serial.begin(9600);    // Seri portla iletişimin 9600 baud hızında olacağı belirtiliyor.

// GPS seri port için kurulum.

pinMode(rx1Pin, INPUT);
pinMode(tx1Pin, OUTPUT);
gps.begin(9600);
// BLUETOOTH seri port için kurulum.

pinMode(rx2Pin, INPUT);
pinMode(tx2Pin, OUTPUT);
bt.begin(9600);
pinMode(key, OUTPUT);
digitalWrite(key, LOW);   //  BLUETOOTH modül için AT komutları kullanmadığım için KEY  pinini LOW //konumunda tutuyorum...


// Uydu sinyalleri kurulumu.

pinMode(kLed, OUTPUT);    // pinMode() fonksiyonu iki parametre alır.İlk parametre pini, ikinci parametre giriş mi //çıkış mı olacağını ifade eder.
pinMode(yLed, OUTPUT);
pinMode(sLed, OUTPUT);
digitalWrite(kLed, HIGH);  // kLed değişkeninin değerini HIGH yapar. Yani LED yanar.
digitalWrite(yLed, LOW);   // yLed değişkenin değerini LOW yapar. Yani LED sönük durumda.
digitalWrite(sLed, LOW);
// Bir uydu sinyali yokken kırmızı yansın, uydudan sinyal alınınca yeşil yansın.
}


void loop() {  // Ana kod buraya yazılır. Durmadan tekrarlayarak çalışır.
if(bt.available()){
bt.println("GPS Verileri Bekleniyor...");
}
Serial.println("GPS Verileri Bekleniyor...");
// GPS seri porttan gelen verileri okumak için yapılan hazırlıklar.
while(gps.available())
{
memset(dataGPS, 0, sizeof(dataGPS));     // Önceki okumaları kaldırır. dataGPS=0 olacak.
//memset(p1,p2,p3) : Bu fonksiyon üç tane parametre alır. p3 boyutunda p1 verisine p2 yi //atar.

byteGPS = 0;  // Verileri kaldırır.
byteGPS = gps.read();                    // GPS seri porttan gelen verileri okur.
delay(1000);                             // 1 saniyelik gecikme.

// İstenilen Stringi(Karakter Dizisi) bul.
while(byteGPS != '$')
{

    byteGPS = gps.read();
}
//Stringi bir diziye kaydet.
i = 1;
dataGPS[0] = '$';
while(byteGPS != '*')   // * işaretinin olduğu yer sağlama verilerinin başladığı yerdir //byte GPS * İşertine eşit olmadığı sürece dataGPS dizisine veriler kaydedililir.
{

    byteGPS = gps.read();
    dataGPS[i] = byteGPS;
    i++;
}
dataGPS[i] = '/0';
string();                // string() olarak tanımladığımız fonksiyonu çağırıyoruz.
}  // GELEN VERİLERİN SONU
}  // LOOP SONU
/*
Bu Fonksiyon( İşlev )  enlem ve boylam almak için ihtiyacımız olan verileri tanımlamamıza olanak sağlar ...
*/
void string()
{
i=0;
memset(GGA, 0 ,sizeof(GGA));  // Önceki okumaları kaldırır.
parca = strtok(dataGPS, ",");  // strtok(): (String Tokenizer): Karakter dizisini parçalamak için kullanılır.
if (strcmp(parca, "$GPGGA") == 0)
//strcmp(p1,p2): p1 ve p2'yi karşılaştırır. Eşitse 0, p1 büyükse 0'dan büyük küçükse 0'dan küçük bir değer gönderir.
{
   while (parca != NULL)
   {
     parca = strtok (NULL, ",");
     GGA[i] = parca;
     i++;
   }

   cikti(GGA, "$GPGGA");      // Verileri görüntülemek için bu fonksiyonu çağırırız.

}

}
/*
Bu fonksiyon GPS'den alınan verilerin seri monitörde yazılmasını düzenler.
*/
void cikti(char **GGAPrint, char *veri)
{
   durum = atoi(GGAPrint[5]); // atoi içindeki strig olan parametresini int türüne çevirir.
   uydu = atoi(GGAPrint[6]);

   if(veri == "$GPGGA" && durum == 1)
   {

    digitalWrite(yLed, HIGH);        // Uydu sinyali alındı, yeşil LED yansın.
    digitalWrite(kLed, LOW);         // Kırmızı LED sönsün.


    Serial.println("");
    Serial.println("---------------------------------------");    // Verileri satır satır //gönderir. Yani imleci bir alt satıra geçirir.
    Serial.print("UTC Saat -> ");    // Veriyi aynı satıra yazar.
    Serial.println(GGAPrint[0]);
    Serial.print("Enlem -> ");
    Serial.print(GGAPrint[1]);
    Serial.println(GGAPrint[2]);
    Serial.print("Boylam -> ");
    Serial.print(GGAPrint[3]);
    Serial.println(GGAPrint[4]);
    Serial.print("GPS Kalitesi : 0=null; 1= GPS sabit -> ");
    Serial.println(durum);
    Serial.print("Uydu Sayısı -> ");
    Serial.println(uydu);
    Serial.print("Yatay Hassasiyet Kaybı -> ");
    Serial.println(GGAPrint[7]);
    Serial.print("Anten Yüksekliği -> ");
    Serial.print(GGAPrint[8]);
    Serial.println(GGAPrint[9]);
    Serial.print("Geoid Ayırma -> ");
    Serial.print(GGAPrint[10]);
    Serial.println(GGAPrint[11]);
    Serial.println("---------------------------------------");
    Serial.println("");
    if(bt.available())
   {
       digitalWrite(sLed, HIGH);         // Sarı LED yansın.
       bt.println("ENLEM VE BOYLAM DEGERLERI");
       bt.print("ENLEM:");
       bt.print(GGAPrint[1]);
       bt.println(GGAPrint[2]);
       bt.print("BOYLAM:");
       bt.print(GGAPrint[3]);
       bt.println(GGAPrint[4]);
 
      }
  }
else          // Eğer uydu bağlantısı yoksa
{
   digitalWrite(kLed, HIGH);    // Kırmızı LED yansın.
   digitalWrite(yLed, LOW);     // Yeşil LED sönsün.
   Serial.println("");
   Serial.println("------------------------------");
   Serial.println("|---------BEKLEME KONUMU-----|");
   Serial.println("------------------------------");
   Serial.println("");

   if(bt.available())
   {
     digitalWrite(sLed, HIGH);         // Sarı LED yansın.
     bt.print("BEKLEME DURUMU");
     bt.print("KONUM BILGILERI ALINAMIYOR...");

   }


}
}

/*
GGA - essential fix data which provide 3D location and accuracy data.

$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47

Where:
     GGA          Global Positioning System Fix Data
     123519       Fix taken at 12:35:19 UTC
     4807.038,N   Latitude 48 deg 07.038' N
     01131.000,E  Longitude 11 deg 31.000' E
     1            Fix quality: 0 = invalid
                               1 = GPS fix (SPS)
                               2 = DGPS fix
                               3 = PPS fix
                   4 = Real Time Kinematic
                   5 = Float RTK
                               6 = estimated (dead reckoning) (2.3 feature)
                   7 = Manual input mode
                   8 = Simulation mode
     08           Number of satellites being tracked
     0.9          Horizontal dilution of position
     545.4,M      Altitude, Meters, above mean sea level
     46.9,M       Height of geoid (mean sea level) above WGS84
                      ellipsoid
     (empty field) time in seconds since last DGPS update
     (empty field) DGPS station ID number
     *47          the checksum data, always begins with *

*/
Bu yazılar da ilgilinizi çekecektir:

Gps saat farkı düzeltme kodu

Gps otomobil sürat göstergesi

Pic16f84 pbp gps projesi


Yorumlar

Popüler Yayınlar:

grup priz ara kablo yapımı

elektrikli fırın devre bağlantı şeması

dc motor yönü değiştirme devresi

gsm sinyal seviyesi asu dbm nedir

chrome ile programsız video nasıl indirilir

fan aspiratör motoru dönüş yönü değiştirme