#include <SoftwareSerial.h> #define NMEA_SIZE 256 SoftwareSerial GPS = SoftwareSerial(6, 1); byte NMEA[NMEA_SIZE]; void getData() { byte character; int index = 0; do { if (GPS.available()) { character = GPS.read(); NMEA[index] = character; index++; } } while(index < NMEA_SIZE && character != '$'); NMEA[index - 2] = '\0'; } void setup() { GPS.begin(4800); Serial.begin(9600); } void loop() { getData(); if(NMEA[2] == 'R' && NMEA[3] == 'M' && NMEA[4] == 'C') { int i = 0; for(i = 0; NMEA[i] != '\0'; i++) { Serial.write(NMEA[i]); } Serial.print("<END>\n"); } }Yukarıdaki kod kısaca, "Serial Communication(Seri İletişim)" sağlamak için GPS denen ve "SoftwareSerial" tipinde bir değişken oluşturuyor.
SoftwareSerial GPS = SoftwareSerial(6, 255);
SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin); Parameters : rxPin: the pin on which to receive serial data txPin: the pin on which to transmit serial dataİçerisine aldığı ilk parametre GPS Modülümüzün sarı kablosunu bağladığımız Arduino pininin numarası. Yanı datanın alınacağı pin. Biz GPS Modülünün sarı kablosunu(data kablosunu) Arduino'daki 6 nolu dijital pine taktık. Diğer pin ise datanın iletilmesini sağlayacak pin. Bizim örneğimizde bu pine istediğiniz değeri verebilirsiniz. Ben 255 verdim. Ancak olurda USB ile bilgisayara iletimde sorun çıkarsa bu değeri 1 yapabilirsiniz.
byte NMEA[NMEA_SIZE];Oluşturduğumuz bir diğer değişken ise byte tipinde ve uydudan gelen veriyi depolayacak olan NMEA isimli değişken. Bu açıklamadan sonra şimdi sıra geldi yazdığımız fonsiyonların sırası ile ne işe yaradığına. Öncelikle "setup()" fonksiyonundan başlamak istiyorum. Bu fonksiyon seri iletişim için GPS Modül ve USB'den alınacak/aktarılacak bit hızını ayarlar. Ayarımız USB için 9600, GPS Modül için 4800 olmalı. "loop()" fonksiyonu sürekli çağrılan fonksiyondur. ve içerisinde "getData()" fonksiyonunu çağırır. "getData()" fonksiyonu ise basitçe GPS Modülden gelen bilgileri NMEA değişkeninin içine yazar.
if(NMEA[2] == 'R' && NMEA[3] == 'M' && NMEA[4] == 'C') { int i = 0; for(i = 0; NMEA[i] != '\0'; i++) { Serial.write(NMEA[i]); } Serial.print("<END>\n"); }Yukarıdaki if bloğu ise GPS'den gelen ve NMEA değişkenine yazılan "RMC" tipindeki verileri USB aracılığı ile bilgisayarımıza yollar. Sonuna da "<END>" etiketi ekler. Buraya kadar anlaşılmayan bir şey varsa sorabilirsiniz. Eğer programın çalışabilirliğini kontrol etmek isterseniz. Arduino IDE aracılığı ile bunu yapabilirsiniz. Menuden "Tools > Serial Monitor" seçeneğine tıklarsanız aşağıdaki gibi bir resim karşınıza çıkacaktır.
Buraya kadar olan kısım Arduino ile ilgiliydi. Bundan sonrası ise USB ile iletilen verinin bilgisayarda işlenmesi kısmı. Gelen veri QT Creator ile yazdığım program vasıtasıyla işlenecek. Ve uydudan alınan tüm veriler kullanıcıya sunulacak. Yazıyı çok fazla uzamasını istemediğim için burada sonlandırıyorum. Bir sonraki adımda Projenin QT ayağına değinip orada yaptığım kodlamayı açıklayacağım. Şimdilik herkese iyi günler.
Hocam merhaba, ben bitirme tezi olarak elektrikli araçlarda telemetri sistemi yapıyorum. web tabanlı olarak konum hız gerilim gibi bilgileri takip edeceğim. Arduino mega ile çalışıyorum nblox un gps shieldi ve bir tane sim900 un sim modülü var bunlarla nasıl yapabilirim araç takip sistemini öncelikle konum ve hız bilgisini doğru şekilde nasıl alıp yorumlayabilirim yardımcı olursanız sevinirim
ReplyDeleteTeşekkürler. Dediğinde haklısın diğer alternatifler üzerine de yazmak istiyorum ama maalesef vakit sıkıntısı var.
ReplyDeleteqt kodunu da paylaşırmısınız?
ReplyDelete