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


