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ı |
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