10. Dasar Pembelajaran Komponen Penentu Posisi

  • 0

10. Dasar Pembelajaran Komponen Penentu Posisi

10. Dasar Pembelajaran Komponen Penentu Posisi

Bab ini menjelaskan penggunaan Joystick, penentu koordinat tiga dimensi dan GPS. Beberapa contoh aplikasi di ulas; misalnya untuk memperoleh informasi lintang, bujur, dan tinggi di atas permukaan laut serta cara mengukur jarak dua posisi.

10.1 Joystick

Joystick dapat digunakan untuk mengatur posisi dua dimensi (x dan y). Contoh peranti ini diperlihatkan di Gambar 10.1. Kelima pin yang tersedia seperti berikut:

  • Gnd : dihubungkan ke ground;
  • +5V dihubungkan ke sumber tegangan +5V;
  • VRx : Nilai analog 0— 5V yang menyatakan posisi x;
  • VRy : Nilai analog 0— 5V yang menyatakan posisi y;
  • SW : tombol ditekan atau tidak (1 = ditekan, O = tidak ditekan).

Gambar 10.1 Joystick PS2

Untuk menguji joystick, rangkaian di Gambar 10.2 bisa digunakan. Contoh penyusunan rangkaian diperlihatkan di Gambar 10.3. Selanjutnya, Anda bisa menguji dengan sketch joystick.

Gambar 10.2 Rangkaian yang menghubungkan joystick dan Arduino

Sketch: joystick

// ——————————————–

// Contoh untuk memantau nilai

// yang dihasilkan oleh PS2 Joystick

// ——————————————–

const int PIN_VRX = 0;

const int PIN_VRY =1;

const int PIN_SW = 6;

void setup()

{

pinMode(PIN_SW, INPUT);

Serial.begin(9600);

}

void loop()

{

// Baca data dari tiga pin

int nilaix =analogRead(PIN_VRX);

int nilaiY =analogRead(PIN_VRY);

int nilaisw = digitalRead(PIN_SW);

// Kirim ke port serial

Serial.print(“X: “);

Serial.print(nilaiX);

Serial.print(“,Y: “);

Serial.print(nilaiY);

Serial.print(“, SW:”);

Serial.println(nilaiSW);

delay(100);// Diperlukan untuk menunda pembacaan berikutnya

}

Sketch di depan menggunakan pin analog 1 dan 2 serta pin digital 6 untuk dihubungkan ke joystick. karena itu, pinMode ( ) hanya dikenakan pada pin digital 6. Nilai X dan Y diperoleh dengan menggunakan analogRead ( ) , sedangkan nilai SW dibaca melalui digital Read ( ) .

Description Gambar 10.4 menunjukkan hasil kalau joystick dibiarkan saja. Angka yang dihasilkan adalah nilai tengah antara 0 dan 1023. Selanjutnya, kalau tombol mulai digerakkan akan membuat nilai X dan berubah dalam jangkauan 0 dan 1023. Contoh diperlihatkan di Gambar 10.5.

Description

Berdasarkan sifat-sifat yang diperoleh selama melakukan pengujian dengan menggunakan sketch joystick, kita dapat memanfaatkan joystick untuk keperluan mengatur kecerahan LED. Tentu saja, ide ini dapat juga dimanfaatkan untuk kepentingan pengaturan kecepatan motor berputar.

Perwujudan pengontrolan kecerahan dua LED dapat dilakukan dengan menggunakan sketch joyled. Adapun rangkaian yang diperlukan diperlihatkan di Gambar 10.6.

Gambar 10.6 Rangkaian pengaturan kecerahan dua LED menggunakan joystick

Sketch: joyled

// ——————————————–

// Contoh penggunaan joystick

// untuk mengatur kecerahan dua LED

// ——————————————–

const int PIN_VRX=0;

const int PIN_VRY=1;

const int PIN_LED MERAH=6;

const int PIN_LED HIJAU =5;

void setup()

{

pinMode(PIN_LED MERAH, OUTPUT);

pinMode(PIN_LED_HIJAU, OUTPUT);

// Atur setiap LED dengan kecerahan medium

analogWrite(PIN_LED HIJAU,127);

analogWrite(PIN_LED_MERAH,127);

}

void loop()

{

// Baca data dari tiga pin

int nilaiX=analogRead(PIN_VRX);

int nilaiY =analogRead(PIN_VRY);

// Petakan angka ke jangkauan -127 s/d 128

nilaix=map(nilaix, 0,1023,-127,128);

nilaiY=map(nilaiY, 0,1023,-127,128);

// Atur kecerahan LED

analogWrite(PIN_LED HIJAU, 127 +nilaiX);

analogWrite(PIN_LED MERAH,127+nilaiY);

delay(100);// Diperlukan untuk menunda pembacaan berikutnya

Rangkaian actual pengontrolan dua LED menggunakan joystick dapat dilihat di Gambar 10.7 Adapun Gambar 10.8 menunjukkan contoh ketika LED menyala dengan kecerahan berbeda.

Gambar 10.7 Rangkaian aktual untuk mengatur kecerahan dua LED menggunakan joystick. Pin SW tidak digunakan

Gambar 10.8 Contoh hasil pengaturan pada dua LED menggunakan joystick

10.2 Pemantau Posisi Tiga Dimensi

Modul GY-271 (Gambar 10.9) adalah modul yang menggunakan IDC HMC5883 yang dapat dimanfaatkan sebagai penentu posisi pada ruang tiga dimensi (ada informasi X, Y, dan Z). Supaya dapat berfungsi, sumber tegangan sebesar 3V hinga 5V DC perlu diberikan. Perlu diketahui, di pasaran terdapat berbagai modul yang setara dengan GY-271; misalnya HMC5883L buatan Honeywell.

Gambar 10.9 Modul GY-271

Pin-pin yang tersedia di GY-271 dan hubungannya ke Arduino adalah:

  • VCC dihubungkan ke sumber tegangan 5V di Arduino;
  • GND dihubungkan ke GND di Arduino;
  • SCL dihubungkan ke port analog 5 di Arduino;
  • SDA dihubungkan ke port analog 5 di Arduino;
  • DRDY tidak dipakai.

Gambar 10.10 menunjukkan hubungan di atas secara visual.

Gambar 10.10 Rangkaian yang menghubungkan GY-271 dan Arduino

sketch berikut digunakan untuk menguji rangkaian di atas: Sketch: gy271

// ——————————————–

// Contoh untuk menguji GY-271 yang

// menggunakan IC HMC5883

// untuk memperoleh posisi X, Y,z

// ——————————————–

#include <Wire.h>

const int PIN_SDA=4;

const int PIN_SLC=5;

const int ADDR=0x1E; // Alamat untuk HMC5883

void setup()

{

// Inisialisasi port serial

Serial.begin(9600);

// Inisialisasi I2C

Wire.begin();

//Inisialisasi HMC5883

Wire.beginTransmission(ADDR);

Wire.write(0x02); // Mode register

Wire.write(0x00); // Mode pengukuran terus-menerus

Wire.endTransmission();

}

void loop()

{

int x, y, z; // Posisi X, Y,Z

// Pemberitahuan untuk membaca data di HMC5883

Wire.beginTransmission(ADDR);

wire.write(0x03); // Pilih register 3, X MSB register

Wire.endTransmission();

// Baca data per sumbu,2 register per sumbu

Wire.requestFrom(ADDR, 6); // 2 x 3 byte

if (Wire.available() >= 6)

{

x= Wire.read() <<8; // byte tinggi X

x |= Wire.read(); // byte rendah X

z = Wire.read() << 8; // byte tinggi z

z |=Wire.read(); // byte rendah Z

y=Wire.read()<<8; // byte rendah Y

y |= Wire.read(); // byte rendah Y

}

// Kirim informasi ke port serial

Serial.print(“x: “);

Serial.print(x);

Serial.print(” y:”);

Serial print(y);

Serial.print(” z : “);

Serial.println(z);

delay(500);

}

Gambar 10.11 menunjukkan contoh pengujian sketch dengan memutar-rnutar komponen GY-271. pemantauan di Serial Monitor diperlihatkan di Gambar 10.12.

Gambar 10.11 Pengujian dapat dilakukan dengan memutar-mutar posisi GY-271

Gambar 10.12 Contoh hasil pengujian modul GY-271

10.3 GPS Receiver

Global Position System (GPS) adalah sistem navigasi berbasis yang dapat memberikan informasi mengenai posisi suatu alat vang berhubungan dengannya dari satelit. Nah, alat yang berhubungan dengan GPS tersebut dinamakan GPS Receiver. Informasi yang diperoleh antara lain berupa

  • posisi lintang (latitude);
  • posisi bujur (longitude).

Untuk menjadikan Arduino sebagai GPS receiver, Anda perlu menyiapkan modul GPS. Contoh modul GPS adalah Skylab SKM53 (Gambar 10,13), yang telah dilengkapi dengan antena internal. Peranti ini memerlukan tegangan DC SV. Țersedia enam pin, namun hanya empat pin yang akan digunakan, yaitu:

  • VCC (dihubungkan dengan pin 5V di Arduino);
  • GND (dihubungkan dengan pin GND di Arduino);
  • TXD (dihubungkan dengan salah satu pin digital di Arduino);
  • RXD (dihubungkan dengan salah satu pin digital di Arduino).

Gambar IO. 13 Modul GPS Skylab SKM53

Contoh rangkaian yang menghubungkan modul GPS dan Arduino diperlihatkan di Gambar 10.14. Rangkaian inilah Yang akan digunakan untuk menguji beberapa percobaan. Oleh karena itu, Anda bisa memulai penyusunan rangkaian tersebut.

Gambar 10.14 Rangkaian yang menghubungkan Arduino dan modul GPS

Penyiapan Pustaka TinyGPS

Pustaka bernama TinyGPS, buatan Mikal Hart, akan memudahkan dalam mengakses informasi yang dihasilkan oleh modul GPS. Pustaka ini dapat diunduh di situs https://github.com/mikalhart/TinyGPS/releases/tag/v13. Namun, untuk memudahkan Anda, file bernama TinyGPS—13. zip disediakan di CD. File ini perlu didekompresi terlebih dahulu sehingga akan terbentuk folder bernama TinyGPS—13. Setelah itu, sederhanakan nama folder tersebut menjadi TinyGPS (karena Arduino IDE tidak akan mengenali nama folder yang mengandung tanda minus). Selanjutnya, lakukan langkah-langkah seperti berikut.

  1. Pindahkan subfolder TinyGPS ke C: \ Program Files (x86) \Arduino\1ibraries (dengan asumsi, program Arduino IDE terinstal di C: \ Program Files (x86) \ Arduino).
  2. Tutuplah Arduino IDE jika dalam keadaan sedang dibuka.
  3. Panggil kembali Arduino IDE supaya pustaka yang baru saja Anda tambahkan dikenali.

Pengujian untuk Mendapatkan Informasi Posisi Lintang dan Bujur

Setelah pustaka TinyGPS dimasukkan ke folder libraries milik Arduino IDE, pengujian untuk mendapatkan informasi posisi lintang dan bujur dapat segera dilaksanakan. Untuk keperluan ini, Anda bisa menggunakan Skecth Berikut :

Sketch: gps

// ——————————————–

// Contoh pengujian GPS

// ——————————————–

#include <SoftwareSerial.h>

#include <TinyGPS.h>

SOftwareSerial gpsSerial(2,3);

TinyGPS gps;

void setup()

{

Serial.begin(9600);

gpsSerial.begin (9600);

}

void loop()

if (gpsSerial.available())

{

int kar = gpsSerial.read();

if (gps.encode(kar))

{

float latitude, longitude;

gps.f_get_ position(&latitude, &longitude);

Serial.print(“Latitude (lintang): “);

Serial.println(latitude, 7);

Serial.print(“Longitude (bujur): “);

Serial.println(longitude,7);

}

}

}

Sketch di atas memerlukan pustaka SoftwareSerial dan TinyGPS. Oleh karena itu, sketch diawali dengan:

#include <SoftwareSerial.h>

#include <TinyGPS.h>

Pustaka SoftwareSeriaI digunakan untuk melakukan komunikasi serial dengan modul GPS melalui pin digital, sedangkan pustaka TinyGPS dipakai untuk menangani pembacaan data dari modul GPS.

Sebagaimana terlihat di Gambar 10.14, pin RXD dihubungkan ke Pin 2 dan TXD ke pin 3. Hubungan ini dinyatakan dalam:

SoftwareSeriaI gpsSerial (2, 3) ;

Pernyataan di atas digunakan untuk menciptakan objek bernama gpsSerial yang berkelas

Softwareserial. Jadi, argumen pertama menyatakan pin RXD dan argumen kedua menyatakan TXD. Objek yang digunakan untuk menangani modul GPS diciptakan melalui:

TinyGPS gps;

Dengan demikian, terbentuk objek bernama gps.

Di setup ( ) , dua pernyataan berikut digunakan untuk menginisialisasi objek yang terkait komunikasi serial dengan port serial maupun TinyGps:

Serial. begin (9600) ;

gpsSerial. begin (9600) ;

Angka 9600 menyatakan kecepatan komunikasi.

Sebelum pembacaan data dari satelit dilakukan, pemeriksaan terhadap ketersediaan data dilakukan melalui pemanggilan:

gpsSeria1.available ( )

Jika hasilnya true, berarti data dari satelit tersedia. Selanjutnya, data dibaca melalui:

int kar = gpsSeria1.read() ;

Hasilnya sebuah karakter yang disimpan di kar. Karakter yang diperoleh perlu diproses dengan encode() untuk mendapatkan informasi yang didasarkan karakter tersebut. Fungsi anggota tersebut menghasilkan true sekiranya data yang aslinya dalam format NMEA berhasil dipecah. Setelah itu, posisi dapat diperoleh dengan memanggil fungsi anggota seperti f_get_position() atau get_position ( ) . Dalam hal ini f_get_position() berguna untuk mendapatkan data dalambentuk titik-mengambang, get_position () dipakai untuk mendapatkan data dalam bentukbilangan bulat. Dengan memanggil f get position ( ) , data bujur dan lintang diperoleh.

Gambar 10.15 memperlihatkan contoh aktual penyusunan modul GPS dan Arduino. Contoh hasil pengujian diperlihatkan di Gambar 10.15. Tentu saja, hasil yang dipampangkan tergantung dari lokasi tempatAnda menguji sketch di atas.

Description Gambar 10.15 Rangkaian aktual penghubungan modul GPS dan Arduino

Membandingkan Hasil Posisi Lintang dan Bujur

Hasil yang terdapat di Gambar 10.16 dapat Anda bandingkan dengan posisi yang dihasilkan oleh situs tertentu di internet. Pastikan bahwa Anda mempunyai hubungan ke Internet. Kemudian, Anda bisa menguji dengan mengikuti langkah-langkah berikut.

  1. Melalui browser, masuklah ke situs http://www.mapcoordinates.net/en.
  2. Ketikkan Monas Jakarta pada kotak di sebelah kanan dan kemudian tekan Enter.

Contoh hasil diperlihatkan di Gambar 10.!7. Pada contoh tersebut. Latitude untuk Monas Jakarta adalah 6175392 dan longitude-nya adalah 106,827156. Adapun tinggi di atas permukaan laut adalah 6 meter.

Memperoleh Informasi Waktu dan Ketinggian

Informasi yang diperoleh dari modul GPS sebenarnya juga mengandung waktu dan ketinggian lokasi di atas permukaan laut. Informasi waktu dapat diperoleh melalui fungsi anggota ohjek berkelas TinyGPS bernama crack datetime ( ) , sedangkan informasi ketinggian posisi (atau altitude) diperoleh melalui f_altitde ( ) .

Sketch timealt menunjukkan contoh untuk mendapatkan informasi waktu dan ketinggian lokasi di atas permukaan laut. Rangkaian yang digunakan untuk menguji sama seperti pada sketch sebelum ini.

Sketch: timealt

// ——————————————–

// Contoh untuk mendapatkan informasi

// tambahan:waktu dan ketinggian

// ——————————————–

#include <SoftwareSerial.h>

#include <TinyGPS.h>

SoftwareSerial gpsSerial(2,3);

TinyGPS gps;

void setup()

{

Serial.begin(9600);

gpsSerial.begin(9600);

}

void loop()

{

if (gpsSerial.available())

int kar=gpsSerial.read();

if (gps.encode(kar))

{

int tahun;

byte bulan, tgl, jam, menit, detik;

gps.crack_datetime(&tahun, &bulan, &tgl, &jam, &menit, &detik);

char teks[22];

sprintf(teks, “%02d/02d/%04d %02d:%02d:응%02d “,

tgl, bulan, tahun, jam, menit, detik);

Serial.println(teks):

float latitude, longitude;

gps.f_get_position(&latitude, &longitude);

Serial.print(“Altitude (lintang): “);

Serial.println(latitude, 7);

Serial.print(“Longitude (bujur):”);

Serial.println(longitude, 7);

float altitude;

altitude = gps.f_altitude();

Serial.print(“Altitude:”);

Serial.println(altitude,7);

Serial.println();

}

}

}

Pada Sketch timealt, pernyataan berikut digunakan untuk mendapatkan data waktu:

gps.crack datetime (&tahun, &bulan, &tgl, & jam, &menit, &detik) ;

dengan cara seperti itu, data tahun, bulan tanggal, jam, menit, dan detik didapatkan. Adapun informasi tinggi Iokasi diperoleh melalui:

altitude = gps.f_altitude ( ) ;

Description Contoh hasil sketch timealt diperlihatkan di Gambar 10.18.

Menghitung Jarak Antara Posisi Sekarang dan Suatu Lokasi

Pustaka TinyG?S menyediakan fungsi anggota bernama distance_between ( ) dengan pemanggilan berbentuk:

TinyGPS: : distance between (latitude 1, longitude 1, latitude 2, longitude 2) ;

Dua argumen pertama menyatakan posisi suatu lokasi dan dua argumen berikutnya menyatakan posisi lokasi kedua.

Sketch: jarak

// ——————————————–

// Contoh untuk memantau jarak posisi

// sekarang terhadap suatu posisi

// ——————————————–

#include <SoftwareSerial.h>

#include <TinyGPS.h>

SoftwareSerial gpsSerial(2,3);

TinyGPS gps;

void setup()

{

Serial.begin(9600);

gpsSerial.begin(9600);

}

void loop() {

if (gpsSerial.available())

{ int kar =gpsSerial.read();

if (gps.encode(kar))

{ float latitude, longitude;

gps.f_get_position(&latitude, &longitude);

float jarak km = TinyGPS::distance between( latitude, longitude,LAT_ACUAN, LON ACUAN) / 1000; Serial.print(“Jarak: “);

Serial.print(jarak km, 7);

Serial.println(” km”);

}

}

}

Gambar 10.19 memeprlihatkan hasil pengujian yang dilakukan di suatu lokasi di Melaka, Malaysia.

Gambar 10.19 Contoh hasil pemonitoran jarak lokasi terhadap Monas Jakarta

Menyajikan Informasi Posisi di LCD

Modul GPS sangat bermanfaat untuk diterapkan pada pengukuran lokasi yang tidak statis. Sebagai contoh pengukuran dilakukan di mobil yang bergerak dari suatu lokasi ke lokasi lain. Pada keadaan seperti ini informasi mengenai posisi tentu saja akan lebih baik kalau ditampilkan pada peranti penampil LCD.

Untuk keperluan tersebut, rangkaian seperti terlihat di Gambar 10.20 perlu disusun terlebih dahulu Selanjutnya, gunakan sketch gpslcd untuk mengujinya.

Gambar 10.20 Rangkaian untuk menampilkan informasi posisi LCD

Sketch: gpslcd

// ——————————————–

// Contoh untuk menyajikan informasi

// lintang dan bujur ke LCD

// ——————————————–

#include <SoftwareSerial.h>

#include <TinyGPS.h>

#include <LiquidCrystal.h>

const int PIN_RS =12;

const int PIN_E =11;

const int PIN_DB 4= 7;

const int PIN_DB 5= 6;

const int PIN_DB 6= 5;

const int PIN_DB_7= 4;

// Buat objek

LiquidCrystal lcd(PIN_RS, PIN_E, PIN_DB 4,

PIN_DB_5,PIN_DB_6,PIN_DB_7);

SoftwareSerial gpsSerial(2,3); TinyGPS gps;

void setup()

{

Serial.begin(9600); gpsSerial.begin(9600);

// Tentukan ukuran LCD

lcd.begin(16, 2);

}

void loop()

if (gpsSerial.available())

{

int kar = gpsSerial.read();

if (gps.encode(kar))

{

float latitude, longitude;

gps.f_get_position(&latitude, &longitude);

lcd.clear();

lcd.print(“Lin.: “);

lcd.print(latitude, 7);

lcd.setCursor (0, 1);

lcd.print(“Buj.: “);

lcd.print(longitude, 7);

delay(1000);

}

}

}

Contoh hasil tampilan informasi lintang dan bujur lokasi diperlihatkan di Gambar 10.21.

Gambar 10.21 Posisi lintang dan bujur suatu posisi disajikan di LCD

 


Leave a Reply

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.

Rahasia Bikin Aplikasi Playstore tidak Pake Coding Seri 02

Rahasia Bikin Aplikasi Playstore tidak Pakai Coding Seri 01

ebook murah dan berkualitas. banyak diskonnya. beli segera!!!

TAS MOBIL MULTIFUNGSI

Location

Visitor

0379450
Hari ini : 232
Kemarin : 338
Bulan ini : 4414
Total Kunjungan : 379450
Who's Online : 5
error: Content is protected !!