Isi kandungan:

Mencari Jalan Anda Dengan GPS: 9 Langkah
Mencari Jalan Anda Dengan GPS: 9 Langkah

Video: Mencari Jalan Anda Dengan GPS: 9 Langkah

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

Latihan pantas dalam memahami dan menggunakan data GPS

  • Masa yang Diperlukan: 2 Jam
  • Kos: $ 75– $ 150

Bagi pembuat, menjadi sangat murah untuk memasukkan data geospasial berkualiti tinggi ke dalam projek elektronik. Dan dalam beberapa tahun kebelakangan ini, modul penerima GPS (Sistem Penentududukan Global) telah berkembang jauh lebih pelbagai, kuat, dan mudah digabungkan dengan papan pengembangan seperti Arduino, PIC, Teensy, dan Raspberry Pi. Sekiranya anda berfikir untuk membina GPS, anda telah memilih masa yang tepat untuk memulakannya.

Langkah 1: Bagaimana Ia Berfungsi

Modul GPS adalah penerima radio kecil yang memproses isyarat yang disiarkan pada frekuensi yang diketahui oleh armada satelit. Satelit-satelit ini berputar mengelilingi Bumi dalam orbit kasar, menghantar data kedudukan dan jam yang sangat tepat ke tanah di bawah. Sekiranya penerima ke bumi dapat "melihat" cukup satelit ini, ia dapat menggunakannya untuk mengira lokasi dan ketinggiannya sendiri.

Apabila mesej GPS tiba, penerima terlebih dahulu memeriksa cap waktu siarannya untuk melihat kapan ia dihantar. Oleh kerana kelajuan gelombang radio di angkasa adalah pemalar yang diketahui (c), penerima dapat membandingkan masa siaran dan penerimaan untuk menentukan jarak yang dilalui oleh isyarat. Setelah menentukan jarak dari empat atau lebih satelit yang diketahui, mengira kedudukannya sendiri adalah masalah triangulasi 3D yang agak mudah. Tetapi untuk melakukan ini dengan cepat dan tepat, penerima mesti dapat mengurangkan angka dari 20 aliran data sekaligus. Oleh kerana sistem GPS mempunyai tujuan yang diterbitkan untuk digunakan di mana-mana di Bumi, sistem mesti memastikan sekurang-kurangnya empat satelit - lebih disukai lebih banyak - dapat dilihat sepanjang masa dari setiap titik di dunia. Pada masa ini terdapat 32 satelit GPS melakukan tarian koreografer yang teliti di awan jarang 20, 000 kilometer.

Langkah 2: Fakta Peminat

GPS tidak dapat berfungsi tanpa teori relativiti Einstein, kerana pampasan mesti dibuat untuk 38 mikrodetik yang diperoleh jam atom yang mengorbit setiap hari dari pelebaran waktu di medan graviti Bumi.

Langkah 3: Bermula

Bermula
Bermula

Apa sahaja projek anda, GPS mudah digabungkan. Sebilangan besar modul penerima berkomunikasi dengan protokol bersiri yang mudah, jadi jika anda dapat mencari port bersiri ganti pada papan pengawal anda, hanya perlu sedikit kabel untuk membuat sambungan fizikal. Dan walaupun tidak, kebanyakan pengawal menyokong mod bersiri "perisian" yang ditiru yang boleh anda gunakan untuk menyambung ke pin sewenang-wenangnya.

Untuk pemula, modul Breakout GPS Ultimate Adafruit adalah pilihan yang baik. Terdapat banyak produk yang bersaing di pasaran, tetapi Ultimate adalah pemain yang hebat dengan harga yang berpatutan, dengan lubang besar yang mudah dipateri atau disambungkan ke papan roti.

Pertama, sambungkan tanah dan kuasa. Dalam istilah Arduino, ini bermaksud menghubungkan salah satu pin GND mikrokontroler ke GND modul, dan pin + 5V ke VIN modul. Untuk menguruskan pemindahan data, anda juga perlu menyambungkan pin TX dan RX modul ke Arduino. Saya akan memilih Arduino pin 2 (TX) dan 3 (RX) dengan sewenang-wenangnya untuk tujuan ini, walaupun pin 0 dan 1 dirancang khusus untuk digunakan sebagai "port serial perkakasan" atau UART. Mengapa? Kerana saya tidak mahu membuang satu-satunya UART yang dimiliki pemproses AVR mewah ini. UART Arduino disambungkan dengan kuat ke penyambung USB onboard, dan saya ingin menyambungkannya ke komputer saya untuk membuat penyahpepijatan.

Langkah 4: Kaki dalam Pangkalan Data

Kaki di Datastream
Kaki di Datastream

Sebaik sahaja anda menggunakan kuasa, modul GPS mula menghantar sekeping data teks pada baris TX-nya. Ia mungkin belum melihat satupun satelit, apalagi mempunyai "perbaikan", tetapi keran data langsung muncul, dan menarik untuk melihat apa yang keluar. Lakaran ringkas pertama kami (di bawah) tidak lain dan tidak bukan hanya memaparkan data yang belum diproses ini.

#masuk #tentukan RXPin 2

#tentukan TXPin 3 # tentukan GPSBaud 4800

#define ConsoleBaud 115200

// Sambungan bersiri ke peranti GPSSoftwareSerial ss (RXPin, TXPin);

batal persediaan () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Contoh GPS 1");

Serial.println ("Memaparkan data NMEA mentah yang dihantar oleh modul GPS.");

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

}

gelung kosong ()

{if (ss.available ()> 0) // Semasa setiap watak tiba…

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

}

CATATAN: Sketsa mendefinisikan pin terima (RXPin) sebagai 2, walaupun kami telah mengatakan sebelumnya bahawa pin transmit (TX) akan disambungkan ke pin 2. Ini adalah sumber kekeliruan yang biasa. RXPin adalah pin penerimaan (RX) dari sudut pandang Arduino. Secara semula jadi, ia mesti disambungkan ke pin transmit (TX) modul, dan sebaliknya.

Muat naik lakaran ini dan buka Monitor Serial pada 115, 200 baud. Sekiranya semuanya berfungsi, anda akan melihat rentetan rentetan teks yang dipisahkan koma tanpa henti. Masing-masing akan kelihatan seperti gambar kedua pada awal perenggan.

Rentetan khas ini dikenali sebagai kalimat NMEA, disebut kerana formatnya dicipta oleh National Maritime Electronics Association. NMEA menentukan sebilangan ayat ini untuk data navigasi mulai dari yang penting (lokasi dan waktu), hingga esoterik (nisbah isyarat-ke-bunyi satelit, varians magnetik, dll.). Pengilang tidak konsisten mengenai jenis ayat mana yang digunakan penerima mereka, tetapi GPRMC sangat penting. Setelah modul anda diperbaiki, anda akan melihat sebilangan besar ayat GPRMC ini.

Langkah 5: Mencari Diri Anda

Adalah tidak remeh untuk menukar output modul mentah menjadi maklumat yang sebenarnya boleh digunakan oleh program anda. Nasib baik, ada beberapa perpustakaan hebat yang sudah tersedia untuk melakukan ini untuk anda. Perpustakaan GPS Adafruit yang popular di Limor Fried adalah pilihan yang tepat jika anda menggunakan pelarian Ultimate mereka. Ia ditulis untuk membolehkan ciri unik untuk Ultimate (seperti log data dalaman) dan menambah beberapa loceng dan wisel yang tersendiri. Perpustakaan penghuraian kegemaran saya, bagaimanapun - dan di sini saya tentu sekali tidak berat sebelah - adalah yang saya tulis bernama TinyGPS ++. Saya merancangnya agar komprehensif, kuat, ringkas, dan mudah digunakan. Mari kita berpusing.

Langkah 6: Pengekodan Dengan TinyGPS ++

Dari sudut pandangan pengaturcara, menggunakan TinyGPS ++ sangat mudah:

1) Buat gps objek.

2) Arahkan setiap watak yang tiba dari modul ke objek menggunakan gps.encode ().

3) Apabila anda perlu mengetahui kedudukan atau ketinggian atau masa atau tarikh anda, hanya tanyakan objek gps.

#sertakan #sertakan

#tentukan RXPin 2

#tentukan TXPin 3

#tentukan GPSBaud 4800

#define ConsoleBaud 115200

// Sambungan bersiri ke peranti GPSSoftwareSerial ss (RXPin, TXPin);

// Objek TinyGPS ++

TinyGPSPlus gps;

batal persediaan () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Contoh GPS 2");

Serial.println ("Penjejak mudah menggunakan TinyGPS ++.");

Serial.println ("oleh Mikal Hart");

Bersiri.println ();

}

gelung kosong () {

// Sekiranya ada watak yang datang dari GPS, /

/ hantar ke objek TinyGPS ++

sementara (s. tersedia ()> 0)

gps.encode (ss.read ());

// Mari paparkan lokasi dan ketinggian baru

// setiap kali keduanya dikemas kini

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

{

Serial.print ("Lokasi:");

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

Cetakan bersiri (",");

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

Serial.print ("Ketinggian:");

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

}

}

Aplikasi kedua kami secara berterusan memaparkan lokasi dan ketinggian penerima, menggunakan TinyGPS ++ untuk membantu menguraikan. Dalam peranti sebenar, anda mungkin log data ini ke kad SD atau memaparkannya pada LCD. Rebut perpustakaan dan lakarkan FindingYourself.ino (di atas). Pasang perpustakaan, seperti biasa, di folder perpustakaan Arduino. Muat naik lakaran ke Arduino anda dan buka Monitor Serial pada 115, 200 baud. Anda harus melihat lokasi dan ketinggian anda dikemas kini dalam masa nyata. Untuk melihat dengan tepat di mana anda berada, tampal beberapa koordinat garis lintang / garis bujur yang dihasilkan ke dalam Peta Google. Sekarang pasang komputer riba anda dan berjalan-jalan atau memandu. (Tetapi ingat untuk memerhatikan anda!)

Langkah 7: "DIMENSI KEEMPAT"

walaupun kita mengaitkan GPS dengan lokasi di ruang angkasa, jangan lupa satelit itu juga menghantar masa dan cap data. Jam GPS rata-rata adalah tepat satu seperseratus saat, dan had teorinya lebih tinggi. Walaupun anda hanya memerlukan projek anda untuk mencatat masa, modul GPS mungkin masih merupakan penyelesaian paling murah dan termudah.

Untuk menjadikan FindingYourself.ino menjadi jam yang sangat tepat, ubah beberapa baris terakhir seperti ini:

jika (gps.time.isUpdated ()) {

char buf [80];

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

}

Langkah 8: Mencari Jalan Anda

Mencari Jalan Anda
Mencari Jalan Anda

Aplikasi ketiga dan terakhir kami adalah hasil daripada cabaran peribadi untuk menulis lakaran TinyGPS ++ yang dapat dibaca, dengan kurang daripada 100 baris kod, yang akan membimbing pengguna ke suatu destinasi menggunakan petunjuk teks mudah seperti "terus lurus" atau "belok kiri."

#sertakan #sertakan

#tentukan RXPin 2

#tentukan TXPin 3

#tentukan GPSBaud 4800

#define ConsoleBaud 115200

// Sambungan bersiri ke peranti GPSSoftwareSerial ss (RXPin, TXPin);

// Objek TinyGPS ++ TinyGPSPlus gps;

LastUpdateTime lama yang tidak ditandatangani = 0;

#tentukan EIFFEL_LAT 48.85823 # tentukan EIFFEL_LNG 2.29438

/ * Contoh ini menunjukkan kerangka asas bagaimana anda boleh menggunakan jalan dan jarak untuk membimbing seseorang (atau drone) ke destinasi. Destinasi ini adalah Menara Eiffel. Ubah seperti yang diperlukan

Cara termudah untuk mendapatkan koordinat lat / long adalah dengan mengklik kanan destinasi di Peta Google (maps.google.com), dan memilih "Apa yang ada di sini?". Ini meletakkan nilai tepat di kotak carian

*/

batal persediaan () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Contoh GPS 3");

Serial.println ("Sistem Bimbingan yang Tidak Komprehensif");

Serial.println ("oleh Mikal Hart");

Bersiri.println ();

}

gelung kosong () {

// Sekiranya ada watak yang datang dari GPS, // hantar ke objek TinyGPS ++ semasa (ss.available ()> 0) gps.encode (ss.read ());

// Setiap 5 saat, buat kemas kini

jika (milis () - LastUpdateTime> = 5000)

{

lastUpdateTime = milis ();

Bersiri.println ();

// Tetapkan status semasa kita

jarak jauhToDestination = TinyGPSPlus:: jarakBerantara

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

double courseToDestination = TinyGPSPlus:: kursusTo

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

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

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

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

Serial.print (courseToDestination);

Serial.print ("CurCourse:");

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

Serial.print ("Dir2Dest:");

Serial.print (directionToDestination);

Serial.print ("RelCourse:");

Serial.print (courseChangeNeeded);

Serial.print ("CurSpd:");

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

// Dalam jarak 20 meter dari destinasi? Kami di sini

jika (jarakToDestinasi <= 20.0)

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

jalan keluar (1);

}

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

Serial.println ("meter lagi.");

Serial.print ("ARAHAN:");

// Berdiri tegak? Cukup nyatakan arah mana yang hendak dituju

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

{

Serial.print ("Ketua");

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 ("Veer sedikit ke kiri.");

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

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

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

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

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

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

yang lain

Serial.println ("Putar sepenuhnya.");

}

}

Setiap 5 saat, kod menangkap lokasi dan arah pengguna (arah perjalanan) dan mengira galas (arah ke destinasi), menggunakan kaedah TinyGPS ++ courseTo (). Membandingkan dua vektor menghasilkan cadangan untuk terus lurus atau berpusing, seperti yang ditunjukkan di bawah.

Salin lakaran FindingYourWay.ino (di atas) dan tampalkannya ke Arduino IDE. Tetapkan destinasi sejauh 1km atau 2km, muat naik lakaran ke Arduino anda, jalankan di komputer riba anda, dan lihat apakah ia akan membimbing anda ke sana. Tetapi yang lebih penting, pelajari kod tersebut dan fahami cara kerjanya.

Langkah 9: Melangkah Lebih Lanjut

Potensi kreatif GPS sangat besar. Salah satu perkara yang paling memuaskan yang pernah saya buat ialah kotak teka-teki yang menggunakan GPS yang hanya dibuka di satu lokasi yang diprogramkan. Sekiranya mangsa anda ingin menyimpan harta karun di dalamnya, dia harus mencari tahu di mana lokasi rahsia itu dan secara fizikal membawa kotak itu ke sana. Idea projek pertama yang popular adalah sejenis alat pembalakan yang mencatat kedudukan dan ketinggian minit demi minit, misalnya, seorang pejalan kaki yang berjalan di Trans-Pennine Trail. Atau bagaimana dengan salah satu pelacak magnetik licik yang digunakan oleh agen DEA di Breaking Bad pada kereta penjahat? Kedua-duanya benar-benar boleh dilaksanakan, dan mungkin menyenangkan untuk dibina, tetapi saya mendorong anda untuk berfikir dengan lebih meluas, melangkaui barang yang sudah boleh anda beli di Amazon. Ini adalah dunia besar di luar sana. Jelajah sejauh yang anda boleh.

Disyorkan: