Daftar Isi:

Menemukan Jalan Anda Dengan GPS: 9 Langkah
Menemukan Jalan Anda Dengan GPS: 9 Langkah

Video: Menemukan Jalan Anda Dengan GPS: 9 Langkah

Video: Menemukan Jalan Anda Dengan GPS: 9 Langkah
Video: Cara Tingkatkan Akurasi Lokasi Google Map - Fix Google Map Tidak Akurat 2024, Juli
Anonim
Menemukan Jalan Anda Dengan GPS
Menemukan Jalan Anda Dengan GPS

Latihan cepat dalam memahami dan menerapkan data GPS

  • Waktu yang Dibutuhkan: 2 Jam
  • Biaya: $75–$150

Bagi pembuatnya, memasukkan data geospasial berkualitas tinggi ke dalam proyek elektronik menjadi cukup murah. Dan dalam beberapa tahun terakhir, modul penerima GPS (Global Positioning System) telah berkembang jauh lebih beragam, kuat, dan mudah diintegrasikan dengan papan pengembangan seperti Arduino, PIC, Teensy, dan Raspberry Pi. Jika Anda berpikir untuk membangun di sekitar GPS, Anda telah memilih waktu yang tepat untuk memulai.

Langkah 1: Cara Kerjanya

Modul GPS adalah penerima radio kecil yang memproses sinyal yang disiarkan pada frekuensi yang diketahui oleh armada satelit. Satelit-satelit ini berputar mengelilingi Bumi dalam orbit melingkar yang kasar, mentransmisikan data posisi dan jam yang sangat tepat ke tanah di bawahnya. Jika penerima yang berada di bumi dapat “melihat” cukup banyak satelit ini, ia dapat menggunakannya untuk menghitung lokasi dan ketinggiannya sendiri.

Ketika pesan GPS tiba, penerima terlebih dahulu memeriksa stempel waktu siarannya untuk melihat kapan pesan itu dikirim. Karena kecepatan gelombang radio di ruang angkasa adalah konstanta yang diketahui (c), penerima dapat membandingkan waktu siaran dan penerimaan untuk menentukan jarak yang telah ditempuh sinyal. Setelah menentukan jaraknya dari empat atau lebih satelit yang diketahui, menghitung posisinya sendiri adalah masalah triangulasi 3D yang cukup sederhana. Tetapi untuk melakukan ini dengan cepat dan akurat, penerima harus dapat dengan gesit menghitung angka dari hingga 20 aliran data sekaligus. Karena sistem GPS memiliki tujuan yang dipublikasikan untuk dapat digunakan di mana saja di Bumi, sistem harus memastikan bahwa setidaknya empat satelit - sebaiknya lebih - terlihat setiap saat dari setiap titik di dunia. Saat ini ada 32 satelit GPS yang melakukan tarian koreografi yang cermat di awan tipis setinggi 20.000 kilometer.

Langkah 2: Fakta Penggemar

GPS tidak dapat bekerja tanpa teori relativitas Einstein, karena kompensasi harus dibuat untuk 38 mikrodetik yang diperoleh jam atom yang mengorbit setiap hari dari pelebaran waktu di medan gravitasi bumi.

Langkah 3: Memulai

Mulai
Mulai

Apa pun proyek Anda, GPS mudah diintegrasikan. Sebagian besar modul penerima berkomunikasi dengan protokol serial langsung, jadi jika Anda dapat menemukan port serial cadangan di papan pengontrol, Anda hanya perlu beberapa kabel untuk membuat sambungan fisik. Dan bahkan jika tidak, sebagian besar pengontrol mendukung mode serial "perangkat lunak" yang dapat Anda gunakan untuk terhubung ke pin arbitrer.

Untuk pemula, modul Ultimate GPS Breakout Adafruit adalah pilihan yang baik. Ada banyak produk pesaing di pasar, tetapi Ultimate adalah pemain yang solid dengan harga yang wajar, dengan lubang besar yang mudah disolder atau disambungkan ke papan tempat memotong roti.

Pertama, hubungkan ground dan power. Dalam istilah Arduino, ini berarti menghubungkan salah satu pin GND mikrokontroler ke GND modul, dan pin +5V ke VIN modul. Untuk mengelola transfer data, Anda juga perlu menghubungkan pin TX dan RX modul ke Arduino. Saya akan sewenang-wenang memilih pin Arduino 2 (TX) dan 3 (RX) untuk tujuan ini, meskipun pin 0 dan 1 secara khusus dirancang untuk digunakan sebagai "port serial perangkat keras" atau UART. Mengapa? Karena saya tidak ingin menyia-nyiakan satu-satunya UART yang dimiliki prosesor AVR kelas bawah ini. UART Arduino terprogram ke konektor USB onboard, dan saya ingin tetap terhubung ke komputer saya untuk debugging.

Langkah 4: Sebuah Toe di Datastream

Sebuah Toe di Datastream
Sebuah Toe di Datastream

Begitu Anda menerapkan daya, modul GPS mulai mengirimkan potongan data teks pada jalur TX-nya. Ini mungkin belum melihat satu satelit, apalagi memiliki "perbaikan", tetapi faucet data langsung menyala, dan menarik untuk melihat apa yang keluar. Sketsa sederhana pertama kami (di bawah) tidak melakukan apa-apa selain menampilkan data yang belum diproses ini.

#sertakan #define RXPin 2

#menentukan TXPin 3#menentukan GPSBaud 4800

#define ConsoleBaud 115200

// Koneksi serial ke perangkat GPSSoftwareSerial ss(RXPin, TXPin);

batalkan pengaturan(){

Serial.begin(ConsoleBaud);

ss.begin(GPSBaud);

Serial.println("Contoh GPS 1");

Serial.println("Menampilkan data mentah NMEA yang dikirimkan oleh modul GPS.");

Serial.println("oleh Mikal Hart"); Serial.println();

}

lingkaran kosong()

{ if (ss.available() > 0) // Saat setiap karakter tiba…

Serial.write(ss.read()); // … tulis ke konsol

}

CATATAN: Sketsa ini mendefinisikan pin penerima (RXPin) sebagai 2, meskipun kami telah mengatakan sebelumnya bahwa pin pengirim (TX) akan terhubung ke pin 2. Ini adalah sumber kebingungan yang umum. RXPin adalah pin penerima (RX) dari sudut pandang Arduino. Secara alami, itu harus terhubung ke pin transmit (TX) modul, dan sebaliknya.

Unggah sketsa ini dan buka Serial Monitor pada 115.200 baud. Jika semuanya berfungsi, Anda akan melihat aliran string teks dipisahkan koma yang padat dan tak berujung. Masing-masing akan terlihat seperti gambar kedua di awal paragraf.

String khas ini dikenal sebagai kalimat NMEA, dinamakan demikian karena formatnya ditemukan oleh National Maritime Electronics Association. NMEA mendefinisikan sejumlah kalimat ini untuk data navigasi mulai dari yang penting (lokasi dan waktu), hingga yang esoterik (rasio sinyal-ke-noise satelit, varian magnetik, dll.). Produsen tidak konsisten tentang jenis kalimat yang digunakan penerima mereka, tetapi GPRMC sangat penting. Setelah modul Anda diperbaiki, Anda akan melihat cukup banyak kalimat GPRMC ini.

Langkah 5: Menemukan Diri Anda

Tidaklah sepele untuk mengubah output modul mentah menjadi informasi yang benar-benar dapat digunakan oleh program Anda. Untungnya, ada beberapa perpustakaan hebat yang sudah tersedia untuk melakukan ini untuk Anda. Adafruit GPS Library yang populer dari Limor Fried adalah pilihan yang nyaman jika Anda menggunakan pelarian Ultimate mereka. Ini ditulis untuk mengaktifkan fitur-fitur unik untuk Ultimate (seperti pencatatan data internal) dan menambahkan beberapa lonceng dan peluit manisnya sendiri. Perpustakaan parsing favorit saya, bagaimanapun - dan di sini saya tentu saja benar-benar tidak bias - adalah yang saya tulis bernama TinyGPS++. Saya merancangnya agar komprehensif, kuat, ringkas, dan mudah digunakan. Mari kita coba.

Langkah 6: Coding Dengan TinyGPS++

Dari sudut pandang programmer, menggunakan TinyGPS++ sangat sederhana:

1) Buat objek gps.

2) Rutekan setiap karakter yang datang dari modul ke objek menggunakan gps.encode().

3) Ketika Anda perlu mengetahui posisi atau ketinggian atau waktu atau tanggal Anda, cukup tanyakan objek gps.

#sertakan #sertakan

#definisikan RXPin 2

#menentukan TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// Koneksi serial ke perangkat GPSSoftwareSerial ss(RXPin, TXPin);

// Objek TinyGPS++

gps kecilGPSplus;

batalkan pengaturan(){

Serial.begin(ConsoleBaud);

ss.begin(GPSBaud);

Serial.println("Contoh GPS 2");

Serial.println("Pelacak sederhana menggunakan TinyGPS++.");

Serial.println("oleh Mikal Hart");

Serial.println();

}

lingkaran kosong(){

// Jika ada karakter yang datang dari GPS, /

/ kirim ke objek TinyGPS++

sementara (ss.available() > 0)

gps.encode(ss.read());

// Mari kita tampilkan lokasi dan ketinggian baru

// setiap kali salah satu dari mereka telah diperbarui

jika (gps.location.isUpdated() || gps.altitude.isUpdated())

{

Serial.print("Lokasi: ");

Serial.print(gps.location.lat(), 6);

Serial.print(", ");

Serial.print(gps.location.lng(), 6);

Serial.print("Ketinggian: ");

Serial.println(gps.altitude.meters());

}

}

Aplikasi kedua kami terus menampilkan lokasi dan ketinggian penerima, menggunakan TinyGPS++ untuk membantu penguraian. Di perangkat nyata, Anda dapat mencatat data ini ke kartu SD atau menampilkannya di LCD. Ambil perpustakaan dan buat sketsa FindingYourself.ino (di atas). Instal perpustakaan, seperti biasa, di folder perpustakaan Arduino. Unggah sketsa ke Arduino Anda dan buka Serial Monitor pada 115, 200 baud. Anda akan melihat lokasi dan ketinggian Anda diperbarui secara real time. Untuk melihat dengan tepat di mana Anda berdiri, tempelkan beberapa koordinat lintang/bujur yang dihasilkan ke Google Maps. Sekarang hubungkan laptop Anda dan pergi jalan-jalan atau berkendara. (Tapi ingat untuk tetap memperhatikan jalan!)

Langkah 7: "DIMENSI KEEMPAT"

meskipun kita mengasosiasikan GPS dengan lokasi di luar angkasa, jangan lupa bahwa satelit-satelit itu juga mentransmisikan cap waktu dan tanggal. Rata-rata jam GPS akurat hingga sepersepuluh juta detik, dan batas teoretisnya bahkan lebih tinggi. Bahkan jika Anda hanya membutuhkan proyek Anda untuk melacak waktu, modul GPS mungkin masih menjadi solusi termurah dan termudah.

Untuk mengubah FindingYourself.ino menjadi jam super akurat, cukup ubah beberapa baris terakhir seperti ini:

if (gps.time.isUpdated()) {

char buf[80];

sprintf(buf, "Waktu adalah %02d:%02d:%02d", gps.time.hour(), gps.time.minute(), gps.time.second()); Serial.println(buf);

}

Langkah 8: Menemukan Jalan Anda

Temukan jalanmu
Temukan jalanmu

Aplikasi ketiga dan terakhir kami adalah hasil dari tantangan pribadi untuk menulis sketsa TinyGPS++ yang dapat dibaca, dalam kurang dari 100 baris kode, yang akan memandu pengguna ke tujuan menggunakan instruksi teks sederhana seperti "tetap lurus" atau "belok kiri."

#sertakan #sertakan

#definisikan RXPin 2

#menentukan TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// Koneksi serial ke perangkat GPSSoftwareSerial ss(RXPin, TXPin);

// Objek TinyGPS++ TinyGPSlus gps;

unsigned long lastUpdateTime = 0;

#definisikan EIFFEL_LAT 48.85823#definisikan EIFFEL_LNG 2.29438

/* Contoh ini menunjukkan kerangka dasar tentang bagaimana Anda dapat menggunakan jalur dan jarak untuk memandu seseorang (atau drone) ke suatu tujuan. Destinasi ini adalah Menara Eiffel. Ubah sesuai kebutuhan

Cara termudah untuk mendapatkan koordinat lintang/bujur adalah dengan mengklik kanan tujuan di Google Maps (maps.google.com), dan pilih "Apa yang ada di sini?". Ini menempatkan nilai yang tepat di kotak pencarian

*/

batalkan pengaturan(){

Serial.begin(ConsoleBaud);

ss.begin(GPSBaud);

Serial.println("Contoh GPS 3");

Serial.println("Sistem Panduan yang Kurang Lengkap");

Serial.println("oleh Mikal Hart");

Serial.println();

}

lingkaran kosong(){

// Jika ada karakter yang datang dari GPS, // kirimkan ke objek TinyGPS++ while (ss.available() > 0) gps.encode(ss.read());

// Setiap 5 detik, lakukan pembaruan

if (millis() - lastUpdateTime >= 5000)

{

lastUpdateTime = milis();

Serial.println();

// Tetapkan status kita saat ini

double distanceToDestination = TinyGPSPlus::distanceBetween

gps.location.lat(), gps.location.lng(), EIFFEL_LAT, EIFFEL_LNG);

double courseToDestination = TinyGSPlus::courseTo

gps.location.lat(), gps.location.lng(), EIFFEL_LAT, EIFFEL_LNG);

const char *directionToDestination = TinyGPSPlus::cardinal(courseToDestination);

int courseChangeNeeded = (int)(360 + courseToDestination - gps.course.deg()) % 360;

// debug Serial.print("DEBUG: Course2Dest: ");

Serial.print(kursusKeTujuan);

Serial.print("Kursus Kurs: ");

Serial.print(gps.course.deg());

Serial.print("Dir2Dest: ");

Serial.print(directionToDestination);

Serial.print("RelCourse: ");

Serial.print(courseChangeNeeded);

Serial.print("Spd Cur: ");

Serial.println(gps.speed.kmph());

// Dalam jarak 20 meter dari tujuan? Di sini

jika (jarakToDestination <= 20.0)

{ Serial.println("SELAMAT: Anda telah tiba!");

keluar(1);

}

Serial.print("JARAK: "); Serial.print(jarakKeTujuan);

Serial.println("meter lagi.");

Serial.print("INSTRUKSI: ");

// Berdiri diam? Cukup tunjukkan arah mana yang harus dituju

jika (gps.speed.kmph() < 2.0)

{

Serial.print("Kepala");

Serial.print(directionToDestination);

Serial.println(".");

kembali;

}

if (courseChangeNeeded >= 345 || courseChangeNeeded < 15) Serial.println("Terus lurus ke depan!");

lain jika (courseChangeNeeded >= 315 && courseChangeNeeded < 345)

Serial.println("Belok sedikit ke kiri.");

lain jika (courseChangeNeeded >= 15 && courseChangeNeeded < 45)

Serial.println("Belok sedikit ke kanan.");

lain jika (courseChangeNeeded >= 255 && courseChangeNeeded < 315)

Serial.println("Belok ke kiri.");

lain jika (courseChangeNeeded >= 45 && courseChangeNeeded < 105)

Serial.println("Belok ke kanan.");

lain

Serial.println("Berbalik sepenuhnya.");

}

}

Setiap 5 detik kode menangkap lokasi dan jalur pengguna (arah perjalanan) dan menghitung arah (arah ke tujuan), menggunakan metode TinyGPS++ courseTo(). Membandingkan dua vektor menghasilkan saran untuk tetap lurus atau berbelok, seperti yang ditunjukkan di bawah ini.

Salin sketsa FindingYourWay.ino (di atas) dan tempel ke Arduino IDE. Tetapkan tujuan sejauh 1 km atau 2 km, unggah sketsa ke Arduino Anda, jalankan di laptop Anda, dan lihat apakah itu akan memandu Anda ke sana. Tetapi yang lebih penting, pelajari kodenya dan pahami cara kerjanya.

Langkah 9: Melangkah Lebih Jauh

Potensi kreatif GPS sangat luas. Salah satu hal paling memuaskan yang pernah saya buat adalah kotak teka-teki berkemampuan GPS yang hanya terbuka di satu lokasi yang telah diprogram sebelumnya. Jika korban Anda ingin mendapatkan harta karun yang terkunci di dalam, dia harus mencari tahu di mana lokasi rahasia itu dan secara fisik membawa kotak itu ke sana. Ide proyek pertama yang populer adalah semacam alat pencatatan yang mencatat posisi menit demi menit dan ketinggian, katakanlah, seorang pejalan kaki yang berjalan di Jalur Trans-Pennine. Atau bagaimana dengan salah satu pelacak magnetik licik agen DEA di Breaking Bad yang menempel di mobil orang jahat? Keduanya benar-benar layak, dan mungkin akan menyenangkan untuk dibangun, tetapi saya mendorong Anda untuk berpikir lebih luas, melampaui barang-barang yang sudah dapat Anda beli di Amazon. Ini adalah dunia yang besar di luar sana. Berkeliaran sejauh dan seluas yang Anda bisa.

Direkomendasikan: