D4 TEKNIK TELEKOMUNIKASI
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
2020/2021
MODUL 12
ANTARMUKA MODUL GPS DENGAN ARDUINO DAN PROCESSING
I. TUJUAN
GPS melibatkan 3 elemen untuk menjalankan fungsinya, yaitu satelit, elemen kontrol,
dan elemen pengguna.
Fungsi GPS
Menentukan letak di permukaan bumi dengan bantuan sinkronisasi sinyal satelit yang
mengirimkan sinyal gelombang mikro ke Bumi, sehingga dapat digunakan untuk
menentukan kecepatan, arah, letak, dan waktu.
Jenis-jenis GPS
Modul GPS
✓ U-Blox GPS NEO-6M
Tipe penerima: 50 kanal, GPS L1 frequency, C/A Code. SBAS: WAAS, EGNOS,
MSAS
Sensitivitas penjejak & navigasi: -161 dBm (reakuisisi dari blank-spot: -160 dBm)
Sensitivitas start: -147 dBm pada cold-start, -156 dBm pada hot start.
Kecepatan pembaharuan data / navigation update rate: 5 Hz
Akurasi penetapan lokasi GPS secara horisontal: 2,5 meter (SBAS = 2m)
Rentang frekuensi pulsa waktu dapat diseting antara 0,25 Hz hingga 1 kHz.
Akurasi sinyal pulsa waktu: RMS 30 ns (99% dalam kurang dari 60 ns) dengan
granularitas 21ns atau 15 ns saat terkompensasi.
Akurasi kecepatan: 0,1 meter / detik.
Akurasi arah (heading accuracy): 0,5°.
Batasan operasi: daya tarik maksimum 4x gravitasi, ketinggian maksimum 50 Km,
kecepatan maksimum 500 meter / detik (1800 km/jam).
III. Peralatan:
Arduino UNO
Modul GPS (U-Blox GPS NEO-6M)
Bread board
Kabel Jumper
Software Processing
Simulator Proteus
IV. Percobaan:
Menampilkan data pada Virtual Terminal
Rangkaian:
Menampilkan data pada Virtual Terminal & Processing
Program Arduino
#include <TinyGPS.h>
TinyGPS gps;
void setup()
{
Serial.begin(9600);
Serial.println("GPS Mulai");
Serial.println();
}
void loop()
{
bool newData = false;
unsigned long chars;
unsigned short sentences, failed;
for (unsigned long start = millis(); millis() - start < 1000;)
{
while (Serial.available())
{IDE
char c = Serial.read();
if (gps.encode(c))
newData = true;
}
}
if (newData) //If newData is true
{
float flat, flon;
unsigned long age;
gps.f_get_position(&flat, &flon, &age);
Serial.print("Latitude = ");
Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
Serial.print(" Longitude = ");
Serial.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
}
Serial.println(failed);
}
Program Proteus
import processing.serial.*;
Serial myPort;
String val;
void setup()
{
String portName = Serial.list()[0];
myPort = new Serial(this, portName, 9600);
}
void draw()
{
if ( myPort.available() > 0)
{
val = myPort.readStringUntil('\n');
}
println(val);
}
V. Hasil :
Amati pada IDE Processing dan virtual terminal, catat data yang ditampilkan.
VI. Latihan :
1. Buatlah program agar GPS dapat mengetahui data kecepatan (Knots), letak (Lat &
Long), waktu (HHMMSS), Tanggal (DDMMYY) dan arah (Course)
Link Output Percobaan dan Latihan
https://drive.google.com/drive/folders/130aeb3ADqPlmmgzQhLk5NLGxkwSkgMXL?u
sp=sharing
Program Arduino
#include <TinyGPS.h>
TinyGPS gps;
void setup()
{
Serial.begin(9600);
Serial.println("GPS Mulai");
Serial.println();
}
void loop()
{
bool newData = false;
unsigned long chars;
unsigned short sentences, failed;
for (unsigned long start = millis(); millis() - start < 1000;)
{
while (Serial.available())
{
char c = Serial.read();
if (gps.encode(c))
newData = true;
}
}
if (newData) //If newData is true
{
float flat, flon;
unsigned long age;
gps.f_get_position(&flat, &flon, &age);
Serial.print("Latitude = ");
Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
Serial.print(" Longitude = ");
Serial.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
}
Serial.println(failed);
}
Output
Analisa
Pada percobaan pertama adalah menghubungkan mikrokontroler dengan module GPS.
Dalam rangkaian diatas, mikrokontroler memiliki tugas sebagai penerima dari module
GPS. Pada saat module GPS memiliki nilai maka akan dilakukan proses pengiriman data.
Module GPS akan melakukan sensor secara simulasi terhadap keberadaan perangkat. Oleh
karena itu diberikan program seperti dibawah ini :
float flat, flon;
unsigned long age;
gps.f_get_position(&flat, &flon, &age);
Serial.print("Latitude = ");
Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
Serial.print(" Longitude = ");
Serial.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
Diinisialisasi bahwa Latitude, dan Longitude akan menghasilkan bilangan float. Kemudian
hasil dari program tersebut akan ditampilkan output oleh virtual terinal. Pada virtual
terminal akan menampilkan longitude dan latitude untuk mengetahui lokasi keberadaan
secara simulasi.
Program Processing
import processing.serial.*;
Serial myPort;
String val;
void setup()
{
String portName = Serial.list()[0];
myPort = new Serial(this, portName, 9600);
}
void draw()
{
if ( myPort.available() > 0)
{
val = myPort.readStringUntil('\n');
}
println(val);
}
Output
Analisa
Percobaan kedua terdapat 2 output yang pertama melalui virtual terminal, dan yang kedua
pada software processing.. Pada rangkaian diatas mikrokontroler masih bertindak sebagai
Rx (penerima) melalui port Arduino (1) sedangkan module GPS sebagai (Tx)pengirim.
Dengan baud rate 9600 melalui COM1 mikrokontroler dapat berkomunikasi dengan
processing. Sehingga dalam jaringan ini mikrokontroler sebagai Tx sedangkan processing
sebagai Rx. Pada module GPS akan melakukan deteksi lokasi secara simulasi yang
dikaitkan dengan letak perangkat yang digunakan, selanjutnya data tersebuat akan
dikirimkan ke mikrokontroler dan mencetak data sebagai Longitude dan Latitude. Pada
virtual terminal akan menampilkan otomatis data dari module GPS untuk processing data
masih harus dikirim melalui COM1 dan dibaca processing kemudian data tersebut
ditampilkan pada console processing.
Kesimpulan :
1. Modulo GPS merupakan perangkat untuk mendeteksi lokasi, namun dalam simulasi ini
letak longitude dan latitude masih dalam simulasi sehingga bukan keadaan realita.
2. Modulo GPS memberi data longitude dan longitude untuk penentuan lokasi target.
3. Modulo GPS menjadi Tx selanjutnya mikrokontroler menjadi Rx pada percobaan ini,
sedangkangkan untuk komunikasi dari mikrokontroler dengan processing,
mikrokontroler bertindak sebagai Tx dan processing sebagai Rx.
LATIHAN
1. Buatlah program agar GPS dapat mengetahui data kecepatan (Knots), letak (Lat & Long),
waktu (HHMMSS), Tanggal (DDMMYY) dan arah (Course)
Rangkaian
Program Arduino
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
TinyGPSPlus gps;
void setup()
{
Serial.begin(9600);
Serial.println(F("Simulasi GPS Praktikum 12 (Amalia)"));
Serial.println();
}
void loop()
{
bool newData = false;
unsigned long chars;
unsigned short sentences, failed;
for (unsigned long start = millis(); millis() - start < 1000;)
{
while (Serial.available())
if(gps.encode(Serial.read()))
newData = true;
}
if (millis() > 5000 && gps.charsProcessed() < 7)
{
Serial.println(F("tidak ada module GPS, cek wiringmu!"));
while(true);
}
if (newData)
//Menampilkan Lokasi
Serial.print(F("Location : "));
if (gps.location.isValid())
{
Serial.print(gps.location.lat(), 6);
Serial.print(F(","));
Serial.print(gps.location.lng(), 6);
Serial.println();
}
//Menampilkan data tanggal
Serial.print(F(" Date: "));
if (gps.date.isValid())
{
Serial.print(gps.date.month());
Serial.print(F("/"));
Serial.print(gps.date.day());
Serial.print(F("/"));
Serial.print(gps.date.year());
Serial.println();
}
//Menampilkan data waktu
Serial.print(F("Time:"));
if (gps.time.isValid())
{
if (gps.time.hour() < 10)
Serial.print(F("0"));
Serial.print(gps.time.hour());
Serial.print(F(":"));
if (gps.time.minute() < 10) Serial.print(F("0"));
Serial.print(gps.time.minute());
Serial.print(F(":"));
if (gps.time.second() < 10) Serial.print(F("0"));
Serial.print(gps.time.second());
Serial.print(F("."));
if (gps.time.centisecond() < 10) Serial.print(F("0"));
Serial.print(gps.time.centisecond());
Serial.println();
}
//Menampilkan kecepatan
Serial.print(F(" Kecepatan : "));
if (gps.speed.isValid())
{
Serial.print(gps.speed.knots());
Serial.print(F(" knots"));
Serial.println();
}
//Menampilkan Arah
Serial.print(F(" Arah : "));
Serial.print("/n");
if (gps.course.isValid())
{
Serial.print(gps.course.deg());
Serial.println(F(" deg"));
Serial.println();
}
else
{
Serial.print(F("INVALID"));
}
Serial.println();
}
Output
Keterangan:
Pada latihan ditambahkan program untuk memaksimalkan kinerja dari module GPS yakni
dengan menampilkan kecepatan (Knots), letak (Lat & Long), waktu (HHMMSS), Tanggal
(DDMMYY) dan arah (Course). Untuk file library Arduino digunakan library lain sehingga
dapat menambahkan beberapa informasi tersebut.