Cara simple menggunakan GPS BN 220 dengan Arduino

Cara simple menggunakan GPS BN 220 dengan Arduino

Penasaran bagaimana cara menambahkan fitur GPS ke proyek Arduino-mu? GPS BN-220 adalah modul yang simpel dan akurat untuk melacak lokasi. Di artikel ini, kita akan bahas cara simple menghubungkan dan memprogram GPS BN-220 dengan Arduino. Yuk, mulai petualanganmu dengan GPS!

untuk codenya kalian bisa gunakan code dibawah ini :

#include <Arduino.h>

//TUTORIAL UNTUK SETTING SENSOR GPS LIHAT DISINI :
// https://oscarliang.com/gps-settings-u-center/
// INFORMASI LENGKAP SENSOR LIHAT DISINI :
// https://dn790000.ca.archive.org/0/items/bn-220-gps-antenna/BN-220%20GPS+Antenna.pdf
 

#define RXD2 10
#define TXD2 11
String data_baris = "";  // Buffer untuk menyimpan satu baris data
// Variabel untuk menampung hasil parsing
String latitude, longitude;
char latDirection, lonDirection;


String convertToDMS(String rawCoordinate, char direction) {
  int degrees;
  float minutes;
 
    // Tentukan panjang koordinat dan ekstrak derajat serta menit
  if (rawCoordinate.length() == 9) { // Latitude (contoh: 0136.99205)
    degrees = rawCoordinate.substring(0, 2).toInt();
    minutes = rawCoordinate.substring(2).toFloat();
  } else if (rawCoordinate.length() == 10) { // Latitude (contoh: 0137.00375)
    degrees = rawCoordinate.substring(0, 2).toInt();
    minutes = rawCoordinate.substring(2).toFloat();
  } else if (rawCoordinate.length() == 11) { // Longitude (contoh: 10337.41921)
    degrees = rawCoordinate.substring(0, 3).toInt();
    minutes = rawCoordinate.substring(3).toFloat();
  } else if (rawCoordinate.length() == 12) { // Longitude (contoh: 10345.67890)
    degrees = rawCoordinate.substring(0, 3).toInt();
    minutes = rawCoordinate.substring(3).toFloat();
  } else {
    return "Invalid coordinate";
  }
 
  // Pisahkan menit dan bagian desimal dari menit
  int wholeMinutes = (int) minutes;
  float decimalMinutes = minutes - wholeMinutes;
 
  // Hitung detik dari bagian desimal menit
  float seconds = decimalMinutes * 60.0;
 
  // Format output dalam format DMS (Degree, Minutes, Seconds)
  String result = String(degrees) + "°" + String(wholeMinutes) + "'" + String(seconds, 3) + """ + direction;
  return result;
}
 
void parseGGA(String nmeaSentence, String &lat, char &latDir, String &lon, char &lonDir) {
  int index = 0;
  int lastCommaIndex = -1;
  int commaIndex = 0;
 
  for (int i = 0; i < 7; i++) {
    lastCommaIndex = commaIndex;
    commaIndex = nmeaSentence.indexOf(',', lastCommaIndex + 1);
 
    if (i == 2) lat = nmeaSentence.substring(lastCommaIndex + 1, commaIndex);  // Latitude
    if (i == 3) latDir = nmeaSentence.charAt(lastCommaIndex + 1);              // Latitude Direction
    if (i == 4) lon = nmeaSentence.substring(lastCommaIndex + 1, commaIndex);  // Longitude
    if (i == 5) lonDir = nmeaSentence.charAt(lastCommaIndex + 1);              // Longitude Direction
  }
}
 
 
void cek_gps() {
  // Memeriksa apakah ada data yang tersedia dari GPS
  if (Serial2.available()) {
    // Baca setiap karakter dari GPS
    char incomingChar = Serial2.read();
 
    // Tambahkan karakter ke data_baris
    data_baris += incomingChar;
 
    // Jika ditemukan newline ('
'), artinya satu baris sudah selesai
    if (incomingChar == '
') {
      // Cek apakah baris tersebut mengandung string "GNGSA"
      if (data_baris.indexOf("GGA") != -1) {
        // Jika mengandung "GGA", kirimkan ke Serial Monitor
        // Serial.println("Detected GGA in the following line:");
        Serial.println(data_baris);  // Kirim seluruh baris yang mengandung GNGSA ke Serial Monitor
        String nmeaSentence = data_baris;
        // Parsing data NMEA
        parseGGA(nmeaSentence, latitude, latDirection, longitude, lonDirection);
 
        // Konversi Latitude dan Longitude ke DMS
        String latDMS = convertToDMS(latitude, latDirection);
        String longDMS = convertToDMS(longitude, lonDirection);
 
        Serial.println("Latitude (DMS) : " + latDMS);
        Serial.println("Longitude (DMS) : " + longDMS);
      }
      // Reset data_baris untuk membaca baris berikutnya
      data_baris = "";
    }
  }
}
 
 


void setup()
{
Serial.begin(9600);
 // Mulai Serial Monitor untuk debugging
  Serial.begin(115200);
  // Inisialisasi Serial2 untuk berkomunikasi dengan modul GPS
  Serial2.begin(57600, SERIAL_8N1, RXD2, TXD2);
 
  // Informasi pin TX dan RX
  Serial.println("Serial Txd is on pin: " + String(TXD2));
  Serial.println("Serial Rxd is on pin: " + String(RXD2));
 
 

}
void loop(){
cek_gps();


}


Untuk skematik, kamu bisa ikuti skematick di bawah ini

Kabel Hitam : GND
Kabel Merah : VCC
Kabel Hijau : TX
Kabel Oren : RX

selamat mencoba, salam labrobotika

Jika anda berminat menggunakan jasa labrobotika, silahkan hubungi admin: WHATSAPP