Arduino Mega & GY-GPS6MU2 Basit Veri Aktarımı ve Paketlenmesi

Kahramanmaraş Pusula Roket Takımı ile yaptığımız çalışmada Arduino mega, GPS6MU2 ve Lora E32 kullanarak roket içindeki verileri yer istasyonuna aktardık.


GY-GPS6MU2 Pin Şeması:


Ardunio Uno Bağlantı Şeması

Veri Paketi


Verici Kodları:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
//Kahramanmaraş Fen Lisesi Pusula Roket Takımı
//Mayıs 2021

//Veri Paketi
//#La:37.597316/Lo:36.832229/Al:602.30/Sp:0.54/?
/*

  # --> Paket Başlangıcı
  ? --> Paket Sonu
  : --> Veri Başlangıcı
  / --> Veri Sonu
  . --> Float Ayırıcı

*/


//Bağlantı Pinleri RX:18 -  TX:19
#include <TinyGPS.h>
float lat, lon;
TinyGPS gps; // gps adında bir obje tanımlıyoruz

unsigned long eskiZaman = 0;
unsigned long yeniZaman;

float alt_first;
float alt_second;

void setup() {
  Serial.begin(9600); // TXRX 0 Port BaunRate (Lora Bağlantı Kısmı)
  Serial.println("BASLA");
  Serial1.begin(9600); // TXRX 1 GPS BaundRate
  pinMode(7, OUTPUT);


}

void loop() {

  float flat, flon;

  while (Serial1.available()) { // GPS te data kontrol ediliyor.
    yeniZaman = millis();
    if (gps.encode(Serial1.read())) // Data Çözümleniyor
    {
      Serial.print("#"); //PAKET Başlangıç İşareti

      gps.f_get_position(&lat, &lon);

      Serial.print("La:");
      Serial.print(lat, 6);
      Serial.print("/"); //Değer Bitişini İşaret eden Simge

      Serial.print("Lo:");
      Serial.print(lon, 6);
      Serial.print("/");//Değer Bitişini İşaret eden Simge

      Serial.print("Al:");
      print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 7, 2);
      Serial.print("/");//Değer Bitişini İşaret eden Simge
      alt_second = (gps.f_altitude());




      Serial.print("Sp:");
      print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);
      Serial.print("/");//Değer Bitişini İşaret eden Simge

      Serial.println("?"); //PAKET Bitiş İşareti
      delay(5);

      if (yeniZaman - eskiZaman > 2000) {

        if (alt_first < alt_second) {
          digitalWrite(7, HIGH);
          alt_first = (gps.f_altitude());

        } else {
          digitalWrite(7, LOW);
          alt_first = (gps.f_altitude());
        }
        eskiZaman = yeniZaman;
      }
    }

  }

}

static void print_float(float val, float invalid, int len, int prec)
{
  if (val == invalid)
  {
    while (len-- > 1)
      Serial.print('*');
    Serial.print(' ');
  }
  else
  {
    Serial.print(val, prec);
    int vi = abs((int)val);
    int flen = prec + (val < 0.0 ? 2 : 1); // . and -
    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;


  }

}

Alıcı Kodları:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); //TX, RX

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
}

void loop() {
 
  if(mySerial.available() > 1){
    String input = mySerial.readStringUntil('?');
    Serial.println(input);    
  }
  delay(20);
}


çıktı


Yorumlar

Bu blogdaki popüler yayınlar

OCPP ve Open Source Şarj Protokolü (OCA) nedir?

SQL

OOP - Abstraction (Soyutlama)